From c9a917aefb3c99fe980a64963debeca25143b6f7 Mon Sep 17 00:00:00 2001 From: Drachenfels Date: Wed, 8 May 2024 00:08:41 +0100 Subject: [PATCH] Add first test suite and make sure renpy is not needed to run it. --- tests/__init__.py | 0 tests/conftest.py | 21 ++++++++++++ tests/test_nqtr_button.py | 67 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 88 insertions(+) create mode 100644 tests/__init__.py create mode 100644 tests/conftest.py create mode 100644 tests/test_nqtr_button.py diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 0000000..09e23c4 --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,21 @@ +import builtins +from unittest.mock import MagicMock, patch + +import pytest + + +@pytest.fixture(autouse=True) +def mock_renpy(monkeypatch): + """This trick overrides for time of testing need to have renpy in the sys.path. + + Rationale is that we want to test NQTR library and and renpy usually is installed + globally somewhere else in the OS. + """ + import_orig = builtins.__import__ + + def mocked_import(name, *args, **kwargs): + if name in ("renpy.exports", "renpy.character", "renpy"): + return MagicMock() + return import_orig(name, *args, **kwargs) + + monkeypatch.setattr(builtins, "__import__", mocked_import) diff --git a/tests/test_nqtr_button.py b/tests/test_nqtr_button.py new file mode 100644 index 0000000..3553325 --- /dev/null +++ b/tests/test_nqtr_button.py @@ -0,0 +1,67 @@ +import pytest + + +def test_button(): + """Base tests, to prove that default button state is one we expect""" + from pythonpackages.nqtr.button import Button + + some_button = Button() + + assert some_button.align == (0, 0) + assert some_button.name == "" + assert some_button.label_name is None + assert some_button.button_icon is None + assert some_button.button_icon_selected is None + assert some_button.picture_in_background is None + assert some_button.picture_in_background_selected is None + assert some_button.xalign == 0 + assert some_button.yalign == 0 + assert some_button.hidden is False + assert some_button.default_label_name is None + + +def test_align_not_working_as_expected(): + """Previously this test was showcasing problem with align""" + from pythonpackages.nqtr.button import Button + + some_button = Button() + + assert type(some_button.align) is tuple + assert some_button.align == (0, 0) + + some_button.xalign = 0 + + assert type(some_button.align) is tuple + assert some_button.align == (0, 0) + + +@pytest.mark.parametrize( + "xalign,yalign,xexpected,yexpected", + [ + (0, 0, 0, 0), + (1, 1, 1, 1), + (-1, -1, -1, -1), + (1.1, 1.2, 1.1, 1.2), + (-1.1, -1.2, -1.1, -1.2), + ("", "", 0, 0), + (False, False, 0, 0), + (None, None, 0, 0), + ({}, {}, 0, 0), + ("0", "0", "0", "0"), + ], +) +def test_button_aligns_accept_any_param_except_none( + xalign, yalign, xexpected, yexpected +): + """Check if various xalign, yalign attributes are properly saved to the class, all + Falsey values should be converted to 0 (special caveat for "0", it's not False-y, + but some may thing it is) + """ + from pythonpackages.nqtr.button import Button + + some_button = Button(xalign=xalign, yalign=yalign) + + assert some_button.xalign == xexpected + assert some_button.yalign == yexpected + assert type(some_button.xalign) is type(xexpected) + assert type(some_button.yalign) is type(yexpected)