blob: 63d904c388bfb05d082c880d3b56c6e722832465 [file] [log] [blame]
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001#include "XLIFFFile.h"
2#include "ValuesFile.h"
3#include "localize.h"
4
5int pseudolocalize_xliff(XLIFFFile* xliff, bool expand);
6
7static int
8test_filename(const string& file, const string& locale, const string& expected)
9{
10 string result = translated_file_name(file, locale);
11 if (result != expected) {
12 fprintf(stderr, "translated_file_name test failed\n");
13 fprintf(stderr, " locale='%s'\n", locale.c_str());
14 fprintf(stderr, " expected='%s'\n", expected.c_str());
15 fprintf(stderr, " result='%s'\n", result.c_str());
16 return 1;
17 } else {
18 if (false) {
19 fprintf(stderr, "translated_file_name test passed\n");
20 fprintf(stderr, " locale='%s'\n", locale.c_str());
21 fprintf(stderr, " expected='%s'\n", expected.c_str());
22 fprintf(stderr, " result='%s'\n", result.c_str());
23 }
24 return 0;
25 }
26}
27
28static int
29translated_file_name_test()
30{
31 bool all = true;
32 int err = 0;
33
34 if (all) err |= test_filename("//device/samples/NotePad/res/values/strings.xml", "zz_ZZ",
35 "//device/samples/NotePad/res/values-zz-rZZ/strings.xml");
36
37 if (all) err |= test_filename("//device/samples/NotePad/res/values/strings.xml", "zz",
38 "//device/samples/NotePad/res/values-zz/strings.xml");
39
40 if (all) err |= test_filename("//device/samples/NotePad/res/values/strings.xml", "",
41 "//device/samples/NotePad/res/values/strings.xml");
42
43 return err;
44}
45
46bool
47return_false(const string&, const TransUnit& unit, void* cookie)
48{
49 return false;
50}
51
52static int
53delete_trans_units()
54{
55 XLIFFFile* xliff = XLIFFFile::Parse("testdata/strip_xliff.xliff");
56 if (xliff == NULL) {
57 printf("couldn't read file\n");
58 return 1;
59 }
60 if (false) {
61 printf("XLIFF was [[%s]]\n", xliff->ToString().c_str());
62 }
63
64 xliff->Filter(return_false, NULL);
65
66 if (false) {
67 printf("XLIFF is [[%s]]\n", xliff->ToString().c_str());
68
69 set<StringResource> const& strings = xliff->GetStringResources();
70 printf("strings.size=%zd\n", strings.size());
71 for (set<StringResource>::iterator it=strings.begin(); it!=strings.end(); it++) {
72 const StringResource& str = *it;
73 printf("STRING!!! id=%s value='%s' pos=%s file=%s version=%d(%s)\n", str.id.c_str(),
74 str.value->ContentsToString(ANDROID_NAMESPACES).c_str(),
75 str.pos.ToString().c_str(), str.file.c_str(), str.version,
76 str.versionString.c_str());
77 }
78 }
79
80 return 0;
81}
82
83static int
84filter_trans_units()
85{
86 XLIFFFile* xliff = XLIFFFile::Parse("testdata/strip_xliff.xliff");
87 if (xliff == NULL) {
88 printf("couldn't read file\n");
89 return 1;
90 }
91
92 if (false) {
93 printf("XLIFF was [[%s]]\n", xliff->ToString().c_str());
94 }
95
96 Settings setting;
97 xliff->Filter(keep_this_trans_unit, &setting);
98
99 if (false) {
100 printf("XLIFF is [[%s]]\n", xliff->ToString().c_str());
101
102 set<StringResource> const& strings = xliff->GetStringResources();
103 printf("strings.size=%zd\n", strings.size());
104 for (set<StringResource>::iterator it=strings.begin(); it!=strings.end(); it++) {
105 const StringResource& str = *it;
106 printf("STRING!!! id=%s value='%s' pos=%s file=%s version=%d(%s)\n", str.id.c_str(),
107 str.value->ContentsToString(ANDROID_NAMESPACES).c_str(),
108 str.pos.ToString().c_str(), str.file.c_str(), str.version,
109 str.versionString.c_str());
110 }
111 }
112
113 return 0;
114}
115
116static int
117settings_test()
118{
119 int err;
120 map<string,Settings> settings;
121 map<string,Settings>::iterator it;
122
123 err = read_settings("testdata/config.xml", &settings, "//asdf");
124 if (err != 0) {
125 return err;
126 }
127
128 if (false) {
129 for (it=settings.begin(); it!=settings.end(); it++) {
130 const Settings& setting = it->second;
131 printf("CONFIG:\n");
132 printf(" id='%s'\n", setting.id.c_str());
133 printf(" oldVersion='%s'\n", setting.oldVersion.c_str());
134 printf(" currentVersion='%s'\n", setting.currentVersion.c_str());
135 int i=0;
136 for (vector<string>::const_iterator app=setting.apps.begin();
137 app!=setting.apps.end(); app++) {
138 printf(" apps[%02d]='%s'\n", i, app->c_str());
139 i++;
140 }
141 i=0;
142 for (vector<Reject>::const_iterator reject=setting.reject.begin();
143 reject!=setting.reject.end(); reject++) {
144 i++;
145 printf(" reject[%02d]=('%s','%s','%s')\n", i, reject->file.c_str(),
146 reject->name.c_str(), reject->comment.c_str());
147 }
148 }
149 }
150
151 for (it=settings.begin(); it!=settings.end(); it++) {
152 const Settings& setting = it->second;
153 if (it->first != setting.id) {
154 fprintf(stderr, "it->first='%s' setting.id='%s'\n", it->first.c_str(),
155 setting.id.c_str());
156 err |= 1;
157 }
158 }
159
160
161 return err;
162}
163
164static int
165test_one_pseudo(bool big, const char* expected)
166{
167 XLIFFFile* xliff = XLIFFFile::Parse("testdata/pseudo.xliff");
168 if (xliff == NULL) {
169 printf("couldn't read file\n");
170 return 1;
171 }
172 if (false) {
173 printf("XLIFF was [[%s]]\n", xliff->ToString().c_str());
174 }
175
176 pseudolocalize_xliff(xliff, big);
177 string newString = xliff->ToString();
178 delete xliff;
179
180 if (false) {
181 printf("XLIFF is [[%s]]\n", newString.c_str());
182 }
183
184 if (false && newString != expected) {
185 fprintf(stderr, "xliff didn't translate as expected\n");
186 fprintf(stderr, "newString=[[%s]]\n", newString.c_str());
187 fprintf(stderr, "expected=[[%s]]\n", expected);
188 return 1;
189 }
190
191 return 0;
192}
193
194static int
195pseudolocalize_test()
196{
197 int err = 0;
198
199 err |= test_one_pseudo(false, "");
200 //err |= test_one_pseudo(true, "");
201
202 return err;
203}
204
205int
206localize_test()
207{
208 bool all = true;
209 int err = 0;
210
211 if (all) err |= translated_file_name_test();
212 if (all) err |= delete_trans_units();
213 if (all) err |= filter_trans_units();
214 if (all) err |= settings_test();
215 if (all) err |= pseudolocalize_test();
216
217 return err;
218}
219