Skip to content

Commit cd1306b

Browse files
Seppli11sonartech
authored andcommitted
SONARPY-2909 add unit test with a conflicting re-export (#250)
GitOrigin-RevId: 04cf19e18b6dd2705c4e08cb48faf31094080cb8
1 parent 8b909d4 commit cd1306b

1 file changed

Lines changed: 21 additions & 3 deletions

File tree

python-frontend/src/test/java/org/sonar/python/semantic/v2/ProjectLevelTypeTableTest.java

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,16 @@
2121
import org.sonar.plugins.python.api.PythonFile;
2222
import org.sonar.plugins.python.api.tree.ExpressionStatement;
2323
import org.sonar.plugins.python.api.tree.FileInput;
24-
import org.sonar.python.semantic.ProjectLevelSymbolTable;
2524
import org.sonar.plugins.python.api.types.v2.ClassType;
2625
import org.sonar.plugins.python.api.types.v2.FunctionType;
27-
import org.sonar.python.types.v2.LazyTypeWrapper;
2826
import org.sonar.plugins.python.api.types.v2.ModuleType;
2927
import org.sonar.plugins.python.api.types.v2.PythonType;
3028
import org.sonar.plugins.python.api.types.v2.TriBool;
31-
import org.sonar.python.types.v2.TypeChecker;
3229
import org.sonar.plugins.python.api.types.v2.TypeWrapper;
3330
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;
3434

3535
import static org.assertj.core.api.Assertions.assertThat;
3636
import static org.sonar.python.PythonTestUtils.parseWithoutSymbols;
@@ -442,4 +442,22 @@ def foo(self): ...
442442
TypeChecker typeChecker = new TypeChecker(projectLevelTypeTable);
443443
assertThat(typeChecker.typeCheckBuilder().isInstanceOf("lib.MyClass").check(myAliasType)).isEqualTo(TriBool.UNKNOWN);
444444
}
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+
}
445463
}

0 commit comments

Comments
 (0)