Index: PRESUBMIT.py |
diff --git a/PRESUBMIT.py b/PRESUBMIT.py |
index 870062aee77e3a2c1a993c72af29792eac00e702..64d30c320755f00223435e713ae9d0f3a8ae9a29 100644 |
--- a/PRESUBMIT.py |
+++ b/PRESUBMIT.py |
@@ -10,18 +10,19 @@ for more details about the presubmit API built into gcl. |
import imp |
import os |
+import os.path |
import scm |
import subprocess |
import tempfile |
def _CheckBuildStatus(input_api, output_api): |
- results = [] |
- status_check = input_api.canned_checks.CheckTreeIsOpen( |
- input_api, |
- output_api, |
- json_url='http://dart-status.appspot.com/current?format=json') |
- results.extend(status_check) |
- return results |
+ results = [] |
+ status_check = input_api.canned_checks.CheckTreeIsOpen( |
+ input_api, |
+ output_api, |
+ json_url='http://dart-status.appspot.com/current?format=json') |
+ results.extend(status_check) |
+ return results |
def _CheckDartFormat(input_api, output_api): |
local_root = input_api.change.RepositoryRoot() |
@@ -96,9 +97,81 @@ def _CheckDartFormat(input_api, output_api): |
return [] |
+def _CheckNewTests(input_api, output_api): |
+ testsDirectories = [ |
+ # Dart 1 tests DDC tests |
+ # ================= ========================== |
+ ("tests/language/", "tests/language_2/"), |
+ ("tests/corelib/", "tests/corelib_2/"), |
+ ("tests/lib/", "tests/lib_2/"), |
+ ("tests/html/", "tests/lib_2/html/"), |
+ ] |
+ |
+ result = [] |
+ # Tuples of (new Dart 1 test path, expected DDC test path) |
+ dart1TestsAdded = [] |
+ # Tuples of (original Dart test path, expected DDC test path) |
+ ddcTestsExists = [] |
+ for f in input_api.AffectedFiles(): |
+ for oldPath, newPath in testsDirectories: |
+ if f.LocalPath().startswith(oldPath): |
+ if f.Action() == 'A': |
+ # Compute where the new test should live. |
+ ddcTestPath = f.LocalPath().replace(oldPath, newPath) |
+ dart1TestsAdded.append((f.LocalPath(), ddcTestPath)) |
+ elif f.Action() == 'M': |
+ # Find all modified tests in Dart 1.0 |
+ filename = f.LocalPath() |
+ for oldPath, newPath in testsDirectories: |
+ if filename.find(oldPath) == 0: |
+ ddcTestFilePathAbs = "%s" % \ |
+ f.AbsoluteLocalPath().replace(oldPath, newPath) |
+ if os.path.isfile(ddcTestFilePathAbs): |
+ #originalDart1Test.append(f.LocalPath()) |
+ ddcTestsExists.append((f.LocalPath(), |
+ f.LocalPath().replace(oldPath, newPath))) |
+ |
+ # Does a Dart 2.0 DDC test exist if so it must be changed too. |
+ missingDDCTestsChange = [] |
+ for (dartTest, ddcTest) in ddcTestsExists: |
+ foundDDCTestModified = False |
+ for f in input_api.AffectedFiles(): |
+ if f.LocalPath() == ddcTest: |
+ # Found corresponding DDC test - great. |
+ foundDDCTestModified = True |
+ break |
+ if not foundDDCTestModified: |
+ # Add the tuple (dart 1 test path, DDC test path) |
+ missingDDCTestsChange.append((dartTest, ddcTest)) |
+ |
+ if missingDDCTestsChange: |
+ errorList = [] |
+ for idx, (orginalTest, ddcTest) in enumerate(missingDDCTestsChange): |
+ errorList.append( |
+ '%s. Dart 1.0 test changed: %s\n%s. DDC test must change: ' \ |
+ '%s\n' % (idx + 1, orginalTest, idx + 1, ddcTest)) |
+ result.append(output_api.PresubmitError( |
+ 'Error: If you change a Dart 1.0 test, you must also update the DDC ' |
+ 'test:\n%s' % ''.join(errorList))) |
+ |
+ if dart1TestsAdded: |
+ errorList = [] |
+ for idx, (oldTestPath, newTestPath) in enumerate(dart1TestsAdded): |
+ errorList.append('%s. New Dart 1.0 test: %s\n' |
+ '%s. Should be DDC test: %s\n' % \ |
+ (idx + 1, oldTestPath, idx + 1, newTestPath)) |
+ result.append(output_api.PresubmitError( |
+ 'Error: New Dart 1.0 test can not be added the test must be added as ' |
+ 'a DDC test:\n' |
+ 'Fix tests:\n%s' % ''.join(errorList))) |
+ |
+ return result |
+ |
def CheckChangeOnCommit(input_api, output_api): |
return (_CheckBuildStatus(input_api, output_api) + |
+ _CheckNewTests(input_api, output_api) + |
_CheckDartFormat(input_api, output_api)) |
def CheckChangeOnUpload(input_api, output_api): |
- return _CheckDartFormat(input_api, output_api) |
+ return (_CheckNewTests(input_api, output_api) + |
+ _CheckDartFormat(input_api, output_api)) |