/** * Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.util.money; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertFalse; import static org.testng.AssertJUnit.assertTrue; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import com.opengamma.util.test.TestGroup; /** * Test CurrencyAmount. */ @Test(groups = TestGroup.UNIT) public class CurrencyAmountTest { private static final Currency CCY1 = Currency.AUD; private static final Currency CCY2 = Currency.CAD; private static final double A1 = 100; private static final double A2 = 200; private static final CurrencyAmount CCY_AMOUNT = CurrencyAmount.of(CCY1, A1); @Test public void test_fixture() { assertEquals(CCY1, CCY_AMOUNT.getCurrency()); assertEquals(A1, CCY_AMOUNT.getAmount(), 0); } //------------------------------------------------------------------------- // factories //------------------------------------------------------------------------- public void test_of_Currency() { CurrencyAmount test = CurrencyAmount.of(Currency.USD, A1); assertEquals(Currency.USD, test.getCurrency()); assertEquals(A1, test.getAmount(), 0.0001d); } @Test(expectedExceptions = IllegalArgumentException.class) public void test_of_Currency_nullCurrency() { CurrencyAmount.of((Currency) null, A1); } //------------------------------------------------------------------------- public void test_of_String() { CurrencyAmount test = CurrencyAmount.of("USD", A1); assertEquals(Currency.USD, test.getCurrency()); assertEquals(A1, test.getAmount(), 0.0001d); } @Test(expectedExceptions = IllegalArgumentException.class) public void test_of_String_nullCurrency() { CurrencyAmount.of((String) null, A1); } //------------------------------------------------------------------------- // parse(String) //------------------------------------------------------------------------- @Test public void test_parse_String() { assertEquals(CurrencyAmount.of(Currency.AUD, 100.001), CurrencyAmount.parse("AUD 100.001")); assertEquals(CurrencyAmount.of(Currency.AUD, 123.3), CurrencyAmount.parse("AUD 123.3")); assertEquals(CCY_AMOUNT, CurrencyAmount.parse(CCY_AMOUNT.toString())); } @DataProvider(name = "badParse") Object[][] data_badParse() { return new Object[][] { {"AUD"}, {"AUD aa"}, {"123"}, {null}, }; } @Test(dataProvider = "badParse", expectedExceptions = IllegalArgumentException.class) public void test_parse_String_bad(String input) { CurrencyAmount.parse(input); } //------------------------------------------------------------------------- public void test_plus() { final CurrencyAmount ccyAmount = CurrencyAmount.of(CCY1, A2); CurrencyAmount test = CCY_AMOUNT.plus(ccyAmount); assertEquals(CCY1, test.getCurrency()); assertEquals(A1 + A2, test.getAmount()); } @Test(expectedExceptions = IllegalArgumentException.class) public void test_plus_addNullOther() { CCY_AMOUNT.plus(null); } @Test(expectedExceptions = IllegalArgumentException.class) public void test_plus_wrongCurrency() { CCY_AMOUNT.plus(CurrencyAmount.of(CCY2, A2)); } //------------------------------------------------------------------------- public void test_multipliedBy() { CurrencyAmount test = CCY_AMOUNT.multipliedBy(3.5); assertEquals(CCY1, test.getCurrency()); assertEquals(A1 * 3.5, test.getAmount()); } //------------------------------------------------------------------------- @Test public void testObject() { CurrencyAmount other = CurrencyAmount.of(CCY1, A1); assertTrue(CCY_AMOUNT.equals(CCY_AMOUNT)); assertTrue(CCY_AMOUNT.equals(other)); assertTrue(other.equals(CCY_AMOUNT)); assertEquals(other.hashCode(), CCY_AMOUNT.hashCode()); other = CurrencyAmount.of(CCY1, A1); assertEquals(other, CCY_AMOUNT); assertEquals(other.hashCode(), CCY_AMOUNT.hashCode()); other = CurrencyAmount.of(CCY2, A1); assertFalse(CCY_AMOUNT.equals(other)); other = CurrencyAmount.of(CCY1, A2); assertFalse(CCY_AMOUNT.equals(other)); } @Test public void testEqualsRubbish() { assertFalse(CCY_AMOUNT.equals("")); assertFalse(CCY_AMOUNT.equals(null)); } }