diff --git a/bin/run.moon b/bin/run.moon index f593b26..9af0529 100755 --- a/bin/run.moon +++ b/bin/run.moon @@ -68,11 +68,25 @@ run_tests = (slug, dir) -> data = json.decode json_output if not data + output = json_output + + if output\match "^Failed to encode test results to json" + -- This is a syntax error: moon can't compile it. + -- Busted cannot output JSON results. + -- Grab the output from vanilla busted. + fh = io.popen 'busted', 'r' + output = fh\read 'a' + fh\close! + -- trim off some non-determinant output + output = output\gsub " : [%d.]+ seconds", "" + output = output\gsub "(%s)/[%w./-]-/(base.lua)", "%1%2" + return { status: 'error', - message: json_output + message: output } + if exit_status != 0 and #data.successes == 0 and #data.failures == 0 and #data.errors > 0 return { status: 'error', diff --git a/tests/example-syntax-error/expected_results.json b/tests/example-syntax-error/expected_results.json index be52766..c9600d1 100644 --- a/tests/example-syntax-error/expected_results.json +++ b/tests/example-syntax-error/expected_results.json @@ -1 +1 @@ -{"tests":[],"version":2,"message":"Failed to encode test results to json: type 'function' is not supported by JSON.\n","status":"error"} +{"message":"*\n0 successes / 0 failures / 1 error / 0 pending\n\nError -> base.lua @ 3\nsuite ./example_syntax_error_spec.moon\nbase.lua:81: ./example_syntax_error.moon: Failed to parse:\n [1] >> leap_year =\n","version":2,"status":"error","tests":[]} diff --git a/tests/failed-to-parse/.busted b/tests/failed-to-parse/.busted new file mode 100644 index 0000000..86b84e7 --- /dev/null +++ b/tests/failed-to-parse/.busted @@ -0,0 +1,5 @@ +return { + default = { + ROOT = { '.' } + } +} diff --git a/tests/failed-to-parse/expected_results.json b/tests/failed-to-parse/expected_results.json new file mode 100644 index 0000000..d73d52c --- /dev/null +++ b/tests/failed-to-parse/expected_results.json @@ -0,0 +1 @@ +{"tests":[],"status":"error","message":"*\n0 successes / 0 failures / 1 error / 0 pending\n\nError -> base.lua @ 3\nsuite ./failed_to_parse_spec.moon\nbase.lua:81: ./failed_to_parse.moon: Failed to parse:\n [2] >> (year % 4 == 0) && (year % 100 != 0 || year % 400 == 0)\n","version":2} diff --git a/tests/failed-to-parse/failed_to_parse.moon b/tests/failed-to-parse/failed_to_parse.moon new file mode 100644 index 0000000..390b190 --- /dev/null +++ b/tests/failed-to-parse/failed_to_parse.moon @@ -0,0 +1,4 @@ +leap_year = (year) -> + (year % 4 == 0) && (year % 100 != 0 || year % 400 == 0) + +return leap_year diff --git a/tests/failed-to-parse/failed_to_parse_spec.moon b/tests/failed-to-parse/failed_to_parse_spec.moon new file mode 100644 index 0000000..ce2c5e9 --- /dev/null +++ b/tests/failed-to-parse/failed_to_parse_spec.moon @@ -0,0 +1,29 @@ +is_leap_year = require 'failed_to_parse' + +describe 'leap', -> + it 'year not divisible by 4 in common year', -> + assert.is_false is_leap_year 2015 + + it 'year divisible by 2, not divisible by 4 in common year', -> + assert.is_false is_leap_year 1970 + + it 'year divisible by 4, not divisible by 100 in leap year', -> + assert.is_true is_leap_year 1996 + + it 'year divisible by 4 and 5 is still a leap year', -> + assert.is_true is_leap_year 1960 + + it 'year divisible by 100, not divisible by 400 in common year', -> + assert.is_false is_leap_year 2100 + + it 'year divisible by 100 but not by 3 is still not a leap year', -> + assert.is_false is_leap_year 1900 + + it 'year divisible by 400 is leap year', -> + assert.is_true is_leap_year 2000 + + it 'year divisible by 400 but not by 125 is still a leap year', -> + assert.is_true is_leap_year 2400 + + it 'year divisible by 200, not divisible by 400 in common year', -> + assert.is_false is_leap_year 1800