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/command.py | 39 ++++++++++++++++++++++++++++++++------- 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 +++++ 7 files changed, 88 insertions(+), 7 deletions(-) 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') diff --git a/src/command.py b/src/command.py index cd3c6c3..49026c6 100644 --- a/src/command.py +++ b/src/command.py @@ -9,21 +9,33 @@ import os import sys import time import signal +import logging -from core import Core +from . import core + + +log = logging.getLogger('AVP.Commandline') class Command(QtCore.QObject): + """ + This replaces the GUI MainWindow when in commandline mode. + """ createVideo = QtCore.pyqtSignal() def __init__(self): QtCore.QObject.__init__(self) - self.core = Core() - Core.mode = 'commandline' + self.core = core.Core() + core.Core.mode = 'commandline' self.dataDir = self.core.dataDir self.canceled = False + self.settings = core.Core.settings + + # ctrl-c stops the export thread + signal.signal(signal.SIGINT, self.stopVideo) + def parseArgs(self): self.parser = argparse.ArgumentParser( description='Create a visualization for an audio file', epilog='EXAMPLE COMMAND: main.py myvideotemplate.avp ' @@ -31,6 +43,10 @@ class Command(QtCore.QObject): '-c 0 image path=~/Pictures/thisWeeksPicture.jpg ' '-c 1 video "preset=My Logo" -c 2 vis layout=classic' ) + self.parser.add_argument( + '-t', '--test', action='store_true', + help='run tests and generate a logfile to report a bug' + ) self.parser.add_argument( '-i', '--input', metavar='SOUND', help='input audio file' @@ -55,7 +71,10 @@ class Command(QtCore.QObject): nargs='*', action='append') self.args = self.parser.parse_args() - self.settings = Core.settings + + if self.args.test: + self.runTests() + quit(0) if self.args.projpath: projPath = self.args.projpath @@ -92,9 +111,6 @@ class Command(QtCore.QObject): for arg in args: self.core.selectedComponents[i].command(arg) - # ctrl-c stops the export thread - signal.signal(signal.SIGINT, self.stopVideo) - if self.args.export and self.args.projpath: errcode, data = self.core.parseAvFile(projPath) for key, value in data['WindowFields']: @@ -188,3 +204,12 @@ class Command(QtCore.QObject): return return None + + def runTests(self): + core.FILE_LOGLVL = logging.DEBUG + from . import tests + test_report = os.path.join(core.Core.logDir, "test_report.log") + tests.run(test_report) + with open(test_report, "r") as f: + output = f.readlines() + print("".join(output)) 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