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 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 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 49 return_false(const string&, const TransUnit& unit, void* cookie) 50 { 51 return false; 52 } 53 54 static int 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 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 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 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 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 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