Skip to content

Commit

Permalink
fix: tests due to api changes
Browse files Browse the repository at this point in the history
  • Loading branch information
FlickerSoul committed Nov 28, 2023
1 parent f7be08f commit 2c9896c
Show file tree
Hide file tree
Showing 10 changed files with 56 additions and 68 deletions.
15 changes: 4 additions & 11 deletions tests/assets/problems/assess_post_hooks.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
import ast
import inspect
from typing import Any, Tuple

from gapper import problem, test_case, test_cases
from gapper.core.test_result import TestResult
from gapper.core.unittest_wrapper import TestCaseWrapper
from gapper.core.types import PostTestHookData

apple: int

Expand All @@ -19,14 +17,9 @@ def check_recursive_ast(fn):
return False


def recursive_check(
case: TestCaseWrapper,
result_proxy: TestResult,
solution,
submission,
sln_results: Tuple[Any, str | None],
sub_results: Tuple[Any, str | None],
) -> None:
def recursive_check(data: PostTestHookData) -> None:
result_proxy, submission = data.result_proxy, data.submission

if not check_recursive_ast(submission):
result_proxy.set_score(result_proxy.max_score // 2)
result_proxy.set_pass_status("failed")
Expand Down
21 changes: 8 additions & 13 deletions tests/assets/problems/assess_post_tests.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,14 @@
from typing import List
from gapper import post_tests, problem, test_cases
from gapper.core.types import PostTestsData

from gapper import TestResult, post_tests, problem, test_cases
from gapper.gradescope.datatypes.gradescope_meta import (
GradescopeSubmissionMetadata,
)


def check_at_least_half_is_correct(
test_results: List[TestResult],
test_proxy: TestResult,
metadata: GradescopeSubmissionMetadata | None,
) -> None:
def check_at_least_half_is_correct(data: PostTestsData) -> None:
# if the number of passed tests is greater than half of the total number of tests
if sum(result.is_passed for result in test_results) > len(test_results) // 2:
test_proxy.set_pass_status("passed")
if (
sum(result.is_passed for result in data.test_results)
> len(data.test_results) // 2
):
data.result_proxy.set_pass_status("passed")


@test_cases.singular_param_iter([i for i in range(10)], gap_max_score=1)
Expand Down
6 changes: 4 additions & 2 deletions tests/assets/problems/assess_pre_hooks.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from tempfile import NamedTemporaryFile

from gapper import problem, tc, tcs
from gapper.core.unittest_wrapper import TestCaseWrapper
from gapper.core.types import PreTestHookData

apple: int

Expand All @@ -11,7 +11,9 @@ def generate_file_content(lines: int) -> str:
return "\n".join(str(random.randint(0, 100)) for _ in range(lines))


def process_file(case: TestCaseWrapper, result_proxy, solution, submission):
def process_file(data: PreTestHookData):
case = data.case

file_content = case.test_param.args[0]
with NamedTemporaryFile(mode="w", delete=False) as f:
f.write(file_content)
Expand Down
8 changes: 3 additions & 5 deletions tests/assets/problems/assess_pre_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
import tempfile
from pathlib import Path

from gapper import TestResult, pre_tests, problem, tcs
from gapper.gradescope.datatypes.gradescope_meta import GradescopeSubmissionMetadata
from gapper import pre_tests, problem, tcs
from gapper.core.types import PreTestsData

files = []

Expand All @@ -19,9 +19,7 @@ def make_files(file_num: int) -> None:
f.write(f"{random.randint(1, 100)}\n")


def file_generator(
result_proxy: TestResult | None, metadata: GradescopeSubmissionMetadata | None
) -> None:
def file_generator(_: PreTestsData) -> None:
make_files(5)


Expand Down
19 changes: 7 additions & 12 deletions tests/assets/problems/capture_context.py
Original file line number Diff line number Diff line change
@@ -1,23 +1,18 @@
from typing import Type

from gapper import problem, test_case
from gapper.core.test_result import TestResult
from gapper.core.unittest_wrapper import TestCaseWrapper
from gapper.core.types import CustomTestData


class GasStation:
pass


def test_override(
tc: TestCaseWrapper, result: TestResult, solution: Type, submission: Type
) -> None:
gas_station = tc.context.GasStation()
sol_obj = solution(gas_station)
sub_obj = submission(gas_station)
tc.assertEqual(sol_obj.gas_station, sub_obj.gas_station)
def test_override(data: CustomTestData) -> None:
gas_station = data.case.context.GasStation()
sol_obj = data.solution(gas_station)
sub_obj = data.submission(gas_station)
data.case.assertEqual(sol_obj.gas_station, sub_obj.gas_station)

result.set_pass_status("passed")
data.result_proxy.set_pass_status("passed")


@test_case(gap_override_test=test_override)
Expand Down
11 changes: 5 additions & 6 deletions tests/assets/problems/easy_context.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
from typing import Callable

from gapper import problem, test_case, test_cases
from gapper.core.test_result import TestResult
from gapper.core.unittest_wrapper import TestCaseWrapper
from gapper.core.types import CustomTestData


def my_adder(a, b) -> int:
Expand All @@ -12,14 +11,14 @@ def my_adder(a, b) -> int:
adder: Callable[[int, int], int] # adder is not defined here, this is just a type hint


def custom_test(case: TestCaseWrapper, result_proxy: TestResult, solution, submission):
assert solution(*case.test_param.args, my_adder) == submission(
*case.test_param.args,
def custom_test(data: CustomTestData) -> None:
assert data.solution(*data.case.test_param.args, my_adder) == data.submission(
*data.case.test_param.args,
adder, # notice here,
)
# adder is not defined, but we can use it
# this is because it will be captured from students' submission context
assert my_adder(*case.test_param.args) == adder(*case.test_param.args)
assert my_adder(*data.case.test_param.args) == adder(*data.case.test_param.args)


@test_cases.param_iter(([i, i + 1] for i in range(10)), gap_override_test=custom_test)
Expand Down
12 changes: 5 additions & 7 deletions tests/assets/problems/easy_context_with_locals.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
from typing import Callable

from gapper import problem, test_case, test_cases
from gapper.core.test_result import TestResult
from gapper.core.types import CustomTestFn
from gapper.core.unittest_wrapper import TestCaseWrapper
from gapper.core.types import CustomTestData, CustomTestFn


def factory() -> CustomTestFn:
Expand All @@ -13,13 +11,13 @@ def my_adder(a, b) -> int:
adder: Callable[[int, int], int]

def custom_test(
case: TestCaseWrapper, result_proxy: TestResult, solution, submission
data: CustomTestData,
):
nonlocal adder
assert solution(*case.test_param.args, my_adder) == submission(
*case.test_param.args, adder
assert data.solution(*data.case.test_param.args, my_adder) == data.submission(
*data.case.test_param.args, adder
)
assert my_adder(*case.test_param.args) == adder(*case.test_param.args)
assert my_adder(*data.case.test_param.args) == adder(*data.case.test_param.args)

return custom_test

Expand Down
6 changes: 4 additions & 2 deletions tests/assets/problems/override_testing.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from gapper import problem, test_case, test_cases
from gapper.core.unittest_wrapper import TestCaseWrapper
from gapper.core.types import CustomTestData


class PrivateTestingMiddleware:
Expand All @@ -10,7 +10,9 @@ def respond(self, response: str) -> str:
return response * 2 + self.secret


def custom_test(case: TestCaseWrapper, result_proxy, solution, submission) -> None:
def custom_test(data: CustomTestData) -> None:
case, solution, submission = data.case, data.solution, data.submission

standard_middleware = case.context.StandardMiddleware()
standard_sln = solution(standard_middleware)
standard_sub = submission(standard_middleware)
Expand Down
8 changes: 3 additions & 5 deletions tests/assets/problems/pre_tests_with_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
from pathlib import Path
from typing import Generator

from gapper import TestResult, pre_tests, problem, tcs
from gapper.gradescope.datatypes.gradescope_meta import GradescopeSubmissionMetadata
from gapper import pre_tests, problem, tcs
from gapper.core.types import PreTestsData

files = []

Expand All @@ -22,9 +22,7 @@ def make_files(file_num: int) -> Generator[None, None, None]:
yield


def file_generator(
result_proxy: TestResult | None, metadata: GradescopeSubmissionMetadata | None
) -> Generator[None, None, None]:
def file_generator(_: PreTestsData) -> Generator[None, None, None]:
return make_files(5)


Expand Down
18 changes: 13 additions & 5 deletions tests/test_hook.py
Original file line number Diff line number Diff line change
@@ -1,21 +1,29 @@
from dataclasses import dataclass, field
from typing import Generator

import pytest
from gapper.core.errors import InternalError, TestFailedError
from gapper.core.hook import HookBase
from gapper.core.test_result import TestResult
from gapper.core.types import HookDataBase


class TestHook(HookBase):
_hook_type = "test_hook"


@dataclass
class TestHookData(HookDataBase):
result_proxy: TestResult = field(default=None)


def test_generator_not_exhausted() -> None:
def hook_fn(*_, **__) -> Generator[None, None, None]:
def hook_fn(data) -> Generator[None, None, None]:
yield
yield

hb = TestHook(hook_fn=hook_fn, as_test_case=False)
hb.run()
hb.run(TestHookData())

with pytest.raises(InternalError, match="Generator not exhausted"):
hb.tear_down()
Expand All @@ -26,7 +34,7 @@ def hook_fn(*_, **__) -> Generator[None, None, None]:
yield

hb = TestHook(hook_fn=hook_fn, as_test_case=False)
hb.run()
hb.run(TestHookData())
hb.tear_down()


Expand All @@ -35,7 +43,7 @@ def hook_fn(*_, **__) -> None:
pass

hb = TestHook(hook_fn=hook_fn, as_test_case=False)
hb.run()
hb.run(TestHookData())
hb.tear_down()


Expand All @@ -44,6 +52,6 @@ def hook_fn(*_, **__) -> None:
assert False, "Test Failed"

hb = TestHook(hook_fn=hook_fn)
test_result = hb.run()
test_result = hb.run(TestHookData())
assert len(test_result.errors) == 1
assert isinstance(test_result.errors[0], TestFailedError)

0 comments on commit 2c9896c

Please sign in to comment.