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