Skip to content

Commit 2861d33

Browse files
committed
Add tests for TestCase.from_record method. Switch the TestCase.from_record method from static to class method.
1 parent dd1ae42 commit 2861d33

File tree

2 files changed

+55
-6
lines changed

2 files changed

+55
-6
lines changed

src/judge0/base_types.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import copy
2+
13
from dataclasses import dataclass
24
from enum import IntEnum
35
from typing import Optional, Protocol, runtime_checkable, Sequence, Union
@@ -15,21 +17,23 @@ class TestCase:
1517
input: Optional[str] = None
1618
expected_output: Optional[str] = None
1719

18-
@staticmethod
19-
def from_record(test_case: Optional[TestCaseType] = None) -> "TestCase":
20+
@classmethod
21+
def from_record(cls, test_case: TestCaseType) -> "TestCase":
2022
"""Create a TestCase from built-in types."""
2123
if isinstance(test_case, (tuple, list)):
2224
test_case = {
2325
field: value
2426
for field, value in zip(("input", "expected_output"), test_case)
2527
}
2628
if isinstance(test_case, dict):
27-
return TestCase(
29+
return cls(
2830
input=test_case.get("input", None),
2931
expected_output=test_case.get("expected_output", None),
3032
)
31-
if isinstance(test_case, TestCase) or test_case is None:
32-
return test_case
33+
if isinstance(test_case, cls):
34+
return copy.deepcopy(test_case)
35+
if test_case is None:
36+
return cls()
3337
raise ValueError(
3438
f"Cannot create TestCase object from object of type {type(test_case)}."
3539
)

tests/test_api_test_cases.py

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,51 @@
66
from judge0.api import create_submissions_from_test_cases
77

88

9+
@pytest.mark.parametrize(
10+
"test_case,expected_output",
11+
[
12+
[
13+
TestCase(input="input_1", expected_output="output_1"),
14+
TestCase(input="input_1", expected_output="output_1"),
15+
],
16+
[
17+
tuple([]),
18+
TestCase(input=None, expected_output=None),
19+
],
20+
[
21+
("input_tuple",),
22+
TestCase(input="input_tuple", expected_output=None),
23+
],
24+
[
25+
("input_tuple", "output_tuple"),
26+
TestCase(input="input_tuple", expected_output="output_tuple"),
27+
],
28+
[
29+
[],
30+
TestCase(input=None, expected_output=None),
31+
],
32+
[
33+
["input_list"],
34+
TestCase(input="input_list", expected_output=None),
35+
],
36+
[
37+
["input_list", "output_list"],
38+
TestCase(input="input_list", expected_output="output_list"),
39+
],
40+
[
41+
{"input": "input_dict", "expected_output": "output_dict"},
42+
TestCase(input="input_dict", expected_output="output_dict"),
43+
],
44+
[
45+
None,
46+
TestCase(),
47+
],
48+
],
49+
)
50+
def test_test_case_from_record(test_case, expected_output):
51+
assert TestCase.from_record(test_case) == expected_output
52+
53+
954
@pytest.mark.parametrize(
1055
"submissions,test_cases,expected_type",
1156
[
@@ -19,7 +64,7 @@ def test_create_submissions_from_test_cases_return_type(
1964
submissions, test_cases, expected_type
2065
):
2166
output = create_submissions_from_test_cases(submissions, test_cases)
22-
assert type(output) == expected_type
67+
assert type(output) is expected_type
2368

2469

2570
@pytest.mark.parametrize(

0 commit comments

Comments
 (0)