62 lines
2.0 KiB
Python
62 lines
2.0 KiB
Python
from __future__ import annotations
|
|
|
|
import typing as t
|
|
import unittest
|
|
|
|
from tutor.core.hooks import contexts, filters
|
|
|
|
|
|
class PluginFiltersTests(unittest.TestCase):
|
|
def tearDown(self) -> None:
|
|
super().tearDown()
|
|
filters.clear_all(context="tests")
|
|
|
|
def run(self, result: t.Any = None) -> t.Any:
|
|
with contexts.enter("tests"):
|
|
return super().run(result=result)
|
|
|
|
def test_add(self) -> None:
|
|
@filters.add("tests:count-sheeps")
|
|
def filter1(value: int) -> int:
|
|
return value + 1
|
|
|
|
value = filters.apply("tests:count-sheeps", 0)
|
|
self.assertEqual(1, value)
|
|
|
|
def test_add_items(self) -> None:
|
|
@filters.add("tests:add-sheeps")
|
|
def filter1(sheeps: list[int]) -> list[int]:
|
|
return sheeps + [0]
|
|
|
|
filters.add_item("tests:add-sheeps", 1)
|
|
filters.add_item("tests:add-sheeps", 2)
|
|
filters.add_items("tests:add-sheeps", [3, 4])
|
|
|
|
sheeps: list[int] = filters.apply("tests:add-sheeps", [])
|
|
self.assertEqual([0, 1, 2, 3, 4], sheeps)
|
|
|
|
def test_filter_callbacks(self) -> None:
|
|
callback = filters.FilterCallback(lambda _: 1)
|
|
self.assertTrue(callback.is_in_context(None))
|
|
self.assertFalse(callback.is_in_context("customcontext"))
|
|
self.assertEqual(1, callback.apply(0))
|
|
|
|
def test_filter_context(self) -> None:
|
|
with contexts.enter("testcontext"):
|
|
filters.add_item("test:sheeps", 1)
|
|
filters.add_item("test:sheeps", 2)
|
|
|
|
self.assertEqual([1, 2], filters.apply("test:sheeps", []))
|
|
self.assertEqual(
|
|
[1], filters.apply_from_context("testcontext", "test:sheeps", [])
|
|
)
|
|
|
|
def test_clear_context(self) -> None:
|
|
with contexts.enter("testcontext"):
|
|
filters.add_item("test:sheeps", 1)
|
|
filters.add_item("test:sheeps", 2)
|
|
|
|
self.assertEqual([1, 2], filters.apply("test:sheeps", []))
|
|
filters.clear("test:sheeps", context="testcontext")
|
|
self.assertEqual([2], filters.apply("test:sheeps", []))
|