222 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			222 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#include <cstdio>
 | 
						|
#include "XLIFFFile.h"
 | 
						|
#include "ValuesFile.h"
 | 
						|
#include "localize.h"
 | 
						|
#include <stdio.h>
 | 
						|
 | 
						|
int pseudolocalize_xliff(XLIFFFile* xliff, bool expand);
 | 
						|
 | 
						|
static int
 | 
						|
test_filename(const string& file, const string& locale, const string& expected)
 | 
						|
{
 | 
						|
    string result = translated_file_name(file, locale);
 | 
						|
    if (result != expected) {
 | 
						|
        fprintf(stderr, "translated_file_name test failed\n");
 | 
						|
        fprintf(stderr, "  locale='%s'\n", locale.c_str());
 | 
						|
        fprintf(stderr, "  expected='%s'\n", expected.c_str());
 | 
						|
        fprintf(stderr, "    result='%s'\n", result.c_str());
 | 
						|
        return 1;
 | 
						|
    } else {
 | 
						|
        if (false) {
 | 
						|
            fprintf(stderr, "translated_file_name test passed\n");
 | 
						|
            fprintf(stderr, "  locale='%s'\n", locale.c_str());
 | 
						|
            fprintf(stderr, "  expected='%s'\n", expected.c_str());
 | 
						|
            fprintf(stderr, "    result='%s'\n", result.c_str());
 | 
						|
        }
 | 
						|
        return 0;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
static int
 | 
						|
translated_file_name_test()
 | 
						|
{
 | 
						|
    bool all = true;
 | 
						|
    int err = 0;
 | 
						|
 | 
						|
    if (all) err |= test_filename("//device/samples/NotePad/res/values/strings.xml", "zz_ZZ",
 | 
						|
                                  "//device/samples/NotePad/res/values-zz-rZZ/strings.xml");
 | 
						|
 | 
						|
    if (all) err |= test_filename("//device/samples/NotePad/res/values/strings.xml", "zz",
 | 
						|
                                  "//device/samples/NotePad/res/values-zz/strings.xml");
 | 
						|
 | 
						|
    if (all) err |= test_filename("//device/samples/NotePad/res/values/strings.xml", "",
 | 
						|
                                  "//device/samples/NotePad/res/values/strings.xml");
 | 
						|
 | 
						|
    return err;
 | 
						|
}
 | 
						|
 | 
						|
bool
 | 
						|
return_false(const string&, const TransUnit& unit, void* cookie)
 | 
						|
{
 | 
						|
    return false;
 | 
						|
}
 | 
						|
 | 
						|
static int
 | 
						|
delete_trans_units()
 | 
						|
{
 | 
						|
    XLIFFFile* xliff = XLIFFFile::Parse("testdata/strip_xliff.xliff");
 | 
						|
    if (xliff == NULL) {
 | 
						|
        printf("couldn't read file\n");
 | 
						|
        return 1;
 | 
						|
    }
 | 
						|
    if (false) {
 | 
						|
        printf("XLIFF was [[%s]]\n", xliff->ToString().c_str());
 | 
						|
    }
 | 
						|
 | 
						|
    xliff->Filter(return_false, NULL);
 | 
						|
 | 
						|
    if (false) {
 | 
						|
        printf("XLIFF is [[%s]]\n", xliff->ToString().c_str());
 | 
						|
 | 
						|
        set<StringResource> const& strings = xliff->GetStringResources();
 | 
						|
        printf("strings.size=%zd\n", strings.size());
 | 
						|
        for (set<StringResource>::iterator it=strings.begin(); it!=strings.end(); it++) {
 | 
						|
            const StringResource& str = *it;
 | 
						|
            printf("STRING!!! id=%s value='%s' pos=%s file=%s version=%d(%s)\n", str.id.c_str(),
 | 
						|
                    str.value->ContentsToString(ANDROID_NAMESPACES).c_str(),
 | 
						|
                    str.pos.ToString().c_str(), str.file.c_str(), str.version,
 | 
						|
                    str.versionString.c_str());
 | 
						|
        }
 | 
						|
    }
 | 
						|
 
 | 
						|
    return 0;
 | 
						|
}
 | 
						|
 | 
						|
static int
 | 
						|
filter_trans_units()
 | 
						|
{
 | 
						|
    XLIFFFile* xliff = XLIFFFile::Parse("testdata/strip_xliff.xliff");
 | 
						|
    if (xliff == NULL) {
 | 
						|
        printf("couldn't read file\n");
 | 
						|
        return 1;
 | 
						|
    }
 | 
						|
 | 
						|
    if (false) {
 | 
						|
        printf("XLIFF was [[%s]]\n", xliff->ToString().c_str());
 | 
						|
    }
 | 
						|
 | 
						|
    Settings setting;
 | 
						|
    xliff->Filter(keep_this_trans_unit, &setting);
 | 
						|
 | 
						|
    if (false) {
 | 
						|
        printf("XLIFF is [[%s]]\n", xliff->ToString().c_str());
 | 
						|
 | 
						|
        set<StringResource> const& strings = xliff->GetStringResources();
 | 
						|
        printf("strings.size=%zd\n", strings.size());
 | 
						|
        for (set<StringResource>::iterator it=strings.begin(); it!=strings.end(); it++) {
 | 
						|
            const StringResource& str = *it;
 | 
						|
            printf("STRING!!! id=%s value='%s' pos=%s file=%s version=%d(%s)\n", str.id.c_str(),
 | 
						|
                    str.value->ContentsToString(ANDROID_NAMESPACES).c_str(),
 | 
						|
                    str.pos.ToString().c_str(), str.file.c_str(), str.version,
 | 
						|
                    str.versionString.c_str());
 | 
						|
        }
 | 
						|
    }
 | 
						|
 
 | 
						|
    return 0;
 | 
						|
}
 | 
						|
 | 
						|
static int
 | 
						|
settings_test()
 | 
						|
{
 | 
						|
    int err;
 | 
						|
    map<string,Settings> settings;
 | 
						|
    map<string,Settings>::iterator it;
 | 
						|
 | 
						|
    err = read_settings("testdata/config.xml", &settings, "//asdf");
 | 
						|
    if (err != 0) {
 | 
						|
        return err;
 | 
						|
    }
 | 
						|
 | 
						|
    if (false) {
 | 
						|
        for (it=settings.begin(); it!=settings.end(); it++) {
 | 
						|
            const Settings& setting = it->second;
 | 
						|
            printf("CONFIG:\n");
 | 
						|
            printf("              id='%s'\n", setting.id.c_str());
 | 
						|
            printf("      oldVersion='%s'\n", setting.oldVersion.c_str());
 | 
						|
            printf("  currentVersion='%s'\n", setting.currentVersion.c_str());
 | 
						|
            int i=0;
 | 
						|
            for (vector<string>::const_iterator app=setting.apps.begin();
 | 
						|
                    app!=setting.apps.end(); app++) {
 | 
						|
                printf("        apps[%02d]='%s'\n", i, app->c_str());
 | 
						|
                i++;
 | 
						|
            }
 | 
						|
            i=0;
 | 
						|
            for (vector<Reject>::const_iterator reject=setting.reject.begin();
 | 
						|
                    reject!=setting.reject.end(); reject++) {
 | 
						|
                i++;
 | 
						|
                printf("      reject[%02d]=('%s','%s','%s')\n", i, reject->file.c_str(),
 | 
						|
                        reject->name.c_str(), reject->comment.c_str());
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    for (it=settings.begin(); it!=settings.end(); it++) {
 | 
						|
        const Settings& setting = it->second;
 | 
						|
        if (it->first != setting.id) {
 | 
						|
            fprintf(stderr, "it->first='%s' setting.id='%s'\n", it->first.c_str(),
 | 
						|
                    setting.id.c_str());
 | 
						|
            err |= 1;
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
    return err;
 | 
						|
}
 | 
						|
 | 
						|
static int
 | 
						|
test_one_pseudo(bool big, const char* expected)
 | 
						|
{
 | 
						|
    XLIFFFile* xliff = XLIFFFile::Parse("testdata/pseudo.xliff");
 | 
						|
    if (xliff == NULL) {
 | 
						|
        printf("couldn't read file\n");
 | 
						|
        return 1;
 | 
						|
    }
 | 
						|
    if (false) {
 | 
						|
        printf("XLIFF was [[%s]]\n", xliff->ToString().c_str());
 | 
						|
    }
 | 
						|
 | 
						|
    pseudolocalize_xliff(xliff, big);
 | 
						|
    string newString = xliff->ToString();
 | 
						|
    delete xliff;
 | 
						|
 | 
						|
    if (false) {
 | 
						|
        printf("XLIFF is [[%s]]\n", newString.c_str());
 | 
						|
    }
 | 
						|
 | 
						|
    if (false && newString != expected) {
 | 
						|
        fprintf(stderr, "xliff didn't translate as expected\n");
 | 
						|
        fprintf(stderr, "newString=[[%s]]\n", newString.c_str());
 | 
						|
        fprintf(stderr, "expected=[[%s]]\n", expected);
 | 
						|
        return 1;
 | 
						|
    }
 | 
						|
 | 
						|
    return 0;
 | 
						|
}
 | 
						|
 | 
						|
static int
 | 
						|
pseudolocalize_test()
 | 
						|
{
 | 
						|
    int err = 0;
 | 
						|
    
 | 
						|
    err |= test_one_pseudo(false, "");
 | 
						|
    //err |= test_one_pseudo(true, "");
 | 
						|
 | 
						|
    return err;
 | 
						|
}
 | 
						|
 | 
						|
int
 | 
						|
localize_test()
 | 
						|
{
 | 
						|
    bool all = true;
 | 
						|
    int err = 0;
 | 
						|
 | 
						|
    if (all) err |= translated_file_name_test();
 | 
						|
    if (all) err |= delete_trans_units();
 | 
						|
    if (all) err |= filter_trans_units();
 | 
						|
    if (all) err |= settings_test();
 | 
						|
    if (all) err |= pseudolocalize_test();
 | 
						|
 | 
						|
    return err;
 | 
						|
}
 | 
						|
 |