import unittest from tools.linter import mypy_wrapper class TestMypyWrapper(unittest.TestCase): configs = { 'foo.ini': { 'file1.abc', 'dir2', 'dir3/file4.xyz', }, 'bar/baz.ini': { 'file1.abc', 'dir2/dir5/file6.def', 'dir3/file7.abc', }, } trie: mypy_wrapper.Trie = { 'file1.abc': {None: {'foo.ini', 'bar/baz.ini'}}, 'dir2': { None: {'foo.ini'}, 'dir5': {'file6.def': {None: {'bar/baz.ini'}}}, }, 'dir3': { 'file4.xyz': {None: {'foo.ini'}}, 'file7.abc': {None: {'bar/baz.ini'}}, }, } def test_config_files(self) -> None: self.assertEqual(mypy_wrapper.config_files().keys(), { 'mypy.ini', 'mypy-strict.ini', }) def test_split_path(self) -> None: self.assertEqual(mypy_wrapper.split_path('file1.abc'), ['file1.abc']) self.assertEqual( mypy_wrapper.split_path('dir3/file4.xyz'), ['dir3', 'file4.xyz'], ) self.assertEqual( mypy_wrapper.split_path('dir2/dir5/file6.def'), ['dir2', 'dir5', 'file6.def'], ) def test_make_trie(self) -> None: self.assertEqual(mypy_wrapper.make_trie(self.configs), self.trie) def test_lookup(self) -> None: self.assertEqual( mypy_wrapper.lookup(self.trie, 'file1.abc'), {'foo.ini', 'bar/baz.ini'}, ) self.assertEqual( mypy_wrapper.lookup(self.trie, 'dir2/dir5/file6.def'), {'foo.ini', 'bar/baz.ini'}, ) self.assertEqual( mypy_wrapper.lookup(self.trie, 'dir3/file4.xyz'), {'foo.ini'}, ) self.assertEqual( mypy_wrapper.lookup(self.trie, 'dir3/file7.abc'), {'bar/baz.ini'}, ) self.assertEqual( mypy_wrapper.lookup(self.trie, 'file8.xyz'), set(), ) self.assertEqual( mypy_wrapper.lookup(self.trie, 'dir2/dir9/file10.abc'), {'foo.ini'}, ) self.assertEqual( mypy_wrapper.lookup(self.trie, 'dir3/file11.abc'), set(), ) # non-leaves shouldn't ever be passed to lookup in practice, but # still, good to consider/test these cases self.assertEqual( mypy_wrapper.lookup(self.trie, 'dir2'), {'foo.ini'}, ) self.assertEqual( mypy_wrapper.lookup(self.trie, 'dir2/dir5'), {'foo.ini'}, ) self.assertEqual( mypy_wrapper.lookup(self.trie, 'dir3'), set(), ) self.assertEqual( mypy_wrapper.lookup(self.trie, 'dir2/dir9'), {'foo.ini'}, ) self.assertEqual( mypy_wrapper.lookup(self.trie, 'dir4'), set(), ) def test_make_plan(self) -> None: self.assertEqual( mypy_wrapper.make_plan(configs=self.configs, files=[ 'file8.xyz', 'dir3/file11.abc', ]), {} ) self.assertEqual( mypy_wrapper.make_plan(configs=self.configs, files=[ 'file8.xyz', 'dir2/dir9/file10.abc', 'dir3/file4.xyz', 'dir3/file11.abc', ]), { 'foo.ini': ['dir2/dir9/file10.abc', 'dir3/file4.xyz'], } ) self.assertEqual( mypy_wrapper.make_plan(configs=self.configs, files=[ 'file8.xyz', 'dir3/file11.abc', 'dir3/file7.abc', ]), { 'bar/baz.ini': ['dir3/file7.abc'], } ) self.assertEqual( mypy_wrapper.make_plan(configs=self.configs, files=[ 'dir2/dir9/file10.abc', 'dir2/dir5/file6.def', 'dir3/file7.abc', 'file1.abc', 'dir3/file11.abc', ]), { 'foo.ini': [ 'dir2/dir9/file10.abc', 'dir2/dir5/file6.def', 'file1.abc', ], 'bar/baz.ini': [ 'dir2/dir5/file6.def', 'dir3/file7.abc', 'file1.abc', ], } ) if __name__ == '__main__': unittest.main()