5 yaml.PyBaseLoader = yaml.BaseLoader
6 yaml.PySafeLoader = yaml.SafeLoader
7 yaml.PyLoader = yaml.Loader
8 yaml.PyBaseDumper = yaml.BaseDumper
9 yaml.PySafeDumper = yaml.SafeDumper
10 yaml.PyDumper = yaml.Dumper
13 def new_scan(stream, Loader=yaml.CLoader):
14 return old_scan(stream, Loader)
16 old_parse = yaml.parse
17 def new_parse(stream, Loader=yaml.CLoader):
18 return old_parse(stream, Loader)
20 old_compose = yaml.compose
21 def new_compose(stream, Loader=yaml.CLoader):
22 return old_compose(stream, Loader)
24 old_compose_all = yaml.compose_all
25 def new_compose_all(stream, Loader=yaml.CLoader):
26 return old_compose_all(stream, Loader)
29 def new_load(stream, Loader=yaml.CLoader):
30 return old_load(stream, Loader)
32 old_load_all = yaml.load_all
33 def new_load_all(stream, Loader=yaml.CLoader):
34 return old_load_all(stream, Loader)
36 old_safe_load = yaml.safe_load
37 def new_safe_load(stream):
38 return old_load(stream, yaml.CSafeLoader)
40 old_safe_load_all = yaml.safe_load_all
41 def new_safe_load_all(stream):
42 return old_load_all(stream, yaml.CSafeLoader)
45 def new_emit(events, stream=None, Dumper=yaml.CDumper, **kwds):
46 return old_emit(events, stream, Dumper, **kwds)
48 old_serialize = yaml.serialize
49 def new_serialize(node, stream, Dumper=yaml.CDumper, **kwds):
50 return old_serialize(node, stream, Dumper, **kwds)
52 old_serialize_all = yaml.serialize_all
53 def new_serialize_all(nodes, stream=None, Dumper=yaml.CDumper, **kwds):
54 return old_serialize_all(nodes, stream, Dumper, **kwds)
57 def new_dump(data, stream=None, Dumper=yaml.CDumper, **kwds):
58 return old_dump(data, stream, Dumper, **kwds)
60 old_dump_all = yaml.dump_all
61 def new_dump_all(documents, stream=None, Dumper=yaml.CDumper, **kwds):
62 return old_dump_all(documents, stream, Dumper, **kwds)
64 old_safe_dump = yaml.safe_dump
65 def new_safe_dump(data, stream=None, **kwds):
66 return old_dump(data, stream, yaml.CSafeDumper, **kwds)
68 old_safe_dump_all = yaml.safe_dump_all
69 def new_safe_dump_all(documents, stream=None, **kwds):
70 return old_dump_all(documents, stream, yaml.CSafeDumper, **kwds)
73 yaml.BaseLoader = yaml.CBaseLoader
74 yaml.SafeLoader = yaml.CSafeLoader
75 yaml.Loader = yaml.CLoader
76 yaml.BaseDumper = yaml.CBaseDumper
77 yaml.SafeDumper = yaml.CSafeDumper
78 yaml.Dumper = yaml.CDumper
80 yaml.parse = new_parse
81 yaml.compose = new_compose
82 yaml.compose_all = new_compose_all
84 yaml.load_all = new_load_all
85 yaml.safe_load = new_safe_load
86 yaml.safe_load_all = new_safe_load_all
88 yaml.serialize = new_serialize
89 yaml.serialize_all = new_serialize_all
91 yaml.dump_all = new_dump_all
92 yaml.safe_dump = new_safe_dump
93 yaml.safe_dump_all = new_safe_dump_all
96 yaml.BaseLoader = yaml.PyBaseLoader
97 yaml.SafeLoader = yaml.PySafeLoader
98 yaml.Loader = yaml.PyLoader
99 yaml.BaseDumper = yaml.PyBaseDumper
100 yaml.SafeDumper = yaml.PySafeDumper
101 yaml.Dumper = yaml.PyDumper
103 yaml.parse = old_parse
104 yaml.compose = old_compose
105 yaml.compose_all = old_compose_all
107 yaml.load_all = old_load_all
108 yaml.safe_load = old_safe_load
109 yaml.safe_load_all = old_safe_load_all
111 yaml.serialize = old_serialize
112 yaml.serialize_all = old_serialize_all
114 yaml.dump_all = old_dump_all
115 yaml.safe_dump = old_safe_dump
116 yaml.safe_dump_all = old_safe_dump_all
118 def test_c_version(verbose=False):
120 print(_yaml.get_version())
121 print(_yaml.get_version_string())
122 assert ("%s.%s.%s" % _yaml.get_version()) == _yaml.get_version_string(), \
123 (_yaml.get_version(), _yaml.get_version_string())
125 def _compare_scanners(py_data, c_data, verbose):
126 py_tokens = list(yaml.scan(py_data, Loader=yaml.PyLoader))
129 for token in yaml.scan(c_data, Loader=yaml.CLoader):
130 c_tokens.append(token)
131 assert len(py_tokens) == len(c_tokens), (len(py_tokens), len(c_tokens))
132 for py_token, c_token in zip(py_tokens, c_tokens):
133 assert py_token.__class__ == c_token.__class__, (py_token, c_token)
134 if hasattr(py_token, 'value'):
135 assert py_token.value == c_token.value, (py_token, c_token)
136 if isinstance(py_token, yaml.StreamEndToken):
138 py_start = (py_token.start_mark.index, py_token.start_mark.line, py_token.start_mark.column)
139 py_end = (py_token.end_mark.index, py_token.end_mark.line, py_token.end_mark.column)
140 c_start = (c_token.start_mark.index, c_token.start_mark.line, c_token.start_mark.column)
141 c_end = (c_token.end_mark.index, c_token.end_mark.line, c_token.end_mark.column)
142 assert py_start == c_start, (py_start, c_start)
143 assert py_end == c_end, (py_end, c_end)
147 pprint.pprint(py_tokens)
149 pprint.pprint(c_tokens)
151 def test_c_scanner(data_filename, canonical_filename, verbose=False):
152 _compare_scanners(open(data_filename, 'rb'),
153 open(data_filename, 'rb'), verbose)
154 _compare_scanners(open(data_filename, 'rb').read(),
155 open(data_filename, 'rb').read(), verbose)
156 _compare_scanners(open(canonical_filename, 'rb'),
157 open(canonical_filename, 'rb'), verbose)
158 _compare_scanners(open(canonical_filename, 'rb').read(),
159 open(canonical_filename, 'rb').read(), verbose)
161 test_c_scanner.unittest = ['.data', '.canonical']
162 test_c_scanner.skip = ['.skip-ext']
164 def _compare_parsers(py_data, c_data, verbose):
165 py_events = list(yaml.parse(py_data, Loader=yaml.PyLoader))
168 for event in yaml.parse(c_data, Loader=yaml.CLoader):
169 c_events.append(event)
170 assert len(py_events) == len(c_events), (len(py_events), len(c_events))
171 for py_event, c_event in zip(py_events, c_events):
172 for attribute in ['__class__', 'anchor', 'tag', 'implicit',
173 'value', 'explicit', 'version', 'tags']:
174 py_value = getattr(py_event, attribute, None)
175 c_value = getattr(c_event, attribute, None)
176 assert py_value == c_value, (py_event, c_event, attribute)
180 pprint.pprint(py_events)
182 pprint.pprint(c_events)
184 def test_c_parser(data_filename, canonical_filename, verbose=False):
185 _compare_parsers(open(data_filename, 'rb'),
186 open(data_filename, 'rb'), verbose)
187 _compare_parsers(open(data_filename, 'rb').read(),
188 open(data_filename, 'rb').read(), verbose)
189 _compare_parsers(open(canonical_filename, 'rb'),
190 open(canonical_filename, 'rb'), verbose)
191 _compare_parsers(open(canonical_filename, 'rb').read(),
192 open(canonical_filename, 'rb').read(), verbose)
194 test_c_parser.unittest = ['.data', '.canonical']
195 test_c_parser.skip = ['.skip-ext']
197 def _compare_emitters(data, verbose):
198 events = list(yaml.parse(data, Loader=yaml.PyLoader))
199 c_data = yaml.emit(events, Dumper=yaml.CDumper)
202 py_events = list(yaml.parse(c_data, Loader=yaml.PyLoader))
203 c_events = list(yaml.parse(c_data, Loader=yaml.CLoader))
205 assert len(events) == len(py_events), (len(events), len(py_events))
206 assert len(events) == len(c_events), (len(events), len(c_events))
207 for event, py_event, c_event in zip(events, py_events, c_events):
208 for attribute in ['__class__', 'anchor', 'tag', 'implicit',
209 'value', 'explicit', 'version', 'tags']:
210 value = getattr(event, attribute, None)
211 py_value = getattr(py_event, attribute, None)
212 c_value = getattr(c_event, attribute, None)
213 if attribute == 'tag' and value in [None, '!'] \
214 and py_value in [None, '!'] and c_value in [None, '!']:
216 if attribute == 'explicit' and (py_value or c_value):
218 assert value == py_value, (event, py_event, attribute)
219 assert value == c_value, (event, c_event, attribute)
223 pprint.pprint(events)
225 pprint.pprint(py_events)
227 pprint.pprint(c_events)
229 def test_c_emitter(data_filename, canonical_filename, verbose=False):
230 _compare_emitters(open(data_filename, 'rb').read(), verbose)
231 _compare_emitters(open(canonical_filename, 'rb').read(), verbose)
233 test_c_emitter.unittest = ['.data', '.canonical']
234 test_c_emitter.skip = ['.skip-ext']
236 def wrap_ext_function(function):
237 def wrapper(*args, **kwds):
240 function(*args, **kwds)
243 wrapper.__name__ = '%s_ext' % function.__name__
244 wrapper.unittest = function.unittest
245 wrapper.skip = getattr(function, 'skip', [])+['.skip-ext']
248 def wrap_ext(collections):
250 if not isinstance(collections, list):
251 collections = [collections]
252 for collection in collections:
253 if not isinstance(collection, dict):
254 collection = vars(collection)
255 for key in sorted(collection):
256 value = collection[key]
257 if isinstance(value, types.FunctionType) and hasattr(value, 'unittest'):
258 functions.append(wrap_ext_function(value))
259 for function in functions:
260 assert function.__name__ not in globals()
261 globals()[function.__name__] = function
263 import test_tokens, test_structure, test_errors, test_resolver, test_constructor, \
264 test_emitter, test_representer, test_recursive, test_input_output
265 wrap_ext([test_tokens, test_structure, test_errors, test_resolver, test_constructor,
266 test_emitter, test_representer, test_recursive, test_input_output])
268 if __name__ == '__main__':
269 import test_appliance
270 test_appliance.run(globals())