1508a41bbbe7d80a0e2371f21b0bb6c484fd579aathakis@chromium.org#!/usr/bin/env python 2508a41bbbe7d80a0e2371f21b0bb6c484fd579aathakis@chromium.org 3508a41bbbe7d80a0e2371f21b0bb6c484fd579aathakis@chromium.org# Copyright (c) 2012 Google Inc. All rights reserved. 4508a41bbbe7d80a0e2371f21b0bb6c484fd579aathakis@chromium.org# Use of this source code is governed by a BSD-style license that can be 5508a41bbbe7d80a0e2371f21b0bb6c484fd579aathakis@chromium.org# found in the LICENSE file. 6508a41bbbe7d80a0e2371f21b0bb6c484fd579aathakis@chromium.org 7508a41bbbe7d80a0e2371f21b0bb6c484fd579aathakis@chromium.org""" 8508a41bbbe7d80a0e2371f21b0bb6c484fd579aathakis@chromium.orgVerifies that invalid strings files cause the build to fail. 9508a41bbbe7d80a0e2371f21b0bb6c484fd579aathakis@chromium.org""" 10508a41bbbe7d80a0e2371f21b0bb6c484fd579aathakis@chromium.org 11d1980cae9cb7c2e16a57fe6715d7f9399c9dd868thakis@chromium.orgimport TestCmd 12508a41bbbe7d80a0e2371f21b0bb6c484fd579aathakis@chromium.orgimport TestGyp 13508a41bbbe7d80a0e2371f21b0bb6c484fd579aathakis@chromium.org 14508a41bbbe7d80a0e2371f21b0bb6c484fd579aathakis@chromium.orgimport sys 15508a41bbbe7d80a0e2371f21b0bb6c484fd579aathakis@chromium.org 16508a41bbbe7d80a0e2371f21b0bb6c484fd579aathakis@chromium.orgif sys.platform == 'darwin': 17b26acf5e5b3caac5b10c0027b63c8633a7c82c3dthakis@chromium.org expected_error = 'Old-style plist parser: missing semicolon in dictionary' 18508a41bbbe7d80a0e2371f21b0bb6c484fd579aathakis@chromium.org saw_expected_error = [False] # Python2 has no "nonlocal" keyword. 19508a41bbbe7d80a0e2371f21b0bb6c484fd579aathakis@chromium.org def match(a, b): 20508a41bbbe7d80a0e2371f21b0bb6c484fd579aathakis@chromium.org if a == b: 21508a41bbbe7d80a0e2371f21b0bb6c484fd579aathakis@chromium.org return True 22d1980cae9cb7c2e16a57fe6715d7f9399c9dd868thakis@chromium.org if not TestCmd.is_List(a): 23d1980cae9cb7c2e16a57fe6715d7f9399c9dd868thakis@chromium.org a = a.split('\n') 24d1980cae9cb7c2e16a57fe6715d7f9399c9dd868thakis@chromium.org if not TestCmd.is_List(b): 25d1980cae9cb7c2e16a57fe6715d7f9399c9dd868thakis@chromium.org b = b.split('\n') 26d1980cae9cb7c2e16a57fe6715d7f9399c9dd868thakis@chromium.org if expected_error in '\n'.join(a) + '\n'.join(b): 27508a41bbbe7d80a0e2371f21b0bb6c484fd579aathakis@chromium.org saw_expected_error[0] = True 28508a41bbbe7d80a0e2371f21b0bb6c484fd579aathakis@chromium.org return True 29508a41bbbe7d80a0e2371f21b0bb6c484fd579aathakis@chromium.org return False 30508a41bbbe7d80a0e2371f21b0bb6c484fd579aathakis@chromium.org test = TestGyp.TestGyp(formats=['ninja', 'make', 'xcode'], match=match) 31508a41bbbe7d80a0e2371f21b0bb6c484fd579aathakis@chromium.org 32508a41bbbe7d80a0e2371f21b0bb6c484fd579aathakis@chromium.org test.run_gyp('test-error.gyp', chdir='app-bundle') 33508a41bbbe7d80a0e2371f21b0bb6c484fd579aathakis@chromium.org 34508a41bbbe7d80a0e2371f21b0bb6c484fd579aathakis@chromium.org test.build('test-error.gyp', test.ALL, chdir='app-bundle') 35508a41bbbe7d80a0e2371f21b0bb6c484fd579aathakis@chromium.org 36508a41bbbe7d80a0e2371f21b0bb6c484fd579aathakis@chromium.org # Ninja pipes stderr of subprocesses to stdout. 37508a41bbbe7d80a0e2371f21b0bb6c484fd579aathakis@chromium.org if test.format == 'ninja' and expected_error in test.stdout(): 38508a41bbbe7d80a0e2371f21b0bb6c484fd579aathakis@chromium.org saw_expected_error[0] = True 39508a41bbbe7d80a0e2371f21b0bb6c484fd579aathakis@chromium.org 40508a41bbbe7d80a0e2371f21b0bb6c484fd579aathakis@chromium.org if saw_expected_error[0]: 41508a41bbbe7d80a0e2371f21b0bb6c484fd579aathakis@chromium.org test.pass_test() 42508a41bbbe7d80a0e2371f21b0bb6c484fd579aathakis@chromium.org else: 43508a41bbbe7d80a0e2371f21b0bb6c484fd579aathakis@chromium.org test.fail_test() 44