Add build script tests

You can run these tests with `npm run build-test`, while we also run
them as part of our PRESUBMIT if we make any changes to the build
folder.

R=yangguo@chromium.org
CC=tikuta@chromium.org

Bug: 1293772
Change-Id: Id3b02c83398d2346a4ec5a06f3b938d33070d4f7
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/3439987
Reviewed-by: Yang Guo <yangguo@chromium.org>
Commit-Queue: Tim Van der Lippe <tvanderlippe@chromium.org>
Auto-Submit: Tim Van der Lippe <tvanderlippe@chromium.org>
diff --git a/PRESUBMIT.py b/PRESUBMIT.py
index f3a1982..4f9eee4 100644
--- a/PRESUBMIT.py
+++ b/PRESUBMIT.py
@@ -227,6 +227,40 @@
     return results
 
 
+def _CheckDevToolsRunBuildTests(input_api, output_api):
+    # Check for changes in the build/tests directory, and run the tests if so.
+    # We don't do this on every CL as most do not touch the rules, but if we do
+    # change them we need to make sure all the tests are passing.
+    original_sys_path = sys.path
+    try:
+        sys.path = sys.path + [
+            input_api.os_path.join(input_api.PresubmitLocalPath(), 'scripts')
+        ]
+        import devtools_paths
+    finally:
+        sys.path = original_sys_path
+    scripts_build_dir_path = input_api.os_path.join(
+        input_api.PresubmitLocalPath(), 'scripts', 'build')
+    scripts_build_affected_files = _getAffectedFiles(input_api,
+                                                     [scripts_build_dir_path],
+                                                     [], [])
+
+    if len(scripts_build_affected_files) == 0:
+        return []
+
+    mocha_path = devtools_paths.mocha_path()
+    build_tests_path = input_api.os_path.join(scripts_build_dir_path, 'tests',
+                                              '*_test.js')
+
+    results = [output_api.PresubmitNotifyResult('Build plugins unit tests')]
+    results.extend(
+        # The dot reporter is more concise which is useful to not get LOADS of
+        # output when just one test fails.
+        _checkWithNodeScript(input_api, output_api, mocha_path,
+                             ['--reporter', 'dot', build_tests_path]))
+    return results
+
+
 def _CheckDevToolsStyleJS(input_api, output_api):
     results = [output_api.PresubmitNotifyResult('JS style check:')]
     lint_path = input_api.os_path.join(input_api.PresubmitLocalPath(),
@@ -528,6 +562,7 @@
     results.extend(_CheckDevToolsStyleJS(input_api, output_api))
     results.extend(_CheckDevToolsStyleCSS(input_api, output_api))
     results.extend(_CheckDevToolsRunESLintTests(input_api, output_api))
+    results.extend(_CheckDevToolsRunBuildTests(input_api, output_api))
     results.extend(_CheckDevToolsNonJSFileLicenseHeaders(
         input_api, output_api))