|
1 | 1 | import sys |
2 | 2 | from collections import OrderedDict |
| 3 | +from types import GeneratorType |
3 | 4 |
|
4 | 5 | import pytest |
| 6 | +from yaml.representer import RepresenterError |
5 | 7 |
|
6 | 8 | import oyaml as yaml |
7 | 9 |
|
8 | 10 |
|
9 | | -d = OrderedDict([('k1', 'v1'), ('k3', 'v3'), ('k2', 'v2')]) |
| 11 | +data = OrderedDict([('x', 1), ('z', 3), ('y', 2)]) |
10 | 12 |
|
11 | 13 |
|
12 | 14 | def test_dump(): |
13 | | - assert yaml.dump(d) == '{k1: v1, k3: v3, k2: v2}\n' |
| 15 | + assert yaml.dump(data) == '{x: 1, z: 3, y: 2}\n' |
| 16 | + |
| 17 | + |
| 18 | +def test_safe_dump(): |
| 19 | + assert yaml.safe_dump(data) == '{x: 1, z: 3, y: 2}\n' |
| 20 | + |
| 21 | + |
| 22 | +def test_dump_all(): |
| 23 | + assert yaml.dump_all(documents=[data, {}]) == '{x: 1, z: 3, y: 2}\n--- {}\n' |
| 24 | + |
| 25 | + |
| 26 | +def test_safe_dump_all(): |
| 27 | + assert yaml.safe_dump_all(documents=[data, {}]) == '{x: 1, z: 3, y: 2}\n--- {}\n' |
14 | 28 |
|
15 | 29 |
|
16 | 30 | def test_load(): |
17 | | - loaded = yaml.load('{k1: v1, k3: v3, k2: v2}') |
18 | | - assert loaded == {'k1': 'v1', 'k3': 'v3', 'k2': 'v2'} |
| 31 | + loaded = yaml.load('{x: 1, z: 3, y: 2}') |
| 32 | + assert loaded == {'x': 1, 'z': 3, 'y': 2} |
| 33 | + |
| 34 | + |
| 35 | +def test_load_all(): |
| 36 | + gen = yaml.load_all('{x: 1, z: 3, y: 2}\n--- {}\n') |
| 37 | + assert isinstance(gen, GeneratorType) |
| 38 | + ordered_data, empty_dict = gen |
| 39 | + assert empty_dict == {} |
| 40 | + assert ordered_data == data |
19 | 41 |
|
20 | 42 |
|
21 | 43 | @pytest.mark.skipif(sys.version_info >= (3,7), reason="requires python3.6-") |
22 | 44 | def test_loads_to_ordered_dict(): |
23 | | - loaded = yaml.load('{k1: v1, k3: v3, k2: v2}') |
| 45 | + loaded = yaml.load('{x: 1, z: 3, y: 2}') |
24 | 46 | assert isinstance(loaded, OrderedDict) |
25 | 47 |
|
26 | 48 |
|
27 | 49 | @pytest.mark.skipif(sys.version_info < (3,7), reason="requires python3.7+") |
28 | 50 | def test_loads_to_std_dict(): |
29 | | - loaded = yaml.load('{k1: v1, k3: v3, k2: v2}') |
| 51 | + loaded = yaml.load('{x: 1, z: 3, y: 2}') |
30 | 52 | assert not isinstance(loaded, OrderedDict) |
31 | 53 | assert isinstance(loaded, dict) |
32 | 54 |
|
33 | 55 |
|
| 56 | +def test_subclass_dump(): |
| 57 | + |
| 58 | + class MyOrderedDict(OrderedDict): |
| 59 | + pass |
| 60 | + |
| 61 | + data = MyOrderedDict([('x', 1), ('y', 2)]) |
| 62 | + assert '!!python/object/apply:test_oyaml.MyOrderedDict' in yaml.dump(data) |
| 63 | + with pytest.raises(RepresenterError) as cm: |
| 64 | + yaml.safe_dump(data) |
| 65 | + assert str(cm.value) == "cannot represent an object: MyOrderedDict([('x', 1), ('y', 2)])" |
| 66 | + |
| 67 | + |
34 | 68 | def test_anchors_and_references(): |
35 | 69 | text = ''' |
36 | 70 | defaults: |
|
0 commit comments