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)