Skip to content

Commit 241e1c5

Browse files
committed
test on 4.2b4
1 parent 38131ef commit 241e1c5

File tree

4 files changed

+41
-14
lines changed

4 files changed

+41
-14
lines changed

.travis.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ python:
1414
env:
1515
- PYYAML_VERSION="3.13"
1616
# - PYYAML_VERSION="4.1" # this was pulled from the index (!) ..wtf, Ingy?
17+
- PYYAML_VERSION="4.2b4"
1718

1819
matrix:
1920
fast_finish: true

oyaml.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,18 @@ def map_constructor(loader, node):
1515
loader.flatten_mapping(node)
1616
return OrderedDict(loader.construct_pairs(node))
1717

18+
1819
if pyyaml.safe_dump is pyyaml.dump:
19-
# PyYAML >= 4
20+
# PyYAML v4.1
2021
SafeDumper = pyyaml.dumper.Dumper
2122
DangerDumper = pyyaml.dumper.DangerDumper
23+
SafeLoader = pyyaml.loader.Loader
24+
DangerLoader = pyyaml.loader.DangerLoader
2225
else:
2326
SafeDumper = pyyaml.dumper.SafeDumper
2427
DangerDumper = pyyaml.dumper.Dumper
28+
SafeLoader = pyyaml.loader.SafeLoader
29+
DangerLoader = pyyaml.loader.Loader
2530

2631
pyyaml.add_representer(dict, map_representer, Dumper=SafeDumper)
2732
pyyaml.add_representer(OrderedDict, map_representer, Dumper=SafeDumper)
@@ -30,7 +35,8 @@ def map_constructor(loader, node):
3035

3136

3237
if sys.version_info < (3, 7):
33-
pyyaml.add_constructor('tag:yaml.org,2002:map', map_constructor)
38+
pyyaml.add_constructor('tag:yaml.org,2002:map', map_constructor, Loader=SafeLoader)
39+
pyyaml.add_constructor('tag:yaml.org,2002:map', map_constructor, Loader=DangerLoader)
3440

3541

3642
del map_constructor, map_representer

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
setup(
44
name='oyaml',
5-
version='0.5',
5+
version='0.6',
66
description='Ordered YAML: drop-in replacement for PyYAML which preserves dict ordering',
77
long_description=open('README.rst').read(),
88
author='Wim Glenn',

test_oyaml.py

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@
1010
data = OrderedDict([('x', 1), ('z', 3), ('y', 2)])
1111

1212

13+
# this release was pulled from index, but still might be seen in the wild
14+
pyyaml_41 = yaml.pyyaml.__version__ == '4.1'
15+
16+
1317
def test_dump():
1418
assert yaml.dump(data) == '{x: 1, z: 3, y: 2}\n'
1519

@@ -18,7 +22,7 @@ def test_safe_dump():
1822
assert yaml.safe_dump(data) == '{x: 1, z: 3, y: 2}\n'
1923

2024

21-
@pytest.mark.skipif(yaml.pyyaml.__version__ < '4', reason="requires PyYAML version >= 4")
25+
@pytest.mark.skipif(not pyyaml_41, reason="requires PyYAML version == 4.1")
2226
def test_danger_dump():
2327
assert yaml.danger_dump(data) == '{x: 1, z: 3, y: 2}\n'
2428

@@ -27,14 +31,14 @@ def test_dump_all():
2731
assert yaml.dump_all(documents=[data, {}]) == '{x: 1, z: 3, y: 2}\n--- {}\n'
2832

2933

30-
@pytest.mark.skipif(yaml.pyyaml.__version__ >= '4', reason="requires PyYAML version < 4")
34+
@pytest.mark.skipif(pyyaml_41, reason="requires PyYAML version != 4.1")
3135
def test_dump_and_safe_dump_match():
3236
mydict = {'x': 1, 'z': 2, 'y': 3}
3337
# don't know if mydict is ordered in the implementation or not (but don't care)
3438
assert yaml.dump(mydict) == yaml.safe_dump(mydict)
3539

3640

37-
@pytest.mark.skipif(yaml.pyyaml.__version__ < '4', reason="requires PyYAML version >= 4")
41+
@pytest.mark.skipif(not pyyaml_41, reason="requires PyYAML version == 4.1")
3842
def test_danger_dump_and_safe_dump_match():
3943
mydict = {'x': 1, 'z': 2, 'y': 3}
4044
assert yaml.danger_dump(mydict) == yaml.safe_dump(mydict)
@@ -49,6 +53,11 @@ def test_load():
4953
assert loaded == {'x': 1, 'z': 3, 'y': 2}
5054

5155

56+
def test_safe_load():
57+
loaded = yaml.safe_load('{x: 1, z: 3, y: 2}')
58+
assert loaded == {'x': 1, 'z': 3, 'y': 2}
59+
60+
5261
def test_load_all():
5362
gen = yaml.load_all('{x: 1, z: 3, y: 2}\n--- {}\n')
5463
assert isinstance(gen, GeneratorType)
@@ -57,39 +66,50 @@ def test_load_all():
5766
assert ordered_data == data
5867

5968

60-
@pytest.mark.skipif(sys.version_info >= (3,7), reason="requires python3.6-")
69+
@pytest.mark.skipif(sys.version_info >= (3, 7), reason="requires python3.6-")
6170
def test_loads_to_ordered_dict():
6271
loaded = yaml.load('{x: 1, z: 3, y: 2}')
6372
assert isinstance(loaded, OrderedDict)
6473

6574

66-
@pytest.mark.skipif(sys.version_info < (3,7), reason="requires python3.7+")
75+
@pytest.mark.skipif(sys.version_info < (3, 7), reason="requires python3.7+")
6776
def test_loads_to_std_dict():
6877
loaded = yaml.load('{x: 1, z: 3, y: 2}')
6978
assert not isinstance(loaded, OrderedDict)
7079
assert isinstance(loaded, dict)
7180

7281

82+
@pytest.mark.skipif(sys.version_info >= (3, 7), reason="requires python3.6-")
83+
def test_safe_loads_to_ordered_dict():
84+
loaded = yaml.safe_load('{x: 1, z: 3, y: 2}')
85+
assert isinstance(loaded, OrderedDict)
86+
87+
88+
@pytest.mark.skipif(sys.version_info < (3, 7), reason="requires python3.7+")
89+
def test_safe_loads_to_std_dict():
90+
loaded = yaml.safe_load('{x: 1, z: 3, y: 2}')
91+
assert not isinstance(loaded, OrderedDict)
92+
assert isinstance(loaded, dict)
93+
94+
7395
class MyOrderedDict(OrderedDict):
7496
pass
7597

7698

77-
@pytest.mark.skipif(yaml.pyyaml.__version__ >= '4', reason="requires PyYAML version < 4")
99+
@pytest.mark.skipif(pyyaml_41, reason="requires PyYAML version != 4.1")
78100
def test_subclass_dump_pyyaml3():
79101
data = MyOrderedDict([('x', 1), ('y', 2)])
80102
assert '!!python/object/apply:test_oyaml.MyOrderedDict' in yaml.dump(data)
81-
with pytest.raises(yaml.pyyaml.representer.RepresenterError) as cm:
103+
with pytest.raises(yaml.pyyaml.representer.RepresenterError, match='cannot represent an object') as cm:
82104
yaml.safe_dump(data)
83-
assert str(cm.value) == "cannot represent an object: MyOrderedDict([('x', 1), ('y', 2)])"
84105

85106

86-
@pytest.mark.skipif(yaml.pyyaml.__version__ < '4', reason="requires PyYAML version >= 4")
107+
@pytest.mark.skipif(not pyyaml_41, reason="requires PyYAML version == 4.1")
87108
def test_subclass_dump_pyyaml4():
88109
data = MyOrderedDict([('x', 1), ('y', 2)])
89110
assert '!!python/object/apply:test_oyaml.MyOrderedDict' in yaml.danger_dump(data)
90-
with pytest.raises(yaml.pyyaml.representer.RepresenterError) as cm:
111+
with pytest.raises(yaml.pyyaml.representer.RepresenterError, match='cannot represent an object') as cm:
91112
yaml.dump(data)
92-
assert str(cm.value) == "('cannot represent an object', MyOrderedDict([('x', 1), ('y', 2)]))"
93113

94114

95115
def test_anchors_and_references():

0 commit comments

Comments
 (0)