aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/__init__.py27
-rw-r--r--tests/data/test.jpgbin0 -> 48766 bytes
-rw-r--r--tests/data/test.oggbin0 -> 30043 bytes
-rw-r--r--tests/data/test.pngbin0 -> 220 bytes
-rw-r--r--tests/test_commandline_export.py39
-rw-r--r--tests/test_commandline_parser.py45
-rw-r--r--tests/test_core_init.py21
7 files changed, 132 insertions, 0 deletions
diff --git a/tests/__init__.py b/tests/__init__.py
new file mode 100644
index 0000000..d0073ef
--- /dev/null
+++ b/tests/__init__.py
@@ -0,0 +1,27 @@
+import pytest
+import os
+import sys
+
+
+def getTestDataPath(filename):
+ tests_dir = os.path.dirname(os.path.abspath(__file__))
+ return os.path.join(tests_dir, "data", filename)
+
+
+def run(logFile):
+ """Run Pytest, which then imports and runs all tests in this module."""
+ os.environ["PYTEST_QT_API"] = "PyQt6"
+ 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/tests/data/test.jpg b/tests/data/test.jpg
new file mode 100644
index 0000000..86266d9
--- /dev/null
+++ b/tests/data/test.jpg
Binary files differ
diff --git a/tests/data/test.ogg b/tests/data/test.ogg
new file mode 100644
index 0000000..46af76c
--- /dev/null
+++ b/tests/data/test.ogg
Binary files differ
diff --git a/tests/data/test.png b/tests/data/test.png
new file mode 100644
index 0000000..f1ffd4a
--- /dev/null
+++ b/tests/data/test.png
Binary files differ
diff --git a/tests/test_commandline_export.py b/tests/test_commandline_export.py
new file mode 100644
index 0000000..05ead77
--- /dev/null
+++ b/tests/test_commandline_export.py
@@ -0,0 +1,39 @@
+import sys
+import os
+import tempfile
+from avp.command import Command
+from . import getTestDataPath
+from pytestqt import qtbot
+
+
+def test_commandline_classic_export(qtbot):
+ """Run Qt event loop and create a video in the system /tmp or /temp"""
+ soundFile = getTestDataPath("test.ogg")
+ outputDir = tempfile.mkdtemp(prefix="avp-test-")
+ outputFilename = os.path.join(outputDir, "output.mp4")
+ sys.argv = [
+ "",
+ "-c",
+ "0",
+ "classic",
+ "-i",
+ soundFile,
+ "-o",
+ outputFilename,
+ ]
+
+ command = Command()
+ command.quit = lambda _: None
+ command.parseArgs()
+ # Command object now has a video_thread Worker which is exporting the video
+
+ with qtbot.waitSignal(command.worker.videoCreated, timeout=10000):
+ """
+ Wait until videoCreated is emitted by the video_thread Worker
+ or until 10 second timeout has passed
+ """
+ print(f"Test Video created at {outputFilename}")
+
+ assert os.path.exists(outputFilename)
+ # output video should be at least 200kb
+ assert os.path.getsize(outputFilename) > 200000
diff --git a/tests/test_commandline_parser.py b/tests/test_commandline_parser.py
new file mode 100644
index 0000000..5713286
--- /dev/null
+++ b/tests/test_commandline_parser.py
@@ -0,0 +1,45 @@
+import sys
+import pytest
+from avp.command import Command
+
+
+def test_commandline_help():
+ command = Command()
+ sys.argv = ["", "--help"]
+ with pytest.raises(SystemExit):
+ command.parseArgs()
+
+
+def test_commandline_help_if_bad_args():
+ command = Command()
+ sys.argv = ["", "--junk"]
+ with pytest.raises(SystemExit):
+ command.parseArgs()
+
+
+def test_commandline_launches_gui_if_debug():
+ command = Command()
+ sys.argv = ["", "--debug"]
+ mode = command.parseArgs()
+ assert mode == "GUI"
+
+
+def test_commandline_launches_gui_if_debug_with_project():
+ command = Command()
+ sys.argv = ["", "test", "--debug"]
+ mode = command.parseArgs()
+ assert mode == "GUI"
+
+
+def test_commandline_tries_to_export():
+ command = Command()
+ didCallFunction = False
+
+ def captureFunction(*args):
+ nonlocal didCallFunction
+ didCallFunction = True
+
+ sys.argv = ["", "-c", "0", "classic", "-i", "_", "-o", "_"]
+ command.createAudioVisualization = captureFunction
+ command.parseArgs()
+ assert didCallFunction
diff --git a/tests/test_core_init.py b/tests/test_core_init.py
new file mode 100644
index 0000000..16606fb
--- /dev/null
+++ b/tests/test_core_init.py
@@ -0,0 +1,21 @@
+from avp.core import Core
+
+
+def test_component_names():
+ core = Core()
+ assert core.compNames == [
+ "Classic Visualizer",
+ "Color",
+ "Conway's Game of Life",
+ "Image",
+ "Sound",
+ "Spectrum",
+ "Title Text",
+ "Video",
+ "Waveform",
+ ]
+
+
+def test_moduleindex():
+ core = Core()
+ assert core.moduleIndexFor("Classic Visualizer") == 0