Skip to content
This repository was archived by the owner on Sep 28, 2020. It is now read-only.

Commit 18c67fd

Browse files
committed
Test generation of test suite.
1 parent 1c8b948 commit 18c67fd

File tree

2 files changed

+48
-7
lines changed

2 files changed

+48
-7
lines changed

cpplint_junit.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,13 @@
1717

1818
class CpplintError(object):
1919
def __init__(self, file, line, message):
20+
"""Constructor.
21+
22+
Args:
23+
file (str): File error originated on.
24+
line (int): Line error originated on.
25+
message (str): Error message.
26+
"""
2027
self.file = file
2128
self.line = line
2229
self.message = message
@@ -57,15 +64,14 @@ def parse_cpplint(file_name):
5764
return errors
5865

5966

60-
def generate_test_suite(errors, output_file):
67+
def generate_test_suite(errors):
6168
"""Writes a JUnit test file from parsed cpplint failures.
6269
6370
Args:
6471
errors (Dict[str, List[CpplintError]]): Parsed cpplint failures.
65-
output_file (str): File path to JUnit XML output.
6672
6773
Returns:
68-
Nothing.
74+
ElementTree.ElementTree: XML test suite.
6975
"""
7076
test_suite = ElementTree.Element('testsuite')
7177
test_suite.attrib['errors'] = str(len(errors))
@@ -85,8 +91,7 @@ def generate_test_suite(errors, output_file):
8591
line=str(error.line),
8692
message='{}: {}'.format(error.line, error.message))
8793

88-
tree = ElementTree.ElementTree(test_suite)
89-
tree.write(output_file, encoding='utf-8', xml_declaration=True)
94+
return ElementTree.ElementTree(test_suite)
9095

9196

9297
def main():
@@ -104,7 +109,8 @@ def main():
104109
return EXIT_FAILURE
105110

106111
if len(errors) > 0:
107-
generate_test_suite(errors, args.output_file)
112+
tree = generate_test_suite(errors)
113+
tree.write(args.output_file, encoding='utf-8', xml_declaration=True)
108114

109115
return EXIT_SUCCESS
110116

test.py

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@
22

33
"""cpplint-junit tests."""
44

5+
import sys
56
import unittest
67

7-
from cpplint_junit import parse_cpplint
8+
from cpplint_junit import CpplintError, generate_test_suite, parse_arguments, parse_cpplint
89

910

1011
class ParseCpplintTestCase(unittest.TestCase):
@@ -113,5 +114,39 @@ def test_all(self):
113114
'Could not find a newline character at the end of the file. '
114115
'[whitespace/ending_newline] [5]')
115116

117+
118+
class GenerateTestSuiteTestCase(unittest.TestCase):
119+
def test_single(self):
120+
errors = {'file_name':
121+
[CpplintError('file_name',
122+
4,
123+
'error message')]}
124+
tree = generate_test_suite(errors)
125+
root = tree.getroot()
126+
self.assertEqual(root.get('errors'), str(1))
127+
self.assertEqual(root.get('failures'), str(0))
128+
self.assertEqual(root.get('tests'), str(1))
129+
130+
test_case_element = root.find('testcase')
131+
self.assertEqual(test_case_element.get('name'), 'file_name')
132+
133+
error_element = test_case_element.find('error')
134+
self.assertEqual(error_element.get('file'), 'file_name')
135+
self.assertEqual(error_element.get('line'), str(4))
136+
self.assertEqual(error_element.get('message'), '4: error message')
137+
138+
139+
class ParseArgumentsTestCase(unittest.TestCase):
140+
def test_no_arguments(self):
141+
with self.assertRaises(SystemExit):
142+
# Suppress argparse stderr.
143+
class NullWriter:
144+
def write(self, s):
145+
pass
146+
147+
sys.stderr = NullWriter()
148+
parse_arguments()
149+
150+
116151
if __name__ == '__main__':
117152
unittest.main()

0 commit comments

Comments
 (0)