diff options
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/org/shedlang/compiler/typechecker/TypeCheckerContextTests.java | 24 |
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()) |
