/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.basics.currency; import static com.opengamma.basics.currency.Currency.AUD; import static com.opengamma.basics.currency.Currency.CAD; import static com.opengamma.basics.currency.Currency.EUR; import static com.opengamma.basics.currency.Currency.GBP; import static com.opengamma.basics.currency.Currency.JPY; import static com.opengamma.basics.currency.Currency.USD; import static com.opengamma.collect.TestHelper.assertJodaConvert; import static com.opengamma.collect.TestHelper.assertSerialization; import static com.opengamma.collect.TestHelper.assertThrows; import static com.opengamma.collect.TestHelper.assertThrowsIllegalArg; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertFalse; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; /** * Test {@link CurrencyPair}. */ @Test public class CurrencyPairTest { //------------------------------------------------------------------------- public void test_of_CurrencyCurrency() { CurrencyPair test = CurrencyPair.of(GBP, USD); assertEquals(test.getBase(), GBP); assertEquals(test.getCounter(), USD); assertEquals(test.toString(), "GBP/USD"); } public void test_of_CurrencyCurrency_reverseStandardOrder() { CurrencyPair test = CurrencyPair.of(USD, GBP); assertEquals(test.getBase(), USD); assertEquals(test.getCounter(), GBP); assertEquals(test.toString(), "USD/GBP"); } public void test_of_CurrencyCurrency_same() { CurrencyPair test = CurrencyPair.of(USD, USD); assertEquals(test.getBase(), USD); assertEquals(test.getCounter(), USD); assertEquals(test.toString(), "USD/USD"); } public void test_of_CurrencyCurrency_null() { assertThrows(() -> CurrencyPair.of((Currency) null, USD), IllegalArgumentException.class); assertThrows(() -> CurrencyPair.of(USD, (Currency) null), IllegalArgumentException.class); assertThrows(() -> CurrencyPair.of((Currency) null, (Currency) null), IllegalArgumentException.class); } //------------------------------------------------------------------------- @DataProvider(name = "parseGood") Object[][] data_parseGood() { return new Object[][] { {"USD/EUR", USD, EUR}, {"EUR/USD", EUR, USD}, {"EUR/EUR", EUR, EUR}, {"cAd/GbP", CAD, GBP}, }; } @Test(dataProvider = "parseGood") public void test_parse_String_good(String input, Currency base, Currency counter) { assertEquals(CurrencyPair.parse(input), CurrencyPair.of(base, counter)); } @DataProvider(name = "parseBad") Object[][] data_parseBad() { return new Object[][] { {"AUD"}, {"AUD/GB"}, {"AUD GBP"}, {"AUD:GBP"}, {"123/456"}, {""}, {null}, }; } @Test(dataProvider = "parseBad", expectedExceptions = IllegalArgumentException.class) public void test_parse_String_bad(String input) { CurrencyPair.parse(input); } //------------------------------------------------------------------------- public void test_inverse() { CurrencyPair test = CurrencyPair.of(GBP, USD); assertEquals(test.inverse(), CurrencyPair.of(USD, GBP)); } public void test_inverse_same() { CurrencyPair test = CurrencyPair.of(GBP, GBP); assertEquals(test.inverse(), CurrencyPair.of(GBP, GBP)); } //------------------------------------------------------------------------- public void test_contains_Currency() { CurrencyPair test = CurrencyPair.of(GBP, USD); assertEquals(test.contains(GBP), true); assertEquals(test.contains(USD), true); assertEquals(test.contains(EUR), false); } public void test_contains_Currency_same() { CurrencyPair test = CurrencyPair.of(GBP, GBP); assertEquals(test.contains(GBP), true); assertEquals(test.contains(USD), false); assertEquals(test.contains(EUR), false); } public void test_contains_Currency_null() { CurrencyPair test = CurrencyPair.of(GBP, USD); assertThrowsIllegalArg(() -> test.contains(null)); } //------------------------------------------------------------------------- public void test_isInverse_CurrencyPair() { CurrencyPair test = CurrencyPair.of(GBP, USD); assertEquals(test.isInverse(test), false); assertEquals(test.isInverse(CurrencyPair.of(GBP, USD)), false); assertEquals(test.isInverse(CurrencyPair.of(USD, GBP)), true); assertEquals(test.isInverse(CurrencyPair.of(GBP, EUR)), false); assertEquals(test.isInverse(CurrencyPair.of(EUR, GBP)), false); assertEquals(test.isInverse(CurrencyPair.of(USD, EUR)), false); assertEquals(test.isInverse(CurrencyPair.of(EUR, USD)), false); } public void test_isInverse_CurrencyPair_null() { CurrencyPair test = CurrencyPair.of(GBP, USD); assertThrowsIllegalArg(() -> test.isInverse(null)); } //------------------------------------------------------------------------- public void test_isRelatedTo_CurrencyPair() { CurrencyPair test = CurrencyPair.of(GBP, USD); assertEquals(test.isRelated(test), true); assertEquals(test.isRelated(CurrencyPair.of(GBP, USD)), true); assertEquals(test.isRelated(CurrencyPair.of(USD, GBP)), true); assertEquals(test.isRelated(CurrencyPair.of(GBP, EUR)), true); assertEquals(test.isRelated(CurrencyPair.of(EUR, GBP)), true); assertEquals(test.isRelated(CurrencyPair.of(USD, EUR)), true); assertEquals(test.isRelated(CurrencyPair.of(EUR, USD)), true); assertEquals(test.isRelated(CurrencyPair.of(JPY, EUR)), false); assertEquals(test.isRelated(CurrencyPair.of(EUR, JPY)), false); } public void test_isRelatedTo_CurrencyPair_null() { CurrencyPair test = CurrencyPair.of(GBP, USD); assertThrowsIllegalArg(() -> test.isRelated(null)); } //------------------------------------------------------------------------- public void test_equals_hashCode() { CurrencyPair a1 = CurrencyPair.of(AUD, GBP); CurrencyPair a2 = CurrencyPair.of(AUD, GBP); CurrencyPair b = CurrencyPair.of(USD, GBP); CurrencyPair c = CurrencyPair.of(USD, EUR); assertEquals(a1.equals(a1), true); assertEquals(a1.equals(a2), true); assertEquals(a1.equals(b), false); assertEquals(a1.equals(c), false); assertEquals(b.equals(a1), false); assertEquals(b.equals(a2), false); assertEquals(b.equals(b), true); assertEquals(b.equals(c), false); assertEquals(c.equals(a1), false); assertEquals(c.equals(a2), false); assertEquals(c.equals(b), false); assertEquals(c.equals(c), true); assertEquals(a1.hashCode(), a2.hashCode()); } public void test_equals_bad() { CurrencyPair test = CurrencyPair.of(AUD, GBP); assertFalse(test.equals("")); assertFalse(test.equals(null)); } //----------------------------------------------------------------------- public void test_serialization() { assertSerialization(CurrencyPair.of(GBP, USD)); assertSerialization(CurrencyPair.of(GBP, GBP)); } public void test_jodaConvert() { assertJodaConvert(CurrencyPair.class, CurrencyPair.of(GBP, USD)); assertJodaConvert(CurrencyPair.class, CurrencyPair.of(GBP, GBP)); } }