From b7f462698359c02b9508d1b19d4c396c866821f8 Mon Sep 17 00:00:00 2001 From: Daniel Petisme Date: Sat, 11 Feb 2017 18:01:57 +0100 Subject: [PATCH] Basic structures --- src/main/golo/tests.golo | 39 +++++++++++++++++++ .../java/gololang/testing/TestExtractor.java | 11 ++++++ .../java/gololang/testing/TestReporter.java | 9 +++++ .../java/gololang/testing/TestRunner.java | 9 +++++ 4 files changed, 68 insertions(+) create mode 100644 src/main/golo/tests.golo create mode 100644 src/main/java/gololang/testing/TestExtractor.java create mode 100644 src/main/java/gololang/testing/TestReporter.java create mode 100644 src/main/java/gololang/testing/TestRunner.java diff --git a/src/main/golo/tests.golo b/src/main/golo/tests.golo new file mode 100644 index 000000000..50e4d6082 --- /dev/null +++ b/src/main/golo/tests.golo @@ -0,0 +1,39 @@ +module gololang.testing.Utils + + +struct Test = { description, test } +struct Suite = { description, tests } +struct TestResult = { description, result } + +function run = |suites| { + java.lang.System.exit(defaultReporter(defaultRunner(suites))) +} + +let defaultRunner = asFunctionalInterface(gololang.testing.TestRunner.class, |suites| -> list[ + [desc, match { + when isClosure(test) then trying(test) + otherwise defaultRunner(test) + }] + foreach desc, test in suites +]) + + +let defaultReporter = asFunctionalInterface(gololang.testing.TestReporter.class, |results| { + var err = 0 + foreach desc, result in results { + if result oftype gololang.error.Result.class { + print(desc + " " + result: either( + |v| -> "OK", + |e| -> "FAIL: " + e: message())) + if result: isError() { + err = err + 1 + } + } else { + println("# " + desc) + err = err + defaultResult(result) + } + } + return err +} + +let defaultResult = |result| -> 1 diff --git a/src/main/java/gololang/testing/TestExtractor.java b/src/main/java/gololang/testing/TestExtractor.java new file mode 100644 index 000000000..e7646ac3b --- /dev/null +++ b/src/main/java/gololang/testing/TestExtractor.java @@ -0,0 +1,11 @@ +package gololang.testing; + +import gololang.Tuple; + +import java.nio.file.Path; + +@FunctionalInterface +public interface TestExtractor { + + Tuple extract(Path path); +} diff --git a/src/main/java/gololang/testing/TestReporter.java b/src/main/java/gololang/testing/TestReporter.java new file mode 100644 index 000000000..78f7c07a7 --- /dev/null +++ b/src/main/java/gololang/testing/TestReporter.java @@ -0,0 +1,9 @@ +package gololang.testing; + +import gololang.Tuple; + +@FunctionalInterface +public interface TestReporter { + + int report(Tuple results); +} diff --git a/src/main/java/gololang/testing/TestRunner.java b/src/main/java/gololang/testing/TestRunner.java new file mode 100644 index 000000000..29a2a386b --- /dev/null +++ b/src/main/java/gololang/testing/TestRunner.java @@ -0,0 +1,9 @@ +package gololang.testing; + +import gololang.Tuple; + +@FunctionalInterface +public interface TestRunner { + + Tuple run(Tuple suites); +}