123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- #!/usr/bin/env vpython3
- # Copyright 2021 The Chromium Authors. All rights reserved.
- # Use of this source code is governed by a BSD-style license that can be
- # found in the LICENSE file.
- import os
- from pyfakefs import fake_filesystem_unittest
- import tempfile
- import unittest
- from test_results import TestResult
- from rust_main_program import _format_test_name
- from rust_main_program import _parse_test_name
- from rust_main_program import _get_exe_specific_tests
- from rust_main_program import _scrape_test_list
- from rust_main_program import _scrape_test_results
- from rust_main_program import _parse_args
- from rust_main_program import _TestExecutableWrapper
- class Tests(fake_filesystem_unittest.TestCase):
- def test_format_test_name(self):
- self.assertEqual('test_exe//test_bar',
- _format_test_name('test_exe', 'test_bar'))
- self.assertEqual('test_exe//foo/test_foo',
- _format_test_name('test_exe', 'foo::test_foo'))
- def test_parse_test_name(self):
- self.assertEqual(('test_exe', 'test_bar'),
- _parse_test_name('test_exe//test_bar'))
- self.assertEqual(('test_exe', 'foo::test_foo'),
- _parse_test_name('test_exe//foo/test_foo'))
- def test_scrape_test_list(self):
- test_input = """
- test_foo: test
- test_bar: test
- foo::test_in_mod: test
- test_benchmark: benchmark
- """.strip()
- actual_results = _scrape_test_list(test_input, 'test_exe_name')
- expected_results = [
- 'test_exe_name//test_foo', 'test_exe_name//test_bar',
- 'test_exe_name//foo/test_in_mod'
- ]
- self.assertEqual(actual_results, expected_results)
- # https://crbug.com/1281664 meant that Rust executables might
- # incorrectly think that they were invoked with no cmdline args.
- # Back then we didn't realize that out test wrappers broken :-(.
- # The test below tries to ensure this won't happen again.
- def test_scrape_test_list_with_unexpected_lines(self):
- test_input = """
- running 1 test
- test test_hello ... ok
- test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
- """.strip()
- with self.assertRaises(ValueError):
- _scrape_test_list(test_input, 'test_exe_name')
- def test_scrape_test_results(self):
- test_input = """
- running 3 tests
- test test_foo ... ok
- test test_bar ... ok
- test foo::test_in_mod ... ok
- test test_foobar ... FAILED
- failures:
- ---- test_foobar stdout ----
- thread 'test_foobar' panicked at 'assertion failed: `(left == right)`
- left: `7`,
- right: `124`', ../../build/rust/tests/test_rust_static_library/src/lib.rs:29:5
- note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
- failures:
- test_foobar
- test result: FAILED. 3 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
- """.strip()
- list_of_expected_test_names = [
- 'test_foo', 'test_bar', 'foo::test_in_mod', 'test_foobar'
- ]
- actual_results = _scrape_test_results(test_input, 'test_exe_name',
- list_of_expected_test_names)
- expected_results = [
- TestResult('test_exe_name//test_foo', 'PASS'),
- TestResult('test_exe_name//test_bar', 'PASS'),
- TestResult('test_exe_name//foo/test_in_mod', 'PASS'),
- TestResult('test_exe_name//test_foobar', 'FAIL')
- ]
- self.assertEqual(actual_results, expected_results)
- def test_parse_args(self):
- args = _parse_args(['--rust-test-executable=foo'])
- self.assertEqual(['foo'], args.rust_test_executables)
- args = _parse_args(
- ['--rust-test-executable=foo', '--rust-test-executable=bar'])
- self.assertEqual(['foo', 'bar'], args.rust_test_executables)
- def test_get_exe_specific_tests(self):
- result = _get_exe_specific_tests(
- "exe_name",
- ["exe_name//foo1", "exe_name//foo2", "other_exe//foo3"])
- self.assertEqual(['foo1', 'foo2'], result)
- def test_executable_wrapper_basic_construction(self):
- with tempfile.TemporaryDirectory() as tmpdirname:
- exe_filename = 'foo-bar.exe'
- exe_path = os.path.join(tmpdirname, exe_filename)
- with open(exe_path, 'w'):
- pass
- t = _TestExecutableWrapper(exe_path)
- self.assertEqual('foo-bar', t._name_of_test_executable)
- def test_executable_wrapper_missing_file(self):
- with self.assertRaises(ValueError):
- _TestExecutableWrapper('no-such-file.exe')
- if __name__ == '__main__':
- unittest.main()
|