1#include "XLIFFFile.h"
2#include <stdio.h>
3#include "ValuesFile.h"
4
5XMLNode* create_string_node(const StringResource& str, const string& name);
6
7static int
8Parse_test()
9{
10    XLIFFFile* xf = XLIFFFile::Parse("testdata/xliff1.xliff");
11    if (xf == NULL) {
12        return 1;
13    }
14
15    set<StringResource> const& strings = xf->GetStringResources();
16
17    if (false) {
18        for (set<StringResource>::iterator it=strings.begin(); it!=strings.end(); it++) {
19            const StringResource& str = *it;
20            printf("STRING!!! id=%s index=%d value='%s' pos=%s file=%s version=%d(%s)\n",
21                    str.id.c_str(), str.index,
22                    str.value->ContentsToString(ANDROID_NAMESPACES).c_str(),
23                    str.pos.ToString().c_str(), str.file.c_str(), str.version,
24                    str.versionString.c_str());
25        }
26        printf("XML:[[%s]]\n", xf->ToString().c_str());
27    }
28
29    delete xf;
30    return 0;
31}
32
33static XMLNode*
34add_html_tag(XMLNode* addTo, const string& tag)
35{
36    vector<XMLAttribute> attrs;
37    XMLNode* node = XMLNode::NewElement(GENERATED_POS, "", tag, attrs, XMLNode::EXACT);
38    addTo->EditChildren().push_back(node);
39    return node;
40}
41
42static int
43create_string_node_test()
44{
45    int err = 0;
46    StringResource res;
47    vector<XMLAttribute> attrs;
48    res.value = XMLNode::NewElement(GENERATED_POS, "", "something", attrs, XMLNode::EXACT);
49    res.value->EditChildren().push_back(XMLNode::NewText(GENERATED_POS, " begin ", XMLNode::EXACT));
50
51    XMLNode* child;
52
53    child = add_html_tag(res.value, "b");
54    child->EditChildren().push_back(XMLNode::NewText(GENERATED_POS, "b", XMLNode::EXACT));
55
56    child = add_html_tag(res.value, "i");
57    child->EditChildren().push_back(XMLNode::NewText(GENERATED_POS, "i", XMLNode::EXACT));
58
59    child = add_html_tag(child, "b");
60    child->EditChildren().push_back(XMLNode::NewText(GENERATED_POS, "b", XMLNode::EXACT));
61
62    child = add_html_tag(res.value, "u");
63    child->EditChildren().push_back(XMLNode::NewText(GENERATED_POS, "u", XMLNode::EXACT));
64
65
66    res.value->EditChildren().push_back(XMLNode::NewText(GENERATED_POS, " end ", XMLNode::EXACT));
67
68    XMLNode* xliff = create_string_node(res, "blah");
69
70    string oldString = res.value->ToString(XLIFF_NAMESPACES);
71    string newString = xliff->ToString(XLIFF_NAMESPACES);
72
73    if (false) {
74        printf("OLD=\"%s\"\n", oldString.c_str());
75        printf("NEW=\"%s\"\n", newString.c_str());
76    }
77
78    const char* const EXPECTED_OLD
79                    = "<something> begin <b>b</b><i>i<b>b</b></i><u>u</u> end </something>";
80    if (oldString != EXPECTED_OLD) {
81        fprintf(stderr, "oldString mismatch:\n");
82        fprintf(stderr, "    expected='%s'\n", EXPECTED_OLD);
83        fprintf(stderr, "      actual='%s'\n", oldString.c_str());
84        err |= 1;
85    }
86
87    const char* const EXPECTED_NEW
88                    = "<blah xml:space=\"preserve\"> begin <g ctype=\"bold\">b</g>"
89                    "<g ctype=\"italic\">i<g ctype=\"bold\">b</g></g><g ctype=\"underline\">u</g>"
90                    " end </blah>";
91    if (newString != EXPECTED_NEW) {
92        fprintf(stderr, "newString mismatch:\n");
93        fprintf(stderr, "    expected='%s'\n", EXPECTED_NEW);
94        fprintf(stderr, "      actual='%s'\n", newString.c_str());
95        err |= 1;
96    }
97
98    if (err != 0) {
99        fprintf(stderr, "create_string_node_test failed\n");
100    }
101    return err;
102}
103
104int
105XLIFFFile_test()
106{
107    bool all = true;
108    int err = 0;
109
110    if (all) err |= Parse_test();
111    if (all) err |= create_string_node_test();
112
113    return err;
114}
115
116