Search in sources :

Example 1 with SubmissionDetailDTO

use of cn.edu.zjnu.acm.judge.data.dto.SubmissionDetailDTO in project judge by zjnu-acm.

the class JudgeRunnerTest method test.

@ParameterizedTest(name = "{index}: {0}")
@MethodSource("data")
public void test(String key, Checker checker, Path path) throws IOException {
    Path work = Files.createDirectories(Paths.get("target/work/judgeRunnerTest").resolve(key));
    Path[] groovyJars = GroovyHolder.getPaths();
    assertThat(groovyJars).isNotEmpty();
    for (Path groovyJar : groovyJars) {
        Files.copy(groovyJar, work.resolve(groovyJar.getFileName().toString()));
    }
    String cp = Arrays.stream(groovyJars).map(p -> p.getFileName().toString()).collect(Collectors.joining(File.pathSeparator));
    String executeCommand = build("java", "-cp", cp, groovy.ui.GroovyMain.class.getName(), "Main.groovy");
    Language groovy = Language.builder().name("groovy").sourceExtension("groovy").executeCommand(executeCommand).executableExtension("groovy").description("").timeFactor(2).build();
    log.warn("Language groovy: {}", groovy);
    languageMapper.save(groovy);
    String extension = getExtension(path);
    int languageId = findFirstLanguageByExtension(EXTENSION_MAP.get(extension));
    Language language = languageMapper.findOne(languageId);
    Objects.requireNonNull(language, "language " + languageId + " not exists");
    String source = new String(Files.readAllBytes(path), StandardCharsets.UTF_8);
    RunRecord runRecord = RunRecord.builder().source(source).timeLimit(timeLimit).memoryLimit(memoryLimit).language(language).build();
    RunResult runResult = judgeRunner.run(runRecord, work, judgeData, validator, false);
    int expectScore = SPECIAL_SCORE.getOrDefault(key, checker.getScore());
    String expectedCaseResult = ResultType.getCaseScoreDescription(checker.getStatus());
    Status resultStatus = runResult.getType();
    if (resultStatus != null) {
        assertThat(resultStatus).describedAs("type will either be null or COMPILATION_ERROR," + " if got other result, please modify this file").isEqualTo(Status.COMPILATION_ERROR);
    }
    String detail1 = runResult.getDetail();
    if (resultStatus == Status.COMPILATION_ERROR) {
        assertThat(detail1).describedAs("submission detail").isNull();
    } else {
        List<SubmissionDetailDTO> details = detail1 != null ? submissionService.parseSubmissionDetail(detail1) : null;
        String msg = "%s %s %s";
        Object[] param = { key, details, expectedCaseResult };
        assertThat(runResult.getScore()).describedAs(msg, param).isEqualTo(expectScore);
        assertThat(details).describedAs(msg, param).anyMatch(detail -> expectedCaseResult.equals(detail.getResult()));
    }
}
Also used : Path(java.nio.file.Path) Arrays(java.util.Arrays) URISyntaxException(java.net.URISyntaxException) PlatformAssuming.assumingWindows(cn.edu.zjnu.acm.judge.test.PlatformAssuming.assumingWindows) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) RunWith(org.junit.runner.RunWith) Status(cn.edu.zjnu.acm.judge.core.Status) Autowired(org.springframework.beans.factory.annotation.Autowired) ArrayList(java.util.ArrayList) Language(cn.edu.zjnu.acm.judge.domain.Language) Validator(cn.edu.zjnu.acm.judge.core.Validator) SubmissionDetailDTO(cn.edu.zjnu.acm.judge.data.dto.SubmissionDetailDTO) StringTokenizer(java.util.StringTokenizer) Map(java.util.Map) Arguments.arguments(org.junit.jupiter.params.provider.Arguments.arguments) Path(java.nio.file.Path) Application(cn.edu.zjnu.acm.judge.Application) MethodSource(org.junit.jupiter.params.provider.MethodSource) WebAppConfiguration(org.springframework.test.context.web.WebAppConfiguration) ImmutableMap(com.google.common.collect.ImmutableMap) Files(java.nio.file.Files) RunResult(cn.edu.zjnu.acm.judge.support.RunResult) GroovyHolder(cn.edu.zjnu.acm.judge.core.GroovyHolder) IOException(java.io.IOException) RunRecord(cn.edu.zjnu.acm.judge.support.RunRecord) Arguments(org.junit.jupiter.params.provider.Arguments) Collectors(java.util.stream.Collectors) File(java.io.File) StandardCharsets(java.nio.charset.StandardCharsets) Objects(java.util.Objects) List(java.util.List) Slf4j(lombok.extern.slf4j.Slf4j) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest) Stream(java.util.stream.Stream) SpringBootTest(org.springframework.boot.test.context.SpringBootTest) Paths(java.nio.file.Paths) ResultType(cn.edu.zjnu.acm.judge.util.ResultType) SimpleValidator(cn.edu.zjnu.acm.judge.core.SimpleValidator) LanguageMapper(cn.edu.zjnu.acm.judge.mapper.LanguageMapper) JUnitPlatform(org.junit.platform.runner.JUnitPlatform) JudgeData(cn.edu.zjnu.acm.judge.support.JudgeData) Transactional(org.springframework.transaction.annotation.Transactional) Status(cn.edu.zjnu.acm.judge.core.Status) RunRecord(cn.edu.zjnu.acm.judge.support.RunRecord) Language(cn.edu.zjnu.acm.judge.domain.Language) SubmissionDetailDTO(cn.edu.zjnu.acm.judge.data.dto.SubmissionDetailDTO) RunResult(cn.edu.zjnu.acm.judge.support.RunResult) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest) MethodSource(org.junit.jupiter.params.provider.MethodSource)

Example 2 with SubmissionDetailDTO

use of cn.edu.zjnu.acm.judge.data.dto.SubmissionDetailDTO in project judge by zjnu-acm.

the class ShowSubmissionDetailsController method showSolutionDetails.

@GetMapping("showsolutiondetails")
public String showSolutionDetails(HttpServletRequest request, @RequestParam("solution_id") long submissionId) {
    Submission submission = submissionService.findById(submissionId);
    Long contestId = submission.getContest();
    if (contestId != null) {
        Contest contest = contestMapper.findOne(contestId);
        if (contest != null) {
            request.setAttribute("contestId", contest.getId());
        }
    }
    if (!submissionService.canView(request, submission)) {
        throw new BusinessException(BusinessCode.VIEW_SOURCE_PERMISSION_DENIED, submissionId);
    }
    List<SubmissionDetailDTO> details = submissionService.getSubmissionDetail(submissionId);
    request.setAttribute("details", details);
    request.setAttribute("user", submission.getUser());
    request.setAttribute("problem", submission.getProblem());
    request.setAttribute("result", ResultType.getResultDescription(submission.getScore()));
    request.setAttribute("score", submission.getScore());
    request.setAttribute("time", submission.getTime());
    request.setAttribute("memory", submission.getMemory());
    return "submissions/detail";
}
Also used : BusinessException(cn.edu.zjnu.acm.judge.exception.BusinessException) Submission(cn.edu.zjnu.acm.judge.domain.Submission) SubmissionDetailDTO(cn.edu.zjnu.acm.judge.data.dto.SubmissionDetailDTO) Contest(cn.edu.zjnu.acm.judge.domain.Contest) GetMapping(org.springframework.web.bind.annotation.GetMapping)

Aggregations

SubmissionDetailDTO (cn.edu.zjnu.acm.judge.data.dto.SubmissionDetailDTO)2 Application (cn.edu.zjnu.acm.judge.Application)1 GroovyHolder (cn.edu.zjnu.acm.judge.core.GroovyHolder)1 SimpleValidator (cn.edu.zjnu.acm.judge.core.SimpleValidator)1 Status (cn.edu.zjnu.acm.judge.core.Status)1 Validator (cn.edu.zjnu.acm.judge.core.Validator)1 Contest (cn.edu.zjnu.acm.judge.domain.Contest)1 Language (cn.edu.zjnu.acm.judge.domain.Language)1 Submission (cn.edu.zjnu.acm.judge.domain.Submission)1 BusinessException (cn.edu.zjnu.acm.judge.exception.BusinessException)1 LanguageMapper (cn.edu.zjnu.acm.judge.mapper.LanguageMapper)1 JudgeData (cn.edu.zjnu.acm.judge.support.JudgeData)1 RunRecord (cn.edu.zjnu.acm.judge.support.RunRecord)1 RunResult (cn.edu.zjnu.acm.judge.support.RunResult)1 PlatformAssuming.assumingWindows (cn.edu.zjnu.acm.judge.test.PlatformAssuming.assumingWindows)1 ResultType (cn.edu.zjnu.acm.judge.util.ResultType)1 ImmutableMap (com.google.common.collect.ImmutableMap)1 File (java.io.File)1 IOException (java.io.IOException)1 URISyntaxException (java.net.URISyntaxException)1