diff options
| author | tassaron | 2022-04-22 17:10:35 -0400 |
|---|---|---|
| committer | tassaron | 2022-04-22 17:10:35 -0400 |
| commit | a42ea1cd69fcf3f6c1b2ff79871cd00f24b95118 (patch) | |
| tree | 781fc61b053ea33bb7217ba607359b7bf120a337 | |
| parent | 05d2ebc3c69f5a876d602004f69202c5ba8b09f7 (diff) | |
add commandline option for tests. add first tests
| -rw-r--r-- | .gitignore | 10 | ||||
| -rw-r--r-- | src/command.py | 39 | ||||
| -rw-r--r-- | src/tests/__init__.py | 32 | ||||
| -rw-r--r-- | src/tests/data/test.jpg | bin | 0 -> 48766 bytes | |||
| -rw-r--r-- | src/tests/data/test.ogg | bin | 0 -> 30043 bytes | |||
| -rw-r--r-- | src/tests/data/test.png | bin | 0 -> 220 bytes | |||
| -rw-r--r-- | src/tests/test_core_init.py | 19 | ||||
| -rw-r--r-- | src/tests/test_export_classic.py | 5 |
8 files changed, 94 insertions, 11 deletions
@@ -1,9 +1,11 @@ __pycache__ *.py[cod] -build/* -dist/* -env/* -.vscode/* +*.egg-info +.pytest_cache +build/ +dist/ +env/ +.vscode/ *.mkv *.mp4 *.wav 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 ' @@ -32,6 +44,10 @@ class Command(QtCore.QObject): '-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 Binary files differnew file mode 100644 index 0000000..86266d9 --- /dev/null +++ b/src/tests/data/test.jpg diff --git a/src/tests/data/test.ogg b/src/tests/data/test.ogg Binary files differnew file mode 100644 index 0000000..46af76c --- /dev/null +++ b/src/tests/data/test.ogg diff --git a/src/tests/data/test.png b/src/tests/data/test.png Binary files differnew file mode 100644 index 0000000..f1ffd4a --- /dev/null +++ b/src/tests/data/test.png 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 |
