Răsfoiți Sursa

yaml tests: create subclasses of common yaml loaders and dumpers to not interfere with other tests

Fabian Peter Hammerle 9 ani în urmă
părinte
comite
15031b14ba

+ 13 - 11
tests/datetimeex/test_duration_yaml.py

@@ -1,7 +1,6 @@
 # -*- coding: utf-8 -*-
 import pytest
 
-import copy
 from ioex.datetimeex import Duration
 yaml = pytest.importorskip('yaml')
 
@@ -13,9 +12,10 @@ yaml = pytest.importorskip('yaml')
     [Duration(years = 0),  '!duration {}'],
     ])
 def test_from_yaml(expected_duration, yaml_string, loader):
-    loader_copy = copy.deepcopy(loader)
-    Duration.register_yaml_constructor(loader_copy)
-    loaded_duration = yaml.load(yaml_string, Loader = loader_copy)
+    class TestLoader(loader):
+        pass
+    Duration.register_yaml_constructor(TestLoader)
+    loaded_duration = yaml.load(yaml_string, Loader = TestLoader)
     assert expected_duration == loaded_duration
 
 @pytest.mark.parametrize(('loader'), [yaml.Loader, yaml.SafeLoader])
@@ -23,10 +23,11 @@ def test_from_yaml(expected_duration, yaml_string, loader):
     [Duration(years = 2),  '!dur\nyears: 2', '!dur'],
     [Duration(years = 0), '!duration_tag {}', '!duration_tag'],
     ])
-def test_from_yaml(expected_duration, yaml_string, tag, loader):
-    loader_copy = copy.deepcopy(loader)
-    Duration.register_yaml_constructor(loader_copy, tag = tag)
-    loaded_duration = yaml.load(yaml_string, Loader = loader_copy)
+def test_from_yaml_tag(expected_duration, yaml_string, tag, loader):
+    class TestLoader(loader):
+        pass
+    Duration.register_yaml_constructor(TestLoader, tag = tag)
+    loaded_duration = yaml.load(yaml_string, Loader = TestLoader)
     assert expected_duration == loaded_duration
 
 @pytest.mark.parametrize(('dumper'), [yaml.Dumper, yaml.SafeDumper])
@@ -35,6 +36,7 @@ def test_from_yaml(expected_duration, yaml_string, tag, loader):
     [Duration(years = 32), '!duration\nyears: 32\n'],
     ])
 def test_to_yaml(duration, yaml_string, dumper):
-    dumper_copy = copy.deepcopy(dumper)
-    Duration.register_yaml_representer(dumper_copy)
-    assert yaml.dump(duration, Dumper = dumper_copy, default_flow_style = False) == yaml_string
+    class TestDumper(dumper):
+        pass
+    Duration.register_yaml_representer(TestDumper)
+    assert yaml.dump(duration, Dumper = TestDumper, default_flow_style = False) == yaml_string

+ 8 - 7
tests/datetimeex/test_period_yaml.py

@@ -1,7 +1,6 @@
 # -*- coding: utf-8 -*-
 import pytest
 
-import copy
 import datetime
 import ioex.datetimeex
 import pytz
@@ -46,9 +45,10 @@ yaml = pytest.importorskip('yaml')
         ],
     ])
 def test_from_yaml(expected_period, yaml_string, loader):
-    loader_copy = copy.deepcopy(loader)
-    ioex.datetimeex.Period.register_yaml_constructor(loader_copy)
-    loaded_period = yaml.load(yaml_string, Loader = loader_copy)
+    class TestLoader(loader):
+        pass
+    ioex.datetimeex.Period.register_yaml_constructor(TestLoader)
+    loaded_period = yaml.load(yaml_string, Loader = TestLoader)
     assert expected_period == loaded_period
     assert expected_period.start.utcoffset() == loaded_period.start.utcoffset()
     assert expected_period.end.utcoffset() == loaded_period.end.utcoffset()
@@ -78,6 +78,7 @@ def test_from_yaml(expected_period, yaml_string, loader):
         ],
     ])
 def test_to_yaml(period, yaml_string, dumper):
-    dumper_copy = copy.deepcopy(dumper)
-    ioex.datetimeex.Period.register_yaml_representer(dumper_copy)
-    assert yaml.dump(period, Dumper = dumper_copy) == yaml_string
+    class TestDumper(dumper):
+        pass
+    ioex.datetimeex.Period.register_yaml_representer(TestDumper)
+    assert yaml.dump(period, Dumper = TestDumper) == yaml_string

+ 20 - 12
tests/datetimeex/test_yaml_timestamp_constructor.py

@@ -2,7 +2,6 @@
 import pytest
 
 yaml = pytest.importorskip('yaml')
-import copy
 import datetime
 import dateutil.tz.tz
 import ioex.datetimeex
@@ -19,9 +18,12 @@ import pytz
     ['2016-07-14 13:50:04-07:00', pytz.timezone('US/Pacific').localize(datetime.datetime(2016, 7, 14, 13, 50, 4, 0))],
     ])
 def test_from_yaml(yaml_string, expected_timestamp, loader):
-    loader_copy = copy.deepcopy(loader)
-    ioex.datetimeex.register_yaml_timestamp_constructor(loader_copy)
-    loaded_timestamp = yaml.load(yaml_string, Loader = loader_copy)
+    # create subclass so call to class method does not interfere with other tests
+    # see yaml.BaseConstructor.add_constructor()
+    class TestLoader(loader):
+        pass
+    ioex.datetimeex.register_yaml_timestamp_constructor(TestLoader)
+    loaded_timestamp = yaml.load(yaml_string, Loader = TestLoader)
     assert loaded_timestamp == expected_timestamp
     assert loaded_timestamp.utcoffset() == expected_timestamp.utcoffset()
 
@@ -30,17 +32,23 @@ def test_from_yaml(yaml_string, expected_timestamp, loader):
     ['!datetime 2016-07-14 13:50:04Z', '!datetime', pytz.utc.localize(datetime.datetime(2016, 7, 14, 13, 50, 4, 0))],
     ])
 def test_from_yaml_tag(yaml_string, tag, expected_timestamp):
-    loader = copy.deepcopy(yaml.SafeLoader)
-    ioex.datetimeex.register_yaml_timestamp_constructor(loader, tag = tag)
-    assert yaml.load(yaml_string, Loader = loader) == expected_timestamp
+    # create subclass so call to class method does not interfere with other tests
+    # see yaml.BaseConstructor.add_constructor()
+    class TestLoader(yaml.SafeLoader):
+        pass
+    ioex.datetimeex.register_yaml_timestamp_constructor(TestLoader, tag = tag)
+    assert yaml.load(yaml_string, Loader = TestLoader) == expected_timestamp
 
 @pytest.mark.parametrize(('yaml_string', 'expected_timestamp'), [
     ['2016-07-14 13:50:04', datetime.datetime(2016, 7, 14, 13, 50, 4, 0)],
     ['2016-07-14 13:50:04Z', pytz.utc.localize(datetime.datetime(2016, 7, 14, 13, 50, 4, 0))],
     ])
 def test_from_yaml_repeat(yaml_string, expected_timestamp):
-    loader = copy.deepcopy(yaml.SafeLoader)
-    ioex.datetimeex.register_yaml_timestamp_constructor(loader)
-    assert yaml.load(yaml_string, Loader = loader) == expected_timestamp
-    ioex.datetimeex.register_yaml_timestamp_constructor(loader)
-    assert yaml.load(yaml_string, Loader = loader) == expected_timestamp
+    # create subclass so call to class method does not interfere with other tests
+    # see yaml.BaseRepresenter.add_representer()
+    class TestLoader(yaml.SafeLoader):
+        pass
+    ioex.datetimeex.register_yaml_timestamp_constructor(TestLoader)
+    assert yaml.load(yaml_string, Loader = TestLoader) == expected_timestamp
+    ioex.datetimeex.register_yaml_timestamp_constructor(TestLoader)
+    assert yaml.load(yaml_string, Loader = TestLoader) == expected_timestamp

+ 6 - 4
tests/test_yaml_construct_str_as_unicode.py

@@ -1,7 +1,6 @@
 # -*- coding: utf-8 -*-
 import pytest
 
-import copy
 import ioex.datetimeex
 yaml = pytest.importorskip('yaml')
 
@@ -36,9 +35,12 @@ yaml = pytest.importorskip('yaml')
     ['{kï: valü}', {u'kï': u'valü'}],
     ])
 def test_to_yaml(yaml_string, expected_object, loader):
-    loader_copy = copy.deepcopy(loader)
-    ioex.register_yaml_str_as_unicode_constructor(loader_copy)
-    generated_object = yaml.load(yaml_string, Loader = loader_copy)
+    # create subclass so call to class method does not interfere with other tests
+    # see yaml.BaseConstructor.add_constructor()
+    class TestLoader(loader):
+        pass
+    ioex.register_yaml_str_as_unicode_constructor(TestLoader)
+    generated_object = yaml.load(yaml_string, Loader = TestLoader)
     assert type(expected_object) == type(generated_object)
     assert expected_object == generated_object
     if type(expected_object) is list:

+ 6 - 4
tests/test_yaml_represent_unicode_as_str.py

@@ -1,7 +1,6 @@
 # -*- coding: utf-8 -*-
 import pytest
 
-import copy
 import ioex.datetimeex
 yaml = pytest.importorskip('yaml')
 
@@ -19,11 +18,14 @@ yaml = pytest.importorskip('yaml')
     [{u'⚕': u'☤'}, '{⚕: ☤}\n', {'allow_unicode': True}],
     ])
 def test_to_yaml(unicode_string, expected_yaml_string, dump_params, dumper):
-    dumper_copy = copy.deepcopy(dumper)
-    ioex.register_yaml_unicode_as_str_representer(dumper_copy)
+    # create subclass so call to class method does not interfere with other tests
+    # see yaml.BaseRepresenter.add_representer()
+    class TestDumper(dumper):
+        pass
+    ioex.register_yaml_unicode_as_str_representer(TestDumper)
     generated_yaml_string = yaml.dump(
             unicode_string,
-            Dumper = dumper_copy,
+            Dumper = TestDumper,
             default_flow_style = True,
             **dump_params
             )