From 5ca5667d9cd146b216485c3d4c8413409c21b378 Mon Sep 17 00:00:00 2001 From: xi Date: Tue, 18 Apr 2006 16:48:00 +0000 Subject: [PATCH] Add more unit tests for error messages. git-svn-id: http://svn.pyyaml.org/pyyaml/trunk@141 18f92427-320e-0410-9341-c67f048884a3 --- lib/yaml/emitter.py | 6 ++--- tests/data/empty-anchor.emitter-error | 5 ++++ tests/data/empty-tag-handle.emitter-error | 5 ++++ tests/data/empty-tag-prefix.emitter-error | 5 ++++ tests/data/empty-tag.emitter-error | 5 ++++ tests/data/expected-document-end.emitter-error | 6 +++++ tests/data/expected-document-start.emitter-error | 4 +++ tests/data/expected-node-1.emitter-error | 4 +++ tests/data/expected-node-2.emitter-error | 7 +++++ tests/data/expected-nothing.emitter-error | 4 +++ tests/data/expected-stream-start.emitter-error | 2 ++ tests/data/invalid-anchor.emitter-error | 5 ++++ tests/data/invalid-tag-handle-1.emitter-error | 5 ++++ tests/data/invalid-tag-handle-2.emitter-error | 5 ++++ tests/data/no-alias-anchor.emitter-error | 8 ++++++ tests/data/no-tag.emitter-error | 5 ++++ tests/data/recursive.dumper-error | 3 +++ .../data/serializer-is-already-opened.dumper-error | 3 +++ tests/data/serializer-is-closed-1.dumper-error | 4 +++ tests/data/serializer-is-closed-2.dumper-error | 4 +++ tests/data/serializer-is-not-opened-1.dumper-error | 2 ++ tests/data/serializer-is-not-opened-2.dumper-error | 2 ++ tests/data/unknown.dumper-error | 1 + tests/data/unsupported-version.emitter-error | 5 ++++ tests/test_errors.py | 30 ++++++++++++++++++++++ 25 files changed, 132 insertions(+), 3 deletions(-) create mode 100644 tests/data/empty-anchor.emitter-error create mode 100644 tests/data/empty-tag-handle.emitter-error create mode 100644 tests/data/empty-tag-prefix.emitter-error create mode 100644 tests/data/empty-tag.emitter-error create mode 100644 tests/data/expected-document-end.emitter-error create mode 100644 tests/data/expected-document-start.emitter-error create mode 100644 tests/data/expected-node-1.emitter-error create mode 100644 tests/data/expected-node-2.emitter-error create mode 100644 tests/data/expected-nothing.emitter-error create mode 100644 tests/data/expected-stream-start.emitter-error create mode 100644 tests/data/invalid-anchor.emitter-error create mode 100644 tests/data/invalid-tag-handle-1.emitter-error create mode 100644 tests/data/invalid-tag-handle-2.emitter-error create mode 100644 tests/data/no-alias-anchor.emitter-error create mode 100644 tests/data/no-tag.emitter-error create mode 100644 tests/data/recursive.dumper-error create mode 100644 tests/data/serializer-is-already-opened.dumper-error create mode 100644 tests/data/serializer-is-closed-1.dumper-error create mode 100644 tests/data/serializer-is-closed-2.dumper-error create mode 100644 tests/data/serializer-is-not-opened-1.dumper-error create mode 100644 tests/data/serializer-is-not-opened-2.dumper-error create mode 100644 tests/data/unknown.dumper-error create mode 100644 tests/data/unsupported-version.emitter-error diff --git a/lib/yaml/emitter.py b/lib/yaml/emitter.py index 2a31057..3b8b1f3 100644 --- a/lib/yaml/emitter.py +++ b/lib/yaml/emitter.py @@ -465,14 +465,14 @@ class Emitter: or (self.style != '' and self.event.implicit[1]))): self.prepared_tag = None return - if self.event.implicit[0] and not tag: + if self.event.implicit[0] and tag is None: tag = u'!' self.prepared_tag = None else: if (not self.canonical or tag is None) and self.event.implicit: self.prepared_tag = None return - if not tag: + if tag is None: raise EmitterError("tag is not specified") if self.prepared_tag is None: self.prepared_tag = self.prepare_tag(tag) @@ -608,7 +608,7 @@ class Emitter: if not (u'0' <= ch <= u'9' or u'A' <= ch <= 'Z' or u'a' <= ch <= 'z' \ or ch in u'-_'): raise EmitterError("invalid character %r in the anchor: %r" - % (ch.encode('utf-8'), text.encode('utf-8'))) + % (ch.encode('utf-8'), anchor.encode('utf-8'))) return anchor def analyze_scalar(self, scalar): diff --git a/tests/data/empty-anchor.emitter-error b/tests/data/empty-anchor.emitter-error new file mode 100644 index 0000000..ce663b6 --- /dev/null +++ b/tests/data/empty-anchor.emitter-error @@ -0,0 +1,5 @@ +- !StreamStart +- !DocumentStart +- !Scalar { anchor: '', value: 'foo' } +- !DocumentEnd +- !StreamEnd diff --git a/tests/data/empty-tag-handle.emitter-error b/tests/data/empty-tag-handle.emitter-error new file mode 100644 index 0000000..235c899 --- /dev/null +++ b/tests/data/empty-tag-handle.emitter-error @@ -0,0 +1,5 @@ +- !StreamStart +- !DocumentStart { tags: { '': 'bar' } } +- !Scalar { value: 'foo' } +- !DocumentEnd +- !StreamEnd diff --git a/tests/data/empty-tag-prefix.emitter-error b/tests/data/empty-tag-prefix.emitter-error new file mode 100644 index 0000000..c6c0e95 --- /dev/null +++ b/tests/data/empty-tag-prefix.emitter-error @@ -0,0 +1,5 @@ +- !StreamStart +- !DocumentStart { tags: { '!': '' } } +- !Scalar { value: 'foo' } +- !DocumentEnd +- !StreamEnd diff --git a/tests/data/empty-tag.emitter-error b/tests/data/empty-tag.emitter-error new file mode 100644 index 0000000..b7ca593 --- /dev/null +++ b/tests/data/empty-tag.emitter-error @@ -0,0 +1,5 @@ +- !StreamStart +- !DocumentStart +- !Scalar { tag: '', value: 'key', implicit: [false,false] } +- !DocumentEnd +- !StreamEnd diff --git a/tests/data/expected-document-end.emitter-error b/tests/data/expected-document-end.emitter-error new file mode 100644 index 0000000..0cbab89 --- /dev/null +++ b/tests/data/expected-document-end.emitter-error @@ -0,0 +1,6 @@ +- !StreamStart +- !DocumentStart +- !Scalar { value: 'data 1' } +- !Scalar { value: 'data 2' } +- !DocumentEnd +- !StreamEnd diff --git a/tests/data/expected-document-start.emitter-error b/tests/data/expected-document-start.emitter-error new file mode 100644 index 0000000..8ce575e --- /dev/null +++ b/tests/data/expected-document-start.emitter-error @@ -0,0 +1,4 @@ +- !StreamStart +- !MappingStart +- !MappingEnd +- !StreamEnd diff --git a/tests/data/expected-node-1.emitter-error b/tests/data/expected-node-1.emitter-error new file mode 100644 index 0000000..36ceca3 --- /dev/null +++ b/tests/data/expected-node-1.emitter-error @@ -0,0 +1,4 @@ +- !StreamStart +- !DocumentStart +- !DocumentEnd +- !StreamEnd diff --git a/tests/data/expected-node-2.emitter-error b/tests/data/expected-node-2.emitter-error new file mode 100644 index 0000000..891ee37 --- /dev/null +++ b/tests/data/expected-node-2.emitter-error @@ -0,0 +1,7 @@ +- !StreamStart +- !DocumentStart +- !MappingStart +- !Scalar { value: 'key' } +- !MappingEnd +- !DocumentEnd +- !StreamEnd diff --git a/tests/data/expected-nothing.emitter-error b/tests/data/expected-nothing.emitter-error new file mode 100644 index 0000000..62c54d3 --- /dev/null +++ b/tests/data/expected-nothing.emitter-error @@ -0,0 +1,4 @@ +- !StreamStart +- !StreamEnd +- !StreamStart +- !StreamEnd diff --git a/tests/data/expected-stream-start.emitter-error b/tests/data/expected-stream-start.emitter-error new file mode 100644 index 0000000..480dc2e --- /dev/null +++ b/tests/data/expected-stream-start.emitter-error @@ -0,0 +1,2 @@ +- !DocumentStart +- !DocumentEnd diff --git a/tests/data/invalid-anchor.emitter-error b/tests/data/invalid-anchor.emitter-error new file mode 100644 index 0000000..3d2a814 --- /dev/null +++ b/tests/data/invalid-anchor.emitter-error @@ -0,0 +1,5 @@ +- !StreamStart +- !DocumentStart +- !Scalar { anchor: '5*5=25', value: 'foo' } +- !DocumentEnd +- !StreamEnd diff --git a/tests/data/invalid-tag-handle-1.emitter-error b/tests/data/invalid-tag-handle-1.emitter-error new file mode 100644 index 0000000..d5df9a2 --- /dev/null +++ b/tests/data/invalid-tag-handle-1.emitter-error @@ -0,0 +1,5 @@ +- !StreamStart +- !DocumentStart { tags: { '!foo': 'bar' } } +- !Scalar { value: 'foo' } +- !DocumentEnd +- !StreamEnd diff --git a/tests/data/invalid-tag-handle-2.emitter-error b/tests/data/invalid-tag-handle-2.emitter-error new file mode 100644 index 0000000..d1831d5 --- /dev/null +++ b/tests/data/invalid-tag-handle-2.emitter-error @@ -0,0 +1,5 @@ +- !StreamStart +- !DocumentStart { tags: { '!!!': 'bar' } } +- !Scalar { value: 'foo' } +- !DocumentEnd +- !StreamEnd diff --git a/tests/data/no-alias-anchor.emitter-error b/tests/data/no-alias-anchor.emitter-error new file mode 100644 index 0000000..5ff065c --- /dev/null +++ b/tests/data/no-alias-anchor.emitter-error @@ -0,0 +1,8 @@ +- !StreamStart +- !DocumentStart +- !SequenceStart +- !Scalar { anchor: A, value: data } +- !Alias { } +- !SequenceEnd +- !DocumentEnd +- !StreamEnd diff --git a/tests/data/no-tag.emitter-error b/tests/data/no-tag.emitter-error new file mode 100644 index 0000000..384c62f --- /dev/null +++ b/tests/data/no-tag.emitter-error @@ -0,0 +1,5 @@ +- !StreamStart +- !DocumentStart +- !Scalar { value: 'foo', implicit: [false,false] } +- !DocumentEnd +- !StreamEnd diff --git a/tests/data/recursive.dumper-error b/tests/data/recursive.dumper-error new file mode 100644 index 0000000..3c7cc2f --- /dev/null +++ b/tests/data/recursive.dumper-error @@ -0,0 +1,3 @@ +data = [] +data.append(data) +dump(data) diff --git a/tests/data/serializer-is-already-opened.dumper-error b/tests/data/serializer-is-already-opened.dumper-error new file mode 100644 index 0000000..0f66a46 --- /dev/null +++ b/tests/data/serializer-is-already-opened.dumper-error @@ -0,0 +1,3 @@ +dumper = Dumper(StringIO.StringIO()) +dumper.open() +dumper.open() diff --git a/tests/data/serializer-is-closed-1.dumper-error b/tests/data/serializer-is-closed-1.dumper-error new file mode 100644 index 0000000..5d9ecfc --- /dev/null +++ b/tests/data/serializer-is-closed-1.dumper-error @@ -0,0 +1,4 @@ +dumper = Dumper(StringIO.StringIO()) +dumper.open() +dumper.close() +dumper.open() diff --git a/tests/data/serializer-is-closed-2.dumper-error b/tests/data/serializer-is-closed-2.dumper-error new file mode 100644 index 0000000..0762145 --- /dev/null +++ b/tests/data/serializer-is-closed-2.dumper-error @@ -0,0 +1,4 @@ +dumper = Dumper(StringIO.StringIO()) +dumper.open() +dumper.close() +dumper.serialize(ScalarNode(tag='!foo', value='bar')) diff --git a/tests/data/serializer-is-not-opened-1.dumper-error b/tests/data/serializer-is-not-opened-1.dumper-error new file mode 100644 index 0000000..1d21554 --- /dev/null +++ b/tests/data/serializer-is-not-opened-1.dumper-error @@ -0,0 +1,2 @@ +dumper = Dumper(StringIO.StringIO()) +dumper.close() diff --git a/tests/data/serializer-is-not-opened-2.dumper-error b/tests/data/serializer-is-not-opened-2.dumper-error new file mode 100644 index 0000000..d1d7f98 --- /dev/null +++ b/tests/data/serializer-is-not-opened-2.dumper-error @@ -0,0 +1,2 @@ +dumper = Dumper(StringIO.StringIO()) +dumper.serialize(ScalarNode(tag='!foo', value='bar')) diff --git a/tests/data/unknown.dumper-error b/tests/data/unknown.dumper-error new file mode 100644 index 0000000..4de4279 --- /dev/null +++ b/tests/data/unknown.dumper-error @@ -0,0 +1 @@ +safe_dump(object) diff --git a/tests/data/unsupported-version.emitter-error b/tests/data/unsupported-version.emitter-error new file mode 100644 index 0000000..f9c6197 --- /dev/null +++ b/tests/data/unsupported-version.emitter-error @@ -0,0 +1,5 @@ +- !StreamStart +- !DocumentStart { version: [5,6] } +- !Scalar { value: foo } +- !DocumentEnd +- !StreamEnd diff --git a/tests/test_errors.py b/tests/test_errors.py index f85fee1..6c651b4 100644 --- a/tests/test_errors.py +++ b/tests/test_errors.py @@ -1,5 +1,8 @@ import test_appliance +import test_emitter + +import StringIO from yaml import * @@ -13,6 +16,31 @@ class TestErrors(test_appliance.TestAppliance): #self._load_string(invalid_filename) self.failUnlessRaises(YAMLError, lambda: self._load_string(invalid_filename)) + def _testEmitterErrors(self, test_name, invalid_filename): + events = list(load(file(invalid_filename, 'rb').read(), + Loader=test_emitter.EventsLoader)) + self.failUnlessRaises(YAMLError, lambda: self._emit(events)) + + def _testDumperErrors(self, test_name, invalid_filename): + code = file(invalid_filename, 'rb').read() + self.failUnlessRaises(YAMLError, lambda: self._dump(code)) + + def _dump(self, code): + try: + exec code + except YAMLError, exc: + #print '.'*70 + #print "%s:" % exc.__class__.__name__, exc + raise + + def _emit(self, events): + try: + emit(events) + except EmitterError, exc: + #print '.'*70 + #print "%s:" % exc.__class__.__name__, exc + raise + def _load(self, filename): try: return list(load_all(file(filename, 'rb'))) @@ -40,4 +68,6 @@ class TestErrors(test_appliance.TestAppliance): TestErrors.add_tests('testLoaderErrors', '.loader-error') TestErrors.add_tests('testLoaderStringErrors', '.loader-error') +TestErrors.add_tests('testEmitterErrors', '.emitter-error') +TestErrors.add_tests('testDumperErrors', '.dumper-error') -- 2.11.4.GIT