/* Copyright (c) 2007 Eric Scott Albright * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include #include #include "EnchantBrokerTestFixture.h" static bool requestDictionaryCalled; static EnchantDict * RequestDictionary (EnchantProvider *me, const char *tag) { requestDictionaryCalled = true; return MockEnGbAndQaaProviderRequestDictionary(me, tag); } static void Request_Dictionary_ProviderConfiguration (EnchantProvider * me, const char *) { me->request_dict = RequestDictionary; me->dispose_dict = MockProviderDisposeDictionary; } struct EnchantBrokerRequestDictionary_TestFixture : EnchantBrokerTestFixture { //Setup EnchantBrokerRequestDictionary_TestFixture(): EnchantBrokerTestFixture(Request_Dictionary_ProviderConfiguration) { _dict = NULL; requestDictionaryCalled = false; } //Teardown ~EnchantBrokerRequestDictionary_TestFixture() { FreeDictionary(_dict); } EnchantDict* _dict; }; /** * enchant_broker_request_dict * @broker: A non-null #EnchantBroker * @tag: The non-null language tag you wish to request a dictionary for ("en_US", "de_DE", ...) * * Returns: An #EnchantDict, or %null if no suitable dictionary could be found. */ ///////////////////////////////////////////////////////////////////////////// // Test Normal Operation TEST_FIXTURE(EnchantBrokerRequestDictionary_TestFixture, EnchantBrokerRequestDictionary_ProviderHas_CallsProvider) { _dict = enchant_broker_request_dict(_broker, "en_GB"); CHECK(_dict); CHECK(requestDictionaryCalled); } TEST_FIXTURE(EnchantBrokerRequestDictionary_TestFixture, EnchantBrokerRequestDictionary_CalledTwice_CallsProviderOnceReturnsSame) { _dict = enchant_broker_request_dict(_broker, "en_GB"); requestDictionaryCalled = false; EnchantDict* dict = enchant_broker_request_dict(_broker, "en_GB"); CHECK(!requestDictionaryCalled); CHECK_EQUAL(_dict, dict); } TEST_FIXTURE(EnchantBrokerRequestDictionary_TestFixture, EnchantBrokerRequestDictionary_ProviderDoesNotHave_CallsProvider) { _dict = enchant_broker_request_dict(_broker, "en"); CHECK_EQUAL((void*)NULL, (void*)_dict); CHECK(requestDictionaryCalled); } TEST_FIXTURE(EnchantBrokerRequestDictionary_TestFixture, EnchantBrokerRequestDictionary_ProviderHasBase_CallsProvider) { _dict = enchant_broker_request_dict(_broker, "qaa_CA"); CHECK(_dict); CHECK(requestDictionaryCalled); } TEST_FIXTURE(EnchantBrokerRequestDictionary_TestFixture, EnchantBrokerRequestDictionary_WhitespaceSurroundingLanguageTag_Removed) { _dict = enchant_broker_request_dict(_broker, "\n\r en_GB \t\f"); CHECK(_dict); } /* Vertical tab is not considered to be whitespace in glib! See bug# 59388 http://bugzilla.gnome.org/show_bug.cgi?id=59388 */ TEST_FIXTURE(EnchantBrokerRequestDictionary_TestFixture, EnchantBrokerRequestDictionary_VerticalTabBeforeLanguageTag_NotRemoved) { _dict = enchant_broker_request_dict(_broker, "\ven_GB"); CHECK_EQUAL((void*)NULL, (void*)_dict); } TEST_FIXTURE(EnchantBrokerRequestDictionary_TestFixture, EnchantBrokerRequestDictionary_VerticalTabAfterLanguageTag_NotRemoved) { _dict = enchant_broker_request_dict(_broker, "en_GB\v"); CHECK_EQUAL((void*)NULL, (void*)_dict); } TEST_FIXTURE(EnchantBrokerRequestDictionary_TestFixture, EnchantBrokerRequestDictionary_AtSignInLanguageTag_RemovesToTail) { _dict = enchant_broker_request_dict(_broker, "en_GB@euro"); CHECK(_dict); } TEST_FIXTURE(EnchantBrokerRequestDictionary_TestFixture, EnchantBrokerRequestDictionary_PeriodInLanguageTag_RemovesToTail) { _dict = enchant_broker_request_dict(_broker, "en_GB.UTF-8"); CHECK(_dict); } TEST_FIXTURE(EnchantBrokerRequestDictionary_TestFixture, EnchantBrokerRequestDictionary_HyphensInLanguageTag_SubstitutedWithUnderscore) { _dict = enchant_broker_request_dict(_broker, "en-GB"); CHECK(_dict); } TEST_FIXTURE(EnchantBrokerRequestDictionary_TestFixture, EnchantBrokerRequestDictionary_DifferentCase_Finds) { _dict = enchant_broker_request_dict(_broker, "En_gb"); CHECK(_dict); } TEST_FIXTURE(EnchantBrokerRequestDictionary_TestFixture, EnchantBrokerRequestDictionary_DifferentCase_NoRegion_Finds) { _dict = enchant_broker_request_dict(_broker, "QAA"); CHECK(_dict); } TEST_FIXTURE(EnchantBrokerRequestDictionary_TestFixture, EnchantBrokerRequestDictionary_HasPreviousError_ErrorCleared) { SetErrorOnMockProvider("something bad happened"); _dict = enchant_broker_request_dict(_broker, "en-GB"); CHECK_EQUAL((void*)NULL, (void*)enchant_broker_get_error(_broker)); } // ordering of providers for request is tested by enchant_broker_set_ordering tests ///////////////////////////////////////////////////////////////////////////// // Test Error Conditions TEST_FIXTURE(EnchantBrokerRequestDictionary_TestFixture, EnchantBrokerRequestDictionary_NullBroker_NULL) { _dict = enchant_broker_request_dict(NULL, "en_GB"); CHECK_EQUAL((void*)NULL, (void*)_dict); CHECK(!requestDictionaryCalled); } TEST_FIXTURE(EnchantBrokerRequestDictionary_TestFixture, EnchantBrokerRequestDictionary_NullLanguageTag_NULL) { _dict = enchant_broker_request_dict(_broker, NULL); CHECK_EQUAL((void*)NULL, (void*)_dict); CHECK(!requestDictionaryCalled); } TEST_FIXTURE(EnchantBrokerRequestDictionary_TestFixture, EnchantBrokerRequestDictionary_EmptyLanguageTag_NULL) { _dict = enchant_broker_request_dict(_broker, ""); CHECK_EQUAL((void*)NULL, _dict); CHECK(!requestDictionaryCalled); } TEST_FIXTURE(EnchantBrokerRequestDictionary_TestFixture, EnchantBrokerRequestDictionary_InvalidTag_NULL_ErrorSet) { _dict = enchant_broker_request_dict(_broker, "en~US"); CHECK_EQUAL((void*)NULL, _dict); CHECK(NULL != enchant_broker_get_error(_broker)); } TEST_FIXTURE(EnchantBrokerTestFixture, EnchantBrokerRequestDictionary_ProviderLacksListDictionaries_CallbackNeverCalled) { requestDictionaryCalled = false; EnchantDict* dict = enchant_broker_request_dict(_broker, "en_GB"); CHECK_EQUAL((void*)NULL, dict); CHECK(!requestDictionaryCalled); }