initial import
[vuplus_webkit] / Source / ThirdParty / gyp / test / defines-escaping / gyptest-defines-escaping.py
1 #!/usr/bin/env python
2
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.
6
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 """
11
12 import os
13 import TestGyp
14
15 test = TestGyp.TestGyp()
16
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']
25
26 test.build('defines-escaping.gyp')
27
28 expect = """
29 Simple test of %s with a literal
30 """
31 test.run_built_executable('defines_escaping', stdout=expect)
32
33
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']
41
42 test.sleep()
43 test.touch('defines-escaping.c')
44 test.build('defines-escaping.gyp')
45
46 expect = """
47 foo and bar
48 """
49 test.run_built_executable('defines_escaping', stdout=expect)
50
51
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']
64
65 test.sleep()
66 test.touch('defines-escaping.c')
67 test.build('defines-escaping.gyp')
68
69 expect = """
70 "These," "words," "are," "in," "quotes."
71 """
72 test.run_built_executable('defines_escaping', stdout=expect)
73
74
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']
87
88 test.sleep()
89 test.touch('defines-escaping.c')
90 test.build('defines-escaping.gyp')
91
92 expect = """
93 'These,' 'words,' 'are,' 'in,' 'quotes.'
94 """
95 test.run_built_executable('defines_escaping', stdout=expect)
96
97
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']
109
110 test.sleep()
111 test.touch('defines-escaping.c')
112 test.build('defines-escaping.gyp')
113
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)
120
121
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']
130
131 test.sleep()
132 test.touch('defines-escaping.c')
133 test.build('defines-escaping.gyp')
134
135 expect = """
136 $foo, " `foo`;
137 """
138 test.run_built_executable('defines_escaping', stdout=expect)
139
140
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']
150
151   test.sleep()
152   test.touch('defines-escaping.c')
153   test.build('defines-escaping.gyp')
154
155   expect = "%PATH%"
156   test.run_built_executable('defines_escaping', stdout=expect)
157
158
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']
170
171 test.sleep()
172 test.touch('defines-escaping.c')
173 test.build('defines-escaping.gyp')
174
175 expect = r"""
176 \, \\;
177 "\, \\;"
178 """
179 test.run_built_executable('defines_escaping', stdout=expect)
180
181 # We deliberately do not test having an odd number of quotes in a string
182 # literal because that isn't feasible in MSVS.