aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-12-20 19:01:38 +0000
committerMichael Williamson <mike@zwobble.org>2023-12-20 19:01:38 +0000
commitc472034dcdea19ac4e25202ecf76d7ad4a2616b4 (patch)
treeaa5039016d735ea3cbdb475baf8058fac49c2f80 /src/test/java
parent3017cd27f6a9ec81266696d9229dc5c3300482e6 (diff)
Only include cyclic dependencies in error
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/typechecker/NamespaceDependencyLineariserTests.java22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/test/java/org/shedlang/compiler/typechecker/NamespaceDependencyLineariserTests.java b/src/test/java/org/shedlang/compiler/typechecker/NamespaceDependencyLineariserTests.java
index 0a8e72bc..fba6d0e4 100644
--- a/src/test/java/org/shedlang/compiler/typechecker/NamespaceDependencyLineariserTests.java
+++ b/src/test/java/org/shedlang/compiler/typechecker/NamespaceDependencyLineariserTests.java
@@ -136,6 +136,28 @@ public class NamespaceDependencyLineariserTests {
));
}
+ @Test
+ public void cycleOfDependenciesDoesNotIncludeParentDependenciesOutsideOfCycle() {
+ var namespaces = List.of(
+ namespaceNode("Z", List.of("A")),
+ namespaceNode("A", List.of("B")),
+ namespaceNode("B", List.of("C")),
+ namespaceNode("C", List.of("A"))
+ );
+
+ var error = assertThrows(
+ CircularNamespaceDependencyError.class,
+ () -> NamespaceDependencyLineariser.orderNamespaces(namespaces)
+ );
+
+ assertThat(error.namespaceNames(), isSequence(
+ equalTo(NamespaceName.of("A")),
+ equalTo(NamespaceName.of("B")),
+ equalTo(NamespaceName.of("C")),
+ equalTo(NamespaceName.of("A"))
+ ));
+ }
+
private static UntypedNamespaceNode namespaceNode(
String namespaceName,
List<String> dependencies