Branch data Line data Source code
1 : : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : : /*
3 : : * This file is part of the LibreOffice project.
4 : : *
5 : : * This Source Code Form is subject to the terms of the Mozilla Public
6 : : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : : */
9 : :
10 : : #include <sal/config.h>
11 : :
12 : : #include <cppunit/TestFixture.h>
13 : : #include <cppunit/TestAssert.h>
14 : : #include <cppunit/extensions/HelperMacros.h>
15 : : #include <cppunit/plugin/TestPlugIn.h>
16 : :
17 : : #include <i18npool/languagetag.hxx>
18 : :
19 : : #include <rtl/ustring.hxx>
20 : : #include <rtl/ustrbuf.hxx>
21 : : #include <osl/file.hxx>
22 : :
23 : : #include <com/sun/star/lang/Locale.hpp>
24 : :
25 : : using namespace com::sun::star;
26 : :
27 : : // To test the replacement code add '&& 0' and also in
28 : : // source/languagetag/languagetag.cxx
29 : : #if defined(ENABLE_LIBLANGTAG)
30 : : #define USE_LIBLANGTAG 1
31 : : #else
32 : : #define USE_LIBLANGTAG 0
33 : : #endif
34 : :
35 : : namespace {
36 : :
37 : : class TestLanguageTag : public CppUnit::TestFixture
38 : : {
39 : : public:
40 : 10 : TestLanguageTag() {}
41 [ - + ]: 20 : virtual ~TestLanguageTag() {}
42 : :
43 : : void testInit();
44 : : void testAllTags();
45 : :
46 [ + - ][ + - ]: 10 : CPPUNIT_TEST_SUITE(TestLanguageTag);
[ + - ][ + - ]
[ # # ]
47 [ + - ][ + - ]: 5 : CPPUNIT_TEST(testInit);
[ + - ][ + - ]
[ + - ][ + - ]
48 [ + - ][ + - ]: 5 : CPPUNIT_TEST(testAllTags);
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
49 [ + - ][ + - ]: 10 : CPPUNIT_TEST_SUITE_END();
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
50 : : };
51 : :
52 : 5 : void TestLanguageTag::testInit()
53 : : {
54 : : #if USE_LIBLANGTAG && !defined(SYSTEM_LIBLANGTAG)
55 : : // file:///$SRCDIR/solver/$INPATH/share/liblangtag
56 : : // file:///$OUTDIR/share/liblangtag
57 : 5 : OUStringBuffer aBuf(128);
58 : 5 : const char* pEnv = getenv("OUTDIR");
59 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT_MESSAGE("No $OUTDIR", pEnv);
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
60 [ + - ][ + - ]: 5 : aBuf.append( "file:///").append( OStringToOUString( pEnv, RTL_TEXTENCODING_UTF8)).append( "/share/liblangtag");
[ + - ][ + - ]
61 [ + - ]: 5 : OUString aURL( aBuf.makeStringAndClear());
62 : 5 : OUString aData( aURL);
63 : 5 : aData += "/language-subtag-registry.xml";
64 : 5 : osl::DirectoryItem aDirItem;
65 [ + - ][ + - ]: 10 : CPPUNIT_ASSERT_MESSAGE("liblangtag data not found",
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
66 [ + - ]: 5 : osl::DirectoryItem::get( aData, aDirItem) == osl::DirectoryItem::E_None);
67 : 5 : OUString aPath;
68 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( osl::FileBase::getSystemPathFromFileURL( aURL, aPath) == osl::FileBase::E_None);
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
69 [ + - ][ + - ]: 5 : LanguageTag::overrideDataPath( aPath);
70 : : #endif
71 : 5 : }
72 : :
73 : 5 : void TestLanguageTag::testAllTags()
74 : : {
75 : : {
76 : 5 : OUString s_de_Latn_DE( "de-Latn-DE" );
77 [ + - ]: 5 : LanguageTag de_DE( s_de_Latn_DE, true );
78 [ + - ]: 5 : OUString aBcp47 = de_DE.getBcp47();
79 [ + - ]: 5 : lang::Locale aLocale = de_DE.getLocale();
80 [ + - ]: 5 : LanguageType nLanguageType = de_DE.getLanguageType();
81 : : #if USE_LIBLANGTAG
82 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT_MESSAGE("Default script should be stripped after canonicalize.", aBcp47 == "de-DE" );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
83 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( aLocale.Language == "de" );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
84 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( aLocale.Country == "DE" );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
85 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( aLocale.Variant == "" );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
86 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( nLanguageType == LANGUAGE_GERMAN );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
87 : : #else
88 : : // The simple replacement code doesn't do any fancy stuff.
89 : : CPPUNIT_ASSERT_MESSAGE("Default script was stripped after canonicalize!?!", aBcp47 == s_de_Latn_DE );
90 : : CPPUNIT_ASSERT( aLocale.Language == "qlt" );
91 : : CPPUNIT_ASSERT( aLocale.Country == "DE" );
92 : : CPPUNIT_ASSERT( aLocale.Variant == "de-Latn-DE" );
93 : : (void)nLanguageType; //XXX CPPUNIT_ASSERT( nLanguageType == LANGUAGE_GERMAN );
94 : : #endif
95 : : }
96 : :
97 : : {
98 : 5 : OUString s_klingon( "i-klingon" );
99 [ + - ]: 5 : LanguageTag klingon( s_klingon, true );
100 [ + - ]: 5 : lang::Locale aLocale = klingon.getLocale();
101 : : #if USE_LIBLANGTAG
102 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( klingon.getBcp47() == "tlh" );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
103 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( aLocale.Language == "tlh" );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
104 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( aLocale.Country == "" );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
105 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( aLocale.Variant == "" );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
106 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( klingon.getLanguageType() == LANGUAGE_SYSTEM );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
107 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( klingon.isValidBcp47() == true );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
108 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( klingon.isIsoLocale() == true );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
109 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( klingon.isIsoODF() == true );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
110 : : #else
111 : : CPPUNIT_ASSERT( klingon.getBcp47() == s_klingon );
112 : : CPPUNIT_ASSERT( aLocale.Language == "qlt" );
113 : : CPPUNIT_ASSERT( aLocale.Country == "" );
114 : : CPPUNIT_ASSERT( aLocale.Variant == s_klingon );
115 : : CPPUNIT_ASSERT( klingon.getLanguageType() == LANGUAGE_SYSTEM );
116 : : CPPUNIT_ASSERT( klingon.isValidBcp47() == true );
117 : : CPPUNIT_ASSERT( klingon.isIsoLocale() == false );
118 : : CPPUNIT_ASSERT( klingon.isIsoODF() == false );
119 : : #endif
120 : : }
121 : :
122 : : {
123 : 5 : OUString s_sr_RS( "sr-RS" );
124 [ + - ]: 5 : LanguageTag sr_RS( s_sr_RS, true );
125 [ + - ]: 5 : lang::Locale aLocale = sr_RS.getLocale();
126 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( sr_RS.getBcp47() == s_sr_RS );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
127 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( aLocale.Language == "sr" );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
128 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( aLocale.Country == "RS" );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
129 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( aLocale.Variant == "" );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
130 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( sr_RS.getLanguageType() == LANGUAGE_USER_SERBIAN_CYRILLIC_SERBIA );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
131 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( sr_RS.isValidBcp47() == true );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
132 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( sr_RS.isIsoLocale() == true );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
133 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( sr_RS.isIsoODF() == true );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
134 : : }
135 : :
136 : : {
137 : 5 : OUString s_sr_Latn_RS( "sr-Latn-RS" );
138 [ + - ]: 5 : LanguageTag sr_RS( s_sr_Latn_RS, true );
139 [ + - ]: 5 : lang::Locale aLocale = sr_RS.getLocale();
140 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( sr_RS.getBcp47() == s_sr_Latn_RS );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
141 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( aLocale.Language == "qlt" );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
142 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( aLocale.Country == "RS" );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
143 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( aLocale.Variant == s_sr_Latn_RS );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
144 : : /* TODO: conversion doesn't know this yet, once it does activate test. */
145 : : #if 0
146 : : CPPUNIT_ASSERT( sr_RS.getLanguageType() == LANGUAGE_USER_SERBIAN_LATIN_SERBIA );
147 : : #else
148 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( sr_RS.getLanguageType() == LANGUAGE_SYSTEM );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
149 : : #endif
150 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( sr_RS.isValidBcp47() == true );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
151 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( sr_RS.isIsoLocale() == false );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
152 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( sr_RS.isIsoODF() == true );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
153 : : }
154 : :
155 : : {
156 : 5 : OUString s_de_DE( "de-DE" );
157 [ + - ]: 5 : LanguageTag de_DE( s_de_DE, true );
158 [ + - ]: 5 : lang::Locale aLocale = de_DE.getLocale();
159 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( de_DE.getBcp47() == s_de_DE );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
160 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( aLocale.Language == "de" );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
161 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( aLocale.Country == "DE" );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
162 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( aLocale.Variant == "" );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
163 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( de_DE.getLanguageType() == LANGUAGE_GERMAN );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
164 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( de_DE.isValidBcp47() == true );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
165 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( de_DE.isIsoLocale() == true );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
166 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( de_DE.isIsoODF() == true );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
167 : : }
168 : :
169 : : {
170 : 5 : OUString s_de_DE( "de-DE" );
171 [ + - ]: 5 : LanguageTag de_DE( lang::Locale( "de", "DE", "" ) );
172 [ + - ]: 5 : lang::Locale aLocale = de_DE.getLocale();
173 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( de_DE.getBcp47() == s_de_DE );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
174 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( aLocale.Language == "de" );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
175 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( aLocale.Country == "DE" );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
176 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( aLocale.Variant == "" );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
177 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( de_DE.getLanguageType() == LANGUAGE_GERMAN );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
178 : : }
179 : :
180 : : {
181 : 5 : OUString s_de_DE( "de-DE" );
182 [ + - ]: 5 : LanguageTag de_DE( LANGUAGE_GERMAN );
183 [ + - ]: 5 : lang::Locale aLocale = de_DE.getLocale();
184 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( de_DE.getBcp47() == s_de_DE );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
185 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( aLocale.Language == "de" );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
186 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( aLocale.Country == "DE" );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
187 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( aLocale.Variant == "" );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
188 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( de_DE.getLanguageType() == LANGUAGE_GERMAN );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
189 : : }
190 : :
191 : : {
192 : 5 : OUString s_uab( "unreg-and-bad" );
193 [ + - ]: 5 : LanguageTag uab( s_uab, true );
194 [ + - ]: 5 : lang::Locale aLocale = uab.getLocale();
195 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( uab.getBcp47() == s_uab );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
196 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( aLocale.Language == "qlt" );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
197 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( aLocale.Country == "" );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
198 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( aLocale.Variant == s_uab );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
199 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( uab.getLanguageType() == LANGUAGE_SYSTEM );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
200 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( uab.isValidBcp47() == false );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
201 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( uab.isIsoLocale() == false );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
202 [ + - ][ + - ]: 5 : CPPUNIT_ASSERT( uab.isIsoODF() == false );
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
203 : : }
204 : 5 : }
205 : :
206 : 5 : CPPUNIT_TEST_SUITE_REGISTRATION( TestLanguageTag );
207 : :
208 : : }
209 : :
210 [ + - ][ + - ]: 20 : CPPUNIT_PLUGIN_IMPLEMENT();
[ + - ][ + - ]
[ + - ][ # # ]
211 : :
212 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|