aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortassaron2022-04-22 17:10:35 -0400
committertassaron2022-04-22 17:10:35 -0400
commita42ea1cd69fcf3f6c1b2ff79871cd00f24b95118 (patch)
tree781fc61b053ea33bb7217ba607359b7bf120a337
parent05d2ebc3c69f5a876d602004f69202c5ba8b09f7 (diff)
add commandline option for tests. add first tests
-rw-r--r--.gitignore10
-rw-r--r--src/command.py39
-rw-r--r--src/tests/__init__.py32
-rw-r--r--src/tests/data/test.jpgbin0 -> 48766 bytes
-rw-r--r--src/tests/data/test.oggbin0 -> 30043 bytes
-rw-r--r--src/tests/data/test.pngbin0 -> 220 bytes
-rw-r--r--src/tests/test_core_init.py19
-rw-r--r--src/tests/test_export_classic.py5
8 files changed, 94 insertions, 11 deletions
diff --git a/.gitignore b/.gitignore
index 380168f..1595776 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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
new file mode 100644
index 0000000..86266d9
--- /dev/null
+++ b/src/tests/data/test.jpg
Binary files differ
diff --git a/src/tests/data/test.ogg b/src/tests/data/test.ogg
new file mode 100644
index 0000000..46af76c
--- /dev/null
+++ b/src/tests/data/test.ogg
Binary files differ
diff --git a/src/tests/data/test.png b/src/tests/data/test.png
new file mode 100644
index 0000000..f1ffd4a
--- /dev/null
+++ b/src/tests/data/test.png
Binary files 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