Compare commits

..

4 Commits

Author SHA1 Message Date
47420740df Merge pull request 'test_harness' (#22) from test_harness into main
Reviewed-on: #22
2023-12-25 04:41:16 +00:00
Scott Richmond
8b47aab280 Allow test harness to expect panics 2023-12-24 19:12:04 -05:00
Scott Richmond
d12d485583 Add basic test harness, actually add files this time 2023-12-24 17:17:08 -05:00
Scott Richmond
afb8bacb25 Stand up automated js/tap-based test harness framework. 2023-12-24 17:08:02 -05:00
13 changed files with 4150 additions and 22 deletions

3
foo.ld
View File

@ -1 +1,2 @@
:foo & EXPECT "foo"
"foo"

View File

@ -3,4 +3,4 @@ repl:
clj -X:repl clj -X:repl
build: build:
shadow-cljs release node shadow-cljs release module

4100
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -3,12 +3,14 @@
"version": "0.1.0-alpha.7.9", "version": "0.1.0-alpha.7.9",
"description": "A Ludus interpreter in a pure JS function.", "description": "A Ludus interpreter in a pure JS function.",
"main": "target/js/ludus.js", "main": "target/js/ludus.js",
"type": "module",
"directories": {}, "directories": {},
"keywords": [], "keywords": [],
"author": "Scott Richmond", "author": "Scott Richmond",
"license": "GPL-3.0", "license": "GPL-3.0",
"files": "target/js/*",
"devDependencies": { "devDependencies": {
"shadow-cljs": "^2.26.0" "shadow-cljs": "^2.26.0",
}, "tap": "^18.6.1"
"dependencies": {} }
} }

View File

@ -8,6 +8,10 @@
:output-to "target/js/ludus.js" :output-to "target/js/ludus.js"
:exports {:run ludus.node/run} :exports {:run ludus.node/run}
:modules {:main {:entries [ludus.node]}}} :modules {:main {:entries [ludus.node]}}}
:module {:target :esm
:output-dir "target/js"
:modules {:ludus {:exports {run ludus.node/run test ludus.node/run-test}}}
}
:browser {:target :browser :browser {:target :browser
:output-dir "target/js" :output-dir "target/js"
:asset-path "target" :asset-path "target"

View File

@ -64,7 +64,7 @@
(defn test-run [source] (run source true)) (defn test-run [source] (run source true))
(do (comment
(def source " (def source "

7
test/cases/if.ld Normal file
View File

@ -0,0 +1,7 @@
& EXPECT (:true, :false, :true, :false)
let true_literal = if true then :true else :false
let false_literal = if false then :true else :false
let truthy = if :truthy then :true else :false
let falsy = if nil then :true else :false
(true_literal, false_literal, truthy, falsy)

2
test/cases/list_atoms.ld Normal file
View File

@ -0,0 +1,2 @@
& EXPECT [:one, 2, "three"]
[:one, 2, "three"]

View File

@ -0,0 +1,2 @@
& EXPECT 12.123
12.123

2
test/cases/single_int.ld Normal file
View File

@ -0,0 +1,2 @@
& EXPECT 42
42

View File

@ -0,0 +1,2 @@
& EXPECT "foo"
"foo"

View File

@ -0,0 +1,2 @@
& EXPECT (true, false, nil)
(true, false, nil)

30
test/run_tests.js Normal file
View File

@ -0,0 +1,30 @@
import {run} from "../target/js/ludus.js"
import * as fs from "node:fs/promises"
import t from "tap"
const case_path = "./cases"
const files = await fs.readdir(case_path)
for (const file of files) {
const source = await fs.readFile(`${case_path}/${file}`, {encoding: "utf8"})
const first_line = source.split("\n")[0]
const expected = first_line.split("EXPECT")[1].trim()
if (expected === "PANIC") expect_panic(file, source)
else expect_result(file, source, expected)
}
function expect_panic(file, source) {
const result = run(source).errors[0]
t.test(`testing ${file}: EXPECT PANIC`, t => {
t.ok(result)
t.end()
})
}
function expect_result(file, source, expected) {
const result = run(source).result
t.test(`testing ${file}: EXPECT ${expected}, GOT ${result}`, t => {
t.equal(expected, result)
t.end()
})
}