/**
* Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.strata.basics;
import static com.opengamma.strata.collect.TestHelper.assertSerialization;
import static com.opengamma.strata.collect.TestHelper.coverImmutableBean;
import static org.assertj.core.api.Assertions.assertThat;
import static org.testng.Assert.assertEquals;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
/**
* Test {@link StandardId}.
*/
@Test
public class StandardIdTest {
private static final String SCHEME = "Scheme";
private static final String OTHER_SCHEME = "Other";
//-------------------------------------------------------------------------
public void test_factory_String_String() {
StandardId test = StandardId.of("scheme:/+foo", "value");
assertEquals(test.getScheme(), "scheme:/+foo");
assertEquals(test.getValue(), "value");
assertEquals(test.toString(), "scheme:/+foo~value");
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void test_factory_String_String_nullScheme() {
StandardId.of(null, "value");
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void test_factory_String_String_nullValue() {
StandardId.of("Scheme", null);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void test_factory_String_String_emptyValue() {
StandardId.of("Scheme", "");
}
@DataProvider(name = "factoryValid")
Object[][] data_factoryValid() {
return new Object[][] {
{"ABCDEFGHIJKLMNOPQRSTUVWXYZ", "123"},
{"abcdefghijklmnopqrstuvwxyz", "123"},
{"0123456789:/+.=_-", "123"},
{"ABC", "! !\"$%%^&*()123abcxyzABCXYZ"},
};
}
@Test(dataProvider = "factoryValid")
public void test_factory_String_String_valid(String scheme, String value) {
StandardId.of(scheme, value);
}
@DataProvider(name = "factoryInvalid")
Object[][] data_factoryInvalid() {
return new Object[][] {
{"", ""},
{" ", "123"},
{"{", "123"},
{"ABC", " 123"},
{"ABC", "12}3"},
{"ABC", "12\u00003"},
};
}
@Test(dataProvider = "factoryInvalid", expectedExceptions = IllegalArgumentException.class)
public void test_factory_String_String_invalid(String scheme, String value) {
StandardId.of(scheme, value);
}
//-------------------------------------------------------------------------
public void test_encodeScheme() {
String test = StandardId.encodeScheme("http://www.opengamma.com/foo/../~bar#test");
assertEquals(test, "http://www.opengamma.com/foo/../%7Ebar%23test");
}
//-------------------------------------------------------------------------
@DataProvider(name = "formats")
Object[][] data_formats() {
return new Object[][] {
{"Value", "A~Value"},
{"a+b", "A~a+b"},
};
}
@Test(dataProvider = "formats")
public void test_formats_toString(String value, String expected) {
StandardId test = StandardId.of("A", value);
assertEquals(test.toString(), expected);
}
@Test(dataProvider = "formats")
public void test_formats_parse(String value, String text) {
StandardId test = StandardId.parse(text);
assertEquals(test.getScheme(), "A");
assertEquals(test.getValue(), value);
}
//-------------------------------------------------------------------------
public void test_parse() {
StandardId test = StandardId.parse("Scheme~value");
assertEquals(test.getScheme(), SCHEME);
assertEquals(test.getValue(), "value");
assertEquals(test.toString(), "Scheme~value");
}
@DataProvider(name = "parseInvalidFormat")
Object[][] data_parseInvalidFormat() {
return new Object[][] {
{"Scheme"},
{"Scheme~"},
{"~value"},
{"Scheme:value"},
{"a~b~c"},
};
}
@Test(dataProvider = "parseInvalidFormat", expectedExceptions = IllegalArgumentException.class)
public void test_parse_invalidFormat(String text) {
StandardId.parse(text);
}
//-------------------------------------------------------------------------
public void test_equals() {
StandardId d1a = StandardId.of(SCHEME, "d1");
StandardId d1b = StandardId.of(SCHEME, "d1");
StandardId d2 = StandardId.of(SCHEME, "d2");
StandardId d3 = StandardId.of("Different", "d1");
assertEquals((Object) d1a.equals(d1a), true);
assertEquals((Object) d1a.equals(d1b), true);
assertEquals((Object) d1a.equals(d2), false);
assertEquals((Object) d1b.equals(d1a), true);
assertEquals((Object) d1b.equals(d1b), true);
assertEquals((Object) d1b.equals(d2), false);
assertEquals((Object) d2.equals(d1a), false);
assertEquals((Object) d2.equals(d1b), false);
assertEquals((Object) d2.equals(d2), true);
assertEquals((Object) d3.equals(d1a), false);
assertEquals((Object) d3.equals(d2), false);
assertEquals((Object) d3.equals(d3), true);
assertEquals((Object) d1b.equals("d1"), false);
assertEquals((Object) d1b.equals(null), false);
}
public void test_hashCode() {
StandardId d1a = StandardId.of(SCHEME, "d1");
StandardId d1b = StandardId.of(SCHEME, "d1");
assertEquals((Object) d1b.hashCode(), d1a.hashCode());
}
public void test_comparisonByScheme() {
StandardId id1 = StandardId.of(SCHEME, "123");
StandardId id2 = StandardId.of(OTHER_SCHEME, "234");
// as schemes are different, will compare by scheme
assertThat(id1).isGreaterThan(id2);
}
public void test_comparisonWithSchemeSame() {
StandardId id1 = StandardId.of(SCHEME, "123");
StandardId id2 = StandardId.of(SCHEME, "234");
// as schemes are same, will compare by id
assertThat(id1).isLessThan(id2);
}
public void coverage() {
coverImmutableBean(StandardId.of(SCHEME, "123"));
}
public void test_serialization() {
assertSerialization(StandardId.of(SCHEME, "123"));
}
}