From 14608e2e991bfdfc5563a7a8f446ab4ce69cfbfc Mon Sep 17 00:00:00 2001 From: Glenn Jackman Date: Sun, 22 Feb 2026 19:22:24 -0500 Subject: [PATCH] Handle the case where only some tests encounter a syntax error --- bin/run.moon | 9 +++++ tests/example-partial-error/.busted | 5 +++ .../example_partial_error.moon | 12 ++++++ .../example_partial_error_spec.moon | 39 +++++++++++++++++++ .../expected_results.json | 1 + 5 files changed, 66 insertions(+) create mode 100644 tests/example-partial-error/.busted create mode 100644 tests/example-partial-error/example_partial_error.moon create mode 100644 tests/example-partial-error/example_partial_error_spec.moon create mode 100644 tests/example-partial-error/expected_results.json diff --git a/bin/run.moon b/bin/run.moon index 8d78bb8..a9418e9 100755 --- a/bin/run.moon +++ b/bin/run.moon @@ -1,5 +1,7 @@ #! /usr/bin/env moon +-- Implements test-runner interface version 2 + require 'moonscript' lfs = require 'lfs' json = (require 'dkjson').use_lpeg! @@ -92,6 +94,13 @@ run_tests = (slug, dir) -> message: test.trace.message, } + for test in *data.errors + results[test.element.name] = { + status: 'error', + name: test.element.name, + message: test.trace.message, + } + results diff --git a/tests/example-partial-error/.busted b/tests/example-partial-error/.busted new file mode 100644 index 0000000..86b84e7 --- /dev/null +++ b/tests/example-partial-error/.busted @@ -0,0 +1,5 @@ +return { + default = { + ROOT = { '.' } + } +} diff --git a/tests/example-partial-error/example_partial_error.moon b/tests/example-partial-error/example_partial_error.moon new file mode 100644 index 0000000..64ad23b --- /dev/null +++ b/tests/example-partial-error/example_partial_error.moon @@ -0,0 +1,12 @@ +-- hamming +distance = (left, right) -> + assert #left == #right, 'strands must be of equal length' + + dist = 0 + -- below should be `=` not `in` + for i in 1,#left + dist += 1 if left\sub(i) ~= right\sub(i) + dist + +{ :distance } + diff --git a/tests/example-partial-error/example_partial_error_spec.moon b/tests/example-partial-error/example_partial_error_spec.moon new file mode 100644 index 0000000..d891d61 --- /dev/null +++ b/tests/example-partial-error/example_partial_error_spec.moon @@ -0,0 +1,39 @@ +hamming = require 'example_partial_error' + +describe 'hamming', -> + it 'empty strands', -> + result = hamming.distance '', '' + assert.are.equal 0, result + + it 'single letter identical strands', -> + result = hamming.distance 'A', 'A' + assert.are.equal 0, result + + it 'single letter different strands', -> + result = hamming.distance 'G', 'T' + assert.are.equal 1, result + + it 'long identical strands', -> + result = hamming.distance 'GGACTGAAATCTG', 'GGACTGAAATCTG' + assert.are.equal 0, result + + it 'long different strands', -> + result = hamming.distance 'GGACGGATTCTG', 'AGGACGGATTCT' + assert.are.equal 9, result + + it 'disallow first strand longer', -> + f = -> hamming.distance 'AATG', 'AAA' + assert.has.error f, 'strands must be of equal length' + + it 'disallow second strand longer', -> + f = -> hamming.distance 'ATA', 'AGTG' + assert.has.error f, 'strands must be of equal length' + + it 'disallow empty first strand', -> + f = -> hamming.distance '', 'G' + assert.has.error f, 'strands must be of equal length' + + it 'disallow empty second strand', -> + f = -> hamming.distance 'G', '' + assert.has.error f, 'strands must be of equal length' + diff --git a/tests/example-partial-error/expected_results.json b/tests/example-partial-error/expected_results.json new file mode 100644 index 0000000..d885434 --- /dev/null +++ b/tests/example-partial-error/expected_results.json @@ -0,0 +1 @@ +{"tests":[{"message":"./example_partial_error.moon:5: attempt to call a number value (for iterator 'for iterator')","status":"error","test_code":" result = hamming.distance '', ''\n assert.are.equal 0, result\n","name":"empty strands"},{"message":"./example_partial_error.moon:5: attempt to call a number value (for iterator 'for iterator')","status":"error","test_code":" result = hamming.distance 'A', 'A'\n assert.are.equal 0, result\n","name":"single letter identical strands"},{"message":"./example_partial_error.moon:5: attempt to call a number value (for iterator 'for iterator')","status":"error","test_code":" result = hamming.distance 'G', 'T'\n assert.are.equal 1, result\n","name":"single letter different strands"},{"message":"./example_partial_error.moon:5: attempt to call a number value (for iterator 'for iterator')","status":"error","test_code":" result = hamming.distance 'GGACTGAAATCTG', 'GGACTGAAATCTG'\n assert.are.equal 0, result\n","name":"long identical strands"},{"message":"./example_partial_error.moon:5: attempt to call a number value (for iterator 'for iterator')","status":"error","test_code":" result = hamming.distance 'GGACGGATTCTG', 'AGGACGGATTCT'\n assert.are.equal 9, result\n","name":"long different strands"},{"status":"pass","test_code":" f = -> hamming.distance 'AATG', 'AAA'\n assert.has.error f, 'strands must be of equal length'\n","name":"disallow first strand longer"},{"status":"pass","test_code":" f = -> hamming.distance 'ATA', 'AGTG'\n assert.has.error f, 'strands must be of equal length'\n","name":"disallow second strand longer"},{"status":"pass","test_code":" f = -> hamming.distance '', 'G'\n assert.has.error f, 'strands must be of equal length'\n","name":"disallow empty first strand"},{"status":"pass","test_code":" f = -> hamming.distance 'G', ''\n assert.has.error f, 'strands must be of equal length'\n","name":"disallow empty second strand"}],"status":"pass","version":2}