summaryrefslogtreecommitdiff
path: root/test/tools
diff options
context:
space:
mode:
authorRichard Lau <riclau@uk.ibm.com>2020-05-06 11:20:14 -0400
committerRichard Lau <riclau@uk.ibm.com>2020-05-28 10:02:46 -0400
commit05db68245ba63bc908d09c1cc64098ce97fa9d1f (patch)
treeb5c6621c8db0216c71f73c2cd5a963f08ee5d1c7 /test/tools
parent4a20cc937f6a2b830a2752e35da7e389bbc4e006 (diff)
downloadnode-new-05db68245ba63bc908d09c1cc64098ce97fa9d1f.tar.gz
tools: fix check-imports.py to match on word boundaries
`check-imports.py` was missing some unused `using` statements as it was not matching on word boundaries (e.g. `MaybeLocal` was considered a use of `Local`). Fix that and add some unit tests (which required the script to be renamed to drop the `-` so it could be imported into the test script). PR-URL: https://github.com/nodejs/node/pull/33268 Refs: https://github.com/nodejs/node/issues/29226 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Christian Clauss <cclauss@me.com> Reviewed-By: Daniel Bevenius <daniel.bevenius@gmail.com> Reviewed-By: Beth Griggs <Bethany.Griggs@uk.ibm.com>
Diffstat (limited to 'test/tools')
-rw-r--r--test/tools/test_checkimports.py77
1 files changed, 77 insertions, 0 deletions
diff --git a/test/tools/test_checkimports.py b/test/tools/test_checkimports.py
new file mode 100644
index 0000000000..6e8e17cc3f
--- /dev/null
+++ b/test/tools/test_checkimports.py
@@ -0,0 +1,77 @@
+import unittest
+import sys
+from contextlib import contextmanager
+from os import path
+sys.path.append(path.abspath(path.join(path.dirname(__file__),
+ '..', '..', 'tools')))
+try:
+ from StringIO import StringIO
+except ImportError:
+ from io import StringIO
+
+from checkimports import is_valid
+
+@contextmanager
+def captured_output():
+ tmp_out, tmp_err = StringIO(), StringIO()
+ old_out, old_err = sys.stdout, sys.stderr
+ try:
+ sys.stdout, sys.stderr = tmp_out, tmp_err
+ yield sys.stdout, sys.stderr
+ finally:
+ sys.stdout, sys.stderr = old_out, old_err
+ tmp_out.close()
+ tmp_err.close()
+
+class CheckImportsTest(unittest.TestCase):
+ fixturesDir = path.join(path.dirname(__file__), '..', '..',
+ 'test', 'fixtures', 'tools', 'checkimports')
+
+ def test_unused_and_unsorted(self):
+ with captured_output() as (out, err):
+ self.assertEqual(is_valid(path.join(self.fixturesDir, 'invalid.cc')),
+ False)
+ output = out.getvalue()
+ self.assertIn('does not use "Local"', output);
+ self.assertIn('using statements aren\'t sorted in', output);
+ self.assertIn('Line 1: Actual: v8::MaybeLocal, Expected: v8::Array',
+ output);
+ self.assertIn('Line 2: Actual: v8::Array, Expected: v8::Local',
+ output);
+ self.assertIn('Line 3: Actual: v8::Local, Expected: v8::MaybeLocal',
+ output);
+
+ def test_unused_complex(self):
+ with captured_output() as (out, err):
+ self.assertEqual(is_valid(path.join(self.fixturesDir, 'maybe.cc')),
+ False)
+ output = out.getvalue()
+ self.assertIn('does not use "Local"', output);
+
+ def test_unused_simple(self):
+ with captured_output() as (out, err):
+ self.assertEqual(is_valid(path.join(self.fixturesDir, 'unused.cc')),
+ False)
+ output = out.getvalue()
+ self.assertIn('does not use "Context"', output);
+
+ def test_unsorted(self):
+ with captured_output() as (out, err):
+ self.assertEqual(is_valid(path.join(self.fixturesDir, 'unsorted.cc')),
+ False)
+ output = out.getvalue()
+ self.assertIn('using statements aren\'t sorted in', output);
+ self.assertIn('Line 1: Actual: v8::MaybeLocal, Expected: v8::Array',
+ output);
+ self.assertIn('Line 2: Actual: v8::Array, Expected: v8::MaybeLocal',
+ output);
+
+ def test_valid(self):
+ with captured_output() as (out, err):
+ self.assertEqual(is_valid(path.join(self.fixturesDir, 'valid.cc')),
+ True)
+ output = out.getvalue()
+ self.assertEqual(output, '');
+
+if __name__ == '__main__':
+ unittest.main()