8208e817de
code duplication as well). No longer need a custom Variant.
82 lines
2.6 KiB
D
82 lines
2.6 KiB
D
|
|
// Copyright Ferdinand Majerech 2011.
|
|
// 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.testrepresenter;
|
|
|
|
|
|
import std.path;
|
|
import std.exception;
|
|
|
|
import dyaml.testcommon;
|
|
import dyaml.testconstructor;
|
|
|
|
|
|
/**
|
|
* Representer unittest.
|
|
*
|
|
* Params: verbose = Print verbose output?
|
|
* codeFilename = File name to determine test case from.
|
|
* Nothing is read from this file, it only exists
|
|
* to specify that we need a matching unittest.
|
|
*/
|
|
void testRepresenterTypes(bool verbose, string codeFilename)
|
|
{
|
|
string baseName = codeFilename.baseName.stripExtension;
|
|
enforce((baseName in dyaml.testconstructor.expected) !is null,
|
|
new Exception("Unimplemented representer test: " ~ baseName));
|
|
|
|
Node[] expectedNodes = expected[baseName];
|
|
foreach(encoding; [Encoding.UTF_8, Encoding.UTF_16, Encoding.UTF_32])
|
|
{
|
|
string output;
|
|
Node[] readNodes;
|
|
|
|
scope(failure)
|
|
{
|
|
if(verbose)
|
|
{
|
|
writeln("Expected nodes:");
|
|
foreach(ref n; expectedNodes){writeln(n.debugString, "\n---\n");}
|
|
writeln("Read nodes:");
|
|
foreach(ref n; readNodes){writeln(n.debugString, "\n---\n");}
|
|
writeln("OUTPUT:\n", output);
|
|
}
|
|
}
|
|
|
|
auto emitStream = new MemoryStream;
|
|
auto representer = new Representer;
|
|
representer.addRepresenter!TestClass(&representClass);
|
|
representer.addRepresenter!TestStruct(&representStruct);
|
|
auto dumper = Dumper(emitStream);
|
|
dumper.representer = representer;
|
|
dumper.encoding = encoding;
|
|
dumper.dump(expectedNodes);
|
|
|
|
output = cast(string)emitStream.data;
|
|
auto loadStream = new MemoryStream(emitStream.data);
|
|
auto constructor = new Constructor;
|
|
constructor.addConstructorMapping("!tag1", &constructClass);
|
|
constructor.addConstructorScalar("!tag2", &constructStruct);
|
|
|
|
auto loader = Loader(loadStream);
|
|
loader.name = "TEST";
|
|
loader.constructor = constructor;
|
|
readNodes = loader.loadAll();
|
|
|
|
assert(expectedNodes.length == readNodes.length);
|
|
foreach(n; 0 .. expectedNodes.length)
|
|
{
|
|
assert(expectedNodes[n].equals!false(readNodes[n]));
|
|
}
|
|
}
|
|
}
|
|
|
|
unittest
|
|
{
|
|
writeln("D:YAML Representer unittest");
|
|
run("testRepresenterTypes", &testRepresenterTypes, ["code"]);
|
|
}
|