From a001b26b663b9a183a1f21d7f2992685355bcf96 Mon Sep 17 00:00:00 2001 From: Boming Zhang Date: Tue, 15 Oct 2024 03:42:16 -0400 Subject: [PATCH] feat(parser/diff): remove result status check --- internal/parser/diff/parser.go | 84 +++++++++++++++------------------- 1 file changed, 37 insertions(+), 47 deletions(-) diff --git a/internal/parser/diff/parser.go b/internal/parser/diff/parser.go index 360e91b..bd31ace 100644 --- a/internal/parser/diff/parser.go +++ b/internal/parser/diff/parser.go @@ -7,7 +7,6 @@ import ( "strings" "unicode" - "github.com/criyle/go-judge/envexec" "github.com/joint-online-judge/JOJ3/internal/stage" ) @@ -24,8 +23,7 @@ type Conf struct { PassComment string `default:"🥳Passed!\n"` FailComment string `default:"🧐Failed...\n"` Cases []struct { - IgnoreResultStatus bool - Outputs []struct { + Outputs []struct { Score int FileName string AnswerPath string @@ -54,51 +52,43 @@ func (*Diff) Run(results []stage.ExecutorResult, confAny any) ( result := results[i] score := 0 comment := "" - if !caseConf.IgnoreResultStatus && - result.Status != stage.Status(envexec.StatusAccepted) { - forceQuit = true - comment += fmt.Sprintf( - "Unexpected executor status: %s.", result.Status, - ) - } else { - for _, output := range caseConf.Outputs { - answer, err := os.ReadFile(output.AnswerPath) - if err != nil { - return nil, true, err - } - slog.Debug("compare", "filename", output.FileName, - "answer path", output.AnswerPath, - "actual", result.Files[output.FileName], - "answer", string(answer)) - // If no difference, assign score - if compareChars(string(answer), result.Files[output.FileName], - output.CompareSpace) { - score += output.Score - comment += conf.PassComment + for _, output := range caseConf.Outputs { + answer, err := os.ReadFile(output.AnswerPath) + if err != nil { + return nil, true, err + } + slog.Debug("compare", "filename", output.FileName, + "answer path", output.AnswerPath, + "actual", result.Files[output.FileName], + "answer", string(answer)) + // If no difference, assign score + if compareChars(string(answer), result.Files[output.FileName], + output.CompareSpace) { + score += output.Score + comment += conf.PassComment + } else { + comment += conf.FailComment + comment += fmt.Sprintf("Difference found in `%s`.\n", + output.FileName) + if !output.AlwaysHide { + // Convert answer to string and split by lines + stdoutLines := strings.Split(string(answer), "\n") + resultLines := strings.Split( + result.Files[output.FileName], "\n") + + // Generate Myers diff + diffOps := myersDiff(stdoutLines, resultLines) + + // Generate diff block with surrounding context + diffOutput := generateDiffWithContext( + stdoutLines, resultLines, diffOps) + diffOutput = strings.TrimSuffix(diffOutput, "\n \n") + comment += fmt.Sprintf( + "```diff\n%s\n```\n", + diffOutput, + ) } else { - comment += conf.FailComment - comment += fmt.Sprintf("Difference found in `%s`.\n", - output.FileName) - if !output.AlwaysHide { - // Convert answer to string and split by lines - stdoutLines := strings.Split(string(answer), "\n") - resultLines := strings.Split( - result.Files[output.FileName], "\n") - - // Generate Myers diff - diffOps := myersDiff(stdoutLines, resultLines) - - // Generate diff block with surrounding context - diffOutput := generateDiffWithContext( - stdoutLines, resultLines, diffOps) - diffOutput = strings.TrimSuffix(diffOutput, "\n \n") - comment += fmt.Sprintf( - "```diff\n%s\n```\n", - diffOutput, - ) - } else { - comment += "(Content hidden.)\n" - } + comment += "(Content hidden.)\n" } } }