| #!/usr/bin/env python3 | |
| # Copyright 2019 The Fuchsia Authors. All rights reserved. | |
| # Use of this source code is governed by a BSD-style license that can be | |
| # found in the LICENSE file. | |
| import complete | |
| import unittest | |
| class TestLabelSplitting(unittest.TestCase): | |
| def test_absolute(self): | |
| self.assertEqual(complete.split_label('//'), ['//']) | |
| self.assertEqual(complete.split_label('//foo/bar'), ['//', 'foo', '/bar']) | |
| self.assertEqual(complete.split_label('//foo/bar:baz'), | |
| ['//', 'foo', '/bar', ':baz']) | |
| self.assertEqual(complete.split_label('//:baz'), ['//', ':baz']) | |
| def test_relative(self): | |
| self.assertEqual(complete.split_label(''), ['']) | |
| self.assertEqual(complete.split_label('foo/bar'), ['foo', '/bar']) | |
| self.assertEqual(complete.split_label('foo/bar:baz'), | |
| ['foo', '/bar', ':baz']) | |
| self.assertEqual(complete.split_label('/foo/bar:baz'), | |
| ['/foo', '/bar', ':baz']) | |
| self.assertEqual(complete.split_label(':baz'), [':baz']) | |
| def test_toolchain(self): | |
| self.assertEqual(complete.split_label('foo/bar:baz(//build:tool)'), | |
| ['foo', '/bar', ':baz(//build:tool)']) | |
| self.assertEqual(complete.split_label('baz(//build:tool)'), | |
| ['baz(//build:tool)']) | |
| self.assertEqual(complete.split_label('(//build:tool)'), ['(//build:tool)']) | |
| class TestCompletions(unittest.TestCase): | |
| def test_absolute(self): | |
| completions = complete.Completions('//') | |
| completions.insert_label('//:test') | |
| completions.insert_label('//foo/bar:test') | |
| completions.insert_label('//foo/bar/baz:test') | |
| completions.insert_label('//foo/baz:test') | |
| self.assertListEqual(list(completions.list_completions()), | |
| ['//:test', '//foo']) | |
| def test_relative_no_leading_slash(self): | |
| completions = complete.Completions('src/') | |
| completions.insert_label('src/foo/bar:test') | |
| completions.insert_label('src/foo/bar/baz:foo') | |
| completions.insert_label('src/foo/bar/bat:fee') | |
| self.assertListEqual(list(completions.list_completions()), | |
| ['src/foo/bar:test', 'src/foo/bar/baz', | |
| 'src/foo/bar/bat']) | |
| def test_relative_leading_slash(self): | |
| completions = complete.Completions('src') | |
| completions.insert_label('src/foo/bar:test') | |
| completions.insert_label('src/foo/bar/baz:foo') | |
| completions.insert_label('src/foo/bar/bat:fee') | |
| self.assertListEqual(list(completions.list_completions()), | |
| ['src/foo/bar:test', 'src/foo/bar/baz', | |
| 'src/foo/bar/bat']) | |
| def test_relative_at_root(self): | |
| completions = complete.Completions('') | |
| completions.insert_label(':test') | |
| completions.insert_label('/foo/bar:foo') | |
| self.assertListEqual(list(completions.list_completions()), | |
| [':test', '/foo']) | |
| def test_long_common_prefix(self): | |
| completions = complete.Completions('') | |
| completions.insert_label('foo/bar/baz/boo:test') | |
| completions.insert_label('foo/bar/baz/boo:main') | |
| completions.insert_label('foo/bar/baz/boo:bin') | |
| self.assertListEqual(list(completions.list_completions()), | |
| ['foo/bar/baz/boo:test', 'foo/bar/baz/boo:main', | |
| 'foo/bar/baz/boo:bin']) | |
| def test_exact_match_is_also_prefix(self): | |
| completions = complete.Completions('foo:bar') | |
| completions.insert_label('foo:bar') | |
| completions.insert_label('foo:bar_baz') | |
| self.assertListEqual(list(completions.list_completions()), | |
| ['foo:bar', 'foo:bar_baz']) | |
| def test_empty(self): | |
| completions = complete.Completions('') | |
| self.assertListEqual(list(completions.list_completions()), []) |