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.compare; 8 9 10 version(unittest) 11 { 12 13 import dyaml.test.common; 14 import dyaml.test.emitter; 15 import dyaml.token; 16 17 18 /// Test parser by comparing output from parsing two equivalent YAML files. 19 /// 20 /// Params: dataFilename = YAML file to parse. 21 /// canonicalFilename = Another file to parse, in canonical YAML format. 22 void testParser(string dataFilename, string canonicalFilename) @safe 23 { 24 auto dataEvents = Loader.fromFile(dataFilename).parse(); 25 auto canonicalEvents = Loader.fromFile(canonicalFilename).parse(); 26 27 compareEvents(dataEvents, canonicalEvents); 28 } 29 30 31 /// Test loader by comparing output from loading two equivalent YAML files. 32 /// 33 /// Params: dataFilename = YAML file to load. 34 /// canonicalFilename = Another file to load, in canonical YAML format. 35 void testLoader(string dataFilename, string canonicalFilename) @safe 36 { 37 import std.array : array; 38 auto data = Loader.fromFile(dataFilename).array; 39 auto canonical = Loader.fromFile(canonicalFilename).array; 40 41 assert(data.length == canonical.length, "Unequal node count"); 42 foreach(n; 0 .. data.length) 43 { 44 if(data[n] != canonical[n]) 45 { 46 static if(verbose) 47 { 48 writeln("Normal value:"); 49 writeln(data[n].debugString); 50 writeln("\n"); 51 writeln("Canonical value:"); 52 writeln(canonical[n].debugString); 53 } 54 assert(false, "testLoader(" ~ dataFilename ~ ", " ~ canonicalFilename ~ ") failed"); 55 } 56 } 57 } 58 59 60 @safe unittest 61 { 62 printProgress("D:YAML comparison unittest"); 63 run("testParser", &testParser, ["data", "canonical"]); 64 run("testLoader", &testLoader, ["data", "canonical"], ["test_loader_skip"]); 65 } 66 67 } // version(unittest)