/*
* CREDIT SUISSE IS WILLING TO LICENSE THIS SPECIFICATION TO YOU ONLY UPON THE
* CONDITION THAT YOU ACCEPT ALL OF THE TERMS CONTAINED IN THIS AGREEMENT.
* PLEASE READ THE TERMS AND CONDITIONS OF THIS AGREEMENT CAREFULLY. BY
* DOWNLOADING THIS SPECIFICATION, YOU ACCEPT THE TERMS AND CONDITIONS OF THE
* AGREEMENT. IF YOU ARE NOT WILLING TO BE BOUND BY IT, SELECT THE "DECLINE"
* BUTTON AT THE BOTTOM OF THIS PAGE. Specification: JSR-354 Money and Currency
* API ("Specification") Copyright (c) 2012-2013, Credit Suisse All rights
* reserved.
*/
package org.javamoney.adopjsr;
import org.javamoney.moneta.Money;
import org.junit.Test;
import javax.money.MonetaryAmount;
import javax.money.MonetaryOperator;
import javax.money.format.*;
import org.javamoney.moneta.format.CurrencyStyle;
import java.text.DecimalFormat;
import java.util.Collection;
import java.util.Locale;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
/**
* Test cases for the formatting API.
* Created by Anatole on 21.03.14.
*/
public class FormattingTest {
private Formatting formatting = new Formatting();
@Test
public void testGetAmountFormat() throws Exception {
for (Locale loc : DecimalFormat.getAvailableLocales()) {
MonetaryAmountFormat fmt = formatting.getAmountFormat(loc);
assertEquals(fmt.getContext().getLocale(), loc);
}
}
@Test
public void testGetAmountFormat1() throws Exception {
for (Locale loc : DecimalFormat.getAvailableLocales()) {
MonetaryAmountFormat fmt = formatting.getAmountFormat(loc);
assertEquals(fmt, MonetaryFormats.getAmountFormat(loc));
}
}
@Test
public void testCreateCustomFormat() throws Exception {
MonetaryOperator outOp = (value) -> value.divide(1000000);
MonetaryOperator inOp = new MonetaryOperator() {
@Override
public MonetaryAmount apply(MonetaryAmount value) {
return value.multiply(1000000);
}
};
MonetaryAmountFormat fmt = MonetaryFormats.getAmountFormat(
AmountFormatQueryBuilder.of(Locale.ENGLISH).set(CurrencyStyle.SYMBOL)
.set("groupingSizes", new int[]{3, 2}).set("pattern", " ##0.00 ¤ Mio;[##0.00] ¤ Mio")
.set("displayConversion", outOp).set("parseConversion", inOp).build());
Money m = Money.of(2323233223232424.23, "CHF");
MonetaryAmountFormat toTest = formatting.createCustomFormat();
assertEquals(fmt.format(m), toTest.format(m));
m = Money.of(-2323233223232424.23, "CHF");
assertEquals(fmt.format(m), toTest.format(m));
}
@Test
public void testRegisterCustomFormat() {
String formatId = formatting.getRegisteredCustomFormat();
assertNotNull(formatId);
AmountFormatQuery ctx = AmountFormatQueryBuilder.of(formatId).build();
MonetaryAmountFormat f = MonetaryFormats.getAmountFormat(ctx);
assertNotNull(f);
}
@Test
public void testAvailableLocales() {
Collection<Locale> locales = formatting.getAvailableLocales();
assertEquals(MonetaryFormats.getAvailableLocales(), locales);
}
}