|
21 | 21 | import org.sonar.plugins.python.api.PythonFile; |
22 | 22 | import org.sonar.plugins.python.api.tree.ExpressionStatement; |
23 | 23 | import org.sonar.plugins.python.api.tree.FileInput; |
24 | | -import org.sonar.python.semantic.ProjectLevelSymbolTable; |
25 | 24 | import org.sonar.plugins.python.api.types.v2.ClassType; |
26 | 25 | import org.sonar.plugins.python.api.types.v2.FunctionType; |
27 | | -import org.sonar.python.types.v2.LazyTypeWrapper; |
28 | 26 | import org.sonar.plugins.python.api.types.v2.ModuleType; |
29 | 27 | import org.sonar.plugins.python.api.types.v2.PythonType; |
30 | 28 | import org.sonar.plugins.python.api.types.v2.TriBool; |
31 | | -import org.sonar.python.types.v2.TypeChecker; |
32 | 29 | import org.sonar.plugins.python.api.types.v2.TypeWrapper; |
33 | 30 | import org.sonar.plugins.python.api.types.v2.UnknownType; |
| 31 | +import org.sonar.python.semantic.ProjectLevelSymbolTable; |
| 32 | +import org.sonar.python.types.v2.LazyTypeWrapper; |
| 33 | +import org.sonar.python.types.v2.TypeChecker; |
34 | 34 |
|
35 | 35 | import static org.assertj.core.api.Assertions.assertThat; |
36 | 36 | import static org.sonar.python.PythonTestUtils.parseWithoutSymbols; |
@@ -442,4 +442,22 @@ def foo(self): ... |
442 | 442 | TypeChecker typeChecker = new TypeChecker(projectLevelTypeTable); |
443 | 443 | assertThat(typeChecker.typeCheckBuilder().isInstanceOf("lib.MyClass").check(myAliasType)).isEqualTo(TriBool.UNKNOWN); |
444 | 444 | } |
| 445 | + |
| 446 | + |
| 447 | + @Test |
| 448 | + void testConflictingReexports() { |
| 449 | + // See SONARPY-2907 for details |
| 450 | + ProjectLevelTypeTable projectLevelTypeTable = new ProjectLevelTypeTable(ProjectLevelSymbolTable.empty()); |
| 451 | + |
| 452 | + var resolvedFirst = projectLevelTypeTable.getType("dateutil.parser.isoparser.isoparser"); |
| 453 | + assertThat(resolvedFirst).isInstanceOfSatisfying(ClassType.class, classType -> |
| 454 | + assertThat(classType.name()).isEqualTo("isoparser")); |
| 455 | + |
| 456 | + var resolvedSecond = projectLevelTypeTable.getType("dateutil.parser.isoparser"); |
| 457 | + assertThat(resolvedSecond).isInstanceOfSatisfying(ClassType.class, classType -> |
| 458 | + assertThat(classType.name()).isEqualTo("isoparser")); |
| 459 | + |
| 460 | + var resolvedThird = projectLevelTypeTable.getType("dateutil.parser.isoparser.isoparser"); |
| 461 | + assertThat(resolvedThird).isEqualTo(PythonType.UNKNOWN); |
| 462 | + } |
445 | 463 | } |
0 commit comments