aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/ext_depends/D-YAML/source/dyaml/test/emitter.d
diff options
context:
space:
mode:
Diffstat (limited to 'src/ext_depends/D-YAML/source/dyaml/test/emitter.d')
-rw-r--r--src/ext_depends/D-YAML/source/dyaml/test/emitter.d132
1 files changed, 132 insertions, 0 deletions
diff --git a/src/ext_depends/D-YAML/source/dyaml/test/emitter.d b/src/ext_depends/D-YAML/source/dyaml/test/emitter.d
new file mode 100644
index 0000000..293f236
--- /dev/null
+++ b/src/ext_depends/D-YAML/source/dyaml/test/emitter.d
@@ -0,0 +1,132 @@
+
+// Copyright Ferdinand Majerech 2011-2014.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+module dyaml.test.emitter;
+
+@safe unittest
+{
+ import std.array : Appender;
+ import std.range : ElementType, isInputRange;
+
+ import dyaml : CollectionStyle, LineBreak, Loader, Mark, ScalarStyle;
+ import dyaml.emitter : Emitter;
+ import dyaml.event : Event, EventID, mappingStartEvent, scalarEvent, sequenceStartEvent;
+ import dyaml.test.common : assertEventsEqual, run;
+
+ // Try to emit an event range.
+ static void emitTestCommon(T)(ref Appender!string emitStream, T events, bool canonical = false) @safe
+ if (isInputRange!T && is(ElementType!T == Event))
+ {
+ auto emitter = Emitter!(typeof(emitStream), char)(emitStream, canonical, 2, 80, LineBreak.unix);
+ foreach (ref event; events)
+ {
+ emitter.emit(event);
+ }
+ }
+ /**
+ Test emitter by getting events from parsing a file, emitting them, parsing
+ the emitted result and comparing events from parsing the emitted result with
+ originally parsed events.
+
+ Params:
+ dataFilename = YAML file to parse.
+ canonicalFilename = Canonical YAML file used as dummy to determine
+ which data files to load.
+ */
+ static void testEmitterOnData(string dataFilename, string canonicalFilename) @safe
+ {
+ //Must exist due to Anchor, Tags reference counts.
+ auto loader = Loader.fromFile(dataFilename);
+ auto events = loader.parse();
+ auto emitStream = Appender!string();
+ emitTestCommon(emitStream, events);
+
+ auto loader2 = Loader.fromString(emitStream.data);
+ loader2.name = "TEST";
+ auto newEvents = loader2.parse();
+ assertEventsEqual(events, newEvents);
+ }
+ /**
+ Test emitter by getting events from parsing a canonical YAML file, emitting
+ them both in canonical and normal format, parsing the emitted results and
+ comparing events from parsing the emitted result with originally parsed events.
+
+ Params: canonicalFilename = Canonical YAML file to parse.
+ */
+ static void testEmitterOnCanonical(string canonicalFilename) @safe
+ {
+ //Must exist due to Anchor, Tags reference counts.
+ auto loader = Loader.fromFile(canonicalFilename);
+ auto events = loader.parse();
+ foreach (canonical; [false, true])
+ {
+ auto emitStream = Appender!string();
+ emitTestCommon(emitStream, events, canonical);
+
+ auto loader2 = Loader.fromString(emitStream.data);
+ loader2.name = "TEST";
+ auto newEvents = loader2.parse();
+ assertEventsEqual(events, newEvents);
+ }
+ }
+ /**
+ Test emitter by getting events from parsing a file, emitting them with all
+ possible scalar and collection styles, parsing the emitted results and
+ comparing events from parsing the emitted result with originally parsed events.
+
+ Params:
+ dataFilename = YAML file to parse.
+ canonicalFilename = Canonical YAML file used as dummy to determine
+ which data files to load.
+ */
+ static void testEmitterStyles(string dataFilename, string canonicalFilename) @safe
+ {
+ foreach (filename; [dataFilename, canonicalFilename])
+ {
+ //must exist due to Anchor, Tags reference counts
+ auto loader = Loader.fromFile(canonicalFilename);
+ auto events = loader.parse();
+ foreach (flowStyle; [CollectionStyle.block, CollectionStyle.flow])
+ {
+ foreach (style; [ScalarStyle.literal, ScalarStyle.folded,
+ ScalarStyle.doubleQuoted, ScalarStyle.singleQuoted,
+ ScalarStyle.plain])
+ {
+ Event[] styledEvents;
+ foreach (event; events)
+ {
+ if (event.id == EventID.scalar)
+ {
+ event = scalarEvent(Mark(), Mark(), event.anchor, event.tag,
+ event.implicit,
+ event.value, style);
+ }
+ else if (event.id == EventID.sequenceStart)
+ {
+ event = sequenceStartEvent(Mark(), Mark(), event.anchor,
+ event.tag, event.implicit, flowStyle);
+ }
+ else if (event.id == EventID.mappingStart)
+ {
+ event = mappingStartEvent(Mark(), Mark(), event.anchor,
+ event.tag, event.implicit, flowStyle);
+ }
+ styledEvents ~= event;
+ }
+ auto emitStream = Appender!string();
+ emitTestCommon(emitStream, styledEvents);
+ auto loader2 = Loader.fromString(emitStream.data);
+ loader2.name = "TEST";
+ auto newEvents = loader2.parse();
+ assertEventsEqual(events, newEvents);
+ }
+ }
+ }
+ }
+ run(&testEmitterOnData, ["data", "canonical"]);
+ run(&testEmitterOnCanonical, ["canonical"]);
+ run(&testEmitterStyles, ["data", "canonical"]);
+}