-
Notifications
You must be signed in to change notification settings - Fork 21
Expand file tree
/
Copy pathtest_oxml.py
More file actions
142 lines (115 loc) · 5.14 KB
/
test_oxml.py
File metadata and controls
142 lines (115 loc) · 5.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
# -*- coding: utf-8 -*-
#
# test_oxml.py
#
# Copyright (C) 2013 Steve Canny scanny@cisco.com
#
# This module is part of python-opc and is released under the MIT License:
# http://www.opensource.org/licenses/mit-license.php
"""Test suite for opc.oxml module."""
from opc.constants import RELATIONSHIP_TARGET_MODE as RTM
from opc.oxml import (
CT_Default, CT_Override, CT_Relationship, CT_Relationships, CT_Types,
oxml_tostring
)
from .unitdata import (
a_Default, an_Override, a_Relationship, a_Relationships, a_Types
)
class DescribeCT_Default(object):
def it_provides_read_access_to_xml_values(self):
default = a_Default().element
assert default.extension == 'xml'
assert default.content_type == 'application/xml'
def it_can_construct_a_new_default_element(self):
default = CT_Default.new('.xml', 'application/xml')
expected_xml = a_Default().xml
assert default.xml == expected_xml
class DescribeCT_Override(object):
def it_provides_read_access_to_xml_values(self):
override = an_Override().element
assert override.partname == '/part/name.xml'
assert override.content_type == 'app/vnd.type'
def it_can_construct_a_new_override_element(self):
override = CT_Override.new('/part/name.xml', 'app/vnd.type')
expected_xml = an_Override().xml
assert override.xml == expected_xml
class DescribeCT_Relationship(object):
def it_provides_read_access_to_xml_values(self):
rel = a_Relationship().element
assert rel.rId == 'rId9'
assert rel.reltype == 'ReLtYpE'
assert rel.target_ref == 'docProps/core.xml'
assert rel.target_mode == RTM.INTERNAL
def it_can_construct_from_attribute_values(self):
cases = (
('rId9', 'ReLtYpE', 'foo/bar.xml', None),
('rId9', 'ReLtYpE', 'bar/foo.xml', RTM.INTERNAL),
('rId9', 'ReLtYpE', 'http://some/link', RTM.EXTERNAL),
)
for rId, reltype, target, target_mode in cases:
if target_mode is None:
rel = CT_Relationship.new(rId, reltype, target)
else:
rel = CT_Relationship.new(rId, reltype, target, target_mode)
builder = a_Relationship().with_target(target)
if target_mode == RTM.EXTERNAL:
builder = builder.with_target_mode(RTM.EXTERNAL)
expected_rel_xml = builder.xml
assert rel.xml == expected_rel_xml
class DescribeCT_Relationships(object):
def it_can_construct_a_new_relationships_element(self):
rels = CT_Relationships.new()
actual_xml = oxml_tostring(rels, encoding='unicode',
pretty_print=True)
expected_xml = (
'<Relationships xmlns="http://schemas.openxmlformats.org/package'
'/2006/relationships"/>\n'
)
assert actual_xml == expected_xml
def it_can_build_rels_element_incrementally(self):
# setup ------------------------
rels = CT_Relationships.new()
# exercise ---------------------
rels.add_rel('rId1', 'http://reltype1', 'docProps/core.xml')
rels.add_rel('rId2', 'http://linktype', 'http://some/link', True)
rels.add_rel('rId3', 'http://reltype2', '../slides/slide1.xml')
# verify -----------------------
expected_rels_xml = a_Relationships().xml
actual_xml = oxml_tostring(rels, encoding='unicode',
pretty_print=True)
assert actual_xml == expected_rels_xml
def it_can_generate_rels_file_xml(self):
expected_xml = (
'<?xml version=\'1.0\' encoding=\'UTF-8\' standalone=\'yes\'?>\n'
'<Relationships xmlns="http://schemas.openxmlformats.org/package'
'/2006/relationships"/>'.encode('utf-8')
)
assert CT_Relationships.new().xml == expected_xml
class DescribeCT_Types(object):
def it_provides_access_to_default_child_elements(self):
types = a_Types().element
assert len(types.defaults) == 2
for default in types.defaults:
assert isinstance(default, CT_Default)
def it_provides_access_to_override_child_elements(self):
types = a_Types().element
assert len(types.overrides) == 3
for override in types.overrides:
assert isinstance(override, CT_Override)
def it_should_have_empty_list_on_no_matching_elements(self):
types = a_Types().empty().element
assert types.defaults == []
assert types.overrides == []
def it_can_construct_a_new_types_element(self):
types = CT_Types.new()
expected_xml = a_Types().empty().xml
assert types.xml == expected_xml
def it_can_build_types_element_incrementally(self):
types = CT_Types.new()
types.add_default('.xml', 'application/xml')
types.add_default('.jpeg', 'image/jpeg')
types.add_override('/docProps/core.xml', 'app/vnd.type1')
types.add_override('/ppt/presentation.xml', 'app/vnd.type2')
types.add_override('/docProps/thumbnail.jpeg', 'image/jpeg')
expected_types_xml = a_Types().xml
assert types.xml == expected_types_xml