Wed, 31 Dec 2014 13:27:57 +0100
Ignore runtime configuration files generated during quality assurance.
1 #!/usr/bin/env python
3 # Copyright (c) 2010 Google Inc. All rights reserved.
4 # Use of this source code is governed by a BSD-style license that can be
5 # found in the LICENSE file.
7 """
8 Verifies build of an executable with C++ define specified by a gyp define using
9 various special characters such as quotes, commas, etc.
10 """
12 import os
13 import TestGyp
15 test = TestGyp.TestGyp()
17 # Tests string literals, percents, and backslash escapes.
18 try:
19 os.environ['GYP_DEFINES'] = (
20 r"""test_format='\n%s\n' """
21 r"""test_args='"Simple test of %s with a literal"'""")
22 test.run_gyp('defines-escaping.gyp')
23 finally:
24 del os.environ['GYP_DEFINES']
26 test.build('defines-escaping.gyp')
28 expect = """
29 Simple test of %s with a literal
30 """
31 test.run_built_executable('defines_escaping', stdout=expect)
34 # Test multiple comma-and-space-separated string literals.
35 try:
36 os.environ['GYP_DEFINES'] = \
37 r"""test_format='\n%s and %s\n' test_args='"foo", "bar"'"""
38 test.run_gyp('defines-escaping.gyp')
39 finally:
40 del os.environ['GYP_DEFINES']
42 test.sleep()
43 test.touch('defines-escaping.c')
44 test.build('defines-escaping.gyp')
46 expect = """
47 foo and bar
48 """
49 test.run_built_executable('defines_escaping', stdout=expect)
52 # Test string literals containing quotes.
53 try:
54 os.environ['GYP_DEFINES'] = (
55 r"""test_format='\n%s %s %s %s %s\n' """
56 r"""test_args='"\"These,\"","""
57 r""" "\"words,\"","""
58 r""" "\"are,\"","""
59 r""" "\"in,\"","""
60 r""" "\"quotes.\""'""")
61 test.run_gyp('defines-escaping.gyp')
62 finally:
63 del os.environ['GYP_DEFINES']
65 test.sleep()
66 test.touch('defines-escaping.c')
67 test.build('defines-escaping.gyp')
69 expect = """
70 "These," "words," "are," "in," "quotes."
71 """
72 test.run_built_executable('defines_escaping', stdout=expect)
75 # Test string literals containing single quotes.
76 try:
77 os.environ['GYP_DEFINES'] = (
78 r"""test_format='\n%s %s %s %s %s\n' """
79 r"""test_args="\"'These,'\","""
80 r""" \"'words,'\","""
81 r""" \"'are,'\","""
82 r""" \"'in,'\","""
83 r""" \"'quotes.'\"" """)
84 test.run_gyp('defines-escaping.gyp')
85 finally:
86 del os.environ['GYP_DEFINES']
88 test.sleep()
89 test.touch('defines-escaping.c')
90 test.build('defines-escaping.gyp')
92 expect = """
93 'These,' 'words,' 'are,' 'in,' 'quotes.'
94 """
95 test.run_built_executable('defines_escaping', stdout=expect)
98 # Test string literals containing different numbers of backslashes before quotes
99 # (to exercise Windows' quoting behaviour).
100 try:
101 os.environ['GYP_DEFINES'] = (
102 r"""test_format='\n%s\n%s\n%s\n' """
103 r"""test_args='"\\\"1 visible slash\\\"","""
104 r""" "\\\\\"2 visible slashes\\\\\"","""
105 r""" "\\\\\\\"3 visible slashes\\\\\\\""'""")
106 test.run_gyp('defines-escaping.gyp')
107 finally:
108 del os.environ['GYP_DEFINES']
110 test.sleep()
111 test.touch('defines-escaping.c')
112 test.build('defines-escaping.gyp')
114 expect = r"""
115 \"1 visible slash\"
116 \\"2 visible slashes\\"
117 \\\"3 visible slashes\\\"
118 """
119 test.run_built_executable('defines_escaping', stdout=expect)
122 # Test that various scary sequences are passed unfettered.
123 try:
124 os.environ['GYP_DEFINES'] = (
125 r"""test_format='\n%s\n' """
126 r"""test_args='"$foo, " `foo`;"'""")
127 test.run_gyp('defines-escaping.gyp')
128 finally:
129 del os.environ['GYP_DEFINES']
131 test.sleep()
132 test.touch('defines-escaping.c')
133 test.build('defines-escaping.gyp')
135 expect = """
136 $foo, " `foo`;
137 """
138 test.run_built_executable('defines_escaping', stdout=expect)
141 # VisualStudio 2010 can't handle passing %PATH%
142 if not (test.format == 'msvs' and test.uses_msbuild):
143 try:
144 os.environ['GYP_DEFINES'] = (
145 """test_format='%s' """
146 """test_args='"%PATH%"'""")
147 test.run_gyp('defines-escaping.gyp')
148 finally:
149 del os.environ['GYP_DEFINES']
151 test.sleep()
152 test.touch('defines-escaping.c')
153 test.build('defines-escaping.gyp')
155 expect = "%PATH%"
156 test.run_built_executable('defines_escaping', stdout=expect)
159 # Test commas and semi-colons preceded by backslashes (to exercise Windows'
160 # quoting behaviour).
161 try:
162 os.environ['GYP_DEFINES'] = (
163 r"""test_format='\n%s\n%s\n' """
164 r"""test_args='"\\, \\\\;","""
165 # Same thing again, but enclosed in visible quotes.
166 r""" "\"\\, \\\\;\""'""")
167 test.run_gyp('defines-escaping.gyp')
168 finally:
169 del os.environ['GYP_DEFINES']
171 test.sleep()
172 test.touch('defines-escaping.c')
173 test.build('defines-escaping.gyp')
175 expect = r"""
176 \, \\;
177 "\, \\;"
178 """
179 test.run_built_executable('defines_escaping', stdout=expect)
181 # We deliberately do not test having an odd number of quotes in a string
182 # literal because that isn't feasible in MSVS.
184 test.pass_test()