test_basic.py
4.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
""" Test some basic behaviour of msodde.py
Ensure that
- doc and docx are read without error
- garbage returns error return status
- dde-links are found where appropriate
"""
from __future__ import print_function
import unittest
from oletools import msodde
from tests.test_utils import OutputCapture
import shlex
from os.path import join, dirname, normpath
from traceback import print_exc
# base directory for test input
BASE_DIR = normpath(join(dirname(__file__), '..', 'test-data'))
class TestReturnCode(unittest.TestCase):
def test_valid_doc(self):
""" check that a valid doc file leads to 0 exit status """
for filename in ('dde-test-from-office2003', 'dde-test-from-office2016',
'harmless-clean'):
self.do_test_validity(join(BASE_DIR, 'msodde-doc',
filename + '.doc'))
def test_valid_docx(self):
""" check that a valid docx file leads to 0 exit status """
for filename in 'dde-test', 'harmless-clean':
self.do_test_validity(join(BASE_DIR, 'msodde-doc',
filename + '.docx'))
def test_valid_docm(self):
""" check that a valid docm file leads to 0 exit status """
for filename in 'dde-test', 'harmless-clean':
self.do_test_validity(join(BASE_DIR, 'msodde-doc',
filename + '.docm'))
def test_invalid_other(self):
""" check that xml do not work yet """
for extn in '-2003.xml', '.xml':
self.do_test_validity(join(BASE_DIR, 'msodde-doc',
'harmless-clean' + extn), True)
def test_invalid_none(self):
""" check that no file argument leads to non-zero exit status """
self.do_test_validity('', True)
def test_invalid_empty(self):
""" check that empty file argument leads to non-zero exit status """
self.do_test_validity(join(BASE_DIR, 'basic/empty'), True)
def test_invalid_text(self):
""" check that text file argument leads to non-zero exit status """
self.do_test_validity(join(BASE_DIR, 'basic/text'), True)
def do_test_validity(self, args, expect_error=False):
""" helper for test_valid_doc[x] """
args = shlex.split(args)
return_code = -1
have_exception = False
try:
return_code = msodde.main(args)
except Exception:
have_exception = True
print_exc()
except SystemExit as se: # sys.exit() was called
return_code = se.code
if se.code is None:
return_code = 0
self.assertEqual(expect_error, have_exception or (return_code != 0),
msg='Args={0}, expect={1}, exc={2}, return={3}'
.format(args, expect_error, have_exception,
return_code))
class TestDdeInDoc(unittest.TestCase):
def get_dde_from_output(self, capturer):
""" helper to read dde links from captured output """
have_start_line = False
result = []
for line in capturer:
if not line.strip():
continue # skip empty lines
if have_start_line:
result.append(line)
elif line == 'DDE Links:':
have_start_line = True
self.assertTrue(have_start_line) # ensure output was complete
return result
def test_with_dde(self):
""" check that dde links appear on stdout """
with OutputCapture() as capturer:
msodde.main([join(BASE_DIR, 'msodde-doc',
'dde-test-from-office2003.doc')])
self.assertNotEqual(len(self.get_dde_from_output(capturer)), 0,
msg='Found no dde links in output for doc file')
def test_no_dde(self):
""" check that no dde links appear on stdout """
with OutputCapture() as capturer:
msodde.main([join(BASE_DIR, 'msodde-doc', 'harmless-clean.doc')])
self.assertEqual(len(self.get_dde_from_output(capturer)), 0,
msg='Found dde links in output for doc file')
if __name__ == '__main__':
unittest.main()