1#include <cstdio>
2#include "XLIFFFile.h"
3#include "ValuesFile.h"
4#include "localize.h"
5#include <stdio.h>
6
7int pseudolocalize_xliff(XLIFFFile* xliff, bool expand);
8
9static int
10test_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
30static int
31translated_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
48bool
49return_false(const string&, const TransUnit& unit, void* cookie)
50{
51    return false;
52}
53
54static int
55delete_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
85static int
86filter_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
118static int
119settings_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
166static int
167test_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
196static int
197pseudolocalize_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
207int
208localize_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