LUALIB_API void (mad_warn) (const char *fn, const char *fmt, ...) { ++mad_warn_count; va_list va; va_start(va, fmt); fprintf(stderr, "warning: %s\n", msgstr(fn, fmt, va)); va_end(va); fflush(stderr); }
LUALIB_API void (mad_trace) (int lvl, const char *fn, const char *fmt, ...) { if (mad_trace_level < lvl) return; va_list va; va_start(va, fmt); fprintf(stderr, "trace%d: %s\n", lvl, msgstr(fn, fmt, va)); va_end(va); fflush(stderr); }
LUALIB_API void (mad_error) (const char *fn, const char *fmt, ...) { va_list va; va_start(va, fmt); const char *msg = msgstr(fn, fmt, va); va_end(va); luaL_error(globalL, msg); exit(EXIT_FAILURE); /* never reached */ }
void ICUServiceTest::testAPI_Two() { UErrorCode status = U_ZERO_ERROR; TestStringService service; service.registerFactory(new AnonymousStringFactory(), status); // anonymous factory will still handle the id { UErrorCode status = U_ZERO_ERROR; const UnicodeString en_US = "en_US"; UnicodeString* result = (UnicodeString*)service.get(en_US, status); confirmEqual("21) locale", result, &en_US); delete result; } // still normalizes id { UErrorCode status = U_ZERO_ERROR; const UnicodeString en_US_BAR = "en_US_BAR"; UnicodeString resultID; UnicodeString* result = (UnicodeString*)service.get("EN_us_bar", &resultID, status); confirmEqual("22) locale", &resultID, &en_US_BAR); delete result; } // we can override for particular ids UnicodeString* singleton0 = new UnicodeString("Zero"); service.registerInstance(singleton0, "en_US_BAR", status); { UErrorCode status = U_ZERO_ERROR; UnicodeString* result = (UnicodeString*)service.get("en_US_BAR", status); confirmEqual("23) override super", result, singleton0); delete result; } // empty service should not recognize anything service.reset(); { UErrorCode status = U_ZERO_ERROR; UnicodeString* result = (UnicodeString*)service.get("en_US", status); confirmIdentical("24) empty", result, NULL); } // create a custom multiple key factory { UnicodeString xids[] = { "en_US_VALLEY_GIRL", "en_US_VALLEY_BOY", "en_US_SURFER_GAL", "en_US_SURFER_DUDE" }; int32_t count = sizeof(xids)/sizeof(UnicodeString); ICUServiceFactory* f = new TestMultipleKeyStringFactory(xids, count, "Later"); service.registerFactory(f, status); } // iterate over the visual ids returned by the multiple factory { UErrorCode status = U_ZERO_ERROR; UVector ids(uhash_deleteUnicodeString, uhash_compareUnicodeString, 0, status); service.getVisibleIDs(ids, status); for (int i = 0; i < ids.size(); ++i) { const UnicodeString* id = (const UnicodeString*)ids[i]; UnicodeString* result = (UnicodeString*)service.get(*id, status); if (result) { logln(" " + *id + " --> " + *result); delete result; } else { errln("could not find " + *id); } } // four visible ids confirmIdentical("25) visible ids", ids.size(), 4); } // iterate over the display names { UErrorCode status = U_ZERO_ERROR; UVector names(status); service.getDisplayNames(names, status); for (int i = 0; i < names.size(); ++i) { const StringPair* pair = (const StringPair*)names[i]; logln(" " + pair->displayName + " --> " + pair->id); } confirmIdentical("26) display names", names.size(), 4); } // no valid display name { UnicodeString name; service.getDisplayName("en_US_VALLEY_GEEK", name); confirmBoolean("27) get display name", name.isBogus()); } { UnicodeString name; service.getDisplayName("en_US_SURFER_DUDE", name, Locale::getEnglish()); confirmStringsEqual("28) get display name", name, "English (United States, SURFER_DUDE)"); } // register another multiple factory { UnicodeString xids[] = { "en_US_SURFER", "en_US_SURFER_GAL", "en_US_SILICON", "en_US_SILICON_GEEK", }; int32_t count = sizeof(xids)/sizeof(UnicodeString); ICUServiceFactory* f = new TestMultipleKeyStringFactory(xids, count, "Rad dude"); service.registerFactory(f, status); } // this time, we have seven display names // Rad dude's surfer gal 'replaces' Later's surfer gal { UErrorCode status = U_ZERO_ERROR; UVector names(status); service.getDisplayNames(names, Locale("es"), status); for (int i = 0; i < names.size(); ++i) { const StringPair* pair = (const StringPair*)names[i]; logln(" " + pair->displayName + " --> " + pair->id); } confirmIdentical("29) display names", names.size(), 7); } // we should get the display name corresponding to the actual id // returned by the id we used. { UErrorCode status = U_ZERO_ERROR; UnicodeString actualID; UnicodeString id = "en_us_surfer_gal"; UnicodeString* gal = (UnicodeString*)service.get(id, &actualID, status); if (gal != NULL) { UnicodeString displayName; logln("actual id: " + actualID); service.getDisplayName(actualID, displayName, Locale::getEnglish()); logln("found actual: " + *gal + " with display name: " + displayName); confirmBoolean("30) found display name for actual", !displayName.isBogus()); service.getDisplayName(id, displayName, Locale::getEnglish()); logln("found actual: " + *gal + " with display name: " + displayName); confirmBoolean("31) found display name for query", displayName.isBogus()); delete gal; } else { errln("30) service could not find entry for " + id); } } // this should be handled by the 'dude' factory, since it overrides en_US_SURFER. { UErrorCode status = U_ZERO_ERROR; UnicodeString actualID; UnicodeString id = "en_US_SURFER_BOZO"; UnicodeString* bozo = (UnicodeString*)service.get(id, &actualID, status); if (bozo != NULL) { UnicodeString displayName; service.getDisplayName(actualID, displayName, Locale::getEnglish()); logln("found actual: " + *bozo + " with display name: " + displayName); confirmBoolean("32) found display name for actual", !displayName.isBogus()); service.getDisplayName(id, displayName, Locale::getEnglish()); logln("found actual: " + *bozo + " with display name: " + displayName); confirmBoolean("33) found display name for query", displayName.isBogus()); delete bozo; } else { errln("32) service could not find entry for " + id); } } // certainly not default... { confirmBoolean("34) is default ", !service.isDefault()); } { UErrorCode status = U_ZERO_ERROR; UVector ids(uhash_deleteUnicodeString, uhash_compareUnicodeString, 0, status); service.getVisibleIDs(ids, status); for (int i = 0; i < ids.size(); ++i) { const UnicodeString* id = (const UnicodeString*)ids[i]; msgstr(*id + "? ", service.get(*id, status)); } logstr("valleygirl? ", service.get("en_US_VALLEY_GIRL", status)); logstr("valleyboy? ", service.get("en_US_VALLEY_BOY", status)); logstr("valleydude? ", service.get("en_US_VALLEY_DUDE", status)); logstr("surfergirl? ", service.get("en_US_SURFER_GIRL", status)); } }