Index: tools/telemetry/third_party/typ/typ/tests/main_test.py |
diff --git a/tools/telemetry/third_party/typ/typ/tests/main_test.py b/tools/telemetry/third_party/typ/typ/tests/main_test.py |
deleted file mode 100644 |
index 7a2d179ca1780d1425a33522bbb348a589b4232f..0000000000000000000000000000000000000000 |
--- a/tools/telemetry/third_party/typ/typ/tests/main_test.py |
+++ /dev/null |
@@ -1,694 +0,0 @@ |
-# Copyright 2014 Dirk Pranke. All rights reserved. |
-# |
-# Licensed under the Apache License, Version 2.0 (the "License"); |
-# you may not use this file except in compliance with the License. |
-# You may obtain a copy of the License at |
-# |
-# http://www.apache.org/licenses/LICENSE-2.0 |
-# |
-# Unless required by applicable law or agreed to in writing, software |
-# distributed under the License is distributed on an "AS IS" BASIS, |
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
-# See the License for the specific language governing permissions and |
-# limitations under the License. |
- |
-import io |
-import json |
-import os |
-import sys |
-import textwrap |
- |
- |
-from typ import main |
-from typ import test_case |
-from typ import Host |
-from typ import VERSION |
-from typ.fakes import test_result_server_fake |
- |
- |
-is_python3 = bool(sys.version_info.major == 3) |
- |
-if is_python3: # pragma: python3 |
- # pylint: disable=redefined-builtin,invalid-name |
- unicode = str |
- |
-d = textwrap.dedent |
- |
- |
-PASS_TEST_PY = """ |
-import unittest |
-class PassingTest(unittest.TestCase): |
- def test_pass(self): |
- pass |
-""" |
- |
- |
-PASS_TEST_FILES = {'pass_test.py': PASS_TEST_PY} |
- |
- |
-FAIL_TEST_PY = """ |
-import unittest |
-class FailingTest(unittest.TestCase): |
- def test_fail(self): |
- self.fail() |
-""" |
- |
- |
-FAIL_TEST_FILES = {'fail_test.py': FAIL_TEST_PY} |
- |
- |
-OUTPUT_TEST_PY = """ |
-import sys |
-import unittest |
- |
-class PassTest(unittest.TestCase): |
- def test_out(self): |
- sys.stdout.write("hello on stdout\\n") |
- sys.stdout.flush() |
- |
- def test_err(self): |
- sys.stderr.write("hello on stderr\\n") |
- |
-class FailTest(unittest.TestCase): |
- def test_out_err_fail(self): |
- sys.stdout.write("hello on stdout\\n") |
- sys.stdout.flush() |
- sys.stderr.write("hello on stderr\\n") |
- self.fail() |
-""" |
- |
- |
-OUTPUT_TEST_FILES = {'output_test.py': OUTPUT_TEST_PY} |
- |
- |
-SF_TEST_PY = """ |
-import sys |
-import unittest |
- |
-class SkipMethods(unittest.TestCase): |
- @unittest.skip('reason') |
- def test_reason(self): |
- self.fail() |
- |
- @unittest.skipIf(True, 'reason') |
- def test_skip_if_true(self): |
- self.fail() |
- |
- @unittest.skipIf(False, 'reason') |
- def test_skip_if_false(self): |
- self.fail() |
- |
- |
-class SkipSetup(unittest.TestCase): |
- def setUp(self): |
- self.skipTest('setup failed') |
- |
- def test_notrun(self): |
- self.fail() |
- |
- |
-@unittest.skip('skip class') |
-class SkipClass(unittest.TestCase): |
- def test_method(self): |
- self.fail() |
- |
-class SetupClass(unittest.TestCase): |
- @classmethod |
- def setUpClass(cls): |
- sys.stdout.write('in setupClass\\n') |
- sys.stdout.flush() |
- assert False, 'setupClass failed' |
- |
- def test_method1(self): |
- pass |
- |
- def test_method2(self): |
- pass |
- |
-class ExpectedFailures(unittest.TestCase): |
- @unittest.expectedFailure |
- def test_fail(self): |
- self.fail() |
- |
- @unittest.expectedFailure |
- def test_pass(self): |
- pass |
-""" |
- |
- |
-SF_TEST_FILES = {'sf_test.py': SF_TEST_PY} |
- |
- |
-LOAD_TEST_PY = """ |
-import unittest |
-def load_tests(_, _2, _3): |
- class BaseTest(unittest.TestCase): |
- pass |
- |
- def method_fail(self): |
- self.fail() |
- |
- def method_pass(self): |
- pass |
- |
- setattr(BaseTest, "test_fail", method_fail) |
- setattr(BaseTest, "test_pass", method_pass) |
- suite = unittest.TestSuite() |
- suite.addTest(BaseTest("test_fail")) |
- suite.addTest(BaseTest("test_pass")) |
- return suite |
-""" |
- |
- |
-LOAD_TEST_FILES = {'load_test.py': LOAD_TEST_PY} |
- |
- |
-path_to_main = os.path.join( |
- os.path.dirname(os.path.dirname(os.path.abspath(__file__))), |
- 'runner.py') |
- |
- |
-class TestCli(test_case.MainTestCase): |
- prog = [sys.executable, path_to_main] |
- files_to_ignore = ['*.pyc'] |
- |
- def test_bad_arg(self): |
- self.check(['--bad-arg'], ret=2, out='', |
- rerr='.*: error: unrecognized arguments: --bad-arg\n') |
- self.check(['-help'], ret=2, out='', |
- rerr=(".*: error: argument -h/--help: " |
- "ignored explicit argument 'elp'\n")) |
- |
- def test_bad_metadata(self): |
- self.check(['--metadata', 'foo'], ret=2, err='', |
- out='Error: malformed --metadata "foo"\n') |
- |
- def test_basic(self): |
- self.check([], files=PASS_TEST_FILES, |
- ret=0, |
- out=('[1/1] pass_test.PassingTest.test_pass passed\n' |
- '1 test run, 0 failures.\n'), err='') |
- |
- def test_coverage(self): |
- try: |
- import coverage # pylint: disable=W0612 |
- files = { |
- 'pass_test.py': PASS_TEST_PY, |
- 'fail_test.py': FAIL_TEST_PY, |
- } |
- self.check(['-c', 'pass_test'], files=files, ret=0, err='', |
- out=d("""\ |
- [1/1] pass_test.PassingTest.test_pass passed |
- 1 test run, 0 failures. |
- |
- Name Stmts Miss Cover |
- ------------------------------- |
- fail_test 4 4 0% |
- pass_test 4 0 100% |
- ------------------------------- |
- TOTAL 8 4 50% |
- """)) |
- except ImportError: # pragma: no cover |
- # We can never cover this line, since running coverage means |
- # that import will succeed. |
- self.check(['-c'], files=PASS_TEST_FILES, ret=1, |
- out='Error: coverage is not installed\n', err='') |
- |
- def test_debugger(self): |
- if sys.version_info.major == 3: # pragma: python3 |
- return |
- else: # pragma: python2 |
- _, out, _, _ = self.check(['-d'], stdin='quit()\n', |
- files=PASS_TEST_FILES, ret=0, err='') |
- self.assertIn('(Pdb) ', out) |
- |
- def test_dryrun(self): |
- self.check(['-n'], files=PASS_TEST_FILES, ret=0, err='', |
- out=d("""\ |
- [1/1] pass_test.PassingTest.test_pass passed |
- 1 test run, 0 failures. |
- """)) |
- |
- def test_error(self): |
- files = {'err_test.py': d("""\ |
- import unittest |
- class ErrTest(unittest.TestCase): |
- def test_err(self): |
- foo = bar |
- """)} |
- _, out, _, _ = self.check([''], files=files, ret=1, err='') |
- self.assertIn('[1/1] err_test.ErrTest.test_err failed unexpectedly', |
- out) |
- self.assertIn('1 test run, 1 failure', out) |
- |
- def test_fail(self): |
- _, out, _, _ = self.check([], files=FAIL_TEST_FILES, ret=1, err='') |
- self.assertIn('fail_test.FailingTest.test_fail failed unexpectedly', |
- out) |
- |
- def test_fail_then_pass(self): |
- files = {'fail_then_pass_test.py': d("""\ |
- import unittest |
- count = 0 |
- class FPTest(unittest.TestCase): |
- def test_count(self): |
- global count |
- count += 1 |
- if count == 1: |
- self.fail() |
- """)} |
- _, out, _, files = self.check(['--retry-limit', '3', |
- '--write-full-results-to', |
- 'full_results.json'], |
- files=files, ret=0, err='') |
- self.assertIn('Retrying failed tests (attempt #1 of 3)', out) |
- self.assertNotIn('Retrying failed tests (attempt #2 of 3)', out) |
- self.assertIn('1 test run, 0 failures.\n', out) |
- results = json.loads(files['full_results.json']) |
- self.assertEqual( |
- results['tests'][ |
- 'fail_then_pass_test']['FPTest']['test_count']['actual'], |
- 'FAIL PASS') |
- |
- def test_failures_are_not_elided(self): |
- _, out, _, _ = self.check(['--terminal-width=20'], |
- files=FAIL_TEST_FILES, ret=1, err='') |
- self.assertIn('[1/1] fail_test.FailingTest.test_fail failed ' |
- 'unexpectedly:\n', out) |
- |
- def test_file_list(self): |
- files = PASS_TEST_FILES |
- self.check(['-f', '-'], files=files, stdin='pass_test\n', ret=0) |
- self.check(['-f', '-'], files=files, stdin='pass_test.PassingTest\n', |
- ret=0) |
- self.check(['-f', '-'], files=files, |
- stdin='pass_test.PassingTest.test_pass\n', |
- ret=0) |
- files = {'pass_test.py': PASS_TEST_PY, |
- 'test_list.txt': 'pass_test.PassingTest.test_pass\n'} |
- self.check(['-f', 'test_list.txt'], files=files, ret=0) |
- |
- def test_find(self): |
- files = PASS_TEST_FILES |
- self.check(['-l'], files=files, ret=0, |
- out='pass_test.PassingTest.test_pass\n') |
- self.check(['-l', 'pass_test'], files=files, ret=0, err='', |
- out='pass_test.PassingTest.test_pass\n') |
- self.check(['-l', 'pass_test.py'], files=files, ret=0, err='', |
- out='pass_test.PassingTest.test_pass\n') |
- self.check(['-l', './pass_test.py'], files=files, ret=0, err='', |
- out='pass_test.PassingTest.test_pass\n') |
- self.check(['-l', '.'], files=files, ret=0, err='', |
- out='pass_test.PassingTest.test_pass\n') |
- self.check(['-l', 'pass_test.PassingTest.test_pass'], files=files, |
- ret=0, err='', |
- out='pass_test.PassingTest.test_pass\n') |
- self.check(['-l', '.'], files=files, ret=0, err='', |
- out='pass_test.PassingTest.test_pass\n') |
- |
- def test_find_from_subdirs(self): |
- files = { |
- 'foo/__init__.py': '', |
- 'foo/pass_test.py': PASS_TEST_PY, |
- 'bar/__init__.py': '', |
- 'bar/tmp': '', |
- |
- } |
- self.check(['-l', '../foo/pass_test.py'], files=files, cwd='bar', |
- ret=0, err='', |
- out='foo.pass_test.PassingTest.test_pass\n') |
- self.check(['-l', 'foo'], files=files, cwd='bar', |
- ret=0, err='', |
- out='foo.pass_test.PassingTest.test_pass\n') |
- self.check(['-l', '--path', '../foo', 'pass_test'], |
- files=files, cwd='bar', ret=0, err='', |
- out='pass_test.PassingTest.test_pass\n') |
- |
- def test_help(self): |
- self.check(['--help'], ret=0, rout='.*', err='') |
- |
- def test_import_failure_missing_file(self): |
- self.check(['-l', 'foo'], ret=1, err='', |
- rout='Failed to load "foo".*') |
- |
- def test_import_failure_missing_package(self): |
- files = {'foo.py': d("""\ |
- import unittest |
- import package_that_does_not_exist |
- |
- class ImportFailureTest(unittest.TestCase): |
- def test_case(self): |
- pass |
- """)} |
- self.check(['-l', 'foo.py'], files=files, ret=1, err='', |
- rout=('Failed to load "foo.py": No module named ' |
- '\'?package_that_does_not_exist\'?\n')) |
- |
- def test_import_failure_no_tests(self): |
- files = {'foo.py': 'import unittest'} |
- self.check(['-l', 'foo.bar'], files=files, ret=1, err='', |
- rout='Failed to load "foo.bar":.*') |
- |
- def test_import_failure_syntax_error(self): |
- files = {'syn_test.py': d("""\ |
- import unittest |
- |
- class SyntaxErrorTest(unittest.TestCase): |
- def test_syntax_error_in_test(self): |
- syntax error |
- """)} |
- _, out, _, _ = self.check([], files=files, ret=1, err='') |
- self.assertIn('Failed to import test module: syn_test', out) |
- self.assertIn((' syntax error\n' |
- ' ^\n' |
- 'SyntaxError: invalid syntax\n'), out) |
- |
- def test_interrupt(self): |
- files = {'interrupt_test.py': d("""\ |
- import unittest |
- class Foo(unittest.TestCase): |
- def test_interrupt(self): |
- raise KeyboardInterrupt() |
- """)} |
- self.check(['-j', '1'], files=files, ret=130, out='', |
- err='interrupted, exiting\n') |
- |
- def test_isolate(self): |
- self.check(['--isolate', '*test_pass*'], files=PASS_TEST_FILES, ret=0, |
- out=('[1/1] pass_test.PassingTest.test_pass passed\n' |
- '1 test run, 0 failures.\n'), err='') |
- |
- def test_load_tests_failure(self): |
- files = {'foo_test.py': d("""\ |
- import unittest |
- |
- def load_tests(_, _2, _3): |
- raise ValueError('this should fail') |
- """)} |
- self.check([], files=files, ret=1, err='', |
- out=('foo_test.load_tests() failed: this should fail\n')) |
- |
- def test_load_tests_single_worker(self): |
- files = LOAD_TEST_FILES |
- _, out, _, _ = self.check(['-j', '1', '-v'], files=files, ret=1, |
- err='') |
- self.assertIn('[1/2] load_test.BaseTest.test_fail failed', out) |
- self.assertIn('[2/2] load_test.BaseTest.test_pass passed', out) |
- self.assertIn('2 tests run, 1 failure.\n', out) |
- |
- def test_load_tests_multiple_workers(self): |
- _, out, _, _ = self.check([], files=LOAD_TEST_FILES, ret=1, err='') |
- |
- # The output for this test is nondeterministic since we may run |
- # two tests in parallel. So, we just test that some of the substrings |
- # we care about are present. |
- self.assertIn('test_pass passed', out) |
- self.assertIn('test_fail failed', out) |
- self.assertIn('2 tests run, 1 failure.\n', out) |
- |
- def test_missing_builder_name(self): |
- self.check(['--test-results-server', 'localhost'], ret=2, |
- out=('Error: --builder-name must be specified ' |
- 'along with --test-result-server\n' |
- 'Error: --master-name must be specified ' |
- 'along with --test-result-server\n' |
- 'Error: --test-type must be specified ' |
- 'along with --test-result-server\n'), err='') |
- |
- def test_ninja_status_env(self): |
- self.check(['-v', 'output_test.PassTest.test_out'], |
- files=OUTPUT_TEST_FILES, aenv={'NINJA_STATUS': 'ns: '}, |
- out=d("""\ |
- ns: output_test.PassTest.test_out passed |
- 1 test run, 0 failures. |
- """), err='') |
- |
- def test_output_for_failures(self): |
- _, out, _, _ = self.check(['output_test.FailTest'], |
- files=OUTPUT_TEST_FILES, |
- ret=1, err='') |
- self.assertIn('[1/1] output_test.FailTest.test_out_err_fail ' |
- 'failed unexpectedly:\n' |
- ' hello on stdout\n' |
- ' hello on stderr\n', out) |
- |
- def test_quiet(self): |
- self.check(['-q'], files=PASS_TEST_FILES, ret=0, err='', out='') |
- |
- def test_retry_limit(self): |
- _, out, _, _ = self.check(['--retry-limit', '2'], |
- files=FAIL_TEST_FILES, ret=1, err='') |
- self.assertIn('Retrying failed tests', out) |
- lines = out.splitlines() |
- self.assertEqual(len([l for l in lines |
- if 'test_fail failed unexpectedly:' in l]), |
- 3) |
- |
- def test_skip(self): |
- self.check(['--skip', '*test_fail*'], files=FAIL_TEST_FILES, ret=1, |
- out='No tests to run.\n', err='') |
- |
- files = {'fail_test.py': FAIL_TEST_PY, |
- 'pass_test.py': PASS_TEST_PY} |
- self.check(['-j', '1', '--skip', '*test_fail*'], files=files, ret=0, |
- out=('[1/2] fail_test.FailingTest.test_fail was skipped\n' |
- '[2/2] pass_test.PassingTest.test_pass passed\n' |
- '2 tests run, 0 failures.\n'), err='') |
- |
- # This tests that we print test_started updates for skipped tests |
- # properly. It also tests how overwriting works. |
- _, out, _, _ = self.check(['-j', '1', '--overwrite', '--skip', |
- '*test_fail*'], files=files, ret=0, |
- err='', universal_newlines=False) |
- |
- # We test this string separately and call out.strip() to |
- # avoid the trailing \r\n we get on windows, while keeping |
- # the \r's elsewhere in the string. |
- self.assertMultiLineEqual( |
- out.strip(), |
- ('[0/2] fail_test.FailingTest.test_fail\r' |
- ' \r' |
- '[1/2] fail_test.FailingTest.test_fail was skipped\r' |
- ' \r' |
- '[1/2] pass_test.PassingTest.test_pass\r' |
- ' \r' |
- '[2/2] pass_test.PassingTest.test_pass passed\r' |
- ' \r' |
- '2 tests run, 0 failures.')) |
- |
- def test_skips_and_failures(self): |
- _, out, _, _ = self.check(['-j', '1', '-v', '-v'], files=SF_TEST_FILES, |
- ret=1, err='') |
- |
- # We do a bunch of assertIn()'s to work around the non-portable |
- # tracebacks. |
- self.assertIn(('[1/9] sf_test.ExpectedFailures.test_fail failed:\n' |
- ' Traceback '), out) |
- self.assertIn(('[2/9] sf_test.ExpectedFailures.test_pass ' |
- 'passed unexpectedly'), out) |
- self.assertIn(('[3/9] sf_test.SetupClass.test_method1 ' |
- 'failed unexpectedly:\n' |
- ' in setupClass\n'), out) |
- self.assertIn(('[4/9] sf_test.SetupClass.test_method2 ' |
- 'failed unexpectedly:\n' |
- ' in setupClass\n'), out) |
- self.assertIn(('[5/9] sf_test.SkipClass.test_method was skipped:\n' |
- ' skip class\n'), out) |
- self.assertIn(('[6/9] sf_test.SkipMethods.test_reason was skipped:\n' |
- ' reason\n'), out) |
- self.assertIn(('[7/9] sf_test.SkipMethods.test_skip_if_false ' |
- 'failed unexpectedly:\n' |
- ' Traceback'), out) |
- self.assertIn(('[8/9] sf_test.SkipMethods.test_skip_if_true ' |
- 'was skipped:\n' |
- ' reason\n' |
- '[9/9] sf_test.SkipSetup.test_notrun was skipped:\n' |
- ' setup failed\n' |
- '9 tests run, 4 failures.\n'), out) |
- |
- def test_skip_and_all(self): |
- # --all should override --skip |
- self.check(['-l', '--skip', '*test_pass'], |
- files=PASS_TEST_FILES, ret=1, err='', |
- out='No tests to run.\n') |
- self.check(['-l', '--all', '--skip', '*test_pass'], |
- files=PASS_TEST_FILES, ret=0, err='', |
- out='pass_test.PassingTest.test_pass\n') |
- |
- def test_skip_decorators_and_all(self): |
- _, out, _, _ = self.check(['--all', '-j', '1', '-v', '-v'], |
- files=SF_TEST_FILES, ret=1, err='') |
- self.assertIn('sf_test.SkipClass.test_method failed', out) |
- self.assertIn('sf_test.SkipMethods.test_reason failed', out) |
- self.assertIn('sf_test.SkipMethods.test_skip_if_true failed', out) |
- self.assertIn('sf_test.SkipMethods.test_skip_if_false failed', out) |
- |
- # --all does not override explicit calls to skipTest(), only |
- # the decorators. |
- self.assertIn('sf_test.SkipSetup.test_notrun was skipped', out) |
- |
- def test_subdir(self): |
- files = { |
- 'foo/__init__.py': '', |
- 'foo/bar/__init__.py': '', |
- 'foo/bar/pass_test.py': PASS_TEST_PY |
- } |
- self.check(['foo/bar'], files=files, ret=0, err='', |
- out=d("""\ |
- [1/1] foo.bar.pass_test.PassingTest.test_pass passed |
- 1 test run, 0 failures. |
- """)) |
- |
- def test_timing(self): |
- self.check(['-t'], files=PASS_TEST_FILES, ret=0, err='', |
- rout=(r'\[1/1\] pass_test.PassingTest.test_pass passed ' |
- r'\d+.\d+s\n' |
- r'1 test run in \d+.\d+s, 0 failures.')) |
- |
- def test_test_results_server(self): |
- server = test_result_server_fake.start() |
- self.assertNotEqual(server, None, 'could not start fake server') |
- |
- try: |
- self.check(['--test-results-server', |
- '%s:%d' % server.server_address, |
- '--master-name', 'fake_master', |
- '--builder-name', 'fake_builder', |
- '--test-type', 'typ_tests', |
- '--metadata', 'foo=bar'], |
- files=PASS_TEST_FILES, ret=0, err='', |
- out=('[1/1] pass_test.PassingTest.test_pass passed\n' |
- '1 test run, 0 failures.\n')) |
- |
- finally: |
- posts = server.stop() |
- |
- self.assertEqual(len(posts), 1) |
- payload = posts[0][2].decode('utf8') |
- self.assertIn('"test_pass": {"expected": "PASS", "actual": "PASS"}', |
- payload) |
- self.assertTrue(payload.endswith('--\r\n')) |
- self.assertNotEqual(server.log.getvalue(), '') |
- |
- def test_test_results_server_error(self): |
- server = test_result_server_fake.start(code=500) |
- self.assertNotEqual(server, None, 'could not start fake server') |
- |
- try: |
- self.check(['--test-results-server', |
- '%s:%d' % server.server_address, |
- '--master-name', 'fake_master', |
- '--builder-name', 'fake_builder', |
- '--test-type', 'typ_tests', |
- '--metadata', 'foo=bar'], |
- files=PASS_TEST_FILES, ret=1, err='', |
- out=('[1/1] pass_test.PassingTest.test_pass passed\n' |
- '1 test run, 0 failures.\n' |
- 'Uploading the JSON results raised ' |
- '"HTTP Error 500: Internal Server Error"\n')) |
- |
- finally: |
- _ = server.stop() |
- |
- def test_test_results_server_not_running(self): |
- self.check(['--test-results-server', 'localhost:99999', |
- '--master-name', 'fake_master', |
- '--builder-name', 'fake_builder', |
- '--test-type', 'typ_tests', |
- '--metadata', 'foo=bar'], |
- files=PASS_TEST_FILES, ret=1, err='', |
- rout=(r'\[1/1\] pass_test.PassingTest.test_pass passed\n' |
- '1 test run, 0 failures.\n' |
- 'Uploading the JSON results raised .*\n')) |
- |
- def test_verbose_2(self): |
- self.check(['-vv', '-j', '1', 'output_test.PassTest'], |
- files=OUTPUT_TEST_FILES, ret=0, |
- out=d("""\ |
- [1/2] output_test.PassTest.test_err passed: |
- hello on stderr |
- [2/2] output_test.PassTest.test_out passed: |
- hello on stdout |
- 2 tests run, 0 failures. |
- """), err='') |
- |
- def test_verbose_3(self): |
- self.check(['-vvv', '-j', '1', 'output_test.PassTest'], |
- files=OUTPUT_TEST_FILES, ret=0, |
- out=d("""\ |
- [0/2] output_test.PassTest.test_err queued |
- [1/2] output_test.PassTest.test_err passed: |
- hello on stderr |
- [1/2] output_test.PassTest.test_out queued |
- [2/2] output_test.PassTest.test_out passed: |
- hello on stdout |
- 2 tests run, 0 failures. |
- """), err='') |
- |
- def test_version(self): |
- self.check('--version', ret=0, out=(VERSION + '\n')) |
- |
- def test_write_full_results_to(self): |
- _, _, _, files = self.check(['--write-full-results-to', |
- 'results.json'], files=PASS_TEST_FILES) |
- self.assertIn('results.json', files) |
- results = json.loads(files['results.json']) |
- self.assertEqual(results['interrupted'], False) |
- self.assertEqual(results['path_delimiter'], '.') |
- self.assertEqual(results['tests'], |
- {u'pass_test': { |
- u'PassingTest': { |
- u'test_pass': { |
- u'actual': u'PASS', |
- u'expected': u'PASS', |
- } |
- } |
- }}) |
- |
- def test_write_trace_to(self): |
- _, _, _, files = self.check(['--write-trace-to', 'trace.json'], |
- files=PASS_TEST_FILES) |
- self.assertIn('trace.json', files) |
- trace_obj = json.loads(files['trace.json']) |
- self.assertEqual(trace_obj['otherData'], {}) |
- self.assertEqual(len(trace_obj['traceEvents']), 5) |
- event = trace_obj['traceEvents'][0] |
- self.assertEqual(event['name'], 'pass_test.PassingTest.test_pass') |
- self.assertEqual(event['ph'], 'X') |
- self.assertEqual(event['tid'], 1) |
- self.assertEqual(event['args']['expected'], ['Pass']) |
- self.assertEqual(event['args']['actual'], 'Pass') |
- |
- |
-class TestMain(TestCli): |
- prog = [] |
- |
- def make_host(self): |
- return Host() |
- |
- def call(self, host, argv, stdin, env): |
- stdin = unicode(stdin) |
- host.stdin = io.StringIO(stdin) |
- if env: |
- host.getenv = env.get |
- host.capture_output() |
- orig_sys_path = sys.path[:] |
- orig_sys_modules = list(sys.modules.keys()) |
- |
- try: |
- ret = main(argv + ['-j', '1'], host) |
- finally: |
- out, err = host.restore_output() |
- modules_to_unload = [] |
- for k in sys.modules: |
- if k not in orig_sys_modules: |
- modules_to_unload.append(k) |
- for k in modules_to_unload: |
- del sys.modules[k] |
- sys.path = orig_sys_path |
- |
- return ret, out, err |
- |
- def test_debugger(self): |
- # TODO: this test seems to hang under coverage. |
- pass |