|
Java example source code file (TestMoneyFormatter.java)
The TestMoneyFormatter.java Java example source code/* * Copyright 2009-present, Stephen Colebourne * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.joda.money.format; import static org.testng.Assert.assertEquals; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.math.BigDecimal; import java.text.ParsePosition; import java.util.Locale; import org.joda.money.BigMoney; import org.joda.money.BigMoneyProvider; import org.joda.money.CurrencyUnit; import org.joda.money.Money; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; /** * Test MoneyFormatter. */ @Test public class TestMoneyFormatter { private static final Locale cCachedLocale = Locale.getDefault(); private static final Locale TEST_GB_LOCALE = new Locale("en", "GB", "TEST"); private static final Locale TEST_FR_LOCALE = new Locale("fr", "FR", "TEST"); private static final Money MONEY_GBP_12_34 = Money.parse("GBP 12.34"); private MoneyFormatter iPrintTest; private MoneyFormatter iCannotPrint; private MoneyFormatter iParseTest; private MoneyFormatter iCannotParse; @BeforeMethod public void beforeMethod() { Locale.setDefault(TEST_GB_LOCALE); iPrintTest = new MoneyFormatterBuilder() .appendCurrencyCode() .appendLiteral(" hello") .toFormatter(); iCannotPrint = new MoneyFormatterBuilder() .append(null, new MoneyParser() { @Override public void parse(MoneyParseContext context) { } }) .toFormatter(); iParseTest = new MoneyFormatterBuilder() .appendAmountLocalized() .appendLiteral(" ") .appendCurrencyCode() .toFormatter(); iCannotParse = new MoneyFormatterBuilder() .append(new MoneyPrinter() { @Override public void print(MoneyPrintContext context, Appendable appendable, BigMoney money) throws IOException { } }, null) .toFormatter(); } @AfterMethod public void afterMethod() { Locale.setDefault(cCachedLocale); iPrintTest = null; } //----------------------------------------------------------------------- // serialization //----------------------------------------------------------------------- public void test_serialization() throws Exception { MoneyFormatter a = iPrintTest; ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeObject(a); oos.close(); ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray())); MoneyFormatter input = (MoneyFormatter) ois.readObject(); Money value = MONEY_GBP_12_34; assertEquals(input.print(value), a.print(value)); } //----------------------------------------------------------------------- // getLocale() withLocale(Locale) //----------------------------------------------------------------------- public void test_getLocale() { assertEquals(iPrintTest.getLocale(), TEST_GB_LOCALE); } public void test_withLocale() { MoneyFormatter test = iPrintTest.withLocale(TEST_FR_LOCALE); assertEquals(iPrintTest.getLocale(), TEST_GB_LOCALE); assertEquals(test.getLocale(), TEST_FR_LOCALE); } @Test(expectedExceptions = NullPointerException.class) public void test_withLocale_nullLocale() { iPrintTest.withLocale((Locale) null); } //----------------------------------------------------------------------- // print(BigMoneyProvider) //----------------------------------------------------------------------- public void test_print_BigMoneyProvider() { assertEquals(iPrintTest.print(MONEY_GBP_12_34), "GBP hello"); } @Test(expectedExceptions = UnsupportedOperationException.class) public void test_print_BigMoneyProvider_cannotPrint() { iCannotPrint.print(MONEY_GBP_12_34); } @Test(expectedExceptions = NullPointerException.class) public void test_print_BigMoneyProvider_nullBigMoneyProvider() { iPrintTest.print((BigMoneyProvider) null); } //----------------------------------------------------------------------- // print(Appendable,BigMoneyProvider) //----------------------------------------------------------------------- public void test_print_AppendableBigMoneyProvider() { StringBuilder buf = new StringBuilder(); iPrintTest.print(buf, MONEY_GBP_12_34); assertEquals(buf.toString(), "GBP hello"); } @Test(expectedExceptions = MoneyFormatException.class) public void test_print_AppendableBigMoneyProvider_IOException() { Appendable appendable = new IOAppendable(); try { iPrintTest.print(appendable, MONEY_GBP_12_34); } catch (MoneyFormatException ex) { assertEquals(ex.getCause().getClass(), IOException.class); throw ex; } } @Test(expectedExceptions = UnsupportedOperationException.class) public void test_print_AppendableBigMoneyProvider_cannotPrint() { iCannotPrint.print(new StringBuilder(), MONEY_GBP_12_34); } @Test(expectedExceptions = NullPointerException.class) public void test_print_AppendableBigMoneyProvider_nullAppendable() { iPrintTest.print((Appendable) null, MONEY_GBP_12_34); } @Test(expectedExceptions = NullPointerException.class) public void test_print_AppendableBigMoneyProvider_nullBigMoneyProvider() { iPrintTest.print(new StringBuilder(), (BigMoneyProvider) null); } //----------------------------------------------------------------------- // printIO(Appendable,BigMoneyProvider) //----------------------------------------------------------------------- public void test_printIO_AppendableBigMoneyProvider() throws IOException { StringBuilder buf = new StringBuilder(); iPrintTest.printIO(buf, MONEY_GBP_12_34); assertEquals(buf.toString(), "GBP hello"); } @Test(expectedExceptions = IOException.class) public void test_printIO_AppendableBigMoneyProvider_IOException() throws IOException { Appendable appendable = new IOAppendable(); iPrintTest.printIO(appendable, MONEY_GBP_12_34); } @Test(expectedExceptions = UnsupportedOperationException.class) public void test_printIO_AppendableBigMoneyProvider_cannotPrint() throws IOException { iCannotPrint.printIO(new StringBuilder(), MONEY_GBP_12_34); } @Test(expectedExceptions = NullPointerException.class) public void test_printIO_AppendableBigMoneyProvider_nullAppendable() throws IOException { iPrintTest.printIO((Appendable) null, MONEY_GBP_12_34); } @Test(expectedExceptions = NullPointerException.class) public void test_printIO_AppendableBigMoneyProvider_nullBigMoneyProvider() throws IOException { iPrintTest.printIO(new StringBuilder(), (BigMoneyProvider) null); } //----------------------------------------------------------------------- // parseBigMoney(CharSequence) //----------------------------------------------------------------------- public void test_parseBigMoney_CharSequence() { CharSequence input = new StringBuilder("12.34 GBP"); BigMoney test = iParseTest.parseBigMoney(input); assertEquals(test, MONEY_GBP_12_34.toBigMoney()); } @Test(expectedExceptions = MoneyFormatException.class) public void test_parseBigMoney_CharSequence_invalidCurrency() { iParseTest.parseBigMoney("12.34 GBX"); } @Test(expectedExceptions = MoneyFormatException.class) public void test_parseBigMoney_CharSequence_notFullyParsed() { iParseTest.parseBigMoney("12.34 GBP X"); } @Test(expectedExceptions = MoneyFormatException.class) public void test_parseBigMoney_CharSequence_incomplete() { iParseTest.parseBigMoney("12.34 GBP "); } @Test(expectedExceptions = MoneyFormatException.class) public void test_parseBigMoney_CharSequence_incompleteLongText() { iParseTest.parseBigMoney("12.34 GBP ABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB"); } @Test(expectedExceptions = MoneyFormatException.class) public void test_parseBigMoney_CharSequence_incompleteEmptyParser() { iCannotPrint.parseBigMoney("12.34 GBP"); } @Test(expectedExceptions = MoneyFormatException.class) public void test_parseBigMoney_CharSequence_missingCurrency() { MoneyFormatter f = new MoneyFormatterBuilder().appendAmount().toFormatter(); f.parseBigMoney("12.34"); } @Test(expectedExceptions = UnsupportedOperationException.class) public void test_parseBigMoney_CharSequence_cannotParse() { iCannotParse.parseBigMoney(new StringBuilder()); } @Test(expectedExceptions = NullPointerException.class) public void test_parseBigMoney_CharSequence_nullCharSequence() { iParseTest.parseBigMoney((CharSequence) null); } //----------------------------------------------------------------------- // parseMoney(CharSequence) //----------------------------------------------------------------------- public void test_parseMoney_CharSequence() { CharSequence input = new StringBuilder("12.34 GBP"); Money test = iParseTest.parseMoney(input); assertEquals(test, MONEY_GBP_12_34); } @Test(expectedExceptions = MoneyFormatException.class) public void test_parseMoney_CharSequence_invalidCurrency() { iParseTest.parseMoney("12.34 GBX"); } @Test(expectedExceptions = MoneyFormatException.class) public void test_parseMoney_CharSequence_notFullyParsed() { iParseTest.parseMoney("12.34 GBP X"); } @Test(expectedExceptions = MoneyFormatException.class) public void test_parseMoney_CharSequence_incomplete() { iCannotPrint.parseMoney("12.34 GBP"); } @Test(expectedExceptions = UnsupportedOperationException.class) public void test_parseMoney_CharSequence_cannotParse() { iCannotParse.parseMoney(new StringBuilder()); } @Test(expectedExceptions = NullPointerException.class) public void test_parseMoney_CharSequence_nullCharSequence() { iParseTest.parseMoney((CharSequence) null); } //----------------------------------------------------------------------- // parse(CharSequence,int) //----------------------------------------------------------------------- @DataProvider(name = "parse") Object[][] data_parse() { return new Object[][] { new Object[] {"12.34 GBP", MONEY_GBP_12_34.getAmount(), MONEY_GBP_12_34.getCurrencyUnit(), 9, -1, false, true, true}, new Object[] {"1,2.34 GBP", MONEY_GBP_12_34.getAmount(), MONEY_GBP_12_34.getCurrencyUnit(), 10, -1, false, true, true}, new Object[] {"12,.34 GBP", MONEY_GBP_12_34.getAmount(), MONEY_GBP_12_34.getCurrencyUnit(), 10, -1, false, true, true}, new Object[] {"12.,34 GBP", MONEY_GBP_12_34.getAmount(), MONEY_GBP_12_34.getCurrencyUnit(), 10, -1, false, true, true}, new Object[] {"12.3,4 GBP", MONEY_GBP_12_34.getAmount(), MONEY_GBP_12_34.getCurrencyUnit(), 10, -1, false, true, true}, new Object[] {".12 GBP", BigDecimal.valueOf(12, 2), MONEY_GBP_12_34.getCurrencyUnit(), 7, -1, false, true, true}, new Object[] {"12. GBP", BigDecimal.valueOf(12), MONEY_GBP_12_34.getCurrencyUnit(), 7, -1, false, true, true}, new Object[] {"12,34 GBP", BigDecimal.valueOf(1234), MONEY_GBP_12_34.getCurrencyUnit(), 9, -1, false, true, true}, new Object[] {"-12.34 GBP", BigDecimal.valueOf(-1234, 2), CurrencyUnit.GBP, 10, -1, false, true, true}, new Object[] {"+12.34 GBP", BigDecimal.valueOf(1234, 2), CurrencyUnit.GBP, 10, -1, false, true, true}, new Object[] {"12.34 GB", BigDecimal.valueOf(1234, 2), null, 6, 6, true, false, false}, new Object[] {",12.34 GBP", null, null, 0, 0, true, false, false}, new Object[] {"12..34 GBP", BigDecimal.valueOf(12), null, 3, 3, true, false, false}, new Object[] {"12,,34 GBP", BigDecimal.valueOf(12), null, 2, 2, true, false, false}, new Object[] {"12.34 GBX", MONEY_GBP_12_34.getAmount(), null, 6, 6, true, false, false}, new Object[] {"12.34 GBPX", MONEY_GBP_12_34.getAmount(), MONEY_GBP_12_34.getCurrencyUnit(), 9, -1, false, false, true}, }; } @Test(dataProvider = "parse") public void test_parse_CharSequenceInt(String str, BigDecimal amount, CurrencyUnit currency, int index, int errorIndex, boolean error, boolean fullyParsed, boolean complete) { CharSequence input = new StringBuilder(str); MoneyParseContext test = iParseTest.parse(input, 0); assertEquals(test.getAmount(), amount); assertEquals(test.getCurrency(), currency); assertEquals(test.getIndex(), index); assertEquals(test.getErrorIndex(), errorIndex); assertEquals(test.getText().toString(), str); assertEquals(test.getTextLength(), str.length()); assertEquals(test.isError(), error); assertEquals(test.isFullyParsed(), fullyParsed); assertEquals(test.isComplete(), complete); ParsePosition pp = new ParsePosition(index); pp.setErrorIndex(errorIndex); assertEquals(test.toParsePosition(), pp); } public void test_parse_CharSequenceInt_incomplete() { // this parser does nothing MoneyParseContext test = iCannotPrint.parse("12.34 GBP", 0); assertEquals(test.getAmount(), null); assertEquals(test.getCurrency(), null); assertEquals(test.getIndex(), 0); assertEquals(test.getErrorIndex(), -1); assertEquals(test.getText().toString(), "12.34 GBP"); assertEquals(test.getTextLength(), 9); assertEquals(test.isError(), false); assertEquals(test.isFullyParsed(), false); assertEquals(test.isComplete(), false); } public void test_parse_CharSequenceInt_continueAfterDoubleDecimal() { MoneyFormatter f = new MoneyFormatterBuilder() .appendAmountLocalized().appendLiteral(".").appendCurrencyCode().toFormatter(); MoneyParseContext test = f.parse("12..GBP", 0); assertEquals(test.getAmount(), BigDecimal.valueOf(12)); assertEquals(test.getCurrency(), CurrencyUnit.of("GBP")); assertEquals(test.getIndex(), 7); assertEquals(test.getErrorIndex(), -1); assertEquals(test.getText().toString(), "12..GBP"); assertEquals(test.getTextLength(), 7); assertEquals(test.isError(), false); assertEquals(test.isFullyParsed(), true); assertEquals(test.isComplete(), true); } public void test_parse_CharSequenceInt_continueAfterSingleComma() { MoneyFormatter f = new MoneyFormatterBuilder() .appendAmountLocalized().appendLiteral(",").appendCurrencyCode().toFormatter(); MoneyParseContext test = f.parse("12,GBP", 0); assertEquals(test.getAmount(), BigDecimal.valueOf(12)); assertEquals(test.getCurrency(), CurrencyUnit.of("GBP")); assertEquals(test.getIndex(), 6); assertEquals(test.getErrorIndex(), -1); assertEquals(test.getText().toString(), "12,GBP"); assertEquals(test.getTextLength(), 6); assertEquals(test.isError(), false); assertEquals(test.isFullyParsed(), true); assertEquals(test.isComplete(), true); } public void test_parse_CharSequenceInt_continueAfterDoubleComma() { MoneyFormatter f = new MoneyFormatterBuilder() .appendAmountLocalized().appendLiteral(",,").appendCurrencyCode().toFormatter(); MoneyParseContext test = f.parse("12,,GBP", 0); assertEquals(test.getAmount(), BigDecimal.valueOf(12)); assertEquals(test.getCurrency(), CurrencyUnit.of("GBP")); assertEquals(test.getIndex(), 7); assertEquals(test.getErrorIndex(), -1); assertEquals(test.getText().toString(), "12,,GBP"); assertEquals(test.getTextLength(), 7); assertEquals(test.isError(), false); assertEquals(test.isFullyParsed(), true); assertEquals(test.isComplete(), true); } @Test(expectedExceptions = UnsupportedOperationException.class) public void test_parse_CharSequenceInt_cannotParse() { iCannotParse.parse(new StringBuilder(), 0); } @Test(expectedExceptions = NullPointerException.class) public void test_parse_CharSequenceInt_nullCharSequence() { iParseTest.parse((CharSequence) null, 0); } @Test(expectedExceptions = IndexOutOfBoundsException.class) public void test_parse_CharSequenceInt_startIndexTooSmall() { iParseTest.parse("", -1); } @Test(expectedExceptions = IndexOutOfBoundsException.class) public void test_parse_CharSequenceInt_startIndexTooBig() { iParseTest.parse("", 1); } //----------------------------------------------------------------------- public void test_printParse_zeroChar() { MoneyAmountStyle style = MoneyAmountStyle.ASCII_DECIMAL_POINT_GROUP3_COMMA.withZeroCharacter('A'); MoneyFormatter f = new MoneyFormatterBuilder().appendCurrencyCode().appendLiteral(" ").appendAmount(style).toFormatter(); assertEquals(f.print(MONEY_GBP_12_34), "GBP BC.DE"); assertEquals(f.parseMoney("GBP BC.DE"), MONEY_GBP_12_34); } @Test(expectedExceptions = MoneyFormatException.class) public void test_parseMoney_notFullyParsed() { iParseTest.parseMoney("GBP hello notfullyparsed"); } @Test(expectedExceptions = MoneyFormatException.class) public void test_parseMoney_noAmount() { iParseTest.parseMoney("GBP hello"); } @Test(expectedExceptions = MoneyFormatException.class) public void test_parseBigMoney_notFullyParsed() { iParseTest.parseBigMoney("GBP hello notfullyparsed"); } @Test(expectedExceptions = MoneyFormatException.class) public void test_parseBigMoney_noAmount() { iParseTest.parseBigMoney("GBP hello"); } @Test(expectedExceptions = MoneyFormatException.class) public void test_parse_notFullyParsed() { MoneyParseContext context = iParseTest.parse("GBP hello notfullyparsed", 1); context.toBigMoney(); } //----------------------------------------------------------------------- // toString() //----------------------------------------------------------------------- public void test_toString() { assertEquals(iPrintTest.toString(), "${code}' hello'"); } public void test_toString_differentPrinterParser() { MoneyPrinter printer = new MoneyPrinter() { @Override public void print(MoneyPrintContext context, Appendable appendable, BigMoney money) throws IOException { } @Override public String toString() { return "A"; } }; MoneyParser parser = new MoneyParser() { @Override public void parse(MoneyParseContext context) { } @Override public String toString() { return "B"; } }; MoneyFormatter f = new MoneyFormatterBuilder().append(printer, parser).toFormatter(); assertEquals(f.toString(), "A:B"); } //----------------------------------------------------------------------- private static final class IOAppendable implements Appendable { @Override public Appendable append(CharSequence csq, int start, int end) throws IOException { throw new IOException(); } @Override public Appendable append(char c) throws IOException { throw new IOException(); } @Override public Appendable append(CharSequence csq) throws IOException { throw new IOException(); } } } Other Java examples (source code examples)Here is a short list of links related to this Java TestMoneyFormatter.java source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.