aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/typechecker/TypeCheckerContextTests.java24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerContextTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerContextTests.java
index 7a2d7d71..a9198b86 100644
--- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerContextTests.java
+++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerContextTests.java
@@ -76,6 +76,30 @@ public class TypeCheckerContextTests {
}
@Test
+ public void definingVariableOnlyAffectsTopMostLexicalContext() {
+ var context = TypeCheckerContext.EMPTY
+ .enterNamespace(P.map(
+ Map.entry("x", TypeCheckerContext.undefined()),
+ Map.entry("y", TypeCheckerContext.undefined())
+ ));
+
+ context = context.enterBlock(P.map(
+ Map.entry("x", TypeCheckerContext.undefined())
+ ));
+ context = context.define("x", Types.STRING, Sources.NULL);
+ assertThat(
+ context.runtimeLookup("x", Sources.NULL).value(),
+ isOptionalOf(equalTo(TypeCheckerContext.defined(Types.STRING)))
+ );
+
+ context = context.exit();
+ assertThat(
+ context.runtimeLookup("x", Sources.NULL).value(),
+ isOptionalOf(equalTo(TypeCheckerContext.undefined()))
+ );
+ }
+
+ @Test
public void runtimeLookupUpdatesFreeVariablesUntilLexicalContextInWhichVariableIsDefined() {
var context = TypeCheckerContext.EMPTY
.enterBlock(P.map())