Skip to content

Commit 73622a1

Browse files
authored
Merge pull request #54 from codecrafters-io/add-error-types
Refactor error logging to include expected error type
2 parents b8ccc46 + 2aec6dc commit 73622a1

File tree

5 files changed

+13
-12
lines changed

5 files changed

+13
-12
lines changed

internal/test_cases/evaluate_test_case.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,11 @@ func (t *EvaluateTestCase) Run(executable *interpreter_executable.InterpreterExe
4040
if t.ExpectsError && exitCode == 0 {
4141
return fmt.Errorf("CodeCrafters internal error: faulty test case, expected this test case to raise an error, but it didn't")
4242
}
43-
4443
if !t.ExpectsError && exitCode != 0 {
4544
return fmt.Errorf("CodeCrafters internal error: faulty test case, expected this test case to not raise an error, but it did")
4645
}
4746
if result.ExitCode != exitCode {
48-
return fmt.Errorf("expected exit code %v, got %v", exitCode, result.ExitCode)
47+
return fmt.Errorf("expected %v (exit code %v), got exit code %v", exitCodeToErrorTypeMapping[exitCode], exitCode, result.ExitCode)
4948
}
5049

5150
expectedStdoutLines := []string{expectedStdout}

internal/test_cases/parse_test_case.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,11 @@ func (t *ParseTestCase) Run(executable *interpreter_executable.InterpreterExecut
4646
if t.ExpectsError && exitCode == 0 {
4747
return fmt.Errorf("CodeCrafters internal error: faulty test case, expected this test case to raise an error, but it didn't.")
4848
}
49-
5049
if !t.ExpectsError && exitCode != 0 {
5150
return fmt.Errorf("CodeCrafters internal error: faulty test case, expected this test case to not raise an error, but it did.")
5251
}
53-
5452
if result.ExitCode != exitCode {
55-
return fmt.Errorf("expected exit code %v, got %v", exitCode, result.ExitCode)
53+
return fmt.Errorf("expected %v (exit code %v), got exit code %v", exitCodeToErrorTypeMapping[exitCode], exitCode, result.ExitCode)
5654
}
5755

5856
// We are intentionally not testing the errors lines printed to stderr

internal/test_cases/run_test_case.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,9 @@ func NewRunTestCaseFromFilePath(filePath string) RunTestCase {
6363
panic(fmt.Sprintf("CodeCrafters Internal Error: %s has malformed frontmatter: missing expected_error_type field", filePath))
6464
}
6565

66-
if !(frontMatter.ExpectedErrorType == "none" ||
67-
frontMatter.ExpectedErrorType == "compile" ||
68-
frontMatter.ExpectedErrorType == "runtime") {
66+
if frontMatter.ExpectedErrorType != "none" &&
67+
frontMatter.ExpectedErrorType != "compile" &&
68+
frontMatter.ExpectedErrorType != "runtime" {
6969
panic(fmt.Sprintf("CodeCrafters Internal Error: %s has malformed frontmatter field: expected_error_type shouldn't be %s", filePath, frontMatter.ExpectedErrorType))
7070
}
7171

@@ -100,9 +100,8 @@ func (t *RunTestCase) Run(executable *interpreter_executable.InterpreterExecutab
100100
if t.ExpectedExitCode != ourLoxExitCode {
101101
return fmt.Errorf("CodeCrafters internal error: faulty test case, expected %d exit code, our lox returned %d", t.ExpectedExitCode, ourLoxExitCode)
102102
}
103-
104103
if result.ExitCode != t.ExpectedExitCode {
105-
return fmt.Errorf("expected exit code %v, got %v", t.ExpectedExitCode, result.ExitCode)
104+
return fmt.Errorf("expected %v (exit code %v), got exit code %v", exitCodeToErrorTypeMapping[t.ExpectedExitCode], t.ExpectedExitCode, result.ExitCode)
106105
}
107106

108107
if t.OutputAssertion == nil {

internal/test_cases/tokenize_test_case.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,12 @@ func (t *TokenizeTestCase) Run(executable *interpreter_executable.InterpreterExe
4343
if t.ExpectsError && exitCode == 0 {
4444
return fmt.Errorf("CodeCrafters internal error: faulty test case, expected this test case to raise an error, but it didn't")
4545
}
46-
4746
if !t.ExpectsError && exitCode != 0 {
4847
return fmt.Errorf("CodeCrafters internal error: faulty test case, expected this test case to not raise an error, but it did")
4948
}
5049

5150
if result.ExitCode != exitCode {
52-
return fmt.Errorf("expected exit code %v, got %v", exitCode, result.ExitCode)
51+
return fmt.Errorf("expected %v (exit code %v), got exit code %v", exitCodeToErrorTypeMapping[exitCode], exitCode, result.ExitCode)
5352
}
5453

5554
if len(expectedStderr) > 0 {

internal/test_cases/utils.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,3 +52,9 @@ func logReadableFileContents(logger *logger.Logger, fileContents string) {
5252
logger.Plainf(color.YellowString("[test.lox]") + " " + line)
5353
}
5454
}
55+
56+
var exitCodeToErrorTypeMapping = map[int]string{
57+
0: "no error",
58+
65: "compile error",
59+
70: "runtime error",
60+
}

0 commit comments

Comments
 (0)