Find #include "foo.cc" with a presubmit check
An #include "foo.cc" will often compile, until it causes linking
problems later, for instance in jumbo builds. The error messages are
then not good at pointing out what is wrong.
Change-Id: Ic155dc5542e22b54d13c213230d6df4977263642
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1566344
Commit-Queue: Daniel Bratell <bratell@opera.com>
Reviewed-by: Jochen Eisinger <jochen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#653105}
diff --git a/PRESUBMIT_test.py b/PRESUBMIT_test.py
index 623b87a9..efd12ce0 100755
--- a/PRESUBMIT_test.py
+++ b/PRESUBMIT_test.py
@@ -1507,6 +1507,82 @@
self.assertEqual(1, len(errors))
+class CCIncludeTest(unittest.TestCase):
+ def testThirdPartyNotBlinkIgnored(self):
+ mock_input_api = MockInputApi()
+ mock_input_api.files = [
+ MockAffectedFile('third_party/test.cpp', '#include "file.cc"'),
+ ]
+
+ mock_output_api = MockOutputApi()
+
+ errors = PRESUBMIT._CheckForCcIncludes(
+ mock_input_api, mock_output_api)
+ self.assertEqual(0, len(errors))
+
+ def testPythonFileIgnored(self):
+ mock_input_api = MockInputApi()
+ mock_input_api.files = [
+ MockAffectedFile('test.py', '#include "file.cc"'),
+ ]
+
+ mock_output_api = MockOutputApi()
+
+ errors = PRESUBMIT._CheckForCcIncludes(
+ mock_input_api, mock_output_api)
+ self.assertEqual(0, len(errors))
+
+ def testIncFilesAccepted(self):
+ mock_input_api = MockInputApi()
+ mock_input_api.files = [
+ MockAffectedFile('test.py', '#include "file.inc"'),
+ ]
+
+ mock_output_api = MockOutputApi()
+
+ errors = PRESUBMIT._CheckForCcIncludes(
+ mock_input_api, mock_output_api)
+ self.assertEqual(0, len(errors))
+
+ def testInnocuousChangesAllowed(self):
+ mock_input_api = MockInputApi()
+ mock_input_api.files = [
+ MockAffectedFile('test.cpp', '#include "header.h"'),
+ MockAffectedFile('test2.cpp', 'Something "file.cc"'),
+ ]
+
+ mock_output_api = MockOutputApi()
+
+ errors = PRESUBMIT._CheckForCcIncludes(
+ mock_input_api, mock_output_api)
+ self.assertEqual(0, len(errors))
+
+ def testCcIncludeNonBlinkProducesError(self):
+ mock_input_api = MockInputApi()
+ mock_input_api.files = [
+ MockAffectedFile('test.cpp', ['#include "file.cc"']),
+ ]
+
+ mock_output_api = MockOutputApi()
+
+ errors = PRESUBMIT._CheckForCcIncludes(
+ mock_input_api, mock_output_api)
+ self.assertEqual(1, len(errors))
+
+ def testCppIncludeBlinkProducesError(self):
+ mock_input_api = MockInputApi()
+ mock_input_api.files = [
+ MockAffectedFile('third_party/blink/test.cpp',
+ ['#include "foo/file.cpp"']),
+ ]
+
+ mock_output_api = MockOutputApi()
+
+ errors = PRESUBMIT._CheckForCcIncludes(
+ mock_input_api, mock_output_api)
+ self.assertEqual(1, len(errors))
+
+
class NewHeaderWithoutGnChangeTest(unittest.TestCase):
def testAddHeaderWithoutGn(self):
mock_input_api = MockInputApi()