/* ******************************************************************************* * Copyright (C) 2003-2010, International Business Machines Corporation and * * others. All Rights Reserved. * ******************************************************************************* */ package com.ibm.icu.dev.test.format; import java.util.Arrays; import com.ibm.icu.text.NumberFormat; import com.ibm.icu.text.NumberFormat.SimpleNumberFormatFactory; import com.ibm.icu.util.ULocale; public class NumberFormatRegistrationTest extends com.ibm.icu.dev.test.TestFmwk { public static void main(String[] args) { new NumberFormatRegistrationTest().run(args); } public void TestRegistration() { final ULocale SRC_LOC = ULocale.FRANCE; final ULocale SWAP_LOC = ULocale.US; class TestFactory extends SimpleNumberFormatFactory { NumberFormat currencyStyle; TestFactory() { this(SRC_LOC, SWAP_LOC); } TestFactory(ULocale srcLoc, ULocale swapLoc) { super(srcLoc); currencyStyle = NumberFormat.getIntegerInstance(swapLoc); } public NumberFormat createFormat(ULocale loc, int formatType) { if (formatType == FORMAT_CURRENCY) { return currencyStyle; } return null; } } { // coverage before registration try { NumberFormat.unregister(null); errln("did not throw exception on null unregister"); } catch (Exception e) { logln("PASS: null unregister failed as expected"); } try { NumberFormat.registerFactory(null); errln("did not throw exception on null register"); } catch (Exception e) { logln("PASS: null register failed as expected"); } try { // if no NF has been registered yet, shim is null, so this silently // returns false. if, on the other hand, a NF has been registered, // this will try to cast the argument to a Factory, and throw // an exception. if (NumberFormat.unregister("")) { errln("unregister of empty string key succeeded"); } } catch (Exception e) { } } ULocale fu_FU = new ULocale("fu_FU"); NumberFormat f0 = NumberFormat.getIntegerInstance(SWAP_LOC); NumberFormat f1 = NumberFormat.getIntegerInstance(SRC_LOC); NumberFormat f2 = NumberFormat.getCurrencyInstance(SRC_LOC); Object key = NumberFormat.registerFactory(new TestFactory()); Object key2 = NumberFormat.registerFactory(new TestFactory(fu_FU, ULocale.GERMANY)); if (!Arrays.asList(NumberFormat.getAvailableULocales()).contains(fu_FU)) { errln("did not list fu_FU"); } NumberFormat f3 = NumberFormat.getCurrencyInstance(SRC_LOC); NumberFormat f4 = NumberFormat.getIntegerInstance(SRC_LOC); NumberFormat.unregister(key); // restore for other tests NumberFormat f5 = NumberFormat.getCurrencyInstance(SRC_LOC); NumberFormat.unregister(key2); float n = 1234.567f; logln("f0 swap int: " + f0.format(n)); logln("f1 src int: " + f1.format(n)); logln("f2 src cur: " + f2.format(n)); logln("f3 reg cur: " + f3.format(n)); logln("f4 reg int: " + f4.format(n)); logln("f5 unreg cur: " + f5.format(n)); if (!f3.format(n).equals(f0.format(n))) { errln("registered service did not match"); } if (!f4.format(n).equals(f1.format(n))) { errln("registered service did not inherit"); } if (!f5.format(n).equals(f2.format(n))) { errln("unregistered service did not match original"); } // coverage NumberFormat f6 = NumberFormat.getNumberInstance(fu_FU); if (f6 == null) { errln("getNumberInstance(fu_FU) returned null"); } } }