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}