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)