1 
2 //          Copyright Ferdinand Majerech 2011.
3 // Distributed under the Boost Software License, Version 1.0.
4 //    (See accompanying file LICENSE_1_0.txt or copy at
5 //          http://www.boost.org/LICENSE_1_0.txt)
6 
7 module dyaml.test.representer;
8 
9 
10 version(unittest)
11 {
12 
13 import std.array;
14 import std.exception;
15 import std.meta;
16 import std.path;
17 import std.typecons;
18 import std.utf;
19 
20 import dyaml.test.common;
21 import dyaml.test.constructor;
22 
23 
24 /// Representer unittest.
25 ///
26 /// Params:  codeFilename = File name to determine test case from.
27 ///                         Nothing is read from this file, it only exists
28 ///                         to specify that we need a matching unittest.
29 void testRepresenterTypes(string codeFilename) @safe
30 {
31     string baseName = codeFilename.baseName.stripExtension;
32     enforce((baseName in dyaml.test.constructor.expected) !is null,
33             new Exception("Unimplemented representer test: " ~ baseName));
34 
35     Node[] expectedNodes = expected[baseName];
36     foreach(encoding; AliasSeq!(char, wchar, dchar))
37     {
38         immutable(encoding)[] output;
39         Node[] readNodes;
40 
41         scope(failure)
42         {
43             static if(verbose)
44             {
45                 writeln("Expected nodes:");
46                 foreach(ref n; expectedNodes){writeln(n.debugString, "\n---\n");}
47                 writeln("Read nodes:");
48                 foreach(ref n; readNodes){writeln(n.debugString, "\n---\n");}
49                 () @trusted {
50                     writeln("OUTPUT:\n", cast(string)output);
51                 }();
52             }
53         }
54 
55         auto emitStream  = new Appender!(immutable(encoding)[]);
56         auto dumper = dumper();
57         dumper.dump!encoding(emitStream, expectedNodes);
58 
59         output = emitStream.data;
60 
61         auto loader        = Loader.fromString(emitStream.data.toUTF8);
62         loader.name        = "TEST";
63         readNodes          = loader.array;
64 
65         assert(expectedNodes.length == readNodes.length);
66         foreach(n; 0 .. expectedNodes.length)
67         {
68             assert(expectedNodes[n] == readNodes[n]);
69         }
70     }
71 }
72 
73 @safe unittest
74 {
75     printProgress("D:YAML Representer unittest");
76     run("testRepresenterTypes", &testRepresenterTypes, ["code"]);
77 }
78 
79 } // version(unittest)