Skip to content

Commit

Permalink
adding tests
Browse files Browse the repository at this point in the history
  • Loading branch information
jonrkarr committed Aug 1, 2016
1 parent e07ff42 commit 2f0c2bc
Show file tree
Hide file tree
Showing 3 changed files with 103 additions and 4 deletions.
9 changes: 5 additions & 4 deletions nose2unitth/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
:License: MIT
"""

from __future__ import unicode_literals
from xml.dom import minidom
import os

Expand Down Expand Up @@ -51,23 +52,23 @@ def read_nose(in_file):
case['skipped'] = {
'type': skipped_xml[0].getAttribute('type'),
'message': skipped_xml[0].getAttribute('message'),
'text': "".join([child.nodeValue.strip() for child in skipped_xml[0].childNodes]),
'text': "".join([child.nodeValue for child in skipped_xml[0].childNodes]),
}

failure_xml = case_xml.getElementsByTagName('failure')
if failure_xml:
case['failure'] = {
'type': failure_xml[0].getAttribute('type'),
'message': failure_xml[0].getAttribute('message'),
'text': "".join([child.nodeValue.strip() for child in failure_xml[0].childNodes]),
'text': "".join([child.nodeValue for child in failure_xml[0].childNodes]),
}

error_xml = case_xml.getElementsByTagName('error')
if error_xml:
case['error'] = {
'type': error_xml[0].getAttribute('type'),
'message': error_xml[0].getAttribute('message'),
'text': "".join([child.nodeValue.strip() for child in error_xml[0].childNodes]),
'text': "".join([child.nodeValue for child in error_xml[0].childNodes]),
}

suites[classname].append(case)
Expand Down Expand Up @@ -132,5 +133,5 @@ def write_unitth(suites, out_dir):
error_xml.appendChild(error_text_xml)

with open(os.path.join(out_dir, '%s.xml' % classname), 'w') as output:
doc_xml.writexml(output, encoding='utf-8', addindent=' ', newl="\n")
doc_xml.writexml(output, encoding='utf-8', addindent='', newl="")
doc_xml.unlink()
4 changes: 4 additions & 0 deletions tests/fixtures/nose.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?><testsuite name="nosetests" tests="7" errors="1" failures="1" skip="1"><testcase classname="package1.Class1" name="test_pass1" time="0.001"></testcase><testcase classname="package2.Class2" name="test_pass2" time="0.001"></testcase><testcase classname="package3.Class3" name="test_error1" time="0.001"><error type="exceptions.Exception" message="test error"><![CDATA[Traceback ...
]]></error></testcase><testcase classname="package3.Class3" name="test_failure1" time="0.002"><failure type="exceptions.AssertionError" message="True is not false"><![CDATA[Traceback ...
]]></failure></testcase><testcase classname="package3.Class3" name="test_skip1" time="0.003"><skipped type="unittest.case.SkipTest" message="test skip"><![CDATA[SkipTest: ...
]]></skipped></testcase><testcase classname="package4.Class4" name="test_pass3" time="0.001"></testcase><testcase classname="package4.Class4" name="test_pass4" time="0.000"></testcase></testsuite>
94 changes: 94 additions & 0 deletions tests/test_nose2unitth.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
""" Tests nose2unitth.
:Author: Jonathan Karr <karr@mssm.edu>
:Date: 2017-08-01
:Copyright: 2016, Karr Lab
:License: MIT
"""

from __future__ import unicode_literals
from nose2unitth.core import Converter
from xml.dom import minidom
import os
import tempfile
import unittest


NOSE_FIXTURE_FILE_NAME = "tests/fixtures/nose.xml"
NOSE_FIXTURE_OBJ = expected_report = {
"package1.Class1": [
{"name": "test_pass1", "time": 0.001},
],
"package2.Class2": [
{"name": "test_pass2", "time": 0.001},
],
"package3.Class3": [
{"name": "test_error1", "time": 0.001, "error": {
"type": "exceptions.Exception",
"message": "test error",
"text": "Traceback ...\n",
}
},
{"name": "test_failure1", "time": 0.002, "failure": {
"type": "exceptions.AssertionError",
"message": "True is not false",
"text": "Traceback ...\n",
}
},
{"name": "test_skip1", "time": 0.003, "skipped": {
"type": "unittest.case.SkipTest",
"message": "test skip",
"text": "SkipTest: ...\n",
}
},
],
"package4.Class4": [
{"name": "test_pass3", "time": 0.001},
{"name": "test_pass4", "time": 0.000},
],
}

NOSE_FIXTURE_XML = {
'package1.Class1': """"""
+ """<?xml version="1.0" encoding="utf-8"?>"""
+ """<testsuite errors="0" failures="0" name="package1.Class1" skipped="0" tests="1" time="0.001">"""
+ """<testcase classname="package1.Class1" name="test_pass1" time="0.001"/>"""
+ """</testsuite>""",
'package2.Class2': """"""
+ """<?xml version="1.0" encoding="utf-8"?>"""
+ """<testsuite errors="0" failures="0" name="package2.Class2" skipped="0" tests="1" time="0.001">"""
+ """<testcase classname="package2.Class2" name="test_pass2" time="0.001"/>"""
+ """</testsuite>""",
'package3.Class3': """"""
+ """<?xml version="1.0" encoding="utf-8"?>"""
+ """<testsuite errors="1" failures="1" name="package3.Class3" skipped="1" tests="3" time="0.006">"""
+ """<testcase classname="package3.Class3" name="test_error1" time="0.001"><error message="test error" type="exceptions.Exception"><![CDATA[Traceback ...\n]]></error></testcase>"""
+ """<testcase classname="package3.Class3" name="test_failure1" time="0.002"><failure message="True is not false" type="exceptions.AssertionError"><![CDATA[Traceback ...\n]]></failure></testcase>"""
+ """<testcase classname="package3.Class3" name="test_skip1" time="0.003"><skipped message="test skip" type="unittest.case.SkipTest"><![CDATA[SkipTest: ...\n]]></skipped></testcase>"""
+ """</testsuite>""",
'package4.Class4': """"""
+ """<?xml version="1.0" encoding="utf-8"?>"""
+ """<testsuite errors="0" failures="0" name="package4.Class4" skipped="0" tests="2" time="0.001">"""
+ """<testcase classname="package4.Class4" name="test_pass3" time="0.001"/>"""
+ """<testcase classname="package4.Class4" name="test_pass4" time="0.000"/>"""
+ """</testsuite>""",
}


class TestNose2UnitTH(unittest.TestCase):

def test_read_nose(self):
report = Converter.read_nose(NOSE_FIXTURE_FILE_NAME)
self.assertEqual(NOSE_FIXTURE_OBJ, report)

def test_write_unitth(self):
out_dir = tempfile.mkdtemp()
Converter.write_unitth(NOSE_FIXTURE_OBJ, out_dir)

# 1 XML file per suite
self.assertEqual(set(NOSE_FIXTURE_OBJ.keys()), set([x.replace('.xml', '') for x in os.listdir(out_dir)]))

# XML files have tests
for suite_name in NOSE_FIXTURE_OBJ:
with open(os.path.join(out_dir, '%s.xml' % suite_name), 'r') as report:
self.assertEqual(NOSE_FIXTURE_XML[suite_name], report.read())

0 comments on commit 2f0c2bc

Please sign in to comment.