From cad46b8056438f4952dd583cedd23995141385d7 Mon Sep 17 00:00:00 2001 From: Isaac Good Date: Thu, 22 Oct 2026 08:41:10 -0700 Subject: [PATCH] Sync the test runner --- exercises/practice/acronym/lib/test_runner.gd | 124 ++++++++++++------ .../practice/allergies/lib/test_runner.gd | 124 ++++++++++++------ .../practice/alphametics/lib/test_runner.gd | 124 ++++++++++++------ exercises/practice/anagram/lib/test_runner.gd | 124 ++++++++++++------ .../armstrong-numbers/lib/test_runner.gd | 124 ++++++++++++------ .../practice/atbash-cipher/lib/test_runner.gd | 124 ++++++++++++------ .../binary-search-tree/lib/test_runner.gd | 124 ++++++++++++------ .../practice/binary-search/lib/test_runner.gd | 124 ++++++++++++------ exercises/practice/bob/lib/test_runner.gd | 124 ++++++++++++------ exercises/practice/camicia/lib/test_runner.gd | 124 ++++++++++++------ .../collatz-conjecture/lib/test_runner.gd | 124 ++++++++++++------ exercises/practice/darts/lib/test_runner.gd | 124 ++++++++++++------ .../difference-of-squares/lib/test_runner.gd | 124 ++++++++++++------ .../practice/eliuds-eggs/lib/test_runner.gd | 124 ++++++++++++------ exercises/practice/etl/lib/test_runner.gd | 124 ++++++++++++------ .../practice/flatten-array/lib/test_runner.gd | 124 ++++++++++++------ .../practice/food-chain/lib/test_runner.gd | 124 ++++++++++++------ .../practice/game-of-life/lib/test_runner.gd | 124 ++++++++++++------ .../practice/gigasecond/lib/test_runner.gd | 124 ++++++++++++------ exercises/practice/grains/lib/test_runner.gd | 124 ++++++++++++------ exercises/practice/hamming/lib/test_runner.gd | 124 ++++++++++++------ .../practice/hello-world/lib/test_runner.gd | 124 ++++++++++++------ exercises/practice/isogram/lib/test_runner.gd | 124 ++++++++++++------ .../killer-sudoku-helper/lib/test_runner.gd | 124 ++++++++++++------ exercises/practice/leap/lib/test_runner.gd | 124 ++++++++++++------ exercises/practice/luhn/lib/test_runner.gd | 124 ++++++++++++------ .../matching-brackets/lib/test_runner.gd | 124 ++++++++++++------ exercises/practice/pangram/lib/test_runner.gd | 124 ++++++++++++------ .../perfect-numbers/lib/test_runner.gd | 124 ++++++++++++------ .../practice/phone-number/lib/test_runner.gd | 124 ++++++++++++------ .../practice/prime-factors/lib/test_runner.gd | 124 ++++++++++++------ exercises/practice/prism/lib/test_runner.gd | 124 ++++++++++++------ .../protein-translation/lib/test_runner.gd | 124 ++++++++++++------ .../pythagorean-triplet/lib/test_runner.gd | 124 ++++++++++++------ .../practice/raindrops/lib/test_runner.gd | 124 ++++++++++++------ .../rational-numbers/lib/test_runner.gd | 124 ++++++++++++------ .../resistor-color-duo/lib/test_runner.gd | 124 ++++++++++++------ .../lib/test_runner.gd | 124 ++++++++++++------ .../resistor-color-trio/lib/test_runner.gd | 124 ++++++++++++------ .../resistor-color/lib/test_runner.gd | 124 ++++++++++++------ .../reverse-string/lib/test_runner.gd | 124 ++++++++++++------ .../robot-simulator/lib/test_runner.gd | 124 ++++++++++++------ .../practice/saddle-points/lib/test_runner.gd | 124 ++++++++++++------ .../practice/save-the-cow/lib/test_runner.gd | 124 ++++++++++++------ .../scrabble-score/lib/test_runner.gd | 124 ++++++++++++------ .../secret-handshake/lib/test_runner.gd | 124 ++++++++++++------ exercises/practice/series/lib/test_runner.gd | 124 ++++++++++++------ exercises/practice/sieve/lib/test_runner.gd | 124 ++++++++++++------ .../practice/simple-cipher/lib/test_runner.gd | 124 ++++++++++++------ .../practice/space-age/lib/test_runner.gd | 124 ++++++++++++------ .../practice/spiral-matrix/lib/test_runner.gd | 124 ++++++++++++------ .../practice/square-root/lib/test_runner.gd | 124 ++++++++++++------ exercises/practice/sublist/lib/test_runner.gd | 124 ++++++++++++------ .../sum-of-multiples/lib/test_runner.gd | 124 ++++++++++++------ .../swift-scheduling/lib/test_runner.gd | 124 ++++++++++++------ .../practice/triangle/lib/test_runner.gd | 124 ++++++++++++------ .../practice/two-bucket/lib/test_runner.gd | 124 ++++++++++++------ exercises/practice/two-fer/lib/test_runner.gd | 124 ++++++++++++------ .../lib/test_runner.gd | 124 ++++++++++++------ .../practice/word-count/lib/test_runner.gd | 124 ++++++++++++------ 60 files changed, 5220 insertions(+), 2220 deletions(-) diff --git a/exercises/practice/acronym/lib/test_runner.gd b/exercises/practice/acronym/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/acronym/lib/test_runner.gd +++ b/exercises/practice/acronym/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/allergies/lib/test_runner.gd b/exercises/practice/allergies/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/allergies/lib/test_runner.gd +++ b/exercises/practice/allergies/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/alphametics/lib/test_runner.gd b/exercises/practice/alphametics/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/alphametics/lib/test_runner.gd +++ b/exercises/practice/alphametics/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/anagram/lib/test_runner.gd b/exercises/practice/anagram/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/anagram/lib/test_runner.gd +++ b/exercises/practice/anagram/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/armstrong-numbers/lib/test_runner.gd b/exercises/practice/armstrong-numbers/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/armstrong-numbers/lib/test_runner.gd +++ b/exercises/practice/armstrong-numbers/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/atbash-cipher/lib/test_runner.gd b/exercises/practice/atbash-cipher/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/atbash-cipher/lib/test_runner.gd +++ b/exercises/practice/atbash-cipher/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/binary-search-tree/lib/test_runner.gd b/exercises/practice/binary-search-tree/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/binary-search-tree/lib/test_runner.gd +++ b/exercises/practice/binary-search-tree/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/binary-search/lib/test_runner.gd b/exercises/practice/binary-search/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/binary-search/lib/test_runner.gd +++ b/exercises/practice/binary-search/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/bob/lib/test_runner.gd b/exercises/practice/bob/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/bob/lib/test_runner.gd +++ b/exercises/practice/bob/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/camicia/lib/test_runner.gd b/exercises/practice/camicia/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/camicia/lib/test_runner.gd +++ b/exercises/practice/camicia/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/collatz-conjecture/lib/test_runner.gd b/exercises/practice/collatz-conjecture/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/collatz-conjecture/lib/test_runner.gd +++ b/exercises/practice/collatz-conjecture/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/darts/lib/test_runner.gd b/exercises/practice/darts/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/darts/lib/test_runner.gd +++ b/exercises/practice/darts/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/difference-of-squares/lib/test_runner.gd b/exercises/practice/difference-of-squares/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/difference-of-squares/lib/test_runner.gd +++ b/exercises/practice/difference-of-squares/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/eliuds-eggs/lib/test_runner.gd b/exercises/practice/eliuds-eggs/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/eliuds-eggs/lib/test_runner.gd +++ b/exercises/practice/eliuds-eggs/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/etl/lib/test_runner.gd b/exercises/practice/etl/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/etl/lib/test_runner.gd +++ b/exercises/practice/etl/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/flatten-array/lib/test_runner.gd b/exercises/practice/flatten-array/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/flatten-array/lib/test_runner.gd +++ b/exercises/practice/flatten-array/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/food-chain/lib/test_runner.gd b/exercises/practice/food-chain/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/food-chain/lib/test_runner.gd +++ b/exercises/practice/food-chain/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/game-of-life/lib/test_runner.gd b/exercises/practice/game-of-life/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/game-of-life/lib/test_runner.gd +++ b/exercises/practice/game-of-life/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/gigasecond/lib/test_runner.gd b/exercises/practice/gigasecond/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/gigasecond/lib/test_runner.gd +++ b/exercises/practice/gigasecond/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/grains/lib/test_runner.gd b/exercises/practice/grains/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/grains/lib/test_runner.gd +++ b/exercises/practice/grains/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/hamming/lib/test_runner.gd b/exercises/practice/hamming/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/hamming/lib/test_runner.gd +++ b/exercises/practice/hamming/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/hello-world/lib/test_runner.gd b/exercises/practice/hello-world/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/hello-world/lib/test_runner.gd +++ b/exercises/practice/hello-world/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/isogram/lib/test_runner.gd b/exercises/practice/isogram/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/isogram/lib/test_runner.gd +++ b/exercises/practice/isogram/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/killer-sudoku-helper/lib/test_runner.gd b/exercises/practice/killer-sudoku-helper/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/killer-sudoku-helper/lib/test_runner.gd +++ b/exercises/practice/killer-sudoku-helper/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/leap/lib/test_runner.gd b/exercises/practice/leap/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/leap/lib/test_runner.gd +++ b/exercises/practice/leap/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/luhn/lib/test_runner.gd b/exercises/practice/luhn/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/luhn/lib/test_runner.gd +++ b/exercises/practice/luhn/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/matching-brackets/lib/test_runner.gd b/exercises/practice/matching-brackets/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/matching-brackets/lib/test_runner.gd +++ b/exercises/practice/matching-brackets/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/pangram/lib/test_runner.gd b/exercises/practice/pangram/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/pangram/lib/test_runner.gd +++ b/exercises/practice/pangram/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/perfect-numbers/lib/test_runner.gd b/exercises/practice/perfect-numbers/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/perfect-numbers/lib/test_runner.gd +++ b/exercises/practice/perfect-numbers/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/phone-number/lib/test_runner.gd b/exercises/practice/phone-number/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/phone-number/lib/test_runner.gd +++ b/exercises/practice/phone-number/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/prime-factors/lib/test_runner.gd b/exercises/practice/prime-factors/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/prime-factors/lib/test_runner.gd +++ b/exercises/practice/prime-factors/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/prism/lib/test_runner.gd b/exercises/practice/prism/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/prism/lib/test_runner.gd +++ b/exercises/practice/prism/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/protein-translation/lib/test_runner.gd b/exercises/practice/protein-translation/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/protein-translation/lib/test_runner.gd +++ b/exercises/practice/protein-translation/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/pythagorean-triplet/lib/test_runner.gd b/exercises/practice/pythagorean-triplet/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/pythagorean-triplet/lib/test_runner.gd +++ b/exercises/practice/pythagorean-triplet/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/raindrops/lib/test_runner.gd b/exercises/practice/raindrops/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/raindrops/lib/test_runner.gd +++ b/exercises/practice/raindrops/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/rational-numbers/lib/test_runner.gd b/exercises/practice/rational-numbers/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/rational-numbers/lib/test_runner.gd +++ b/exercises/practice/rational-numbers/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/resistor-color-duo/lib/test_runner.gd b/exercises/practice/resistor-color-duo/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/resistor-color-duo/lib/test_runner.gd +++ b/exercises/practice/resistor-color-duo/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/resistor-color-tolerance/lib/test_runner.gd b/exercises/practice/resistor-color-tolerance/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/resistor-color-tolerance/lib/test_runner.gd +++ b/exercises/practice/resistor-color-tolerance/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/resistor-color-trio/lib/test_runner.gd b/exercises/practice/resistor-color-trio/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/resistor-color-trio/lib/test_runner.gd +++ b/exercises/practice/resistor-color-trio/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/resistor-color/lib/test_runner.gd b/exercises/practice/resistor-color/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/resistor-color/lib/test_runner.gd +++ b/exercises/practice/resistor-color/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/reverse-string/lib/test_runner.gd b/exercises/practice/reverse-string/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/reverse-string/lib/test_runner.gd +++ b/exercises/practice/reverse-string/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/robot-simulator/lib/test_runner.gd b/exercises/practice/robot-simulator/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/robot-simulator/lib/test_runner.gd +++ b/exercises/practice/robot-simulator/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/saddle-points/lib/test_runner.gd b/exercises/practice/saddle-points/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/saddle-points/lib/test_runner.gd +++ b/exercises/practice/saddle-points/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/save-the-cow/lib/test_runner.gd b/exercises/practice/save-the-cow/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/save-the-cow/lib/test_runner.gd +++ b/exercises/practice/save-the-cow/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/scrabble-score/lib/test_runner.gd b/exercises/practice/scrabble-score/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/scrabble-score/lib/test_runner.gd +++ b/exercises/practice/scrabble-score/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/secret-handshake/lib/test_runner.gd b/exercises/practice/secret-handshake/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/secret-handshake/lib/test_runner.gd +++ b/exercises/practice/secret-handshake/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/series/lib/test_runner.gd b/exercises/practice/series/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/series/lib/test_runner.gd +++ b/exercises/practice/series/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/sieve/lib/test_runner.gd b/exercises/practice/sieve/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/sieve/lib/test_runner.gd +++ b/exercises/practice/sieve/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/simple-cipher/lib/test_runner.gd b/exercises/practice/simple-cipher/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/simple-cipher/lib/test_runner.gd +++ b/exercises/practice/simple-cipher/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/space-age/lib/test_runner.gd b/exercises/practice/space-age/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/space-age/lib/test_runner.gd +++ b/exercises/practice/space-age/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/spiral-matrix/lib/test_runner.gd b/exercises/practice/spiral-matrix/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/spiral-matrix/lib/test_runner.gd +++ b/exercises/practice/spiral-matrix/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/square-root/lib/test_runner.gd b/exercises/practice/square-root/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/square-root/lib/test_runner.gd +++ b/exercises/practice/square-root/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/sublist/lib/test_runner.gd b/exercises/practice/sublist/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/sublist/lib/test_runner.gd +++ b/exercises/practice/sublist/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/sum-of-multiples/lib/test_runner.gd b/exercises/practice/sum-of-multiples/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/sum-of-multiples/lib/test_runner.gd +++ b/exercises/practice/sum-of-multiples/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/swift-scheduling/lib/test_runner.gd b/exercises/practice/swift-scheduling/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/swift-scheduling/lib/test_runner.gd +++ b/exercises/practice/swift-scheduling/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/triangle/lib/test_runner.gd b/exercises/practice/triangle/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/triangle/lib/test_runner.gd +++ b/exercises/practice/triangle/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/two-bucket/lib/test_runner.gd b/exercises/practice/two-bucket/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/two-bucket/lib/test_runner.gd +++ b/exercises/practice/two-bucket/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/two-fer/lib/test_runner.gd b/exercises/practice/two-fer/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/two-fer/lib/test_runner.gd +++ b/exercises/practice/two-fer/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/variable-length-quantity/lib/test_runner.gd b/exercises/practice/variable-length-quantity/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/variable-length-quantity/lib/test_runner.gd +++ b/exercises/practice/variable-length-quantity/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break diff --git a/exercises/practice/word-count/lib/test_runner.gd b/exercises/practice/word-count/lib/test_runner.gd index 08b5709..be91311 100644 --- a/exercises/practice/word-count/lib/test_runner.gd +++ b/exercises/practice/word-count/lib/test_runner.gd @@ -1,6 +1,7 @@ class_name TestRunner extends SceneTree + class ErrorReader: """ErrorReader reads from a STDERR file (cmd 2>/file). @@ -8,15 +9,44 @@ class ErrorReader: """ const EXPECTED_GODOT_ERRORS = [ - "ERROR: Could not create directory: /root/.local\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Error attempting to create data dir: /root/.local/share/godot/app_userdata/[unnamed project].\n at: ensure_user_data_dir (core/os/os.cpp:344)\n", - "ERROR: Could not create editor data directory: /root/.local/share/godot\n at: EditorPaths (editor/editor_paths.cpp:183)\n", - "ERROR: Could not create directory: /root/.config\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor config directory: /root/.config/godot\n at: EditorPaths (editor/editor_paths.cpp:198)\n", - "ERROR: Could not create directory: /root/.cache\n at: make_dir_recursive (core/io/dir_access.cpp:180)\n", - "ERROR: Could not create editor cache directory: /root/.cache/godot\n at: EditorPaths (editor/editor_paths.cpp:219)\n", - "ERROR: Can't save resource to empty path. Provide non-empty path or a Resource with non-empty resource_path.\n at: save (core/io/resource_saver.cpp:105)\n", - "ERROR: Error saving editor settings to \n at: save (editor/editor_settings.cpp:1013)\n", + ( + "ERROR: Could not create directory: /root/.local\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Error attempting to create data dir: " + + "/root/.local/share/godot/app_userdata/[unnamed project].\n" + + " at: ensure_user_data_dir (core/os/os.cpp:344)\n" + ), + ( + "ERROR: Could not create editor data directory: /root/.local/share/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:183)\n" + ), + ( + "ERROR: Could not create directory: /root/.config\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor config directory: /root/.config/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:198)\n" + ), + ( + "ERROR: Could not create directory: /root/.cache\n" + + " at: make_dir_recursive (core/io/dir_access.cpp:180)\n" + ), + ( + "ERROR: Could not create editor cache directory: /root/.cache/godot\n" + + " at: EditorPaths (editor/editor_paths.cpp:219)\n" + ), + ( + "ERROR: Can't save resource to empty path. " + + "Provide non-empty path or a Resource with non-empty resource_path.\n" + + " at: save (core/io/resource_saver.cpp:105)\n" + ), + ( + "ERROR: Error saving editor settings to \n" + + " at: save (editor/editor_settings.cpp:1013)\n" + ), ] var already_processed_bytes: int = 0 var filename: String = "" @@ -72,7 +102,6 @@ class ErrorReader: class ResultWriter: - var json_file: String = "" var stderr: ErrorReader = null @@ -103,8 +132,7 @@ class ResultWriter: """ if self.json_file.is_empty(): return print_friendly_results(results) - else: - return write_results_file(results) + return write_results_file(results) func print_friendly_results(results: Dictionary) -> Error: """ @@ -119,7 +147,9 @@ class ResultWriter: if test.status == "pass": rich_results.push_back(" %s [color=yellow]passed ✔[/color]" % test.name) else: - rich_results.push_back(" %s [color=pink]failed: %s[/color]" % [test.name, test.message]) + rich_results.push_back( + " %s [color=pink]failed: %s[/color]" % [test.name, test.message] + ) print_rich("\n".join(rich_results)) return OK @@ -225,13 +255,14 @@ class ArgParser: class Runner: - var test_suite: Object = null var solution: Object = null var stderr: ErrorReader = null var result_writer: ResultWriter = null - func _init(test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter) -> void: + func _init( + test_suite: Object, solution: Object, stderr: ErrorReader, result_writer: ResultWriter + ) -> void: self.test_suite = test_suite self.solution = solution self.stderr = stderr @@ -243,7 +274,7 @@ class Runner: var parts = [] var methods: Dictionary = {} var name: String = "" - var func_re: RegEx = RegEx.create_from_string('^func ([^(]+)\\(') + var func_re: RegEx = RegEx.create_from_string("^func ([^(]+)\\(") for line in self.test_suite.get_script().source_code.split("\n"): if not in_func: var matched = func_re.search(line) @@ -315,26 +346,31 @@ class Runner: var error_message = self.stderr.get_error_message() if output == null: - test_results.append({ - "name": test_method_name, - "status": "error", - "message": error_message, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": "error", + "message": error_message, + } + ) + ) else: var actual = output[0] var expected = output[1] var passed = ( - typeof(actual) == typeof(expected) and - actual == expected and - error_message.is_empty() + typeof(actual) == typeof(expected) + and actual == expected + and error_message.is_empty() ) var status = "error" if error_message.is_empty(): status = "pass" if passed else "fail" - error_message = null if passed else self.get_failed_test_message( - actual, expected + error_message = ( + null if passed else self.get_failed_test_message(actual, expected) ) var test_code = test_codes[method["name"]] @@ -346,12 +382,17 @@ class Runner: test_code = test_code.replace("\t", " ") test_code = test_code.dedent().strip_edges() - test_results.append({ - "name": test_method_name, - "status": status, - "message": error_message, - "test_code": test_code, - }) + ( + test_results + . append( + { + "name": test_method_name, + "status": status, + "message": error_message, + "test_code": test_code, + } + ) + ) return test_results @@ -388,9 +429,14 @@ class Runner: filtered_results.append(test_result) elif not has_failure: has_failure = true - test_result["message"] = "Passes %d/%d tests. First failure: %s" % [ - success_count, len(test_results), test_result["message"], - ] + test_result["message"] = ( + "Passes %d/%d tests. First failure: %s" + % [ + success_count, + len(test_results), + test_result["message"], + ] + ) filtered_results.append(test_result) results["tests"] = filtered_results @@ -426,7 +472,9 @@ func load_solution(path: String) -> Object: return solution -func load_solution_script(solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader) -> Array: +func load_solution_script( + solution_script_path: String, result_writer: ResultWriter, stderr: ErrorReader +) -> Array: """ Loads the solution script and saves it in a global variable. In case of any issues, this method will save the `results.json` file with `error` status. @@ -442,7 +490,9 @@ func load_solution_script(solution_script_path: String, result_writer: ResultWri var error_message: String = stderr.get_error_message() if not error_message.is_empty(): var msg = [] - var stop = 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + var stop = ( + 'ERROR: Failed to load script "%s" with error "Parse error".' % solution_script_path + ) for line in error_message.split("\n"): if line == stop: break