/* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * PreferencesTest.cpp * Test fixture for the Preferences classes * Copyright (C) 2005-2008 Simon Newton */ #include #include #include #include #include "olad/Preferences.h" using ola::BoolValidator; using ola::FileBackedPreferences; using ola::FileBackedPreferencesFactory; using ola::IntValidator; using ola::MemoryPreferencesFactory; using ola::Preferences; using ola::SetValidator; using ola::StringValidator; using ola::IPv4Validator; using std::string; using std::vector; class PreferencesTest: public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(PreferencesTest); CPPUNIT_TEST(testValidators); CPPUNIT_TEST(testGetSetRemove); CPPUNIT_TEST(testBool); CPPUNIT_TEST(testFactory); CPPUNIT_TEST(testLoad); CPPUNIT_TEST(testSave); CPPUNIT_TEST_SUITE_END(); public: void testValidators(); void testGetSetRemove(); void testBool(); void testFactory(); void testLoad(); void testSave(); }; CPPUNIT_TEST_SUITE_REGISTRATION(PreferencesTest); /* * Check the validators work */ void PreferencesTest::testValidators() { StringValidator string_validator; CPPUNIT_ASSERT(string_validator.IsValid("foo")); CPPUNIT_ASSERT(!string_validator.IsValid("")); std::set values; values.insert("one"); values.insert("two"); SetValidator set_validator(values); CPPUNIT_ASSERT(set_validator.IsValid("one")); CPPUNIT_ASSERT(set_validator.IsValid("two")); CPPUNIT_ASSERT(!set_validator.IsValid("zero")); CPPUNIT_ASSERT(!set_validator.IsValid("three")); BoolValidator bool_validator; CPPUNIT_ASSERT(bool_validator.IsValid("true")); CPPUNIT_ASSERT(bool_validator.IsValid("false")); CPPUNIT_ASSERT(!bool_validator.IsValid("")); IntValidator int_validator(10, 14); CPPUNIT_ASSERT(int_validator.IsValid("10")); CPPUNIT_ASSERT(int_validator.IsValid("14")); CPPUNIT_ASSERT(!int_validator.IsValid("0")); CPPUNIT_ASSERT(!int_validator.IsValid("9")); CPPUNIT_ASSERT(!int_validator.IsValid("15")); IPv4Validator ipv4_validator; // empty ok CPPUNIT_ASSERT(ipv4_validator.IsValid("")); CPPUNIT_ASSERT(ipv4_validator.IsValid("1.2.3.4")); CPPUNIT_ASSERT(ipv4_validator.IsValid("10.0.255.1")); CPPUNIT_ASSERT(!ipv4_validator.IsValid("foo")); CPPUNIT_ASSERT(!ipv4_validator.IsValid("1.2.3")); CPPUNIT_ASSERT(!ipv4_validator.IsValid("1.2.3.4.5")); CPPUNIT_ASSERT(!ipv4_validator.IsValid("1.f00.3.4")); IPv4Validator ipv4_validator2(false); // empty not ok CPPUNIT_ASSERT(!ipv4_validator2.IsValid("")); } /* * Check that we can get/set the preferences */ void PreferencesTest::testGetSetRemove() { MemoryPreferencesFactory factory; Preferences *preferences = factory.NewPreference("dummy"); string key1 = "foo"; string value1 = "bar"; string value2 = "baz"; // test get/set single values CPPUNIT_ASSERT_EQUAL(string(""), preferences->GetValue(key1)); preferences->SetValue(key1, value1); CPPUNIT_ASSERT_EQUAL(value1, preferences->GetValue(key1)); preferences->SetValue(key1, value2); CPPUNIT_ASSERT_EQUAL(value2, preferences->GetValue(key1)); preferences->RemoveValue(key1); CPPUNIT_ASSERT_EQUAL(string(""), preferences->GetValue(key1)); // test get/set multiple value string key2 = "bat"; vector values = preferences->GetMultipleValue(key2); CPPUNIT_ASSERT_EQUAL((size_t) 0, values.size()); preferences->SetMultipleValue(key2, value1); values = preferences->GetMultipleValue(key2); CPPUNIT_ASSERT_EQUAL((size_t) 1, values.size()); CPPUNIT_ASSERT_EQUAL(value1, values.at(0)); preferences->SetMultipleValue(key2, value2); values = preferences->GetMultipleValue(key2); CPPUNIT_ASSERT_EQUAL((size_t) 2, values.size()); CPPUNIT_ASSERT_EQUAL(value1, values.at(0)); CPPUNIT_ASSERT_EQUAL(value2, values.at(1)); // test SetDefaultValue CPPUNIT_ASSERT(preferences->SetDefaultValue(key1, StringValidator(), value1)); CPPUNIT_ASSERT_EQUAL(value1, preferences->GetValue(key1)); CPPUNIT_ASSERT(!preferences->SetDefaultValue(key1, StringValidator(), value2)); CPPUNIT_ASSERT_EQUAL(value1, preferences->GetValue(key1)); } /* * Check that we can get/set the preferences */ void PreferencesTest::testBool() { MemoryPreferencesFactory factory; Preferences *preferences = factory.NewPreference("dummy"); string key1 = "foo"; string value1 = "bar"; // test get/set single values CPPUNIT_ASSERT_EQUAL(false, preferences->GetValueAsBool(key1)); preferences->SetValueAsBool(key1, true); CPPUNIT_ASSERT_EQUAL(true, preferences->GetValueAsBool(key1)); preferences->SetValueAsBool(key1, false); CPPUNIT_ASSERT_EQUAL(false, preferences->GetValueAsBool(key1)); preferences->SetValue(key1, value1); CPPUNIT_ASSERT_EQUAL(false, preferences->GetValueAsBool(key1)); } /* * Check that the factory works as intended */ void PreferencesTest::testFactory() { MemoryPreferencesFactory factory; string preferences_name = "dummy"; Preferences *preferences = factory.NewPreference(preferences_name); Preferences *preferences2 = factory.NewPreference(preferences_name); CPPUNIT_ASSERT_EQUAL(preferences, preferences2); } /* * Check that we can load from a file */ void PreferencesTest::testLoad() { FileBackedPreferences *preferences = new FileBackedPreferences("dummy"); preferences->Clear(); preferences->SetValue("foo", "bad"); preferences->LoadFromFile("./testdata/test_preferences.conf"); CPPUNIT_ASSERT_EQUAL(string("bar"), preferences->GetValue("foo")); CPPUNIT_ASSERT_EQUAL(string("bat"), preferences->GetValue("baz")); vector values = preferences->GetMultipleValue("multi"); CPPUNIT_ASSERT_EQUAL((size_t) 3, values.size()); CPPUNIT_ASSERT_EQUAL(string("1"), values.at(0)); CPPUNIT_ASSERT_EQUAL(string("2"), values.at(1)); CPPUNIT_ASSERT_EQUAL(string("3"), values.at(2)); delete preferences; } void PreferencesTest::testSave() { FileBackedPreferencesFactory factory; FileBackedPreferences *preferences = new FileBackedPreferences("dummy"); preferences->Clear(); string data_path = "./testdata/preferences.output"; string key1 = "foo"; string key2 = "bat"; string value1 = "bar"; string value2 = "baz"; string multi_key = "multi"; preferences->SetValue(key1, value1); preferences->SetValue(key2, value2); preferences->SetMultipleValue(multi_key, "1"); preferences->SetMultipleValue(multi_key, "2"); preferences->SetMultipleValue(multi_key, "3"); preferences->SaveToFile(data_path); FileBackedPreferences *input_preferences = new FileBackedPreferences("input"); input_preferences->LoadFromFile(data_path); CPPUNIT_ASSERT(*preferences == *input_preferences); delete preferences; delete input_preferences; }