From 7f8da417a359c76bd5def896b0bcd159dd3a7acc Mon Sep 17 00:00:00 2001 From: JFronny Date: Tue, 18 Apr 2023 14:34:04 +0200 Subject: [PATCH] test parseMultiScript --- .../jfronny/muscript/compiler/SourceFS.java | 9 +++++ .../muscript/test/MultiScriptTest.java | 39 +++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 muscript/src/test/java/io/gitlab/jfronny/muscript/test/MultiScriptTest.java diff --git a/muscript/src/main/java/io/gitlab/jfronny/muscript/compiler/SourceFS.java b/muscript/src/main/java/io/gitlab/jfronny/muscript/compiler/SourceFS.java index 7c90da4..71b3d90 100644 --- a/muscript/src/main/java/io/gitlab/jfronny/muscript/compiler/SourceFS.java +++ b/muscript/src/main/java/io/gitlab/jfronny/muscript/compiler/SourceFS.java @@ -1,5 +1,14 @@ package io.gitlab.jfronny.muscript.compiler; +import java.util.Map; + public interface SourceFS { String read(String file); + + record Immutable(Map files) implements SourceFS { + @Override + public String read(String file) { + return files.get(file); + } + } } diff --git a/muscript/src/test/java/io/gitlab/jfronny/muscript/test/MultiScriptTest.java b/muscript/src/test/java/io/gitlab/jfronny/muscript/test/MultiScriptTest.java new file mode 100644 index 0000000..66044db --- /dev/null +++ b/muscript/src/test/java/io/gitlab/jfronny/muscript/test/MultiScriptTest.java @@ -0,0 +1,39 @@ +package io.gitlab.jfronny.muscript.test; + +import io.gitlab.jfronny.muscript.StandardLib; +import io.gitlab.jfronny.muscript.compiler.Parser; +import io.gitlab.jfronny.muscript.compiler.SourceFS; +import io.gitlab.jfronny.muscript.data.Scope; +import org.junit.jupiter.api.Test; + +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class MultiScriptTest { + final SourceFS FS = new SourceFS.Immutable(Map.of( + "main.mu", """ + #include import1.mu + func(4)""", + "import1.mu", """ + #include import2.mu + func = {c->fn2(c-1, c)}""", + "import2.mu", """ + #include import3.mu + fn = {a->a}""", + "import3.mu", """ + #include import2.mu + fn = {a->a*2} + fn2 = {a, b -> fn(a)+b}""" + )); + + final Scope scope = StandardLib.createScope() + .set("throw", args -> { + throw new IllegalArgumentException("No"); + }); + + @Test + void simpleMultifile() { + assertEquals(7, Parser.parseMultiScript("main.mu", FS).run(scope).asNumber().getValue()); + } +}