Coverage for src / competitive_verifier / oj / verify / languages / java.py: 94%
31 statements
« prev ^ index » next coverage.py v7.13.1, created at 2026-03-05 16:00 +0000
« prev ^ index » next coverage.py v7.13.1, created at 2026-03-05 16:00 +0000
1import pathlib
2from collections.abc import Sequence
3from logging import getLogger
4from typing import Any
6from pydantic import ValidationInfo, field_validator
8from competitive_verifier.oj.verify.models import (
9 LanguageEnvironment,
10 OjVerifyUserDefinedConfig,
11)
13from .user_defined import UserDefinedLanguage
15logger = getLogger(__name__)
18class OjVerifyJavaConfig(OjVerifyUserDefinedConfig):
19 execute: None = None # pyright: ignore[reportIncompatibleVariableOverride]
21 @field_validator("execute", "compile", mode="before")
22 @classmethod
23 def name_must_contain_space(cls, v: Any, info: ValidationInfo) -> None: # noqa: ANN401
24 if v is None: 24 ↛ 25line 24 didn't jump to line 25 because the condition on line 24 was never true
25 return
26 raise ValueError(f'You cannot overwrite "{info.field_name}" for Java language')
29class JavaLanguageEnvironment(LanguageEnvironment):
30 @property
31 def name(self) -> str:
32 return "Java"
34 def get_compile_command(
35 self, path: pathlib.Path, *, basedir: pathlib.Path, tempdir: pathlib.Path
36 ) -> list[str]:
37 return ["javac", str(basedir / path)]
39 def get_execute_command(
40 self, path: pathlib.Path, *, basedir: pathlib.Path, tempdir: pathlib.Path
41 ) -> list[str]:
42 relative_path = (basedir / path).relative_to(basedir)
43 class_path = ".".join([*relative_path.parent.parts, relative_path.stem])
44 return ["java", class_path]
47class JavaLanguage(UserDefinedLanguage):
48 def __init__(self, *, config: OjVerifyJavaConfig | None):
49 super().__init__(extension="java", config=config or OjVerifyJavaConfig())
51 def list_environments(
52 self, path: pathlib.Path, *, basedir: pathlib.Path
53 ) -> Sequence[LanguageEnvironment]:
54 return [JavaLanguageEnvironment()]