diff options
author | Ben Connors <benconnors@outlook.com> | 2019-09-29 16:51:42 -0400 |
---|---|---|
committer | Ben Connors <benconnors@outlook.com> | 2019-09-29 16:51:42 -0400 |
commit | 2255278b0e81fc20faff48536f524e1466046c8a (patch) | |
tree | 5f0a8d0593858aaad5b7da3536af096605c2f9a1 /tests | |
parent | 0fc3371d48d7e87a5628b16c2bbd09c3fb15cd8e (diff) |
Update tests
Diffstat (limited to 'tests')
-rw-r--r-- | tests/conftest.py | 22 | ||||
-rw-r--r-- | tests/test_functions_audio.py | 17 | ||||
-rw-r--r-- | tests/test_functions_scene.py | 43 |
3 files changed, 72 insertions, 10 deletions
diff --git a/tests/conftest.py b/tests/conftest.py index 1a9af58..896a2ba 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -19,15 +19,27 @@ def aws(): return w def elements_equal(e1, e2): - if e1.tag != e2.tag: return False - if e1.text != e2.text: return False - if e1.tail.strip() != e2.tail.strip(): return False - if e1.attrib != e2.attrib: return False - if len(e1) != len(e2): return False + """Determine if two XML elements are equal.""" + if e1.tag != e2.tag: + print("tag", e1.tag, e2.tag) + return False + if ("" if e1.text is None else e1.text).strip("\r\n\t ") != ("" if e2.text is None else e2.text).strip("\r\n\t "): + print("text", repr(e1.text), repr(e2.text)) + return False + if ("" if e1.tail is None else e1.tail).strip("\r\n\t ") != ("" if e2.tail is None else e2.tail).strip("\r\n\t "): + print("tail", repr(e1.tail), repr(e2.tail)) + return False + if e1.attrib != e2.attrib: + print("attrib", repr(e1.attrib), repr(e2.attrib)) + return False + if len(e1) != len(e2): + print("len", len(e1), len(e2)) + return False return all(elements_equal(c1, c2) for c1, c2 in zip(e1, e2)) @pytest.fixture def test_xml_eq(): + """Use for testing serialization functions.""" def inner(e: et.Element, s: str): return elements_equal(e, et.fromstring(s)) return inner diff --git a/tests/test_functions_audio.py b/tests/test_functions_audio.py index 35d548a..5aaec5a 100644 --- a/tests/test_functions_audio.py +++ b/tests/test_functions_audio.py @@ -3,11 +3,14 @@ import pytest from blc2.functions.audio import Audio +from blc2.constants import BXW def test_audio(aws): a = Audio(aws) a.fade_out = 1000 + a.fade_out = 1000 + a.fade_in = 1000 a.fade_in = 1000 a.filename = "nonexistant" @@ -59,3 +62,17 @@ def test_audio(aws): a.filename = None assert a.duration == 0 assert a.actual_duration == 0 + +def test_audio_serialize(aws, test_xml_eq): + a1 = Audio(aws, id_=123, name="Test Audio 1", fade_out=100, filename="test.wav") + a2 = Audio(aws, id_=124, name="Test Audio 2", filename=None) + + test = (a1, a2) + success = [ +"""<function type="Audio" xmlns="{}" id="123" name="Test Audio 1" fade-in="0" fade-out="100" filename="test.wav"/>""", +"""<function type="Audio" xmlns="{}" id="124" name="Test Audio 2" fade-in="0" fade-out="0"/>""" + ] + + for case, s in zip(test, success): + s = s.replace('\n', "").format(BXW.strip("{}")) + assert test_xml_eq(case.serialize(), s) diff --git a/tests/test_functions_scene.py b/tests/test_functions_scene.py index 77b2d6f..4ce328a 100644 --- a/tests/test_functions_scene.py +++ b/tests/test_functions_scene.py @@ -1,9 +1,12 @@ -import pytest +"""Tests for scene primitive.""" import xml.etree.ElementTree as et +import pytest + from blc2.functions.scene import Scene from blc2.constants import INFTY, BXW +from blc2.exceptions import LoadError def test_scene(aws): """Test creation and modification of scenes.""" @@ -85,11 +88,12 @@ def test_scene(aws): s1[c1] = -256 assert s1[c1] == 10 + assert s1.copy_data(None) is None + del s1[c4] del s1[c4] def test_scene_serialize(aws, test_xml_eq): - return c1, c2, c3, c4 = aws.fixtures[0].channels s = Scene(aws, id_=123, name="Test Scene", values={c1: 1, c2: 2, c3: 3, c4: 4}) @@ -103,10 +107,39 @@ def test_scene_serialize(aws, test_xml_eq): <value fixture="{f3}" channel="{i3}">3</value> <value fixture="{f4}" channel="{i4}">4</value> </function> -""".format(bxw=BXW.strip("{}"), f1=f1, f2=f2, f3=f3, f4=f4, i1=i1,i2=i2,i3=i3,i4=i4) +""".format(bxw=BXW.strip("{}"), f1=f1, f2=f2, f3=f3, f4=f4, i1=i1,i2=i2,i3=i3,i4=i4).replace("\n", "") et.register_namespace("", BXW) - print(et.tostring(e, encoding="utf-8")) - print(expected) assert test_xml_eq(e, expected) + +def test_scene_deserialize(aws, test_xml_eq): + fail = [ + """<function xmlns={} type="asdf"/>""", + """<asdf/>""", + """<function xmlns={} type="Scene" id="asdf"/>""", + """<function xmlns={} type="Scene" id="123" name="Test Scene"> + <asdf/></function>""", + """<function xmlns={} type="Scene" id="123" name="Test Scene"> + <value/></function>""", + """<function xmlns={} type="Scene" id="123" name="Test Scene"> + <value fixture="10" channel="45"/></function>""", + """<function xmlns={} type="Scene" id="123" name="Test Scene"> + <value fixture="0" channel="10"/></function>""", + """<function xmlns={} type="Scene" id="123" name="Test Scene"> + <value fixture="0" channel="1"/></function>""", + ] + + for case in fail: + case = case.format('"'+BXW.strip("{}")+'"') + with pytest.raises(LoadError): + Scene.deserialize(aws, et.fromstring(case)) + + + case = """<function xmlns={} type="Scene" id="123" name="Test Scene"> + <value fixture="0" channel="0">123</value></function>""" + case = case.format('"'+BXW.strip("{}")+'"').replace('\n', "") + + s = Scene.deserialize(aws, et.fromstring(case)) + + assert test_xml_eq(s.serialize(), case) |