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

1import pathlib 

2from collections.abc import Sequence 

3from logging import getLogger 

4from typing import Any 

5 

6from pydantic import ValidationInfo, field_validator 

7 

8from competitive_verifier.oj.verify.models import ( 

9 LanguageEnvironment, 

10 OjVerifyUserDefinedConfig, 

11) 

12 

13from .user_defined import UserDefinedLanguage 

14 

15logger = getLogger(__name__) 

16 

17 

18class OjVerifyJavaConfig(OjVerifyUserDefinedConfig): 

19 execute: None = None # pyright: ignore[reportIncompatibleVariableOverride] 

20 

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') 

27 

28 

29class JavaLanguageEnvironment(LanguageEnvironment): 

30 @property 

31 def name(self) -> str: 

32 return "Java" 

33 

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)] 

38 

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] 

45 

46 

47class JavaLanguage(UserDefinedLanguage): 

48 def __init__(self, *, config: OjVerifyJavaConfig | None): 

49 super().__init__(extension="java", config=config or OjVerifyJavaConfig()) 

50 

51 def list_environments( 

52 self, path: pathlib.Path, *, basedir: pathlib.Path 

53 ) -> Sequence[LanguageEnvironment]: 

54 return [JavaLanguageEnvironment()]