(self)
| 2326 | |
| 2327 | @unittest.expectedFailure # TODO: RUSTPYTHON; TypeError: int() argument must be a string, a bytes-like object or a real number, not 'NoneType' |
| 2328 | def test_xml(self): |
| 2329 | code = textwrap.dedent(r""" |
| 2330 | import unittest |
| 2331 | |
| 2332 | class VerboseTests(unittest.TestCase): |
| 2333 | def test_failed(self): |
| 2334 | print("abc \x1b def") |
| 2335 | self.fail() |
| 2336 | """) |
| 2337 | testname = self.create_test(code=code) |
| 2338 | |
| 2339 | # Run sequentially |
| 2340 | filename = os_helper.TESTFN |
| 2341 | self.addCleanup(os_helper.unlink, filename) |
| 2342 | |
| 2343 | output = self.run_tests(testname, "--junit-xml", filename, |
| 2344 | exitcode=EXITCODE_BAD_TEST) |
| 2345 | self.check_executed_tests(output, testname, |
| 2346 | failed=testname, |
| 2347 | stats=TestStats(1, 1, 0)) |
| 2348 | |
| 2349 | # Test generated XML |
| 2350 | with open(filename, encoding="utf8") as fp: |
| 2351 | content = fp.read() |
| 2352 | |
| 2353 | testsuite = ElementTree.fromstring(content) |
| 2354 | self.assertEqual(int(testsuite.get('tests')), 1) |
| 2355 | self.assertEqual(int(testsuite.get('errors')), 0) |
| 2356 | self.assertEqual(int(testsuite.get('failures')), 1) |
| 2357 | |
| 2358 | testcase = testsuite[0][0] |
| 2359 | self.assertEqual(testcase.get('status'), 'run') |
| 2360 | self.assertEqual(testcase.get('result'), 'completed') |
| 2361 | self.assertGreater(float(testcase.get('time')), 0) |
| 2362 | for out in testcase.iter('system-out'): |
| 2363 | self.assertEqual(out.text, r"abc \x1b def") |
| 2364 | |
| 2365 | def test_nonascii(self): |
| 2366 | code = textwrap.dedent(r""" |
nothing calls this directly
no test coverage detected