mirror of https://github.com/lukechilds/node.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
184 lines
4.6 KiB
184 lines
4.6 KiB
#!/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()
|
|
|