diff options
Diffstat (limited to 'cups/testlang.c')
-rw-r--r-- | cups/testlang.c | 149 |
1 files changed, 146 insertions, 3 deletions
diff --git a/cups/testlang.c b/cups/testlang.c index 6aa49ab4..3f140d9b 100644 --- a/cups/testlang.c +++ b/cups/testlang.c @@ -1,7 +1,7 @@ /* * Localization test program for CUPS. * - * Copyright 2007-2015 by Apple Inc. + * Copyright 2007-2017 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the @@ -19,6 +19,16 @@ #include "cups-private.h" #include "ppd-private.h" +#ifdef __APPLE__ +# include <CoreFoundation/CoreFoundation.h> +#endif /* __APPLE__ */ + + +/* + * Local functions... + */ + +static int test_string(cups_lang_t *language, const char *msgid); /* @@ -71,8 +81,9 @@ main(int argc, /* I - Number of command-line arguments */ printf("Language = \"%s\"\n", language->language); printf("Encoding = \"%s\"\n", _cupsEncodingName(language->encoding)); - printf("No = \"%s\"\n", _cupsLangString(language, "No")); - printf("Yes = \"%s\"\n", _cupsLangString(language, "Yes")); + + errors += test_string(language, "No"); + errors += test_string(language, "Yes"); if (language != language2) { @@ -138,9 +149,141 @@ main(int argc, /* I - Number of command-line arguments */ } } + printf("media-empty: %s\n", ppdLocalizeIPPReason(ppd, "media-empty", NULL, buffer, sizeof(buffer))); + ppdClose(ppd); } } +#ifdef __APPLE__ + else + { + /* + * Test all possible language IDs for compatibility with _cupsAppleLocale... + */ + + CFIndex j, /* Looping var */ + num_locales; /* Number of locales */ + CFArrayRef locales; /* Locales */ + CFStringRef locale_id, /* Current locale ID */ + language_id; /* Current language ID */ + char locale_str[256], /* Locale ID C string */ + language_str[256], /* Language ID C string */ + *bufptr; /* Pointer to ".UTF-8" in POSIX locale */ + size_t buflen; /* Length of POSIX locale */ +# if TEST_COUNTRY_CODES + CFIndex k, /* Looping var */ + num_country_codes; /* Number of country codes */ + CFArrayRef country_codes; /* Country codes */ + CFStringRef country_code, /* Current country code */ + temp_id; /* Temporary language ID */ + char country_str[256]; /* Country code C string */ +# endif /* TEST_COUNTRY_CODES */ + + locales = CFLocaleCopyAvailableLocaleIdentifiers(); + num_locales = CFArrayGetCount(locales); + +# if TEST_COUNTRY_CODES + country_codes = CFLocaleCopyISOCountryCodes(); + num_country_codes = CFArrayGetCount(country_codes); +# endif /* TEST_COUNTRY_CODES */ + + printf("%d locales are available:\n", (int)num_locales); + + for (j = 0; j < num_locales; j ++) + { + locale_id = CFArrayGetValueAtIndex(locales, j); + language_id = CFLocaleCreateCanonicalLanguageIdentifierFromString(kCFAllocatorDefault, locale_id); + + if (!locale_id || !CFStringGetCString(locale_id, locale_str, (CFIndex)sizeof(locale_str), kCFStringEncodingASCII)) + { + printf("%d: FAIL (unable to get locale ID string)\n", (int)j + 1); + errors ++; + continue; + } + + if (!language_id || !CFStringGetCString(language_id, language_str, (CFIndex)sizeof(language_str), kCFStringEncodingASCII)) + { + printf("%d %s: FAIL (unable to get language ID string)\n", (int)j + 1, locale_str); + errors ++; + continue; + } + + if (!_cupsAppleLocale(language_id, buffer, sizeof(buffer))) + { + printf("%d %s(%s): FAIL (unable to convert language ID string to POSIX locale)\n", (int)j + 1, locale_str, language_str); + errors ++; + continue; + } + + if ((bufptr = strstr(buffer, ".UTF-8")) != NULL) + buflen = (size_t)(bufptr - buffer); + else + buflen = strlen(buffer); + + if ((language = cupsLangGet(buffer)) == NULL) + { + printf("%d %s(%s): FAIL (unable to load POSIX locale \"%s\")\n", (int)j + 1, locale_str, language_str, buffer); + errors ++; + continue; + } + + if (strncasecmp(language->language, buffer, buflen)) + { + printf("%d %s(%s): FAIL (unable to load POSIX locale \"%s\", got \"%s\")\n", (int)j + 1, locale_str, language_str, buffer, language->language); + errors ++; + continue; + } + + printf("%d %s(%s): PASS (POSIX locale is \"%s\")\n", (int)j + 1, locale_str, language_str, buffer); + } + + CFRelease(locales); + +# if TEST_COUNTRY_CODES + CFRelease(country_codes); +# endif /* TEST_COUNTRY_CODES */ + } +#endif /* __APPLE__ */ + + if (errors == 0) + puts("ALL TESTS PASSED"); return (errors > 0); } + + +/* + * 'test_string()' - Test the localization of a string. + */ + +static int /* O - 1 on failure, 0 on success */ +test_string(cups_lang_t *language, /* I - Language */ + const char *msgid) /* I - Message */ +{ + const char *msgstr; /* Localized string */ + + + /* + * Get the localized string and then see if we got what we expected. + * + * For the POSIX locale, the string pointers should be the same. + * For any other locale, the string pointers should be different. + */ + + msgstr = _cupsLangString(language, msgid); + if (strcmp(language->language, "C") && msgid == msgstr) + { + printf("%-8s = \"%s\" (FAIL - no message catalog loaded)\n", msgid, msgstr); + return (1); + } + else if (!strcmp(language->language, "C") && msgid != msgstr) + { + printf("%-8s = \"%s\" (FAIL - POSIX locale is localized)\n", msgid, msgstr); + return (1); + } + + printf("%-8s = \"%s\" (PASS)\n", msgid, msgstr); + + return (0); +} + |