Fix _CheckUniquePtr
The PRESUBMIT test _CheckUniquePtr reported the following
false-positive:
std::unique_ptr<ParseResult> result = std::make_unique<ParseResult>();
suggesting that one uses nullptr instead.
This CL fixes that bug and also adds regression tests for this
presubmit check.
Bug: 827961
Change-Id: I60a088f6590f01c51be7e3ffc0c6d65ad9e5c329
Reviewed-on: https://chromium-review.googlesource.com/989972
Reviewed-by: Dirk Pranke <[email protected]>
Commit-Queue: Vaclav Brozek <[email protected]>
Cr-Commit-Position: refs/heads/master@{#547635}
diff --git a/PRESUBMIT_test.py b/PRESUBMIT_test.py
index 886d802..a07ba05 100755
--- a/PRESUBMIT_test.py
+++ b/PRESUBMIT_test.py
@@ -1638,5 +1638,44 @@
self.assertEqual(0, len(results))
+class CheckUniquePtr(unittest.TestCase):
+ def testTruePositives(self):
+ mock_input_api = MockInputApi()
+ mock_input_api.files = [
+ MockFile('dir/java/src/foo.cc', ['return std::unique_ptr<T>(foo);']),
+ MockFile('dir/java/src/bar.mm', ['bar = std::unique_ptr<T>(foo)']),
+ MockFile('dir/java/src/baz.cc', ['std::unique_ptr<T>()']),
+ MockFile('dir/java/src/baz-p.cc', ['std::unique_ptr<T<P>>()']),
+ # TODO(crbug.com/827961) Fix multi-line support.
+ #MockFile('dir/java/src/mult.cc', [
+ # 'barVeryVeryLongLongBaaaaaarSoThatTheLineLimitIsAlmostReached =',
+ # ' std::unique_ptr<T>(foo);'
+ #]),
+ ]
+
+ results = PRESUBMIT._CheckUniquePtr(mock_input_api, MockOutputApi())
+ # TODO(crbug.com/827961) Make the check return just one result, listing all
+ # affected files in it.
+ self.assertEqual(4, len(results))
+ self.assertTrue('foo.cc' in results[0].message)
+ self.assertTrue('bar.mm' in results[1].message)
+ self.assertTrue('baz.cc' in results[2].message)
+ self.assertTrue('baz-p.cc' in results[3].message)
+
+ def testFalsePositives(self):
+ mock_input_api = MockInputApi()
+ mock_input_api.files = [
+ MockFile('dir/java/src/foo.cc', ['return std::unique_ptr<T[]>(foo);']),
+ MockFile('dir/java/src/bar.mm', ['bar = std::unique_ptr<T[]>(foo)']),
+ MockFile('dir/java/src/file.cc', ['std::unique_ptr<T> p = Foo();']),
+ MockFile('dir/java/src/baz.cc', [
+ 'std::unique_ptr<T> result = std::make_unique<T>();'
+ ]),
+ ]
+
+ results = PRESUBMIT._CheckUniquePtr(mock_input_api, MockOutputApi())
+ self.assertEqual(0, len(results))
+
+
if __name__ == '__main__':
unittest.main()