Chromium Code Reviews| Index: test/win/gyptest-ninja-link-flags.py |
| =================================================================== |
| --- test/win/gyptest-ninja-link-flags.py (revision 0) |
| +++ test/win/gyptest-ninja-link-flags.py (revision 0) |
| @@ -0,0 +1,95 @@ |
| +#!/usr/bin/env python |
| + |
| +# Copyright (c) 2012 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 that the 'Profile' attribute in VCLinker is extracted properly. |
| +""" |
| + |
| +import TestGyp |
| + |
| +import os |
| +import re |
| +import sys |
| + |
| + |
| +def GetLdFlags(target): |
| + """GetLdFlags returns the value of ldflags from the specified .ninja file |
| + |
| + Load the ninja file find the 'ldflags' key. Then concats lines when the |
| + preceeding one ended with '$'.""" |
| + |
| + paths = ['linker-flags', 'out', 'Default','obj'] |
| + file_path = test.workpath(*paths + [target]) |
| + |
| + try: |
| + lines = open(file_path, 'r').readlines() |
| + |
| + except IOError, err: |
| + print 'Failed to open %s with %s.' % (file_path, err) |
| + return None |
| + |
| + ldflags = None |
| + appending = False |
| + for line in lines: |
| + if line[:9] == 'ldflags =': |
| + appending = True |
| + line = line[10:] |
| + ldflags = '' |
| + if appending: |
| + line = line.strip() |
| + if line[-1] == '$': |
| + ldflags += line[:-1] |
| + else: |
| + ldflags += line |
| + break |
| + return ldflags |
| + |
| + |
| +def GetLdSwitch(target, arg): |
| + """GetLdSwitch extract the uses of <arg> from ldflags.""" |
| + |
| + ldflags = GetLdFlags(target) |
| + parser = re.compile('(%s((:\\S*)|(=\\S*))?)' % arg) |
| + itr = parser.finditer(ldflags) |
| + return [i.group(0) for i in itr] |
| + |
| + |
| +def VerifyLdSwitch(target, arg, val): |
| + """VerifyLdSwitch of <arg> exactly matches <val>""" |
| + |
| + found = GetLdSwitch(target, arg) |
| + if val == found: |
| + return True |
| + |
| + print 'Target %s expected %s got %s' % (target, val, found) |
| + return False |
| + |
| + |
| +if sys.platform == 'win32': |
| + test = TestGyp.TestGyp(formats=['ninja']) |
| + CHDIR = 'linker-flags' |
| + test.run_gyp('profile.gyp', chdir=CHDIR) |
| + test.build('profile.gyp', test.ALL, chdir=CHDIR) |
| + |
| + # Verify it's turned on once when enabled in an EXE |
| + if not VerifyLdSwitch('test_ninja_profile_true.ninja', |
|
scottmg
2012/10/26 20:31:57
We've generally tried hard to not have tests like
noelallen1
2012/10/27 23:22:00
Switched to using dumpbin to verify.
On 2012/10/2
|
| + '/PROFILE', ['/PROFILE']): |
| + test.fail_test() |
| + |
| + # Verify it's turned on once when enabled in an DLL |
| + if not VerifyLdSwitch('test_ninja_profile_dll_true.ninja', |
| + '/PROFILE', ['/PROFILE']): |
| + test.fail_test() |
| + |
| + # Verify it's not used by default in an EXE |
| + if not VerifyLdSwitch('test_ninja_profile_no.ninja', '/PROFILE', []): |
| + test.fail_test() |
| + |
| + # Verify it's not used when disabled in a DLL |
| + if not VerifyLdSwitch('test_ninja_profile_dll_false.ninja', |
| + '/PROFILE', []): |
| + test.fail_test() |
| + test.pass_test() |
| Property changes on: test\win\gyptest-ninja-link-flags.py |
| ___________________________________________________________________ |
| Added: svn:eol-style |
| + LF |