123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- #!/usr/bin/env python
- # Copyright (c) 2010 Google Inc. All rights reserved.
- # Use of this source code is governed by a BSD-style license that can be
- # found in the LICENSE file.
- """
- Verifies build of an executable with C++ define specified by a gyp define using
- various special characters such as quotes, commas, etc.
- """
- import os
- import TestGyp
- test = TestGyp.TestGyp()
- # Tests string literals, percents, and backslash escapes.
- try:
- os.environ['GYP_DEFINES'] = (
- r"""test_format='\n%s\n' """
- r"""test_args='"Simple test of %s with a literal"'""")
- test.run_gyp('defines-escaping.gyp')
- finally:
- del os.environ['GYP_DEFINES']
- test.build('defines-escaping.gyp')
- expect = """
- Simple test of %s with a literal
- """
- test.run_built_executable('defines_escaping', stdout=expect)
- # Test multiple comma-and-space-separated string literals.
- try:
- os.environ['GYP_DEFINES'] = \
- r"""test_format='\n%s and %s\n' test_args='"foo", "bar"'"""
- test.run_gyp('defines-escaping.gyp')
- finally:
- del os.environ['GYP_DEFINES']
- test.sleep()
- test.touch('defines-escaping.c')
- test.build('defines-escaping.gyp')
- expect = """
- foo and bar
- """
- test.run_built_executable('defines_escaping', stdout=expect)
- # Test string literals containing quotes.
- try:
- os.environ['GYP_DEFINES'] = (
- r"""test_format='\n%s %s %s %s %s\n' """
- r"""test_args='"\"These,\"","""
- r""" "\"words,\"","""
- r""" "\"are,\"","""
- r""" "\"in,\"","""
- r""" "\"quotes.\""'""")
- test.run_gyp('defines-escaping.gyp')
- finally:
- del os.environ['GYP_DEFINES']
- test.sleep()
- test.touch('defines-escaping.c')
- test.build('defines-escaping.gyp')
- expect = """
- "These," "words," "are," "in," "quotes."
- """
- test.run_built_executable('defines_escaping', stdout=expect)
- # Test string literals containing single quotes.
- try:
- os.environ['GYP_DEFINES'] = (
- r"""test_format='\n%s %s %s %s %s\n' """
- r"""test_args="\"'These,'\","""
- r""" \"'words,'\","""
- r""" \"'are,'\","""
- r""" \"'in,'\","""
- r""" \"'quotes.'\"" """)
- test.run_gyp('defines-escaping.gyp')
- finally:
- del os.environ['GYP_DEFINES']
- test.sleep()
- test.touch('defines-escaping.c')
- test.build('defines-escaping.gyp')
- expect = """
- 'These,' 'words,' 'are,' 'in,' 'quotes.'
- """
- test.run_built_executable('defines_escaping', stdout=expect)
- # Test string literals containing different numbers of backslashes before quotes
- # (to exercise Windows' quoting behaviour).
- try:
- os.environ['GYP_DEFINES'] = (
- r"""test_format='\n%s\n%s\n%s\n' """
- r"""test_args='"\\\"1 visible slash\\\"","""
- r""" "\\\\\"2 visible slashes\\\\\"","""
- r""" "\\\\\\\"3 visible slashes\\\\\\\""'""")
- test.run_gyp('defines-escaping.gyp')
- finally:
- del os.environ['GYP_DEFINES']
- test.sleep()
- test.touch('defines-escaping.c')
- test.build('defines-escaping.gyp')
- expect = r"""
- \"1 visible slash\"
- \\"2 visible slashes\\"
- \\\"3 visible slashes\\\"
- """
- test.run_built_executable('defines_escaping', stdout=expect)
- # Test that various scary sequences are passed unfettered.
- try:
- os.environ['GYP_DEFINES'] = (
- r"""test_format='\n%s\n' """
- r"""test_args='"$foo, " `foo`;"'""")
- test.run_gyp('defines-escaping.gyp')
- finally:
- del os.environ['GYP_DEFINES']
- test.sleep()
- test.touch('defines-escaping.c')
- test.build('defines-escaping.gyp')
- expect = """
- $foo, " `foo`;
- """
- test.run_built_executable('defines_escaping', stdout=expect)
- # VisualStudio 2010 can't handle passing %PATH%
- if not (test.format == 'msvs' and test.uses_msbuild):
- try:
- os.environ['GYP_DEFINES'] = (
- """test_format='%s' """
- """test_args='"%PATH%"'""")
- test.run_gyp('defines-escaping.gyp')
- finally:
- del os.environ['GYP_DEFINES']
- test.sleep()
- test.touch('defines-escaping.c')
- test.build('defines-escaping.gyp')
- expect = "%PATH%"
- test.run_built_executable('defines_escaping', stdout=expect)
- # Test commas and semi-colons preceded by backslashes (to exercise Windows'
- # quoting behaviour).
- try:
- os.environ['GYP_DEFINES'] = (
- r"""test_format='\n%s\n%s\n' """
- r"""test_args='"\\, \\\\;","""
- # Same thing again, but enclosed in visible quotes.
- r""" "\"\\, \\\\;\""'""")
- test.run_gyp('defines-escaping.gyp')
- finally:
- del os.environ['GYP_DEFINES']
- test.sleep()
- test.touch('defines-escaping.c')
- test.build('defines-escaping.gyp')
- expect = r"""
- \, \\;
- "\, \\;"
- """
- test.run_built_executable('defines_escaping', stdout=expect)
- # We deliberately do not test having an odd number of quotes in a string
- # literal because that isn't feasible in MSVS.
- test.pass_test()
|