]>
Commit | Line | Data |
---|---|---|
1 | #!/usr/bin/env python | |
2 | # | |
3 | # Copyright 2008, Google Inc. | |
4 | # All rights reserved. | |
5 | # | |
6 | # Redistribution and use in source and binary forms, with or without | |
7 | # modification, are permitted provided that the following conditions are | |
8 | # met: | |
9 | # | |
10 | # * Redistributions of source code must retain the above copyright | |
11 | # notice, this list of conditions and the following disclaimer. | |
12 | # * Redistributions in binary form must reproduce the above | |
13 | # copyright notice, this list of conditions and the following disclaimer | |
14 | # in the documentation and/or other materials provided with the | |
15 | # distribution. | |
16 | # * Neither the name of Google Inc. nor the names of its | |
17 | # contributors may be used to endorse or promote products derived from | |
18 | # this software without specific prior written permission. | |
19 | # | |
20 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |
21 | # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | |
22 | # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | |
23 | # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | |
24 | # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |
25 | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |
26 | # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | |
27 | # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | |
28 | # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
29 | # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |
30 | # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
31 | ||
32 | """Verifies that Google Test correctly determines whether to use colors.""" | |
33 | ||
34 | import os | |
35 | import gtest_test_utils | |
36 | ||
37 | IS_WINDOWS = os.name == 'nt' | |
38 | ||
39 | COLOR_ENV_VAR = 'GTEST_COLOR' | |
40 | COLOR_FLAG = 'gtest_color' | |
41 | COMMAND = gtest_test_utils.GetTestExecutablePath('googletest-color-test_') | |
42 | ||
43 | ||
44 | def SetEnvVar(env_var, value): | |
45 | """Sets the env variable to 'value'; unsets it when 'value' is None.""" | |
46 | ||
47 | if value is not None: | |
48 | os.environ[env_var] = value | |
49 | elif env_var in os.environ: | |
50 | del os.environ[env_var] | |
51 | ||
52 | ||
53 | def UsesColor(term, color_env_var, color_flag): | |
54 | """Runs googletest-color-test_ and returns its exit code.""" | |
55 | ||
56 | SetEnvVar('TERM', term) | |
57 | SetEnvVar(COLOR_ENV_VAR, color_env_var) | |
58 | ||
59 | if color_flag is None: | |
60 | args = [] | |
61 | else: | |
62 | args = ['--%s=%s' % (COLOR_FLAG, color_flag)] | |
63 | p = gtest_test_utils.Subprocess([COMMAND] + args) | |
64 | return not p.exited or p.exit_code | |
65 | ||
66 | ||
67 | class GTestColorTest(gtest_test_utils.TestCase): | |
68 | def testNoEnvVarNoFlag(self): | |
69 | """Tests the case when there's neither GTEST_COLOR nor --gtest_color.""" | |
70 | ||
71 | if not IS_WINDOWS: | |
72 | self.assert_(not UsesColor('dumb', None, None)) | |
73 | self.assert_(not UsesColor('emacs', None, None)) | |
74 | self.assert_(not UsesColor('xterm-mono', None, None)) | |
75 | self.assert_(not UsesColor('unknown', None, None)) | |
76 | self.assert_(not UsesColor(None, None, None)) | |
77 | self.assert_(UsesColor('linux', None, None)) | |
78 | self.assert_(UsesColor('cygwin', None, None)) | |
79 | self.assert_(UsesColor('xterm', None, None)) | |
80 | self.assert_(UsesColor('xterm-color', None, None)) | |
81 | self.assert_(UsesColor('xterm-256color', None, None)) | |
82 | ||
83 | def testFlagOnly(self): | |
84 | """Tests the case when there's --gtest_color but not GTEST_COLOR.""" | |
85 | ||
86 | self.assert_(not UsesColor('dumb', None, 'no')) | |
87 | self.assert_(not UsesColor('xterm-color', None, 'no')) | |
88 | if not IS_WINDOWS: | |
89 | self.assert_(not UsesColor('emacs', None, 'auto')) | |
90 | self.assert_(UsesColor('xterm', None, 'auto')) | |
91 | self.assert_(UsesColor('dumb', None, 'yes')) | |
92 | self.assert_(UsesColor('xterm', None, 'yes')) | |
93 | ||
94 | def testEnvVarOnly(self): | |
95 | """Tests the case when there's GTEST_COLOR but not --gtest_color.""" | |
96 | ||
97 | self.assert_(not UsesColor('dumb', 'no', None)) | |
98 | self.assert_(not UsesColor('xterm-color', 'no', None)) | |
99 | if not IS_WINDOWS: | |
100 | self.assert_(not UsesColor('dumb', 'auto', None)) | |
101 | self.assert_(UsesColor('xterm-color', 'auto', None)) | |
102 | self.assert_(UsesColor('dumb', 'yes', None)) | |
103 | self.assert_(UsesColor('xterm-color', 'yes', None)) | |
104 | ||
105 | def testEnvVarAndFlag(self): | |
106 | """Tests the case when there are both GTEST_COLOR and --gtest_color.""" | |
107 | ||
108 | self.assert_(not UsesColor('xterm-color', 'no', 'no')) | |
109 | self.assert_(UsesColor('dumb', 'no', 'yes')) | |
110 | self.assert_(UsesColor('xterm-color', 'no', 'auto')) | |
111 | ||
112 | def testAliasesOfYesAndNo(self): | |
113 | """Tests using aliases in specifying --gtest_color.""" | |
114 | ||
115 | self.assert_(UsesColor('dumb', None, 'true')) | |
116 | self.assert_(UsesColor('dumb', None, 'YES')) | |
117 | self.assert_(UsesColor('dumb', None, 'T')) | |
118 | self.assert_(UsesColor('dumb', None, '1')) | |
119 | ||
120 | self.assert_(not UsesColor('xterm', None, 'f')) | |
121 | self.assert_(not UsesColor('xterm', None, 'false')) | |
122 | self.assert_(not UsesColor('xterm', None, '0')) | |
123 | self.assert_(not UsesColor('xterm', None, 'unknown')) | |
124 | ||
125 | ||
126 | if __name__ == '__main__': | |
127 | gtest_test_utils.Main() |