tests migrated from nose to pytest

fixes #1

config.ini added to gitignore

rewording in readme, links to behringer/midas pages added.

kinds supported updated.

development dependencies updated in setup.py

kind maps in kinds module updated

kwarg port added (might revert this later)

pre-commit.ps1 added for use with git hook

mr18 tests badge added to readme
This commit is contained in:
onyx-and-iris
2022-05-01 03:46:44 +01:00
parent 8bad4d549a
commit 550b8c4240
12 changed files with 622 additions and 456 deletions

1
tests/MR18.svg Normal file
View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="60" height="20" role="img" aria-label="tests: 67"><title>tests: 67</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="60" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="37" height="20" fill="#555"/><rect x="37" width="23" height="20" fill="#4c1"/><rect width="60" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="195" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="270">tests</text><text x="195" y="140" transform="scale(.1)" fill="#fff" textLength="270">tests</text><text aria-hidden="true" x="475" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="130">67</text><text x="475" y="140" transform="scale(.1)" fill="#fff" textLength="130">67</text></g></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -1,17 +1,39 @@
import mair
from mair import kinds
import threading
from dataclasses import dataclass
import sys
_kind = 'MR18'
kind_id = "MR18"
ip = "mixer.local"
mars = {kind.id_: mair.connect(_kind) for kind in kinds.all}
tests = mars[_kind]
tests = mair.connect(kind_id, ip=ip)
def setup_package():
tests.worker = threading.Thread(target = tests.run_server)
kind = kinds.get(kind_id)
@dataclass
class Data:
"""bounds data to map tests to a kind"""
name: str = kind.id_
dca: int = kind.num_dca - 1
strip: int = kind.num_strip - 1
bus: int = kind.num_bus - 1
fx: int = kind.num_fx - 1
rtn: int = kind.num_rtn - 1
data = Data()
def setup_module():
print(f"\nRunning tests for kind [{data.name}]\n", file=sys.stdout)
tests.worker = threading.Thread(target=tests.run_server)
tests.worker.daemon = True
tests.worker.start()
tests.validate_connection()
def teardown_package():
def teardown_module():
tests.server.shutdown()

31
tests/pre-commit.ps1 Normal file
View File

@@ -0,0 +1,31 @@
Function RunTests {
$coverage = "./tests/pytest_coverage.log"
$run_tests = "pytest -v --capture=tee-sys --junitxml=./tests/.coverage.xml"
$match_pattern = "^=|^\s*$|^Running|^Using|^plugins|^collecting|^tests"
if ( Test-Path $coverage ) { Clear-Content $coverage }
ForEach ($line in $(Invoke-Expression $run_tests)) {
If ( $line -Match $match_pattern ) {
if ( $line -Match "^Running tests for kind \[(\w+)\]" ) { $kind = $Matches[1] }
$line | Tee-Object -FilePath $coverage -Append
}
}
Write-Output "$(Get-TimeStamp)" | Out-file $coverage -Append
Invoke-Expression "genbadge tests -t 90 -i ./tests/.coverage.xml -o ./tests/$kind.svg"
}
Function Get-TimeStamp {
return "[{0:MM/dd/yy} {0:HH:mm:ss}]" -f (Get-Date)
}
if ($MyInvocation.InvocationName -ne ".") {
Invoke-Expression ".\venv\Scripts\Activate.ps1"
RunTests
Invoke-Expression "deactivate"
}

View File

@@ -1,332 +0,0 @@
from nose.tools import assert_equal, nottest
from parameterized import parameterized, parameterized_class
import unittest
from tests import tests
"""
Not every subclass is tested for every superclass to avoid redundancy.
LR: mix, config, insert, geq
Strip: mix, preamp, config, gate, automix
Bus: config, dyn, eq
FXSend: group
"""
""" LR TESTS """
#@nottest
class TestSetAndGetLRMixHigher(unittest.TestCase):
""" Mix """
def setUp(self):
self.target = getattr(tests, 'lr')
self.target = getattr(self.target, 'mix')
@parameterized.expand([
('on', True), ('on', False)
])
def test_it_sets_and_gets_lr_bool_params(self, param, val):
setattr(self.target, param, val)
retval = getattr(self.target, param)
self.assertTrue(isinstance(retval, bool))
assert_equal(retval, val)
@parameterized.expand([
('fader', -80.6), ('fader', -67.0)
])
def test_it_sets_and_gets_lr_float_params(self, param, val):
setattr(self.target, param, val)
retval = getattr(self.target, param)
assert_equal(retval, val)
#@nottest
class TestSetAndGetLRConfigHigher(unittest.TestCase):
""" Config """
def setUp(self):
self.target = getattr(tests, 'lr')
self.target = getattr(self.target, 'config')
@parameterized.expand([
('name', 'test0'), ('name', 'test1')
])
def test_it_sets_and_gets_lr_string_params(self, param, val):
setattr(self.target, param, val)
retval = getattr(self.target, param)
assert_equal(retval, val)
#@nottest
class TestSetAndGetLRInsertHigher(unittest.TestCase):
""" Insert """
def setUp(self):
self.target = getattr(tests, 'lr')
self.target = getattr(self.target, 'insert')
@parameterized.expand([
('on', True), ('on', False)
])
def test_it_sets_and_gets_lr_bool_params(self, param, val):
setattr(self.target, param, val)
retval = getattr(self.target, param)
self.assertTrue(isinstance(retval, bool))
assert_equal(retval, val)
@parameterized.expand([
('sel', 0), ('sel', 4)
])
def test_it_sets_and_gets_lr_int_params(self, param, val):
setattr(self.target, param, val)
retval = getattr(self.target, param)
assert_equal(retval, val)
#@nottest
class TestSetAndGetLRGEQHigher(unittest.TestCase):
""" GEQ """
def setUp(self):
self.target = getattr(tests, 'lr')
self.target = getattr(self.target, 'geq')
@parameterized.expand([
('slider_20', -13.5), ('slider_20', 5.5), ('slider_6k3', -8.5), ('slider_6k3', 8.5)
])
def test_it_sets_and_gets_lr_int_params(self, param, val):
setattr(self.target, param, val)
retval = getattr(self.target, param)
assert_equal(retval, val)
""" STRIP TESTS """
#@nottest
@parameterized_class([
{ 'i': 15 }
])
class TestSetAndGetStripMixHigher(unittest.TestCase):
""" Mix """
def setUp(self):
self.target = getattr(tests, 'strip')
self.target = getattr(self.target[self.i], 'mix')
@parameterized.expand([
('on', True), ('on', False), ('lr', True), ('lr', False)
])
def test_it_sets_and_gets_strip_bool_params(self, param, val):
setattr(self.target, param, val)
retval = getattr(self.target, param)
self.assertTrue(isinstance(retval, bool))
assert_equal(retval, val)
#@nottest
@parameterized_class([
{ 'i': 8 }
])
class TestSetAndGetStripPreampHigher(unittest.TestCase):
""" Preamp """
def setUp(self):
self.target = getattr(tests, 'strip')
self.target = getattr(self.target[self.i], 'preamp')
@parameterized.expand([
('highpasson', True), ('highpasson', False), ('usbinput', True), ('usbinput', False)
])
def test_it_sets_and_gets_strip_bool_params(self, param, val):
setattr(self.target, param, val)
retval = getattr(self.target, param)
self.assertTrue(isinstance(retval, bool))
assert_equal(retval, val)
@parameterized.expand([
('highpassfilter', 20), ('highpassfilter', 399)
])
def test_it_sets_and_gets_strip_int_params(self, param, val):
setattr(self.target, param, val)
retval = getattr(self.target, param)
assert_equal(retval, val)
@parameterized.expand([
('usbtrim', -16.5), ('usbtrim', 5.5)
])
def test_it_sets_and_gets_strip_float_params(self, param, val):
setattr(self.target, param, val)
retval = getattr(self.target, param)
assert_equal(retval, val)
#@nottest
@parameterized_class([
{ 'i': 3 }
])
class TestSetAndGetStripConfigHigher(unittest.TestCase):
""" Config """
def setUp(self):
self.target = getattr(tests, 'strip')
self.target = getattr(self.target[self.i], 'config')
@parameterized.expand([
('inputsource', 0), ('inputsource', 18), ('usbreturn', 3), ('usbreturn', 12)
])
def test_it_sets_and_gets_strip_int_params(self, param, val):
setattr(self.target, param, val)
retval = getattr(self.target, param)
assert_equal(retval, val)
@parameterized_class([
{ 'i': 12 }
])
class TestSetAndGetStripGateHigher(unittest.TestCase):
""" Gate """
def setUp(self):
self.target = getattr(tests, 'strip')
self.target = getattr(self.target[self.i], 'gate')
@parameterized.expand([
('on', True), ('on', False), ('invert', True), ('invert', False),
('filteron', True), ('filteron', False)
])
def test_it_sets_and_gets_strip_bool_params(self, param, val):
setattr(self.target, param, val)
retval = getattr(self.target, param)
self.assertTrue(isinstance(retval, bool))
assert_equal(retval, val)
@parameterized.expand([
('range', 11), ('range', 48), ('attack', 5), ('attack', 110),
('release', 360), ('release', 2505), ('filtertype', 0), ('filtertype', 8)
])
def test_it_sets_and_gets_strip_int_params(self, param, val):
setattr(self.target, param, val)
retval = getattr(self.target, param)
assert_equal(retval, val)
@parameterized.expand([
('mode', 'exp2'), ('mode', 'duck')
])
def test_it_sets_and_gets_strip_string_params(self, param, val):
setattr(self.target, param, val)
retval = getattr(self.target, param)
assert_equal(retval, val)
@parameterized.expand([
('threshold', -80.0), ('threshold', 0.0), ('hold', 355), ('hold', 63.2),
('filterfreq', 37.2), ('filterfreq', 12765)
])
def test_it_sets_and_gets_strip_float_params(self, param, val):
setattr(self.target, param, val)
retval = getattr(self.target, param)
assert_equal(retval, val)
#@nottest
@parameterized_class([
{ 'i': 6 }
])
class TestSetAndGetStripAutomixHigher(unittest.TestCase):
""" Automix """
def setUp(self):
self.target = getattr(tests, 'strip')
self.target = getattr(self.target[self.i], 'automix')
@parameterized.expand([
('group', 0), ('group', 2)
])
def test_it_sets_and_gets_fxsend_int_params(self, param, val):
setattr(self.target, param, val)
retval = getattr(self.target, param)
assert_equal(retval, val)
@parameterized.expand([
('weight', -10.5), ('weight', 3.5)
])
def test_it_sets_and_gets_fxsend_float_params(self, param, val):
setattr(self.target, param, val)
retval = getattr(self.target, param)
assert_equal(retval, val)
""" BUS TESTS """
#@nottest
@parameterized_class([
{ 'i': 1 }
])
class TestSetAndGetBusConfigHigher(unittest.TestCase):
""" Config """
def setUp(self):
self.target = getattr(tests, 'bus')
self.target = getattr(self.target[self.i], 'config')
@parameterized.expand([
('color', 0), ('color', 15)
])
def test_it_sets_and_gets_bus_bool_params(self, param, val):
setattr(self.target, param, val)
retval = getattr(self.target, param)
assert_equal(retval, val)
#@nottest
@parameterized_class([
{ 'i': 2 }
])
class TestSetAndGetBusDynHigher(unittest.TestCase):
""" Dyn """
def setUp(self):
self.target = getattr(tests, 'bus')
self.target = getattr(self.target[self.i], 'dyn')
@parameterized.expand([
('on', True), ('on', False)
])
def test_it_sets_and_gets_bus_bool_params(self, param, val):
setattr(self.target, param, val)
retval = getattr(self.target, param)
self.assertTrue(isinstance(retval, bool))
assert_equal(retval, val)
@parameterized.expand([
('mode', 'comp'), ('mode', 'exp'), ('env', 'lin'), ('env', 'log'),
('det', 'peak'), ('det', 'rms')
])
def test_it_sets_and_gets_bus_string_params(self, param, val):
setattr(self.target, param, val)
retval = getattr(self.target, param)
assert_equal(retval, val)
#@nottest
@parameterized_class([
{ 'i': 0 }
])
class TestSetAndGetBusEQHigher(unittest.TestCase):
""" EQ """
def setUp(self):
self.target = getattr(tests, 'bus')
self.target = getattr(self.target[self.i], 'eq')
@parameterized.expand([
('on', True), ('on', False)
])
def test_it_sets_and_gets_bus_bool_params(self, param, val):
setattr(self.target, param, val)
retval = getattr(self.target, param)
self.assertTrue(isinstance(retval, bool))
assert_equal(retval, val)
@parameterized.expand([
('mode', 'peq'), ('mode', 'geq'), ('mode', 'teq')
])
def test_it_sets_and_gets_bus_string_params(self, param, val):
setattr(self.target, param, val)
retval = getattr(self.target, param)
assert_equal(retval, val)
""" FXSEND TESTS """
#@nottest
@parameterized_class([
{ 'i': 1 }
])
class TestSetAndGetFXSendGroupHigher(unittest.TestCase):
""" Group """
def setUp(self):
self.target = getattr(tests, 'fxsend')
self.target = getattr(self.target[self.i], 'group')
@parameterized.expand([
('dca', 0), ('dca', 12), ('mute', 3), ('mute', 8)
])
def test_it_sets_and_gets_fxsend_int_params(self, param, val):
setattr(self.target, param, val)
retval = getattr(self.target, param)
assert_equal(retval, val)

372
tests/test_shared.py Normal file
View File

@@ -0,0 +1,372 @@
import pytest
from tests import tests, data
"""
Not every subclass is tested for every superclass to avoid redundancy.
LR: mix, config, insert, geq
Strip: mix, preamp, config, gate, automix
Bus: config, dyn, eq
FXSend: group
"""
""" Main LR TESTS """
class TestSetAndGetLRMixHigher:
"""Mix"""
__test__ = True
def setup_class(self):
self.target = getattr(tests, "lr")
self.target = getattr(self.target, "mix")
@pytest.mark.parametrize(
"param,value",
[("on", True), ("on", False)],
)
def test_it_sets_and_gets_lr_bool_params(self, param, value):
setattr(self.target, param, value)
assert getattr(self.target, param) == value
@pytest.mark.parametrize(
"param,value",
[("fader", -80.6), ("fader", -67.0)],
)
def test_it_sets_and_gets_lr_float_params(self, param, value):
setattr(self.target, param, value)
assert getattr(self.target, param) == value
class TestSetAndGetLRConfigHigher:
"""Config"""
__test__ = True
def setup_class(self):
self.target = getattr(tests, "lr")
self.target = getattr(self.target, "config")
@pytest.mark.parametrize("param,value", [("name", "test0"), ("name", "test1")])
def test_it_sets_and_gets_lr_string_params(self, param, value):
setattr(self.target, param, value)
assert getattr(self.target, param) == value
class TestSetAndGetLRInsertHigher:
"""Insert"""
__test__ = True
def setup_class(self):
self.target = getattr(tests, "lr")
self.target = getattr(self.target, "insert")
@pytest.mark.parametrize(
"param,value",
[("on", True), ("on", False)],
)
def test_it_sets_and_gets_lr_bool_params(self, param, value):
setattr(self.target, param, value)
assert getattr(self.target, param) == value
@pytest.mark.parametrize(
"param,value",
[("sel", 0), ("sel", 4)],
)
def test_it_sets_and_gets_lr_int_params(self, param, value):
setattr(self.target, param, value)
assert getattr(self.target, param) == value
class TestSetAndGetLRGEQHigher:
"""GEQ"""
__test__ = True
def setup_class(self):
self.target = getattr(tests, "lr")
self.target = getattr(self.target, "geq")
@pytest.mark.parametrize(
"param,value",
[
("slider_20", -13.5),
("slider_20", 5.5),
("slider_6k3", -8.5),
("slider_6k3", 8.5),
],
)
def test_it_sets_and_gets_lr_int_params(self, param, value):
setattr(self.target, param, value)
assert getattr(self.target, param) == value
""" STRIP TESTS """
class TestSetAndGetStripMixHigher:
"""Mix"""
__test__ = True
def setup_class(self):
self.target = getattr(tests, "strip")
self.target = getattr(self.target[data.strip], "mix")
@pytest.mark.parametrize(
"param,value",
[("on", True), ("on", False), ("lr", True), ("lr", False)],
)
def test_it_sets_and_gets_strip_bool_params(self, param, value):
setattr(self.target, param, value)
assert getattr(self.target, param) == value
class TestSetAndGetStripPreampHigher:
"""Preamp"""
__test__ = True
def setup_class(self):
self.target = getattr(tests, "strip")
self.target = getattr(self.target[data.strip], "preamp")
@pytest.mark.parametrize(
"param,value",
[
("highpasson", True),
("highpasson", False),
("usbinput", True),
("usbinput", False),
],
)
def test_it_sets_and_gets_strip_bool_params(self, param, value):
setattr(self.target, param, value)
assert getattr(self.target, param) == value
@pytest.mark.parametrize(
"param,value",
[("highpassfilter", 20), ("highpassfilter", 399)],
)
def test_it_sets_and_gets_strip_int_params(self, param, value):
setattr(self.target, param, value)
assert getattr(self.target, param) == value
@pytest.mark.parametrize(
"param,value",
[("usbtrim", -16.5), ("usbtrim", 5.5)],
)
def test_it_sets_and_gets_strip_float_params(self, param, value):
setattr(self.target, param, value)
assert getattr(self.target, param) == value
class TestSetAndGetStripConfigHigher:
"""Config"""
__test__ = True
def setup_class(self):
self.target = getattr(tests, "strip")
self.target = getattr(self.target[data.strip], "config")
@pytest.mark.parametrize(
"param,value",
[("inputsource", 0), ("inputsource", 18), ("usbreturn", 3), ("usbreturn", 12)],
)
def test_it_sets_and_gets_strip_int_params(self, param, value):
setattr(self.target, param, value)
assert getattr(self.target, param) == value
class TestSetAndGetStripGateHigher:
"""Gate"""
__test__ = True
def setup_class(self):
self.target = getattr(tests, "strip")
self.target = getattr(self.target[data.strip], "gate")
@pytest.mark.parametrize(
"param,value",
[
("on", True),
("on", False),
("invert", True),
("invert", False),
("filteron", True),
("filteron", False),
],
)
def test_it_sets_and_gets_strip_bool_params(self, param, value):
setattr(self.target, param, value)
assert getattr(self.target, param) == value
@pytest.mark.parametrize(
"param,value",
[
("range", 11),
("range", 48),
("attack", 5),
("attack", 110),
("release", 360),
("release", 2505),
("filtertype", 0),
("filtertype", 8),
],
)
def test_it_sets_and_gets_strip_int_params(self, param, value):
setattr(self.target, param, value)
assert getattr(self.target, param) == value
@pytest.mark.parametrize(
"param,value",
[("mode", "exp2"), ("mode", "duck")],
)
def test_it_sets_and_gets_strip_string_params(self, param, value):
setattr(self.target, param, value)
assert getattr(self.target, param) == value
@pytest.mark.parametrize(
"param,value",
[
("threshold", -80.0),
("threshold", 0.0),
("hold", 355),
("hold", 63.2),
("filterfreq", 37.2),
("filterfreq", 12765),
],
)
def test_it_sets_and_gets_strip_float_params(self, param, value):
setattr(self.target, param, value)
assert getattr(self.target, param) == value
class TestSetAndGetStripAutomixHigher:
"""Automix"""
__test__ = True
def setup_class(self):
self.target = getattr(tests, "strip")
self.target = getattr(self.target[data.strip], "automix")
@pytest.mark.parametrize(
"param,value",
[("group", 0), ("group", 2)],
)
def test_it_sets_and_gets_fxsend_int_params(self, param, value):
setattr(self.target, param, value)
assert getattr(self.target, param) == value
@pytest.mark.parametrize(
"param,value",
[("weight", -10.5), ("weight", 3.5)],
)
def test_it_sets_and_gets_fxsend_float_params(self, param, value):
setattr(self.target, param, value)
assert getattr(self.target, param) == value
""" BUS TESTS """
class TestSetAndGetBusConfigHigher:
"""Config"""
__test__ = True
def setup_class(self):
self.target = getattr(tests, "bus")
self.target = getattr(self.target[data.bus], "config")
@pytest.mark.parametrize(
"param,value",
[("color", 0), ("color", 15)],
)
def test_it_sets_and_gets_bus_bool_params(self, param, value):
setattr(self.target, param, value)
assert getattr(self.target, param) == value
class TestSetAndGetBusDynHigher:
"""Dyn"""
__test__ = True
def setup_class(self):
self.target = getattr(tests, "bus")
self.target = getattr(self.target[data.bus], "dyn")
@pytest.mark.parametrize(
"param,value",
[("on", True), ("on", False)],
)
def test_it_sets_and_gets_bus_bool_params(self, param, value):
setattr(self.target, param, value)
assert getattr(self.target, param) == value
@pytest.mark.parametrize(
"param,value",
[
("mode", "comp"),
("mode", "exp"),
("env", "lin"),
("env", "log"),
("det", "peak"),
("det", "rms"),
],
)
def test_it_sets_and_gets_bus_string_params(self, param, value):
setattr(self.target, param, value)
assert getattr(self.target, param) == value
class TestSetAndGetBusDynHigher:
"""EQ"""
__test__ = True
def setup_class(self):
self.target = getattr(tests, "bus")
self.target = getattr(self.target[data.bus], "eq")
@pytest.mark.parametrize(
"param,value",
[("on", True), ("on", False)],
)
def test_it_sets_and_gets_bus_bool_params(self, param, value):
setattr(self.target, param, value)
assert getattr(self.target, param) == value
@pytest.mark.parametrize(
"param,value",
[("mode", "peq"), ("mode", "geq"), ("mode", "teq")],
)
def test_it_sets_and_gets_bus_string_params(self, param, value):
setattr(self.target, param, value)
assert getattr(self.target, param) == value
""" FXSEND TESTS """
class TestSetAndGetFXSendGroupHigher:
"""Group"""
__test__ = True
def setup_class(self):
self.target = getattr(tests, "fxsend")
self.target = getattr(self.target[data.fx], "group")
@pytest.mark.parametrize(
"param,value",
[("dca", 0), ("dca", 12), ("mute", 3), ("mute", 8)],
)
def test_it_sets_and_gets_bus_bool_params(self, param, value):
setattr(self.target, param, value)
assert getattr(self.target, param) == value