| #!/usr/bin/env python |
| |
| # Copyright (c) 2014 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 a swift framework builds correctly. |
| """ |
| |
| import TestGyp |
| import TestMac |
| |
| import collections |
| import sys |
| import subprocess |
| |
| if sys.platform == 'darwin': |
| test = TestGyp.TestGyp(formats=['xcode']) |
| |
| # Ensures that the given symbol is present in the given file, by running nm. |
| def CheckHasSymbolName(path, symbol): |
| output = subprocess.check_output(['nm', '-j', path]) |
| idx = output.find(symbol) |
| if idx == -1: |
| print 'Swift: Could not find symobl: %s' % symbol |
| test.fail_test() |
| |
| test_cases = [] |
| |
| # Run this for iOS on XCode 6.0 or greater |
| if TestMac.Xcode.Version() >= '0600': |
| test_cases.append(('Default', 'iphoneos')) |
| test_cases.append(('Default', 'iphonesimulator')) |
| |
| # Run it for Mac on XCode 6.1 or greater |
| if TestMac.Xcode.Version() >= '0610': |
| test_cases.append(('Default', None)) |
| |
| # Generate the project. |
| test.run_gyp('test.gyp', chdir='swift-library') |
| |
| # Build and verify for each configuration. |
| for configuration, sdk in test_cases: |
| kwds = collections.defaultdict(list) |
| if test.format == 'xcode': |
| if sdk is not None: |
| kwds['arguments'].extend(['-sdk', sdk]) |
| |
| test.set_configuration(configuration) |
| test.build('test.gyp', 'SwiftFramework', chdir='swift-library', **kwds) |
| |
| filename = 'SwiftFramework.framework/SwiftFramework' |
| result_file = test.built_file_path(filename, chdir='swift-library') |
| |
| test.must_exist(result_file) |
| |
| # Check to make sure that our swift class (GypSwiftTest) is present in the |
| # built binary |
| CheckHasSymbolName(result_file, "C14SwiftFramework12GypSwiftTest") |
| |
| test.pass_test() |