Skip to content

Commit 48beb08

Browse files
committed
Upgrade runner
1 parent da67210 commit 48beb08

File tree

6 files changed

+68
-78
lines changed

6 files changed

+68
-78
lines changed

Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM ghcr.io/gleam-lang/gleam:v0.32.2-erlang-alpine
1+
FROM ghcr.io/gleam-lang/gleam:v0.34.0-erlang-alpine
22

33
# Install packages required to run the tests
44
RUN apk add --no-cache jq coreutils

runner/gleam.toml

+1
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,6 @@ gleam_json = "~> 0.5"
1414
gleam_stdlib = "~> 0.33"
1515
simplifile = "~> 0.4"
1616
gleam_community_ansi = "~> 1.1"
17+
argv = "~> 1.0"
1718

1819
[dev-dependencies]

runner/manifest.toml

+6-4
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,23 @@
22
# You typically do not need to edit this file
33

44
packages = [
5-
{ name = "gap", version = "1.0.1", build_tools = ["gleam"], requirements = ["gleam_stdlib", "gleam_community_ansi"], otp_app = "gap", source = "hex", outer_checksum = "5E369751DB547BFBDA7735878DC04DA31FCA3112193D61D5D7566010C7C8BA98" },
5+
{ name = "argv", version = "1.0.1", build_tools = ["gleam"], requirements = [], otp_app = "argv", source = "hex", outer_checksum = "A6E9009E50BBE863EB37D963E4315398D41A3D87D0075480FC244125808F964A" },
6+
{ name = "gap", version = "1.1.0", build_tools = ["gleam"], requirements = ["gleam_community_ansi", "gleam_stdlib"], otp_app = "gap", source = "hex", outer_checksum = "2EE1B0A17E85CF73A0C1D29DA315A2699117A8F549C8E8D89FA8261BE41EDEB1" },
67
{ name = "glance", version = "0.8.1", build_tools = ["gleam"], requirements = ["gleam_stdlib", "glexer"], otp_app = "glance", source = "hex", outer_checksum = "C486C920E1865F66A404AAB9A762C4226D95B60AC2C733D175B28C3F0920CE21" },
7-
{ name = "gleam_community_ansi", version = "1.4.0", build_tools = ["gleam"], requirements = ["gleam_stdlib", "gleam_community_colour"], otp_app = "gleam_community_ansi", source = "hex", outer_checksum = "FE79E08BF97009729259B6357EC058315B6FBB916FAD1C2FF9355115FEB0D3A4" },
8+
{ name = "gleam_community_ansi", version = "1.4.0", build_tools = ["gleam"], requirements = ["gleam_community_colour", "gleam_stdlib"], otp_app = "gleam_community_ansi", source = "hex", outer_checksum = "FE79E08BF97009729259B6357EC058315B6FBB916FAD1C2FF9355115FEB0D3A4" },
89
{ name = "gleam_community_colour", version = "1.3.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_community_colour", source = "hex", outer_checksum = "A49A5E3AE8B637A5ACBA80ECB9B1AFE89FD3D5351FF6410A42B84F666D40D7D5" },
910
{ name = "gleam_erlang", version = "0.24.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_erlang", source = "hex", outer_checksum = "26BDB52E61889F56A291CB34167315780EE4AA20961917314446542C90D1C1A0" },
10-
{ name = "gleam_json", version = "0.7.0", build_tools = ["gleam"], requirements = ["gleam_stdlib", "thoas"], otp_app = "gleam_json", source = "hex", outer_checksum = "CB405BD93A8828BCD870463DE29375E7B2D252D9D124C109E5B618AAC00B86FC" },
11+
{ name = "gleam_json", version = "0.7.0", build_tools = ["gleam"], requirements = ["thoas", "gleam_stdlib"], otp_app = "gleam_json", source = "hex", outer_checksum = "CB405BD93A8828BCD870463DE29375E7B2D252D9D124C109E5B618AAC00B86FC" },
1112
{ name = "gleam_stdlib", version = "0.34.0", build_tools = ["gleam"], requirements = [], otp_app = "gleam_stdlib", source = "hex", outer_checksum = "1FB8454D2991E9B4C0C804544D8A9AD0F6184725E20D63C3155F0AEB4230B016" },
1213
{ name = "glexer", version = "0.7.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "glexer", source = "hex", outer_checksum = "4484942A465482A0A100936E1E5F12314DB4B5AC0D87575A7B9E9062090B96BE" },
1314
{ name = "simplifile", version = "0.4.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "simplifile", source = "hex", outer_checksum = "8F3C94B83F691CCFACD784A4D7C1F7E5A0437D93341549B908EE3B32E3477447" },
1415
{ name = "thoas", version = "0.4.1", build_tools = ["rebar3"], requirements = [], otp_app = "thoas", source = "hex", outer_checksum = "4918D50026C073C4AB1388437132C77A6F6F7C8AC43C60C13758CC0ADCE2134E" },
1516
]
1617

1718
[requirements]
19+
argv = { version = "~> 1.0" }
1820
gap = { version = "~> 1.0" }
19-
glance = { version = "~> 0.5" }
21+
glance = { version = "~> 0.8" }
2022
gleam_community_ansi = { version = "~> 1.1" }
2123
gleam_erlang = { version = "~> 0.19" }
2224
gleam_json = { version = "~> 0.5" }

runner/src/exercism/test_runner.gleam

+6-3
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
// TODO: Get and show stacktrace
2+
import argv
23
import gleam/io
34
import gleam/list
45
import gleam/bool
56
import gleam/string
67
import gleam/option.{None, Some}
78
import gleam/dynamic.{type Dynamic}
8-
import gleam/erlang
99
import gleam/erlang/atom.{type Atom}
1010
import gleam/erlang/charlist.{type Charlist}
1111
import simplifile
@@ -22,7 +22,7 @@ pub fn main() {
2222
let #(passed, message) = internal.print_summary(results)
2323
io.println("\n" <> message)
2424

25-
let assert Ok(_) = case erlang.start_arguments() {
25+
let assert Ok(_) = case argv.load().arguments {
2626
["--json-output-path=" <> path] | ["--json-output-path", path] -> {
2727
let json = internal.results_to_json(results)
2828
simplifile.write(path, json)
@@ -51,7 +51,10 @@ fn run_test(the_test: Test) -> TestResult {
5151
None -> io.print(ansi.green("."))
5252
Some(error) -> {
5353
io.println(ansi.red("F"))
54-
io.println(internal.print_error(error, the_test.module_path, the_test.name,
54+
io.println(internal.print_error(
55+
error,
56+
the_test.module_path,
57+
the_test.name,
5558
))
5659
}
5760
}

runner/src/exercism_test_runner/internal.gleam

+42-56
Original file line numberDiff line numberDiff line change
@@ -115,57 +115,42 @@ pub fn print_error(error: Error, path: String, test_name: String) -> String {
115115
])
116116
}
117117
Todo(message, module, line) -> {
118-
print_properties(
119-
path,
120-
[
121-
#("test", test_name),
122-
#("error", "todo"),
123-
#("site", module <> ":" <> int.to_string(line)),
124-
#("info", message),
125-
],
126-
)
118+
print_properties(path, [
119+
#("test", test_name),
120+
#("error", "todo"),
121+
#("site", module <> ":" <> int.to_string(line)),
122+
#("info", message),
123+
])
127124
}
128125
Panic(message, module, line) -> {
129-
print_properties(
130-
path,
131-
[
132-
#("test", test_name),
133-
#("error", "panic"),
134-
#("site", module <> ":" <> int.to_string(line)),
135-
#("info", message),
136-
],
137-
)
126+
print_properties(path, [
127+
#("test", test_name),
128+
#("error", "panic"),
129+
#("site", module <> ":" <> int.to_string(line)),
130+
#("info", message),
131+
])
138132
}
139133
Unmatched(value, module, line) -> {
140-
print_properties(
141-
path,
142-
[
143-
#("test", test_name),
144-
#("error", "Pattern match failed"),
145-
#("site", module <> ":" <> int.to_string(line)),
146-
#("value", string.inspect(value)),
147-
],
148-
)
134+
print_properties(path, [
135+
#("test", test_name),
136+
#("error", "Pattern match failed"),
137+
#("site", module <> ":" <> int.to_string(line)),
138+
#("value", string.inspect(value)),
139+
])
149140
}
150141
UnmatchedCase(value) -> {
151-
print_properties(
152-
path,
153-
[
154-
#("test", test_name),
155-
#("error", "Pattern match failed"),
156-
#("value", string.inspect(value)),
157-
],
158-
)
142+
print_properties(path, [
143+
#("test", test_name),
144+
#("error", "Pattern match failed"),
145+
#("value", string.inspect(value)),
146+
])
159147
}
160148
Crashed(error) -> {
161-
print_properties(
162-
path,
163-
[
164-
#("test", test_name),
165-
#("error", "Program crashed"),
166-
#("cause", string.inspect(error)),
167-
],
168-
)
149+
print_properties(path, [
150+
#("test", test_name),
151+
#("error", "Program crashed"),
152+
#("cause", string.inspect(error)),
153+
])
169154
}
170155
}
171156
}
@@ -221,10 +206,10 @@ fn decode_pattern_match_failed_error(
221206
let decoder =
222207
dynamic.decode4(
223208
fn(_, value, module, line) { Unmatched(value, module, line) },
224-
dynamic.field(
225-
atom.create_from_string("gleam_error"),
226-
decode_tag(atom.create_from_string("let_assert"), _),
227-
),
209+
dynamic.field(atom.create_from_string("gleam_error"), decode_tag(
210+
atom.create_from_string("let_assert"),
211+
_,
212+
)),
228213
dynamic.field(atom.create_from_string("value"), Ok),
229214
dynamic.field(atom.create_from_string("module"), dynamic.string),
230215
dynamic.field(atom.create_from_string("line"), dynamic.int),
@@ -239,10 +224,10 @@ fn decode_todo_error(error: Dynamic) -> Result(Error, dynamic.DecodeErrors) {
239224
let decoder =
240225
dynamic.decode4(
241226
fn(_, message, module, line) { Todo(message, module, line) },
242-
dynamic.field(
243-
atom.create_from_string("gleam_error"),
244-
decode_tag(atom.create_from_string("todo"), _),
245-
),
227+
dynamic.field(atom.create_from_string("gleam_error"), decode_tag(
228+
atom.create_from_string("todo"),
229+
_,
230+
)),
246231
dynamic.field(atom.create_from_string("message"), dynamic.string),
247232
dynamic.field(atom.create_from_string("module"), dynamic.string),
248233
dynamic.field(atom.create_from_string("line"), dynamic.int),
@@ -254,10 +239,10 @@ fn decode_panic_error(error: Dynamic) -> Result(Error, dynamic.DecodeErrors) {
254239
let decoder =
255240
dynamic.decode4(
256241
fn(_, message, module, line) { Panic(message, module, line) },
257-
dynamic.field(
258-
atom.create_from_string("gleam_error"),
259-
decode_tag(atom.create_from_string("panic"), _),
260-
),
242+
dynamic.field(atom.create_from_string("gleam_error"), decode_tag(
243+
atom.create_from_string("panic"),
244+
_,
245+
)),
261246
dynamic.field(atom.create_from_string("message"), dynamic.string),
262247
dynamic.field(atom.create_from_string("module"), dynamic.string),
263248
dynamic.field(atom.create_from_string("line"), dynamic.int),
@@ -359,7 +344,8 @@ pub fn results_to_json(results: List(TestResult)) -> String {
359344
fn test_result_json(result: TestResult) -> Json {
360345
let fields = case result.error {
361346
Some(error) -> {
362-
let error = print_error(error, result.the_test.module_path, result.the_test.name)
347+
let error =
348+
print_error(error, result.the_test.module_path, result.the_test.name)
363349
[#("status", json.string("fail")), #("message", json.string(error))]
364350
}
365351
None -> [#("status", json.string("pass"))]

runner/test/exercism_test_runner_test.gleam

+12-14
Original file line numberDiff line numberDiff line change
@@ -139,41 +139,41 @@ pub fn print_unmatched_case_test() {
139139
}
140140

141141
pub fn print_summary_passed_test() {
142-
let test =
142+
let testcase =
143143
internal.Test(
144144
module_path: "src/wibble.gleam",
145145
name: "one_test",
146146
function: fn() { Ok(Nil) },
147147
src: "",
148148
)
149149
[
150-
internal.TestResult(test, None, ""),
151-
internal.TestResult(test, None, ""),
152-
internal.TestResult(test, None, ""),
150+
internal.TestResult(testcase, None, ""),
151+
internal.TestResult(testcase, None, ""),
152+
internal.TestResult(testcase, None, ""),
153153
]
154154
|> internal.print_summary
155155
|> should.equal(#(True, "\u{001b}[32mRan 3 tests, 0 failed\u{001b}[39m"))
156156
}
157157

158158
pub fn print_summary_failed_test() {
159-
let test =
159+
let testcase =
160160
internal.Test(
161161
module_path: "src/wibble.gleam",
162162
name: "one_test",
163163
function: fn() { Ok(Nil) },
164164
src: "",
165165
)
166166
[
167-
internal.TestResult(test, Some(internal.Todo("", "", 0)), ""),
168-
internal.TestResult(test, None, ""),
169-
internal.TestResult(test, None, ""),
167+
internal.TestResult(testcase, Some(internal.Todo("", "", 0)), ""),
168+
internal.TestResult(testcase, None, ""),
169+
internal.TestResult(testcase, None, ""),
170170
]
171171
|> internal.print_summary
172172
|> should.equal(#(False, "\u{001b}[31mRan 3 tests, 1 failed\u{001b}[39m"))
173173
}
174174

175175
pub fn run_test_test() {
176-
let test =
176+
let testcase =
177177
internal.Test(
178178
module_path: "src/wibble.gleam",
179179
name: "one_test",
@@ -184,9 +184,9 @@ pub fn run_test_test() {
184184
},
185185
src: "",
186186
)
187-
test
187+
testcase
188188
|> internal.run_test
189-
|> should.equal(internal.TestResult(test, None, "[1, 2]\nOk(Nil)\n"))
189+
|> should.equal(internal.TestResult(testcase, None, "[1, 2]\nOk(Nil)\n"))
190190
}
191191

192192
pub fn results_to_json_pass_test() {
@@ -299,9 +299,7 @@ pub fn results_to_json_failed_test() {
299299

300300
pub fn results_to_json_long_output_test() {
301301
let output = string.repeat("a", 1000)
302-
let expected =
303-
string.repeat("a", 448)
304-
<> "...
302+
let expected = string.repeat("a", 448) <> "...
305303
306304
Output was truncated. Please limit to 500 chars"
307305

0 commit comments

Comments
 (0)