view tests/Events.d @ 51:70df72d2299a default tip

Added unit tests for events.
author Jacob Carlborg <doob@me.com>
date Sat, 13 Aug 2011 17:06:35 +0200
parents
children
line wrap: on
line source

/**
 * Copyright: Copyright (c) 2011 Jacob Carlborg. All rights reserved.
 * Authors: Jacob Carlborg
 * Version: Initial created: Aug 7, 2011
 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0)
 */
module tests.Events;

import orange.core._;
import orange.serialization.Serializer;
import orange.serialization.Events;
import orange.serialization.archives.XMLArchive;
import orange.test.UnitTester;
import tests.Util;

Serializer serializer;
XMLArchive!(char) archive;

int b;
int c;

class Events
{
	int a;
	int d;
	
	void serializing ()
	{
		a = 3;
	}
	
	mixin OnSerializing!(serializing);
	
	void serialized ()
	{
		b = 4;
	}
	
	mixin OnSerialized!(serialized);
	
	void deserializing ()
	{
		c = 5;
	}
	
	mixin OnDeserializing!(deserializing);
	
	void deserialized ()
	{
		d = 6;
	}
	
	mixin OnDeserialized!(deserialized);
}

Events events;

unittest
{
	archive = new XMLArchive!(char);
	serializer = new Serializer(archive);
	
	events = new Events;
	
	describe("serialize a class with event handlers") in {
		it("should return serialized class with the correct values set by the event handlers") in {
			serializer.reset;
			serializer.serialize(events);
	
			assert(archive.data().containsDefaultXmlContent());
			assert(archive.data().containsXmlTag("object", `runtimeType="tests.Events.Events" type="Events" key="0" id="0"`));
			assert(archive.data().containsXmlTag("int", `key="a" id="1"`, "3"));
			assert(archive.data().containsXmlTag("int", `key="d" id="2"`, "0"));
			
			assert(b == 4);
		};
	};
	
	describe("deserialize class with a base class") in {
		it("should return a deserialized string equal to the original string") in {
			auto eventsDeserialized = serializer.deserialize!(Events)(archive.untypedData);
	
			assert(eventsDeserialized.a == 3);
			assert(eventsDeserialized.d == 6);
			
			assert(c == 5);
		};
	};
}