/** * Copyright (C) 2009 - 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.assertSame; import static org.testng.AssertJUnit.assertTrue; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.Set; import org.testng.annotations.Test; import com.opengamma.id.ObjectId; import com.opengamma.id.UniqueId; import com.opengamma.util.test.TestGroup; /** * Test Currency. */ @Test(groups = TestGroup.UNIT) public class CurrencyTest { //----------------------------------------------------------------------- // constants //----------------------------------------------------------------------- public void test_constants() { assertEquals(Currency.USD, Currency.of("USD")); assertEquals(Currency.EUR, Currency.of("EUR")); assertEquals(Currency.JPY, Currency.of("JPY")); assertEquals(Currency.GBP, Currency.of("GBP")); assertEquals(Currency.CHF, Currency.of("CHF")); assertEquals(Currency.AUD, Currency.of("AUD")); assertEquals(Currency.CAD, Currency.of("CAD")); } //----------------------------------------------------------------------- // getAvailableCurrencies() //----------------------------------------------------------------------- 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)); } //----------------------------------------------------------------------- // of(Currency) //----------------------------------------------------------------------- public void test_of_Currency() { Currency test = Currency.of(java.util.Currency.getInstance("GBP")); assertEquals("GBP", test.getCode()); assertSame(Currency.GBP, test); } @Test(expectedExceptions = IllegalArgumentException.class) public void test_of_Currency_nullCurrency() { Currency.of((java.util.Currency) null); } //----------------------------------------------------------------------- // of(String) //----------------------------------------------------------------------- public void test_of_String() { Currency test = Currency.of("SEK"); assertEquals("SEK", test.getCode()); assertSame(Currency.of("SEK"), test); } public void test_of_String_unknownCurrencyCreated() { Currency test = Currency.of("AAA"); assertEquals("AAA", test.getCode()); assertSame(Currency.of("AAA"), test); } @Test(expectedExceptions = IllegalArgumentException.class) public void test_of_String_lowerCase() { try { Currency.of("gbp"); } catch (IllegalArgumentException ex) { assertEquals("Invalid currency code: gbp", ex.getMessage()); throw ex; } } @Test(expectedExceptions = IllegalArgumentException.class) public void test_of_String_empty() { Currency.of(""); } @Test(expectedExceptions = IllegalArgumentException.class) public void test_of_String_tooShort() { Currency.of("AB"); } @Test(expectedExceptions = IllegalArgumentException.class) public void test_of_String_tooLong() { Currency.of("ABCD"); } @Test(expectedExceptions = IllegalArgumentException.class) public void test_of_String_nullString() { Currency.of((String) null); } //----------------------------------------------------------------------- // parse(String) //----------------------------------------------------------------------- public void test_parse_String() { Currency test = Currency.parse("GBP"); assertEquals("GBP", test.getCode()); assertSame(Currency.GBP, test); } public void test_parse_String_unknownCurrencyCreated() { Currency test = Currency.parse("AAA"); assertEquals("AAA", test.getCode()); assertSame(Currency.of("AAA"), test); } public void test_parse_String_lowerCase() { Currency test = Currency.parse("gbp"); assertEquals("GBP", test.getCode()); assertSame(Currency.GBP, test); } @Test(expectedExceptions = IllegalArgumentException.class) public void test_parse_String_empty() { Currency.parse(""); } @Test(expectedExceptions = IllegalArgumentException.class) public void test_parse_String_tooShort() { Currency.parse("AB"); } @Test(expectedExceptions = IllegalArgumentException.class) public void test_parse_String_tooLong() { Currency.parse("ABCD"); } @Test(expectedExceptions = IllegalArgumentException.class) public void test_parse_String_nullString() { Currency.parse((String) null); } //----------------------------------------------------------------------- // Serialisation //----------------------------------------------------------------------- public void test_serialization_GBP() throws Exception { Currency cu = Currency.of("GBP"); ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeObject(cu); oos.close(); ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray())); Currency input = (Currency) ois.readObject(); assertSame(input, cu); } public void test_serialization_AAB() throws Exception { Currency cu = Currency.of("AAB"); ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeObject(cu); oos.close(); ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray())); Currency input = (Currency) ois.readObject(); assertSame(input, cu); } //----------------------------------------------------------------------- // gets //----------------------------------------------------------------------- public void test_gets() { Currency test = Currency.of("GBP"); assertEquals("GBP", test.getCode()); assertEquals(ObjectId.of("CurrencyISO", "GBP"), test.getObjectId()); assertEquals(UniqueId.of("CurrencyISO", "GBP"), test.getUniqueId()); assertEquals(java.util.Currency.getInstance("GBP"), test.toCurrency()); } //----------------------------------------------------------------------- // compareTo() //----------------------------------------------------------------------- public void test_compareTo() { Currency a = Currency.EUR; Currency b = Currency.GBP; Currency c = Currency.JPY; assertEquals(a.compareTo(a), 0); assertEquals(b.compareTo(b), 0); assertEquals(c.compareTo(c), 0); 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); } //----------------------------------------------------------------------- // equals() hashCode() //----------------------------------------------------------------------- public void test_equals_hashCode() { Currency a = Currency.GBP; Currency b = Currency.of("GBP"); Currency c = Currency.EUR; assertEquals(a.equals(a), true); assertEquals(b.equals(b), true); assertEquals(c.equals(c), true); assertEquals(a.equals(b), true); assertEquals(b.equals(a), true); assertEquals(a.hashCode() == b.hashCode(), true); assertEquals(a.equals(c), false); assertEquals(b.equals(c), false); } public void test_equals_false() { Currency a = Currency.GBP; assertEquals(a.equals(null), false); assertEquals(a.equals("String"), false); assertEquals(a.equals(new Object()), false); } //----------------------------------------------------------------------- // toString() //----------------------------------------------------------------------- public void test_toString() { Currency test = Currency.GBP; assertEquals(test.toString(), "GBP"); } }