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