From a42ea1cd69fcf3f6c1b2ff79871cd00f24b95118 Mon Sep 17 00:00:00 2001 From: tassaron Date: Fri, 22 Apr 2022 17:10:35 -0400 Subject: add commandline option for tests. add first tests --- src/tests/__init__.py | 32 ++++++++++++++++++++++++++++++++ src/tests/data/test.jpg | Bin 0 -> 48766 bytes src/tests/data/test.ogg | Bin 0 -> 30043 bytes src/tests/data/test.png | Bin 0 -> 220 bytes src/tests/test_core_init.py | 19 +++++++++++++++++++ src/tests/test_export_classic.py | 5 +++++ 6 files changed, 56 insertions(+) create mode 100644 src/tests/__init__.py create mode 100644 src/tests/data/test.jpg create mode 100644 src/tests/data/test.ogg create mode 100644 src/tests/data/test.png create mode 100644 src/tests/test_core_init.py create mode 100644 src/tests/test_export_classic.py (limited to 'src/tests') diff --git a/src/tests/__init__.py b/src/tests/__init__.py new file mode 100644 index 0000000..f2b2ff1 --- /dev/null +++ b/src/tests/__init__.py @@ -0,0 +1,32 @@ +import pytest +import os +import sys +from ..core import Core +from ..command import Command + + +@pytest.fixture +def core(): + return Core() + + +@pytest.fixture +def command(): + """Like a MainWindow for commandline mode, this owns the Core""" + return Command() + + +def run(logFile): + """Run Pytest, which then imports and runs all tests in this module.""" + with open(logFile, "w") as f: + # temporarily redirect stdout to a text file so we capture pytest's output + sys.stdout = f + try: + val = pytest.main([ + os.path.dirname(__file__), + "-s", # disable pytest's internal capturing of stdout etc. + ]) + finally: + sys.stdout = sys.__stdout__ + + return val diff --git a/src/tests/data/test.jpg b/src/tests/data/test.jpg new file mode 100644 index 0000000..86266d9 Binary files /dev/null and b/src/tests/data/test.jpg differ diff --git a/src/tests/data/test.ogg b/src/tests/data/test.ogg new file mode 100644 index 0000000..46af76c Binary files /dev/null and b/src/tests/data/test.ogg differ diff --git a/src/tests/data/test.png b/src/tests/data/test.png new file mode 100644 index 0000000..f1ffd4a Binary files /dev/null and b/src/tests/data/test.png differ diff --git a/src/tests/test_core_init.py b/src/tests/test_core_init.py new file mode 100644 index 0000000..696533a --- /dev/null +++ b/src/tests/test_core_init.py @@ -0,0 +1,19 @@ +from .__init__ import core + + +def test_component_names(core): + assert core.compNames == [ + 'Classic Visualizer', + 'Color', + "Conway's Game of Life", + 'Image', + 'Sound', + 'Spectrum', + 'Title Text', + 'Video', + 'Waveform', + ] + + +def test_moduleindex(core): + assert core.moduleIndexFor("Classic Visualizer") == 0 diff --git a/src/tests/test_export_classic.py b/src/tests/test_export_classic.py new file mode 100644 index 0000000..a6d3e8c --- /dev/null +++ b/src/tests/test_export_classic.py @@ -0,0 +1,5 @@ +from .__init__ import command + + +def test_export_classic_visualizer_default(command): + assert command -- cgit v1.2.3 From 17b4cba6d1a5f24b4de3b53f79b93dd409e28ccd Mon Sep 17 00:00:00 2001 From: tassaron Date: Tue, 26 Apr 2022 13:10:29 -0400 Subject: tests for commandline argument parsing --- src/command.py | 6 +++++- src/main.py | 12 +++++------ src/tests/__init__.py | 4 ++++ src/tests/test_commandline_parser.py | 39 ++++++++++++++++++++++++++++++++++++ src/tests/test_export_classic.py | 5 ----- 5 files changed, 54 insertions(+), 12 deletions(-) create mode 100644 src/tests/test_commandline_parser.py delete mode 100644 src/tests/test_export_classic.py (limited to 'src/tests') diff --git a/src/command.py b/src/command.py index 0aab0f7..db72de7 100644 --- a/src/command.py +++ b/src/command.py @@ -133,14 +133,18 @@ class Command(QtCore.QObject): if 'audioFile' in key: input = value self.createAudioVisualisation(input, output) + return "commandline" elif self.args.input and self.args.output: self.createAudioVisualisation(self.args.input, self.args.output) + return "commandline" - elif 'help' not in sys.argv: + elif 'help' not in sys.argv and self.args.projpath is None and '--debug' not in sys.argv: self.parser.print_help() quit(1) + return "GUI" + def createAudioVisualisation(self, input, output): self.core.selectedComponents = list( reversed(self.core.selectedComponents)) diff --git a/src/main.py b/src/main.py index 5fabda3..39fa997 100644 --- a/src/main.py +++ b/src/main.py @@ -30,25 +30,25 @@ def main(): from .command import Command main = Command() - main.parseArgs() + mode = main.parseArgs() log.debug("Finished creating command object") - elif mode == 'GUI': + # Both branches here may occur in one execution: + # Commandline parsing could change mode back to GUI + if mode == 'GUI': from .gui.mainwindow import MainWindow window = uic.loadUi(os.path.join(wd, "gui", "mainwindow.ui")) - # window.adjustSize() desc = QtWidgets.QDesktopWidget() dpi = desc.physicalDpiX() - - topMargin = 0 if (dpi == 96) else int(10 * (dpi / 96)) + log.info("Detected screen DPI: %s", dpi) + window.resize( int(window.width() * (dpi / 96)), int(window.height() * (dpi / 96)) ) - # window.verticalLayout_2.setContentsMargins(0, topMargin, 0, 0) main = MainWindow(window, proj) log.debug("Finished creating main window") diff --git a/src/tests/__init__.py b/src/tests/__init__.py index f2b2ff1..062dca7 100644 --- a/src/tests/__init__.py +++ b/src/tests/__init__.py @@ -16,6 +16,10 @@ def command(): return Command() +def getTestData(filename): + return os.path.join(Core.wd, 'tests', 'data', filename) + + def run(logFile): """Run Pytest, which then imports and runs all tests in this module.""" with open(logFile, "w") as f: diff --git a/src/tests/test_commandline_parser.py b/src/tests/test_commandline_parser.py new file mode 100644 index 0000000..d672441 --- /dev/null +++ b/src/tests/test_commandline_parser.py @@ -0,0 +1,39 @@ +import sys +import pytest +from .__init__ import command + + +def test_commandline_help(command): + sys.argv = ['', '--help'] + with pytest.raises(SystemExit): + command.parseArgs() + + +def test_commandline_help_if_bad_args(command): + sys.argv = ['', '--junk'] + with pytest.raises(SystemExit): + command.parseArgs() + + +def test_commandline_launches_gui_if_debug(command): + sys.argv = ['', '--debug'] + mode = command.parseArgs() + assert mode == "GUI" + + +def test_commandline_launches_gui_if_debug_with_project(command): + sys.argv = ['', 'test', '--debug'] + mode = command.parseArgs() + assert mode == "GUI" + + +def test_commandline_export_creates_audio_visualization(command): + didCallFunction = False + def captureFunction(*args): + nonlocal didCallFunction + didCallFunction = True + + sys.argv = ['', '-c', '0', 'classic', '-i', '_', '-o', '_'] + command.createAudioVisualisation = captureFunction + command.parseArgs() + assert didCallFunction diff --git a/src/tests/test_export_classic.py b/src/tests/test_export_classic.py deleted file mode 100644 index a6d3e8c..0000000 --- a/src/tests/test_export_classic.py +++ /dev/null @@ -1,5 +0,0 @@ -from .__init__ import command - - -def test_export_classic_visualizer_default(command): - assert command -- cgit v1.2.3