With avocado-classless we obviously can't use the built in assertion methods from unittest / avocado-instrumented. Add our own non-OOP helpers for this. Signed-off-by: David Gibson <david(a)gibson.dropbear.id.au> --- .../avocado_classless/test.py | 43 +++++++++++++++++++ test/avocado_classless/selftests.py | 43 ++++++++++++++++++- 2 files changed, 85 insertions(+), 1 deletion(-) diff --git a/test/avocado_classless/avocado_classless/test.py b/test/avocado_classless/avocado_classless/test.py index eb2caef2..0602f9c9 100644 --- a/test/avocado_classless/avocado_classless/test.py +++ b/test/avocado_classless/avocado_classless/test.py @@ -9,6 +9,8 @@ Test writer facing interface to avocodo-classless """ +from collections import Counter + from .manifest import manifest_add @@ -16,3 +18,44 @@ def test(func): """Function decorator to mark a function as a classless test""" manifest_add(func.__module__, func.__name__, func) return func + +# +# Assertion helpers without unnecessary OOP nonsense +# + + +def assert_eq(left, right): + """assert_eq(left, right) + + If left != right, fail with message showing both values + """ + assert (left == right), f'{left} != {right}' + + +def assert_in(member, group): + """assert_in(member, group) + + If member not in group, fail with a message showing both values + """ + assert member in group, f'{member} not in {group}' + + +def assert_eq_unordered(left, right): + """assert_eq_unordered(left, right) + + Fails if sequences left and right are different, ignoring order. + """ + assert Counter(left) == Counter(right), \ + f'{left} != {right} (ignoring order)' + + +def assert_raises(exc, func, *args, **kwargs): + """assert_raises(exc, func, *args, **kwargs) + + If func(*args, **kwargs) does not raise exc, fail + """ + try: + func(*args, **kwargs) + raise AssertionError(f'Expected {exc.__name__} exception') + except exc: + pass diff --git a/test/avocado_classless/selftests.py b/test/avocado_classless/selftests.py index 26d02378..12a4a5a2 100644 --- a/test/avocado_classless/selftests.py +++ b/test/avocado_classless/selftests.py @@ -4,8 +4,12 @@ Self tests for avocado-classless plugins """ +import types + from avocado_classless.manifest import manifest_add -from avocado_classless.test import test +from avocado_classless.test import ( + assert_eq, assert_eq_unordered, assert_in, assert_raises, test +) @test @@ -20,3 +24,40 @@ def assert_true(): # Check re-registering a function under a different name manifest_add(__name__, "trivial2", trivial) + + +@test +def test_assert_eq(): + assert_eq(1, 1) + + +@test +def test_assert_in(): + assert_in(1, [1, 2, 3]) + assert_raises(AssertionError, assert_in, 'x', 'hello') + + +@test +def test_assert_raises(): + def boom(exc): + raise exc + assert_raises(ValueError, boom, ValueError) + + +@test +def test_assert_eq_unordered(): + assert_eq_unordered([1, 2, 3], (1, 2, 3)) + assert_eq_unordered([1, 2, 3], [2, 3, 1]) + assert_eq_unordered([1, 1, 1], (1, 1, 1)) + assert_raises(AssertionError, assert_eq_unordered, [1, 2, 3], [1, 2, 4]) + assert_raises(AssertionError, assert_eq_unordered, [1, 1], [1, 1, 1]) + + +# Test we report attempting to double register the same test name +@test +def test_double_register(): + def double_register(): + mod = types.ModuleType('dummy') + manifest_add(mod, "test", trivial) + manifest_add(mod, "test", assert_true) + assert_raises(ValueError, double_register) -- 2.41.0