1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
#!/usr/bin/env python
# Copyright (c) 2012 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 logging
import os
import re
import subprocess
import sys
import unittest
ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
sys.path.append(os.path.join(ROOT_DIR, 'data', 'gtest_fake'))
import gtest_fake_base
def RunTest(test_file):
target = os.path.join(ROOT_DIR, 'data', 'gtest_fake', test_file)
cmd = [
sys.executable,
os.path.join(ROOT_DIR, 'run_test_cases.py'),
'--no-dump',
target,
]
logging.debug(' '.join(cmd))
proc = subprocess.Popen(
cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# pylint is confused.
out, err = proc.communicate() or ('', '')
return (out, err, proc.returncode)
class TraceTestCases(unittest.TestCase):
def setUp(self):
# Make sure there's no environment variable that could do side effects.
os.environ.pop('GTEST_SHARD_INDEX', '')
os.environ.pop('GTEST_TOTAL_SHARDS', '')
def _check_results(self, expected_out_re, out, err):
if sys.platform == 'win32':
out = out.replace('\r\n', '\n')
lines = out.splitlines()
for index in range(len(expected_out_re)):
line = lines.pop(0)
self.assertTrue(
re.match('^%s$' % expected_out_re[index], line),
(index, expected_out_re[index], repr(line)))
self.assertEquals([], lines)
self.assertEquals('', err)
def test_simple_pass(self):
out, err, return_code = RunTest('gtest_fake_pass.py')
self.assertEquals(0, return_code)
expected_out_re = [
r'\[\d/\d\] \d\.\d\ds .+',
r'\[\d/\d\] \d\.\d\ds .+',
r'\[\d/\d\] \d\.\d\ds .+',
re.escape('Success: 3 100.00%'),
re.escape('Flaky: 0 0.00%'),
re.escape('Fail: 0 0.00%'),
r'\d+\.\ds Done running 3 tests with 3 executions. \d+\.\d test/s',
]
self._check_results(expected_out_re, out, err)
def test_simple_fail(self):
out, err, return_code = RunTest('gtest_fake_fail.py')
self.assertEquals(1, return_code)
expected_out_re = [
r'\[\d/\d\] \d\.\d\ds .+',
r'\[\d/\d\] \d\.\d\ds .+',
r'\[\d/\d\] \d\.\d\ds .+',
r'\[\d/\d\] \d\.\d\ds .+',
r'\[\d/\d\] \d\.\d\ds .+',
r'\[\d/\d\] \d\.\d\ds .+',
re.escape('Note: Google Test filter = Baz.Fail'),
r'',
] + [
re.escape(l) for l in
gtest_fake_base.get_test_output('Baz.Fail').splitlines()
] + [
'',
] + [
re.escape(l) for l in gtest_fake_base.get_footer(1, 1).splitlines()
] + [
'',
re.escape('Success: 3 75.00%'),
re.escape('Flaky: 0 0.00%'),
re.escape('Fail: 1 25.00%'),
r'\d+\.\ds Done running 4 tests with 6 executions. \d+\.\d test/s',
]
self._check_results(expected_out_re, out, err)
def test_simple_gtest_list_error(self):
out, err, return_code = RunTest('gtest_fake_error.py')
expected_out_re = [
'Failed to run .+gtest_fake_error.py',
'Unable to list tests'
]
self.assertEqual(1, return_code)
self._check_results(expected_out_re, out, err)
if __name__ == '__main__':
VERBOSE = '-v' in sys.argv
logging.basicConfig(level=logging.DEBUG if VERBOSE else logging.ERROR)
unittest.main()
|