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