From 37afe6e43d4d7688f626dc99b5eedf849d0c8a83 Mon Sep 17 00:00:00 2001
From: ilor <kailoran@gmail.com>
Date: Sat, 30 Oct 2010 21:10:57 +0200
Subject: [PATCH] Add tests -- mostly Variables tests for now

---
 CMakeLists.txt       |   2 +-
 tests/CMakeLists.txt |  19 ++++++
 tests/context.cpp    |   0
 tests/main.cpp       |  13 ++++
 tests/variables.cpp  | 145 +++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 178 insertions(+), 1 deletion(-)
 create mode 100644 tests/CMakeLists.txt
 create mode 100644 tests/context.cpp
 create mode 100644 tests/main.cpp
 create mode 100644 tests/variables.cpp

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3473427..c3c0b82 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -49,5 +49,5 @@ set(LIBWCCL_VERSION "${ver_major}.${ver_minor}.${ver_patch}")
 find_package(Boost 1.41 REQUIRED COMPONENTS program_options filesystem regex)
 
 add_subdirectory(libwccl)
-#add_subdirectory(tests)
+add_subdirectory(tests)
 
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
new file mode 100644
index 0000000..5d575c5
--- /dev/null
+++ b/tests/CMakeLists.txt
@@ -0,0 +1,19 @@
+PROJECT( test )
+
+include_directories( ${CMAKE_SOURCE_DIR} )
+
+add_definitions(-DLIBWCCL_TEST_DATA_DIR="${PROJECT_SOURCE_DIR}/")
+
+add_executable(tests
+	main.cpp
+	variables.cpp
+	context.cpp
+)
+
+target_link_libraries ( tests wccl ${Boost_LIBRARIES})
+
+include_directories(${Boost_INCLUDE_DIR})
+link_directories(${Boost_LIBRARY_DIRS})
+
+add_custom_target(test tests)
+add_custom_target(test-verbose ./tests --log_level=message)
diff --git a/tests/context.cpp b/tests/context.cpp
new file mode 100644
index 0000000..e69de29
diff --git a/tests/main.cpp b/tests/main.cpp
new file mode 100644
index 0000000..e3ad700
--- /dev/null
+++ b/tests/main.cpp
@@ -0,0 +1,13 @@
+//#define BOOST_TEST_MODULE master
+#include <boost/test/included/unit_test.hpp>
+
+BOOST_AUTO_TEST_CASE(test_test)
+{
+	int a = 0;
+	BOOST_CHECK(a == 0);
+}
+
+boost::unit_test::test_suite* init_unit_test_suite(int argc, char* argv[])
+{
+	return 0;
+}
diff --git a/tests/variables.cpp b/tests/variables.cpp
new file mode 100644
index 0000000..79cfa09
--- /dev/null
+++ b/tests/variables.cpp
@@ -0,0 +1,145 @@
+#include <boost/test/unit_test.hpp>
+#include <boost/bind.hpp>
+
+#include <libwccl/variables.h>
+
+#include <iostream>
+
+using namespace Wccl;
+
+BOOST_AUTO_TEST_SUITE(variables)
+
+BOOST_AUTO_TEST_CASE(v_basic)
+{
+	Variables v;
+	BOOST_CHECK_EQUAL(v.size<Value>(), 0);
+	BOOST_CHECK_EQUAL(v.size<Bool>(), 0);
+	v.put("a", new Bool(true));
+	BOOST_CHECK_EQUAL(v.size<Value>(), 1);
+	BOOST_CHECK_EQUAL(v.size<Bool>(), 1);
+	boost::shared_ptr<Bool> b = v.get<Bool>("b");
+	BOOST_CHECK(!b);
+	b = v.get<Bool>("a");
+	BOOST_REQUIRE(b);
+	BOOST_CHECK_EQUAL(b->get_value(), true);
+	v.put("a", new Bool(false));
+	BOOST_CHECK_EQUAL(v.size<Value>(), 1);
+	BOOST_CHECK_EQUAL(v.size<Bool>(), 1);
+	b = v.get<Bool>("a");
+	BOOST_REQUIRE(b);
+	BOOST_CHECK_EQUAL(b->get_value(), false);
+	v.del<Position>("a");
+	BOOST_CHECK(v.get<Bool>("a"));
+	v.del<Bool>("a");
+	BOOST_CHECK(!v.get<Bool>("a"));
+}
+
+BOOST_AUTO_TEST_CASE(v_del_any)
+{
+	Variables v;
+	v.put("a", new Bool(true));
+	v.put("b", new Bool(true));
+	v.del<Bool>("a");
+	BOOST_CHECK(!v.get<Value>("a"));
+	v.put("a", new Bool(true));
+	v.del<Value>("a");
+	BOOST_CHECK(!v.get<Value>("a"));
+	BOOST_CHECK(v.get<Value>("b"));
+}
+
+BOOST_AUTO_TEST_CASE(v_put_any)
+{
+	Variables v;
+	boost::shared_ptr<Value> a;
+	a.reset(new Bool(true));
+	v.put_any("aaa", a);
+	BOOST_CHECK(v.get<Bool>("aaa"));
+	BOOST_CHECK(v.get<Bool>("aaa").get() == a.get());
+}
+
+struct Vfix
+{
+	Variables v;
+	Vfix() {
+		v.put("b1", Bool(false));
+		v.put("b2", new Bool(true));
+		v.put("p1", boost::shared_ptr<Position>(new Position(1)));
+		v.put("p2", boost::make_shared<Position>(2));
+		v.put_any("p3", boost::shared_ptr<Value>(new Position(3)));
+	}
+};
+
+BOOST_FIXTURE_TEST_CASE(get, Vfix)
+{
+	BOOST_CHECK(v.get<Bool>("b1"));
+	BOOST_CHECK(v.get<Value>("b1"));
+	BOOST_CHECK(!v.get<Position>("b1"));
+	BOOST_CHECK(v.get<Bool>("b2"));
+	BOOST_CHECK(v.get<Position>("p1"));
+	BOOST_CHECK(v.get<Position>("p2"));
+	BOOST_CHECK(v.get<Position>("p3"));
+	BOOST_CHECK(v.get<Value>("p3"));
+	BOOST_CHECK(!v.get<Bool>("p3"));
+}
+
+BOOST_FIXTURE_TEST_CASE(get_put, Vfix)
+{
+	BOOST_CHECK(!v.get<Bool>("b3"));
+	BOOST_CHECK(v.get_put<Bool>("b1"));
+	BOOST_CHECK(v.get_put<Bool>("b3"));
+	BOOST_CHECK(v.get<Bool>("b3"));
+}
+
+BOOST_FIXTURE_TEST_CASE(get_put_bad, Vfix)
+{
+	BOOST_CHECK_THROW(v.get_put<Bool>("p1"), VariableTypeMismatch);
+}
+
+BOOST_FIXTURE_TEST_CASE(put, Vfix)
+{
+	boost::shared_ptr<Bool> b1 = v.get<Bool>("b1");
+	BOOST_CHECK_EQUAL(b1->get_value(), false);
+	v.put("b1", Bool(true));
+	BOOST_CHECK_EQUAL(b1->get_value(), false);
+	boost::shared_ptr<Bool> b2 = v.get<Bool>("b1");
+	BOOST_CHECK(b1.get() != b2.get());
+	BOOST_CHECK_EQUAL(b2->get_value(), true);
+}
+
+BOOST_FIXTURE_TEST_CASE(put_bad, Vfix)
+{
+	BOOST_CHECK_THROW(v.put("p1", Bool(true)), VariableTypeMismatch);
+}
+
+BOOST_FIXTURE_TEST_CASE(set, Vfix)
+{
+	boost::shared_ptr<Bool> b1 = v.get<Bool>("b1");
+	BOOST_CHECK_EQUAL(b1->get_value(), false);
+	v.set("b1", Bool(true));
+	BOOST_CHECK_EQUAL(b1->get_value(), true);
+}
+
+BOOST_FIXTURE_TEST_CASE(set_new, Vfix)
+{
+	BOOST_CHECK(!v.get<Bool>("b3"));
+	v.set("b3", Bool(false));
+	BOOST_CHECK(v.get<Bool>("b3"));
+}
+
+BOOST_FIXTURE_TEST_CASE(set_bad, Vfix)
+{
+	BOOST_CHECK_THROW(v.set("p1", Bool(true)), VariableTypeMismatch);
+}
+
+BOOST_FIXTURE_TEST_CASE(del, Vfix)
+{
+	v.del<Bool>("b1");
+	BOOST_CHECK(!v.get<Bool>("b1"));
+	v.del<Bool>("p2");
+	BOOST_CHECK(v.get<Value>("p2"));
+	v.del_any("p2");
+	BOOST_CHECK(!v.get<Value>("p2"));
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
-- 
GitLab