aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2025-01-17 23:32:18 +0000
committerMichael Williamson <mike@zwobble.org>2025-01-17 23:32:18 +0000
commit436f43fa2667c77ef8a7d05bb5b8001c17c7822b (patch)
tree364fece3c5f4833713b1fd7d6e9f1a99dc8dd0a0 /src/test/java
parent7c5489a16401738969f87bd1a5d89d0e1e736f99 (diff)
Add support for native functions
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/backends/ExampleConfig.java3
-rw-r--r--src/test/java/org/shedlang/compiler/backends/ExampleTests.java5
-rw-r--r--src/test/java/org/shedlang/compiler/shid/ShidCodeGenNativeFunctionDeclarationTests.java16
-rw-r--r--src/test/java/org/shedlang/compiler/shid/ShidSerializerTests.java6
-rw-r--r--src/test/java/org/shedlang/compiler/shidtopatio/ShidToPatioDeclareNativeFunctionTests.java40
5 files changed, 67 insertions, 3 deletions
diff --git a/src/test/java/org/shedlang/compiler/backends/ExampleConfig.java b/src/test/java/org/shedlang/compiler/backends/ExampleConfig.java
index e8e63f40..ef46fb60 100644
--- a/src/test/java/org/shedlang/compiler/backends/ExampleConfig.java
+++ b/src/test/java/org/shedlang/compiler/backends/ExampleConfig.java
@@ -5,10 +5,12 @@ import org.zwobble.json5.values.Json5String;
import java.nio.file.Path;
import java.util.Optional;
+import java.util.OptionalLong;
public record ExampleConfig(
Path projectPath,
String bin,
+ OptionalLong expectedExitCode,
Optional<String> expectedOutput,
Optional<String> expectedError
) {
@@ -19,6 +21,7 @@ public record ExampleConfig(
return new ExampleConfig(
root.resolve(object.getString("project").value()),
object.getString("bin").value(),
+ object.getLongOrNone("expectedExitCode"),
object.getStringOrNone("expectedOutput").map(Json5String::value),
object.getStringOrNone("expectedError").map(Json5String::value)
);
diff --git a/src/test/java/org/shedlang/compiler/backends/ExampleTests.java b/src/test/java/org/shedlang/compiler/backends/ExampleTests.java
index d8607d47..03ff3065 100644
--- a/src/test/java/org/shedlang/compiler/backends/ExampleTests.java
+++ b/src/test/java/org/shedlang/compiler/backends/ExampleTests.java
@@ -63,8 +63,9 @@ public abstract class ExampleTests {
.resolve(ProfileConfig.DEFAULT.name())
.resolve(example.bin())
.toString();
- var result = runExampleBinary(binPath).throwOnError();
- assertThat(result.stdout(), equalTo(example.expectedOutput().orElseThrow()));
+ var result = runExampleBinary(binPath);
+ assertThat(result.exitCode(), equalTo((int)example.expectedExitCode().orElse(0)));
+ assertThat(result.stdout(), equalTo(example.expectedOutput().orElse("")));
}
if (isWipTest) {
diff --git a/src/test/java/org/shedlang/compiler/shid/ShidCodeGenNativeFunctionDeclarationTests.java b/src/test/java/org/shedlang/compiler/shid/ShidCodeGenNativeFunctionDeclarationTests.java
index b47a9464..03948076 100644
--- a/src/test/java/org/shedlang/compiler/shid/ShidCodeGenNativeFunctionDeclarationTests.java
+++ b/src/test/java/org/shedlang/compiler/shid/ShidCodeGenNativeFunctionDeclarationTests.java
@@ -7,7 +7,9 @@ import org.shedlang.compiler.sources.Sources;
import org.shedlang.compiler.types.NamespaceName;
import java.util.List;
+import java.util.Optional;
+import static org.shedlang.compiler.shid.instructions.ShidMatchers.isShidDefineFunctionParam;
import static org.shedlang.compiler.shid.instructions.ShidMatchers.isShidLocalStore;
import static org.zwobble.precisely.AssertThat.assertThat;
import static org.zwobble.precisely.Matchers.*;
@@ -17,6 +19,10 @@ public class ShidCodeGenNativeFunctionDeclarationTests {
public void nativeFunctionIsCompiledToDeclareNativeFunctionInstruction() {
var node = TypedNativeFunctionDeclarationNode.builder()
.withName("f")
+ .addPositionalParam("p1", Optional.empty())
+ .addPositionalParam("p2", Optional.empty())
+ .addNamedParam("n1", Optional.empty())
+ .addNamedParam("n2", Optional.empty())
.build();
var context = ShidCodeGen.Context.EMPTY
.enterBlock(
@@ -32,7 +38,15 @@ public class ShidCodeGenNativeFunctionDeclarationTests {
instanceOf(
ShidDeclareNativeFunction.class,
has("namespaceName", x -> x.namespaceName(), equalTo(NamespaceName.of("Example", "Project"))),
- has("name", x -> x.name(), equalTo("f"))
+ has("name", x -> x.name(), equalTo("f")),
+ has("positionalParams", x -> x.positionalParams(), isSequence(
+ isShidDefineFunctionParam("p1"),
+ isShidDefineFunctionParam("p2")
+ )),
+ has("namedParams", x -> x.namedParams(), isSequence(
+ isShidDefineFunctionParam("n1"),
+ isShidDefineFunctionParam("n2")
+ ))
),
isShidLocalStore("f__0")
));
diff --git a/src/test/java/org/shedlang/compiler/shid/ShidSerializerTests.java b/src/test/java/org/shedlang/compiler/shid/ShidSerializerTests.java
index ec448200..115cd597 100644
--- a/src/test/java/org/shedlang/compiler/shid/ShidSerializerTests.java
+++ b/src/test/java/org/shedlang/compiler/shid/ShidSerializerTests.java
@@ -47,6 +47,10 @@ public class ShidSerializerTests {
var instruction = ShidDeclareNativeFunction.builder()
.withNamespaceName(NamespaceName.of("Example", "Project"))
.withName("f")
+ .addPositionalParam("p1")
+ .addPositionalParam("p2")
+ .addNamedParam("n1")
+ .addNamedParam("n2")
.build();
var string = serialize(instruction);
@@ -56,6 +60,8 @@ public class ShidSerializerTests {
declare-native-function
namespace-name="Example/Project"
name="f"
+ positional-params=("p1" "p2")
+ named-params=("n1" "n2")
)"""));
}
diff --git a/src/test/java/org/shedlang/compiler/shidtopatio/ShidToPatioDeclareNativeFunctionTests.java b/src/test/java/org/shedlang/compiler/shidtopatio/ShidToPatioDeclareNativeFunctionTests.java
new file mode 100644
index 00000000..c4f7cc47
--- /dev/null
+++ b/src/test/java/org/shedlang/compiler/shidtopatio/ShidToPatioDeclareNativeFunctionTests.java
@@ -0,0 +1,40 @@
+package org.shedlang.compiler.shidtopatio;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.shedlang.compiler.shid.instructions.ShidDeclareNativeFunction;
+import org.shedlang.compiler.shid.instructions.ShidParam;
+import org.shedlang.compiler.sources.Sources;
+import org.shedlang.compiler.testing.snapshots.SnapshotResolver;
+import org.shedlang.compiler.testing.snapshots.Snapshotter;
+import org.shedlang.compiler.types.NamespaceName;
+
+import java.io.IOException;
+import java.util.List;
+
+import static org.shedlang.compiler.shidtopatio.ShidToPatioTesting.serialize;
+
+@ExtendWith({SnapshotResolver.class})
+public class ShidToPatioDeclareNativeFunctionTests {
+ @Test
+ public void canDeclareNativeFunction(Snapshotter snapshotter) throws IOException {
+ var instruction = new ShidDeclareNativeFunction(
+ NamespaceName.of("Example", "Project"),
+ "f",
+ List.of(
+ new ShidParam("p1", Sources.NULL),
+ new ShidParam("p2", Sources.NULL)
+ ),
+ List.of(
+ new ShidParam("n1", Sources.NULL),
+ new ShidParam("n2", Sources.NULL)
+ ),
+ Sources.NULL
+ );
+ var context = ShidToPatioContext.EMPTY;
+
+ var result = ShidToPatio.generateInstruction(instruction, context);
+
+ snapshotter.assertSnapshot(serialize(result));
+ }
+}