(self)
| 1469 | self.assertEqual(completer.get_path_and_prefix(name), expected) |
| 1470 | |
| 1471 | def test_parse(self): |
| 1472 | cases = ( |
| 1473 | ('import ', (None, '')), |
| 1474 | ('import foo', (None, 'foo')), |
| 1475 | ('import foo,', (None, '')), |
| 1476 | ('import foo, ', (None, '')), |
| 1477 | ('import foo, bar', (None, 'bar')), |
| 1478 | ('import foo, bar, baz', (None, 'baz')), |
| 1479 | ('import foo as bar,', (None, '')), |
| 1480 | ('import foo as bar, ', (None, '')), |
| 1481 | ('import foo as bar, baz', (None, 'baz')), |
| 1482 | ('import a.', (None, 'a.')), |
| 1483 | ('import a.b', (None, 'a.b')), |
| 1484 | ('import a.b.', (None, 'a.b.')), |
| 1485 | ('import a.b.c', (None, 'a.b.c')), |
| 1486 | ('import a.b.c, foo', (None, 'foo')), |
| 1487 | ('import a.b.c, foo.bar', (None, 'foo.bar')), |
| 1488 | ('import a.b.c, foo.bar,', (None, '')), |
| 1489 | ('import a.b.c, foo.bar, ', (None, '')), |
| 1490 | ('from foo', ('foo', None)), |
| 1491 | ('from a.', ('a.', None)), |
| 1492 | ('from a.b', ('a.b', None)), |
| 1493 | ('from a.b.', ('a.b.', None)), |
| 1494 | ('from a.b.c', ('a.b.c', None)), |
| 1495 | ('from foo import ', ('foo', '')), |
| 1496 | ('from foo import a', ('foo', 'a')), |
| 1497 | ('from ', ('', None)), |
| 1498 | ('from . import a', ('.', 'a')), |
| 1499 | ('from .foo import a', ('.foo', 'a')), |
| 1500 | ('from ..foo import a', ('..foo', 'a')), |
| 1501 | ('from foo import (', ('foo', '')), |
| 1502 | ('from foo import ( ', ('foo', '')), |
| 1503 | ('from foo import (a', ('foo', 'a')), |
| 1504 | ('from foo import (a,', ('foo', '')), |
| 1505 | ('from foo import (a, ', ('foo', '')), |
| 1506 | ('from foo import (a, c', ('foo', 'c')), |
| 1507 | ('from foo import (a as b, c', ('foo', 'c')), |
| 1508 | ) |
| 1509 | for code, parsed in cases: |
| 1510 | parser = ImportParser(code) |
| 1511 | actual = parser.parse() |
| 1512 | with self.subTest(code=code): |
| 1513 | self.assertEqual(actual, parsed) |
| 1514 | # The parser should not get tripped up by any |
| 1515 | # other preceding statements |
| 1516 | _code = f'import xyz\n{code}' |
| 1517 | parser = ImportParser(_code) |
| 1518 | actual = parser.parse() |
| 1519 | with self.subTest(code=_code): |
| 1520 | self.assertEqual(actual, parsed) |
| 1521 | _code = f'import xyz;{code}' |
| 1522 | parser = ImportParser(_code) |
| 1523 | actual = parser.parse() |
| 1524 | with self.subTest(code=_code): |
| 1525 | self.assertEqual(actual, parsed) |
| 1526 | |
| 1527 | def test_parse_error(self): |
| 1528 | cases = ( |
nothing calls this directly
no test coverage detected