1/* 2 * Copyright 2024, Andrew Lindesay <apl@lindesay.co.nz>. 3 * All rights reserved. Distributed under the terms of the MIT License. 4 */ 5 6 7#include "LanguageModelTest.h" 8 9#include <String.h> 10 11#include <cppunit/TestCaller.h> 12#include <cppunit/TestSuite.h> 13 14#include <string.h> 15 16#include "LanguageModel.h" 17 18 19LanguageModelTest::LanguageModelTest() 20{ 21} 22 23 24LanguageModelTest::~LanguageModelTest() 25{ 26} 27 28 29void 30LanguageModelTest::TestSetPreferredLanguageCodeOnly() 31{ 32 LanguageModel* model = new LanguageModel("de"); 33 // forced system default 34 35 model->AddSupportedLanguage(new Language("zh", "Chinese", true)); 36 model->AddSupportedLanguage(new Language("de", "German", true)); 37 model->AddSupportedLanguage(new Language("fr", "French", true)); 38 39// ---------------------- 40 model->SetPreferredLanguageToSystemDefault(); 41// ---------------------- 42 43 LanguageRef preferredLanguage = model->PreferredLanguage(); 44 45 CPPUNIT_ASSERT_EQUAL(BString("de"), BString(preferredLanguage->Code())); 46 CPPUNIT_ASSERT(NULL == preferredLanguage->CountryCode()); 47 CPPUNIT_ASSERT(NULL == preferredLanguage->ScriptCode()); 48} 49 50 51/*! This test has a more specific system default language selecting a less 52 specific supported language. 53*/ 54void 55LanguageModelTest::TestSetPreferredLanguageSystemDefaultMoreSpecific() 56{ 57 LanguageModel* model = new LanguageModel("de_CH"); 58 // forced system default 59 60 model->AddSupportedLanguage(new Language("zh", "Chinese", true)); 61 model->AddSupportedLanguage(new Language("de", "German", true)); 62 model->AddSupportedLanguage(new Language("fr", "French", true)); 63 64// ---------------------- 65 model->SetPreferredLanguageToSystemDefault(); 66// ---------------------- 67 68 LanguageRef preferredLanguage = model->PreferredLanguage(); 69 70 CPPUNIT_ASSERT_EQUAL(BString("de"), BString(preferredLanguage->Code())); 71 CPPUNIT_ASSERT(NULL == preferredLanguage->CountryCode()); 72 CPPUNIT_ASSERT(NULL == preferredLanguage->ScriptCode()); 73} 74 75 76/*! This test has a less specific system default language selecting a more 77 specific supported language. 78*/ 79void 80LanguageModelTest::TestSetPreferredLanguageSystemDefaultLessSpecific() 81{ 82 LanguageModel* model = new LanguageModel("de"); 83 // forced system default 84 85 model->AddSupportedLanguage(new Language("zh", "Chinese", true)); 86 model->AddSupportedLanguage(new Language("de_CH", "German (Swiss)", true)); 87 model->AddSupportedLanguage(new Language("de__1996", "German (1996)", true)); 88 model->AddSupportedLanguage(new Language("fr", "French", true)); 89 model->AddSupportedLanguage(new Language("es", "Spanish", true)); 90 91// ---------------------- 92 model->SetPreferredLanguageToSystemDefault(); 93// ---------------------- 94 95 LanguageRef preferredLanguage = model->PreferredLanguage(); 96 97 CPPUNIT_ASSERT_EQUAL(BString("de"), BString(preferredLanguage->Code())); 98 CPPUNIT_ASSERT_EQUAL(BString("CH"), BString(preferredLanguage->CountryCode())); 99 CPPUNIT_ASSERT(NULL == preferredLanguage->ScriptCode()); 100} 101 102 103/*static*/ void 104LanguageModelTest::AddTests(BTestSuite& parent) 105{ 106 CppUnit::TestSuite& suite = *new CppUnit::TestSuite("LanguageModelTest"); 107 108 suite.addTest( 109 new CppUnit::TestCaller<LanguageModelTest>( 110 "LanguageModelTest::TestSetPreferredLanguageCodeOnly", 111 &LanguageModelTest::TestSetPreferredLanguageCodeOnly)); 112 113 suite.addTest( 114 new CppUnit::TestCaller<LanguageModelTest>( 115 "LanguageModelTest::TestSetPreferredLanguageSystemDefaultMoreSpecific", 116 &LanguageModelTest::TestSetPreferredLanguageSystemDefaultMoreSpecific)); 117 118 suite.addTest( 119 new CppUnit::TestCaller<LanguageModelTest>( 120 "LanguageModelTest::TestSetPreferredLanguageSystemDefaultLessSpecific", 121 &LanguageModelTest::TestSetPreferredLanguageSystemDefaultLessSpecific)); 122 123 parent.addTest("LanguageModelTest", &suite); 124}