/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.strata.basics.currency; import static com.opengamma.strata.collect.TestHelper.assertJodaConvert; import static com.opengamma.strata.collect.TestHelper.assertSerialization; import static com.opengamma.strata.collect.TestHelper.coverPrivateConstructor; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertSame; import static org.testng.Assert.assertTrue; import java.util.Set; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; /** * Test {@link Currency}. */ @Test public class CurrencyTest { //----------------------------------------------------------------------- public void test_constants() { assertEquals(Currency.of("USD"), Currency.USD); assertEquals(Currency.of("EUR"), Currency.EUR); assertEquals(Currency.of("JPY"), Currency.JPY); assertEquals(Currency.of("GBP"), Currency.GBP); assertEquals(Currency.of("CHF"), Currency.CHF); assertEquals(Currency.of("AUD"), Currency.AUD); assertEquals(Currency.of("CAD"), Currency.CAD); } //----------------------------------------------------------------------- public void test_getAvailable() { Set<Currency> available = Currency.getAvailableCurrencies(); assertTrue(available.contains(Currency.USD)); assertTrue(available.contains(Currency.EUR)); assertTrue(available.contains(Currency.JPY)); assertTrue(available.contains(Currency.GBP)); assertTrue(available.contains(Currency.CHF)); assertTrue(available.contains(Currency.AUD)); assertTrue(available.contains(Currency.CAD)); } //----------------------------------------------------------------------- public void test_of_String() { Currency test = Currency.of("SEK"); assertEquals(test.getCode(), "SEK"); assertSame(test, Currency.of("SEK")); } public void test_of_String_historicCurrency() { Currency test = Currency.of("BEF"); assertEquals(test.getCode(), "BEF"); assertEquals(test.getMinorUnitDigits(), 2); assertEquals(test.getTriangulationCurrency(), Currency.EUR); assertSame(test, Currency.of("BEF")); } public void test_of_String_unknownCurrencyCreated() { Currency test = Currency.of("AAA"); assertEquals(test.getCode(), "AAA"); assertEquals(test.getMinorUnitDigits(), 0); assertSame(test, Currency.of("AAA")); } @Test(expectedExceptions = IllegalArgumentException.class) public void test_of_String_lowerCase() { Currency.of("gbp"); } @DataProvider(name = "ofBad") Object[][] data_ofBad() { return new Object[][] { {""}, {"AB"}, {"gbp"}, {"ABCD"}, {"123"}, {" GBP"}, {null}, }; } @Test(dataProvider = "ofBad", expectedExceptions = IllegalArgumentException.class) public void test_of_String_bad(String input) { Currency.of(input); } //----------------------------------------------------------------------- public void test_parse_String() { Currency test = Currency.parse("GBP"); assertEquals(test.getCode(), "GBP"); assertSame(test, Currency.GBP); } public void test_parse_String_unknownCurrencyCreated() { Currency test = Currency.parse("zyx"); assertEquals(test.getCode(), "ZYX"); assertEquals(test.getMinorUnitDigits(), 0); assertSame(test, Currency.of("ZYX")); } public void test_parse_String_lowerCase() { Currency test = Currency.parse("gbp"); assertEquals(test.getCode(), "GBP"); assertSame(test, Currency.GBP); } @DataProvider(name = "parseBad") Object[][] data_parseBad() { return new Object[][] { {""}, {"AB"}, {"ABCD"}, {"123"}, {" GBP"}, {null}, }; } @Test(dataProvider = "parseBad", expectedExceptions = IllegalArgumentException.class) public void test_parse_String_bad(String input) { Currency.parse(input); } //----------------------------------------------------------------------- public void test_minorUnits() { assertEquals(Currency.of("USD").getMinorUnitDigits(), 2); assertEquals(Currency.of("EUR").getMinorUnitDigits(), 2); assertEquals(Currency.of("JPY").getMinorUnitDigits(), 0); assertEquals(Currency.of("GBP").getMinorUnitDigits(), 2); assertEquals(Currency.of("CHF").getMinorUnitDigits(), 2); assertEquals(Currency.of("AUD").getMinorUnitDigits(), 2); assertEquals(Currency.of("CAD").getMinorUnitDigits(), 2); } public void test_triangulatonCurrency() { assertEquals(Currency.of("USD").getTriangulationCurrency(), Currency.USD); assertEquals(Currency.of("EUR").getTriangulationCurrency(), Currency.USD); assertEquals(Currency.of("JPY").getTriangulationCurrency(), Currency.USD); assertEquals(Currency.of("GBP").getTriangulationCurrency(), Currency.USD); assertEquals(Currency.of("CHF").getTriangulationCurrency(), Currency.USD); assertEquals(Currency.of("AUD").getTriangulationCurrency(), Currency.USD); assertEquals(Currency.of("CAD").getTriangulationCurrency(), Currency.USD); } //----------------------------------------------------------------------- public void test_compareTo() { Currency a = Currency.EUR; Currency b = Currency.GBP; Currency c = Currency.JPY; assertEquals(0, a.compareTo(a)); assertEquals(0, b.compareTo(b)); assertEquals(0, c.compareTo(c)); assertTrue(a.compareTo(b) < 0); assertTrue(b.compareTo(a) > 0); assertTrue(a.compareTo(c) < 0); assertTrue(c.compareTo(a) > 0); assertTrue(b.compareTo(c) < 0); assertTrue(c.compareTo(b) > 0); } @Test(expectedExceptions = NullPointerException.class) public void test_compareTo_null() { Currency.EUR.compareTo(null); } //----------------------------------------------------------------------- public void test_equals_hashCode() { Object a1 = Currency.GBP; Object a2 = Currency.of("GBP"); Object b = Currency.EUR; assertEquals(a1.equals(a1), true); assertEquals(a1.equals(b), false); assertEquals(a1.equals(a2), true); assertEquals(a2.equals(a1), true); assertEquals(a2.equals(a2), true); assertEquals(a2.equals(b), false); assertEquals(b.equals(a1), false); assertEquals(b.equals(a2), false); assertEquals(b.equals(b), true); assertEquals(a1.hashCode(), a2.hashCode()); } public void test_equals_bad() { Object a = Currency.GBP; assertEquals(a.equals(null), false); assertEquals(a.equals("String"), false); assertEquals(a.equals(new Object()), false); } //----------------------------------------------------------------------- public void test_toString() { Currency test = Currency.GBP; assertEquals("GBP", test.toString()); } //----------------------------------------------------------------------- public void coverage() { coverPrivateConstructor(CurrencyDataLoader.class); } public void test_serialization() { assertSerialization(Currency.GBP); } public void test_jodaConvert() { assertJodaConvert(Currency.class, Currency.GBP); } }