Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(578)

Side by Side Diff: test/lib/TestGyp.py

Issue 421453003: Add TestGypXcodeNinja to run tests against the xcode-ninja generator (Closed) Base URL: https://chromium.googlesource.com/external/gyp.git@master
Patch Set: Rebase onto origin/master Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 # Copyright (c) 2012 Google Inc. All rights reserved. 1 # Copyright (c) 2012 Google Inc. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 """ 5 """
6 TestGyp.py: a testing framework for GYP integration tests. 6 TestGyp.py: a testing framework for GYP integration tests.
7 """ 7 """
8 8
9 import collections 9 import collections
10 from contextlib import contextmanager 10 from contextlib import contextmanager
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after
281 281
282 # TODO: --depth=. works around Chromium-specific tree climbing. 282 # TODO: --depth=. works around Chromium-specific tree climbing.
283 depth = kw.pop('depth', '.') 283 depth = kw.pop('depth', '.')
284 run_args = ['--depth='+depth] 284 run_args = ['--depth='+depth]
285 run_args.extend(['--format='+f for f in self.formats]); 285 run_args.extend(['--format='+f for f in self.formats]);
286 run_args.append(gyp_file) 286 run_args.append(gyp_file)
287 if self.no_parallel: 287 if self.no_parallel:
288 run_args += ['--no-parallel'] 288 run_args += ['--no-parallel']
289 # TODO: if extra_args contains a '--build' flag 289 # TODO: if extra_args contains a '--build' flag
290 # we really want that to only apply to the last format (self.format). 290 # we really want that to only apply to the last format (self.format).
291 run_args.extend(self.extra_args) 291 run_args.extend(self.extra_args)
sdefresne 2014/09/02 15:13:05 I don't really like the fact that you add to chang
Tobias 2014/10/02 18:19:19 I share your feelings, I also feel a bit uneasy ab
292 run_args.extend(args) 292 run_args.extend(args)
293 return self.run(program=self.gyp, arguments=run_args, **kw) 293 return self.run(program=self.gyp, arguments=run_args, **kw)
294 294
295 def run(self, *args, **kw): 295 def run(self, *args, **kw):
296 """ 296 """
297 Executes a program by calling the superclass .run() method. 297 Executes a program by calling the superclass .run() method.
298 298
299 This exists to provide a common place to filter out keyword 299 This exists to provide a common place to filter out keyword
300 arguments implemented in this layer, without having to update 300 arguments implemented in this layer, without having to update
301 the tool-specific subclasses or clutter the tests themselves 301 the tool-specific subclasses or clutter the tests themselves
(...skipping 1016 matching lines...) Expand 10 before | Expand all | Expand 10 after
1318 result = [] 1318 result = []
1319 chdir = kw.get('chdir') 1319 chdir = kw.get('chdir')
1320 if chdir: 1320 if chdir:
1321 result.append(chdir) 1321 result.append(chdir)
1322 configuration = self.configuration_dirname() 1322 configuration = self.configuration_dirname()
1323 result.extend(['build', configuration]) 1323 result.extend(['build', configuration])
1324 result.append(self.built_file_basename(name, type, **kw)) 1324 result.append(self.built_file_basename(name, type, **kw))
1325 return self.workpath(*result) 1325 return self.workpath(*result)
1326 1326
1327 1327
1328 class TestGypXcodeNinja(TestGypXcode):
1329 """
1330 Subclass for testing the GYP Xcode Ninja generator.
1331 """
1332 format = 'xcode-ninja'
1333
1334 def initialize_build_tool(self):
1335 super(TestGypXcodeNinja, self).initialize_build_tool()
1336 # When using '--build', make sure ninja is first in the format list.
1337 self.formats.insert(0, 'ninja')
1338
1339 def build(self, gyp_file, target=None, **kw):
1340 """
1341 Runs an xcodebuild using the .xcodeproj generated from the specified
1342 gyp_file.
1343 """
1344 build_config = self.configuration
1345 if build_config and build_config.endswith(('-iphoneos',
1346 '-iphonesimulator')):
1347 build_config, sdk = self.configuration.split('-')
1348 kw['arguments'] = kw.get('arguments', []) + ['-sdk', sdk]
1349
1350 with self._build_configuration(build_config):
1351 return super(TestGypXcodeNinja, self).build(
1352 gyp_file.replace('.gyp', '.ninja.gyp'), target, **kw)
1353
1354 @contextmanager
1355 def _build_configuration(self, build_config):
1356 config = self.configuration
1357 self.configuration = build_config
1358 try:
1359 yield
1360 finally:
1361 self.configuration = config
1362
1363 def built_file_path(self, name, type=None, **kw):
1364 result = []
1365 chdir = kw.get('chdir')
1366 if chdir:
1367 result.append(chdir)
1368 result.append('out')
1369 result.append(self.configuration_dirname())
1370 subdir = kw.get('subdir')
1371 if subdir and type != self.SHARED_LIB:
1372 result.append(subdir)
1373 result.append(self.built_file_basename(name, type, **kw))
1374 return self.workpath(*result)
1375
1376 def up_to_date(self, gyp_file, target=None, **kw):
1377 result = self.build(gyp_file, target, **kw)
1378 if not result:
1379 stdout = self.stdout()
1380 if 'ninja: no work to do' not in stdout:
1381 self.report_not_up_to_date()
1382 self.fail_test()
1383 return result
1384
1385 def run_built_executable(self, name, *args, **kw):
1386 """
1387 Runs an executable built by xcodebuild + ninja.
1388 """
1389 configuration = self.configuration_dirname()
1390 os.environ['DYLD_LIBRARY_PATH'] = os.path.join('out', configuration)
1391 # Enclosing the name in a list avoids prepending the original dir.
1392 program = [self.built_file_path(name, type=self.EXECUTABLE, **kw)]
1393 return self.run(program=program, *args, **kw)
1394
1395
1328 format_class_list = [ 1396 format_class_list = [
1329 TestGypGypd, 1397 TestGypGypd,
1330 TestGypAndroid, 1398 TestGypAndroid,
1331 TestGypCMake, 1399 TestGypCMake,
1332 TestGypMake, 1400 TestGypMake,
1333 TestGypMSVS, 1401 TestGypMSVS,
1334 TestGypMSVSNinja, 1402 TestGypMSVSNinja,
1335 TestGypNinja, 1403 TestGypNinja,
1336 TestGypXcode, 1404 TestGypXcode,
1405 TestGypXcodeNinja,
1337 ] 1406 ]
1338 1407
1339 def TestGyp(*args, **kw): 1408 def TestGyp(*args, **kw):
1340 """ 1409 """
1341 Returns an appropriate TestGyp* instance for a specified GYP format. 1410 Returns an appropriate TestGyp* instance for a specified GYP format.
1342 """ 1411 """
1343 format = kw.pop('format', os.environ.get('TESTGYP_FORMAT')) 1412 format = kw.pop('format', os.environ.get('TESTGYP_FORMAT'))
1344 for format_class in format_class_list: 1413 for format_class in format_class_list:
1345 if format == format_class.format: 1414 if format == format_class.format:
1346 return format_class(*args, **kw) 1415 return format_class(*args, **kw)
1347 raise Exception, "unknown format %r" % format 1416 raise Exception, "unknown format %r" % format
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698