| OLD | NEW |
| 1 # Copyright 2014 The Chromium Authors. All rights reserved. | 1 # Copyright 2014 The Chromium Authors. 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 import re | 5 import re |
| 6 import string | 6 import string |
| 7 | 7 |
| 8 | 8 |
| 9 class Test(object): | 9 class Test(object): |
| 10 """ | 10 """ |
| (...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 412 test_spec.get(buildername, {}).get('gtest_tests', [])] | 412 test_spec.get(buildername, {}).get('gtest_tests', [])] |
| 413 | 413 |
| 414 for test in get_tests(api): | 414 for test in get_tests(api): |
| 415 args = test.get('args', []) | 415 args = test.get('args', []) |
| 416 if test['shard_index'] != 0 or test['total_shards'] != 1: | 416 if test['shard_index'] != 0 or test['total_shards'] != 1: |
| 417 args.extend(['--test-launcher-shard-index=%d' % test['shard_index'], | 417 args.extend(['--test-launcher-shard-index=%d' % test['shard_index'], |
| 418 '--test-launcher-total-shards=%d' % test['total_shards']]) | 418 '--test-launcher-total-shards=%d' % test['total_shards']]) |
| 419 use_swarming = False | 419 use_swarming = False |
| 420 swarming_shards = 1 | 420 swarming_shards = 1 |
| 421 swarming_dimension_sets = None | 421 swarming_dimension_sets = None |
| 422 swarming_priority = None |
| 423 swarming_expiration = None |
| 422 if enable_swarming: | 424 if enable_swarming: |
| 423 swarming_spec = test.get('swarming', {}) | 425 swarming_spec = test.get('swarming', {}) |
| 424 if swarming_spec.get('can_use_on_swarming_builders'): | 426 if swarming_spec.get('can_use_on_swarming_builders'): |
| 425 use_swarming = True | 427 use_swarming = True |
| 426 swarming_shards = swarming_spec.get('shards', 1) | 428 swarming_shards = swarming_spec.get('shards', 1) |
| 427 swarming_dimension_sets = swarming_spec.get('dimension_sets') | 429 swarming_dimension_sets = swarming_spec.get('dimension_sets') |
| 430 swarming_priority = swarming_spec.get('priority_adjustment') |
| 431 swarming_expiration = swarming_spec.get('expiration') |
| 428 override_compile_targets = test.get('override_compile_targets', None) | 432 override_compile_targets = test.get('override_compile_targets', None) |
| 429 target_name = str(test['test']) | 433 target_name = str(test['test']) |
| 430 name = str(test.get('name', target_name)) | 434 name = str(test.get('name', target_name)) |
| 431 swarming_dimensions = swarming_dimensions or {} | 435 swarming_dimensions = swarming_dimensions or {} |
| 432 use_xvfb = test.get('use_xvfb', True) | 436 use_xvfb = test.get('use_xvfb', True) |
| 433 if use_swarming and swarming_dimension_sets: | 437 if use_swarming and swarming_dimension_sets: |
| 434 for dimensions in swarming_dimension_sets: | 438 for dimensions in swarming_dimension_sets: |
| 435 # Yield potentially multiple invocations of the same test, on | 439 # Yield potentially multiple invocations of the same test, on |
| 436 # different machine configurations. | 440 # different machine configurations. |
| 437 new_dimensions = dict(swarming_dimensions) | 441 new_dimensions = dict(swarming_dimensions) |
| 438 new_dimensions.update(dimensions) | 442 new_dimensions.update(dimensions) |
| 439 yield GTestTest(name, args=args, target_name=target_name, | 443 yield GTestTest(name, args=args, target_name=target_name, |
| 440 flakiness_dash=True, | 444 flakiness_dash=True, |
| 441 enable_swarming=True, | 445 enable_swarming=True, |
| 442 swarming_shards=swarming_shards, | 446 swarming_shards=swarming_shards, |
| 443 swarming_dimensions=new_dimensions, | 447 swarming_dimensions=new_dimensions, |
| 448 swarming_priority=swarming_priority, |
| 449 swarming_expiration=swarming_expiration, |
| 444 override_compile_targets=override_compile_targets, | 450 override_compile_targets=override_compile_targets, |
| 445 use_xvfb=use_xvfb) | 451 use_xvfb=use_xvfb) |
| 446 else: | 452 else: |
| 447 yield GTestTest(name, args=args, target_name=target_name, | 453 yield GTestTest(name, args=args, target_name=target_name, |
| 448 flakiness_dash=True, | 454 flakiness_dash=True, |
| 449 enable_swarming=use_swarming, | 455 enable_swarming=use_swarming, |
| 450 swarming_dimensions=swarming_dimensions, | 456 swarming_dimensions=swarming_dimensions, |
| 451 swarming_shards=swarming_shards, | 457 swarming_shards=swarming_shards, |
| 458 swarming_priority=swarming_priority, |
| 459 swarming_expiration=swarming_expiration, |
| 452 override_compile_targets=override_compile_targets, | 460 override_compile_targets=override_compile_targets, |
| 453 use_xvfb=use_xvfb) | 461 use_xvfb=use_xvfb) |
| 454 | 462 |
| 455 | 463 |
| 456 def generate_instrumentation_test(api, chromium_tests_api, mastername, | 464 def generate_instrumentation_test(api, chromium_tests_api, mastername, |
| 457 buildername, test_spec, bot_update_step, | 465 buildername, test_spec, bot_update_step, |
| 458 enable_swarming=False, | 466 enable_swarming=False, |
| 459 swarming_dimensions=None, | 467 swarming_dimensions=None, |
| 460 scripts_compile_targets=None): | 468 scripts_compile_targets=None): |
| 461 for test in test_spec.get(buildername, {}).get('instrumentation_tests', []): | 469 for test in test_spec.get(buildername, {}).get('instrumentation_tests', []): |
| 462 test_name = str(test.get('test')) | 470 test_name = str(test.get('test')) |
| 463 use_swarming = False | 471 use_swarming = False |
| 464 if enable_swarming: | 472 if enable_swarming: |
| 465 swarming_spec = test.get('swarming', {}) | 473 swarming_spec = test.get('swarming', {}) |
| 466 if swarming_spec.get('can_use_on_swarming_builders'): | 474 if swarming_spec.get('can_use_on_swarming_builders'): |
| 467 use_swarming = True | 475 use_swarming = True |
| 468 swarming_shards = swarming_spec.get('shards', 1) | 476 swarming_shards = swarming_spec.get('shards', 1) |
| 469 swarming_dimension_sets = swarming_spec.get('dimension_sets') | 477 swarming_dimension_sets = swarming_spec.get('dimension_sets') |
| 478 swarming_priority = swarming_spec.get('priority_adjustment') |
| 479 swarming_expiration = swarming_spec.get('expiration') |
| 470 if use_swarming and swarming_dimension_sets: | 480 if use_swarming and swarming_dimension_sets: |
| 471 for dimensions in swarming_dimension_sets: | 481 for dimensions in swarming_dimension_sets: |
| 472 # TODO(stip): Swarmify instrumentation tests | 482 # TODO(stip): Swarmify instrumentation tests |
| 473 pass | 483 pass |
| 474 else: | 484 else: |
| 475 yield AndroidInstrumentationTest( | 485 yield AndroidInstrumentationTest( |
| 476 test_name, | 486 test_name, |
| 477 compile_targets=test.get('override_compile_targets', None), | 487 compile_targets=test.get('override_compile_targets', None), |
| 478 isolate_file_path=test.get('isolate_file_path', None), | 488 isolate_file_path=test.get('isolate_file_path', None), |
| 479 apk_under_test=test.get('apk_under_test', None), | 489 apk_under_test=test.get('apk_under_test', None), |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 586 | 596 |
| 587 if failure: | 597 if failure: |
| 588 raise failure | 598 raise failure |
| 589 | 599 |
| 590 @staticmethod | 600 @staticmethod |
| 591 def compile_targets(_): | 601 def compile_targets(_): |
| 592 return [] | 602 return [] |
| 593 | 603 |
| 594 | 604 |
| 595 class SwarmingTest(Test): | 605 class SwarmingTest(Test): |
| 606 PRIORITY_ADJUSTMENTS = { |
| 607 'higher': -10, |
| 608 'normal': 0, |
| 609 'lower': +10, |
| 610 } |
| 611 |
| 596 def __init__(self, name, dimensions=None, tags=None, target_name=None, | 612 def __init__(self, name, dimensions=None, tags=None, target_name=None, |
| 597 extra_suffix=None): | 613 extra_suffix=None, priority=None, expiration=None): |
| 598 self._name = name | 614 self._name = name |
| 599 self._tasks = {} | 615 self._tasks = {} |
| 600 self._results = {} | 616 self._results = {} |
| 601 self._target_name = target_name | 617 self._target_name = target_name |
| 602 self._dimensions = dimensions | 618 self._dimensions = dimensions |
| 603 self._tags = tags | 619 self._tags = tags |
| 604 self._extra_suffix = extra_suffix | 620 self._extra_suffix = extra_suffix |
| 621 self._priority = priority |
| 622 self._expiration = expiration |
| 605 if dimensions and not extra_suffix: | 623 if dimensions and not extra_suffix: |
| 606 self._extra_suffix = self._get_gpu_suffix(dimensions) | 624 self._extra_suffix = self._get_gpu_suffix(dimensions) |
| 607 | 625 |
| 608 @staticmethod | 626 @staticmethod |
| 609 def _get_gpu_suffix(dimensions): | 627 def _get_gpu_suffix(dimensions): |
| 610 if not dimensions.get('gpu'): | 628 if not dimensions.get('gpu'): |
| 611 return None | 629 return None |
| 612 gpu_vendor_id = dimensions.get('gpu', '').split(':')[0].lower() | 630 gpu_vendor_id = dimensions.get('gpu', '').split(':')[0].lower() |
| 613 vendor_ids = { | 631 vendor_ids = { |
| 614 '8086': 'Intel', | 632 '8086': 'Intel', |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 672 import sys | 690 import sys |
| 673 print '*.isolated file for target %s is missing' % sys.argv[1] | 691 print '*.isolated file for target %s is missing' % sys.argv[1] |
| 674 sys.exit(1) | 692 sys.exit(1) |
| 675 """, | 693 """, |
| 676 args=[self.isolate_target(api)]) | 694 args=[self.isolate_target(api)]) |
| 677 | 695 |
| 678 # Create task. | 696 # Create task. |
| 679 self._tasks[suffix] = self.create_task( | 697 self._tasks[suffix] = self.create_task( |
| 680 api, suffix, isolated_hash, test_filter=test_filter) | 698 api, suffix, isolated_hash, test_filter=test_filter) |
| 681 | 699 |
| 700 if self._priority in self.PRIORITY_ADJUSTMENTS: |
| 701 self._tasks[suffix].priority += self.PRIORITY_ADJUSTMENTS[self._priority] |
| 702 |
| 703 if self._expiration: |
| 704 self._tasks[suffix].expiration = self._expiration |
| 705 |
| 682 # Add custom dimensions. | 706 # Add custom dimensions. |
| 683 if self._dimensions: # pragma: no cover | 707 if self._dimensions: # pragma: no cover |
| 684 #TODO(stip): concoct a test case that will trigger this codepath | 708 #TODO(stip): concoct a test case that will trigger this codepath |
| 685 for k, v in self._dimensions.iteritems(): | 709 for k, v in self._dimensions.iteritems(): |
| 686 if v is None: | 710 if v is None: |
| 687 # Remove key if it exists. This allows one to use None to remove | 711 # Remove key if it exists. This allows one to use None to remove |
| 688 # default dimensions. | 712 # default dimensions. |
| 689 self._tasks[suffix].dimensions.pop(k, None) | 713 self._tasks[suffix].dimensions.pop(k, None) |
| 690 else: | 714 else: |
| 691 self._tasks[suffix].dimensions[k] = v | 715 self._tasks[suffix].dimensions[k] = v |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 761 assert self.has_valid_results(api, suffix) | 785 assert self.has_valid_results(api, suffix) |
| 762 return self._results[suffix]['failures'] | 786 return self._results[suffix]['failures'] |
| 763 | 787 |
| 764 @property | 788 @property |
| 765 def uses_swarming(self): | 789 def uses_swarming(self): |
| 766 return True | 790 return True |
| 767 | 791 |
| 768 | 792 |
| 769 class SwarmingGTestTest(SwarmingTest): | 793 class SwarmingGTestTest(SwarmingTest): |
| 770 def __init__(self, name, args=None, target_name=None, shards=1, | 794 def __init__(self, name, args=None, target_name=None, shards=1, |
| 771 dimensions=None, tags=None, extra_suffix=None, | 795 dimensions=None, tags=None, extra_suffix=None, priority=None, |
| 772 upload_test_results=True, override_compile_targets=None): | 796 expiration=None, upload_test_results=True, |
| 797 override_compile_targets=None): |
| 773 super(SwarmingGTestTest, self).__init__(name, dimensions, tags, target_name, | 798 super(SwarmingGTestTest, self).__init__(name, dimensions, tags, target_name, |
| 774 extra_suffix) | 799 extra_suffix, priority, expiration) |
| 775 self._args = args or [] | 800 self._args = args or [] |
| 776 self._shards = shards | 801 self._shards = shards |
| 777 self._upload_test_results = upload_test_results | 802 self._upload_test_results = upload_test_results |
| 778 self._override_compile_targets = override_compile_targets | 803 self._override_compile_targets = override_compile_targets |
| 779 | 804 |
| 780 def compile_targets(self, api): | 805 def compile_targets(self, api): |
| 781 # <X>_run target depends on <X>, and then isolates it invoking isolate.py. | 806 # <X>_run target depends on <X>, and then isolates it invoking isolate.py. |
| 782 # It is a convention, not a hard coded rule. | 807 # It is a convention, not a hard coded rule. |
| 783 # Also include name without the _run suffix to help recipes correctly | 808 # Also include name without the _run suffix to help recipes correctly |
| 784 # interpret results returned by "analyze". | 809 # interpret results returned by "analyze". |
| (...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1154 return self._test_runs[suffix].json.output['valid'] | 1179 return self._test_runs[suffix].json.output['valid'] |
| 1155 except Exception: # pragma: no cover | 1180 except Exception: # pragma: no cover |
| 1156 return False | 1181 return False |
| 1157 | 1182 |
| 1158 def failures(self, api, suffix): | 1183 def failures(self, api, suffix): |
| 1159 return self._test_runs[suffix].json.output['failures'] | 1184 return self._test_runs[suffix].json.output['failures'] |
| 1160 | 1185 |
| 1161 | 1186 |
| 1162 class SwarmingIsolatedScriptTest(SwarmingTest): | 1187 class SwarmingIsolatedScriptTest(SwarmingTest): |
| 1163 def __init__(self, name, args=None, target_name=None, shards=1, | 1188 def __init__(self, name, args=None, target_name=None, shards=1, |
| 1164 dimensions=None, tags=None, extra_suffix=None, | 1189 dimensions=None, tags=None, extra_suffix=None, priority=None, |
| 1165 upload_test_results=True, override_compile_targets=None): | 1190 expiration=None, upload_test_results=True, |
| 1191 override_compile_targets=None): |
| 1166 super(SwarmingIsolatedScriptTest, self).__init__( | 1192 super(SwarmingIsolatedScriptTest, self).__init__( |
| 1167 name, dimensions, tags, target_name, extra_suffix) | 1193 name, dimensions, tags, target_name, extra_suffix, priority, expiration) |
| 1168 self._args = args or [] | 1194 self._args = args or [] |
| 1169 self._shards = shards | 1195 self._shards = shards |
| 1170 self._upload_test_results = upload_test_results | 1196 self._upload_test_results = upload_test_results |
| 1171 self._override_compile_targets = override_compile_targets | 1197 self._override_compile_targets = override_compile_targets |
| 1172 | 1198 |
| 1173 @property | 1199 @property |
| 1174 def target_name(self): | 1200 def target_name(self): |
| 1175 return self._target_name or self._name | 1201 return self._target_name or self._name |
| 1176 | 1202 |
| 1177 def compile_targets(self, _): | 1203 def compile_targets(self, _): |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1217 | 1243 |
| 1218 | 1244 |
| 1219 def generate_isolated_script(api, chromium_tests_api, mastername, buildername, | 1245 def generate_isolated_script(api, chromium_tests_api, mastername, buildername, |
| 1220 test_spec, bot_update_step, enable_swarming=False, | 1246 test_spec, bot_update_step, enable_swarming=False, |
| 1221 swarming_dimensions=None, | 1247 swarming_dimensions=None, |
| 1222 scripts_compile_targets=None): | 1248 scripts_compile_targets=None): |
| 1223 for spec in test_spec.get(buildername, {}).get('isolated_scripts', []): | 1249 for spec in test_spec.get(buildername, {}).get('isolated_scripts', []): |
| 1224 use_swarming = False | 1250 use_swarming = False |
| 1225 swarming_shards = 1 | 1251 swarming_shards = 1 |
| 1226 swarming_dimension_sets = None | 1252 swarming_dimension_sets = None |
| 1253 swarming_priority = None |
| 1254 swarming_expiration = None |
| 1227 if enable_swarming: | 1255 if enable_swarming: |
| 1228 swarming_spec = spec.get('swarming', {}) | 1256 swarming_spec = spec.get('swarming', {}) |
| 1229 if swarming_spec.get('can_use_on_swarming_builders', False): | 1257 if swarming_spec.get('can_use_on_swarming_builders', False): |
| 1230 use_swarming = True | 1258 use_swarming = True |
| 1231 swarming_shards = swarming_spec.get('shards', 1) | 1259 swarming_shards = swarming_spec.get('shards', 1) |
| 1232 swarming_dimension_sets = swarming_spec.get('dimension_sets') | 1260 swarming_dimension_sets = swarming_spec.get('dimension_sets') |
| 1261 swarming_priority = swarming_spec.get('priority_adjustment') |
| 1262 swarming_expiration = swarming_spec.get('expiration') |
| 1233 name = str(spec['name']) | 1263 name = str(spec['name']) |
| 1234 # The variable substitution and precommit/non-precommit arguments | 1264 # The variable substitution and precommit/non-precommit arguments |
| 1235 # could be supported for the other test types too, but that wasn't | 1265 # could be supported for the other test types too, but that wasn't |
| 1236 # desired at the time of this writing. | 1266 # desired at the time of this writing. |
| 1237 args = get_args_for_test(api, chromium_tests_api, spec, bot_update_step) | 1267 args = get_args_for_test(api, chromium_tests_api, spec, bot_update_step) |
| 1238 target_name = spec['isolate_name'] | 1268 target_name = spec['isolate_name'] |
| 1239 # This features is only needed for the cases in which the *_run compile | 1269 # This features is only needed for the cases in which the *_run compile |
| 1240 # target is needed to generate isolate files that contains dynamically libs. | 1270 # target is needed to generate isolate files that contains dynamically libs. |
| 1241 # TODO(nednguyen, kbr): Remove this once all the GYP builds are converted | 1271 # TODO(nednguyen, kbr): Remove this once all the GYP builds are converted |
| 1242 # to GN. | 1272 # to GN. |
| 1243 override_compile_targets = spec.get('override_compile_targets', None) | 1273 override_compile_targets = spec.get('override_compile_targets', None) |
| 1244 swarming_dimensions = swarming_dimensions or {} | 1274 swarming_dimensions = swarming_dimensions or {} |
| 1245 if use_swarming: | 1275 if use_swarming: |
| 1246 if swarming_dimension_sets: | 1276 if swarming_dimension_sets: |
| 1247 for dimensions in swarming_dimension_sets: | 1277 for dimensions in swarming_dimension_sets: |
| 1248 # Yield potentially multiple invocations of the same test, | 1278 # Yield potentially multiple invocations of the same test, |
| 1249 # on different machine configurations. | 1279 # on different machine configurations. |
| 1250 new_dimensions = dict(swarming_dimensions) | 1280 new_dimensions = dict(swarming_dimensions) |
| 1251 new_dimensions.update(dimensions) | 1281 new_dimensions.update(dimensions) |
| 1252 yield SwarmingIsolatedScriptTest( | 1282 yield SwarmingIsolatedScriptTest( |
| 1253 name=name, args=args, target_name=target_name, | 1283 name=name, args=args, target_name=target_name, |
| 1254 shards=swarming_shards, dimensions=new_dimensions, | 1284 shards=swarming_shards, dimensions=new_dimensions, |
| 1255 override_compile_targets=override_compile_targets) | 1285 override_compile_targets=override_compile_targets, |
| 1286 priority=swarming_priority, expiration=swarming_expiration) |
| 1256 else: | 1287 else: |
| 1257 yield SwarmingIsolatedScriptTest( | 1288 yield SwarmingIsolatedScriptTest( |
| 1258 name=name, args=args, target_name=target_name, | 1289 name=name, args=args, target_name=target_name, |
| 1259 shards=swarming_shards, dimensions=swarming_dimensions, | 1290 shards=swarming_shards, dimensions=swarming_dimensions, |
| 1260 override_compile_targets=override_compile_targets) | 1291 override_compile_targets=override_compile_targets, |
| 1292 priority=swarming_priority, expiration=swarming_expiration) |
| 1261 else: | 1293 else: |
| 1262 yield LocalIsolatedScriptTest( | 1294 yield LocalIsolatedScriptTest( |
| 1263 name=name, args=args, target_name=target_name, | 1295 name=name, args=args, target_name=target_name, |
| 1264 override_compile_targets=override_compile_targets) | 1296 override_compile_targets=override_compile_targets) |
| 1265 | 1297 |
| 1266 | 1298 |
| 1267 class GTestTest(Test): | 1299 class GTestTest(Test): |
| 1268 def __init__(self, name, args=None, target_name=None, enable_swarming=False, | 1300 def __init__(self, name, args=None, target_name=None, enable_swarming=False, |
| 1269 swarming_shards=1, swarming_dimensions=None, swarming_tags=None, | 1301 swarming_shards=1, swarming_dimensions=None, swarming_tags=None, |
| 1270 swarming_extra_suffix=None, **runtest_kwargs): | 1302 swarming_extra_suffix=None, swarming_priority=None, |
| 1303 swarming_expiration=None, **runtest_kwargs): |
| 1271 super(GTestTest, self).__init__() | 1304 super(GTestTest, self).__init__() |
| 1272 if enable_swarming: | 1305 if enable_swarming: |
| 1273 self._test = SwarmingGTestTest( | 1306 self._test = SwarmingGTestTest( |
| 1274 name, args, target_name, swarming_shards, swarming_dimensions, | 1307 name, args, target_name, swarming_shards, swarming_dimensions, |
| 1275 swarming_tags, swarming_extra_suffix, | 1308 swarming_tags, swarming_extra_suffix, swarming_priority, |
| 1276 override_compile_targets=runtest_kwargs.get( | 1309 swarming_expiration, override_compile_targets=runtest_kwargs.get( |
| 1277 'override_compile_targets')) | 1310 'override_compile_targets')) |
| 1278 else: | 1311 else: |
| 1279 self._test = LocalGTestTest(name, args, target_name, **runtest_kwargs) | 1312 self._test = LocalGTestTest(name, args, target_name, **runtest_kwargs) |
| 1280 | 1313 |
| 1281 self.enable_swarming = enable_swarming | 1314 self.enable_swarming = enable_swarming |
| 1282 | 1315 |
| 1283 @property | 1316 @property |
| 1284 def name(self): | 1317 def name(self): |
| 1285 return self._test.name | 1318 return self._test.name |
| 1286 | 1319 |
| (...skipping 581 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1868 def run(self, api, suffix, test_filter=None): | 1901 def run(self, api, suffix, test_filter=None): |
| 1869 api.chromium_android.coverage_report(upload=False) | 1902 api.chromium_android.coverage_report(upload=False) |
| 1870 api.chromium_android.get_changed_lines_for_revision() | 1903 api.chromium_android.get_changed_lines_for_revision() |
| 1871 api.chromium_android.incremental_coverage_report() | 1904 api.chromium_android.incremental_coverage_report() |
| 1872 | 1905 |
| 1873 | 1906 |
| 1874 GOMA_TESTS = [ | 1907 GOMA_TESTS = [ |
| 1875 GTestTest('base_unittests'), | 1908 GTestTest('base_unittests'), |
| 1876 GTestTest('content_unittests'), | 1909 GTestTest('content_unittests'), |
| 1877 ] | 1910 ] |
| OLD | NEW |