/** * Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.strata.collect.named; import static com.opengamma.strata.collect.TestHelper.assertThrowsIllegalArg; import static org.testng.Assert.assertEquals; import java.util.Optional; import java.util.logging.Level; import java.util.logging.Logger; import org.testng.annotations.Test; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.opengamma.strata.collect.named.ExtendedEnum.ExternalEnumNames; /** * Test {@link ExtendedEnum}. */ @Test public class ExtendedEnumTest { public void test_enum_SampleNamed() { ExtendedEnum<SampleNamed> test = ExtendedEnum.of(SampleNamed.class); assertEquals(test.lookupAll(), ImmutableMap.builder() .put("Standard", SampleNameds.STANDARD) .put("STANDARD", SampleNameds.STANDARD) .put("More", MoreSampleNameds.MORE) .put("MORE", MoreSampleNameds.MORE) .put("Other", OtherSampleNameds.OTHER) .put("Another1", SampleNamedInstanceLookup1.ANOTHER1) .put("ANOTHER1", SampleNamedInstanceLookup1.ANOTHER1) .put("Another2", SampleNamedInstanceLookup2.ANOTHER2) .put("ANOTHER2", SampleNamedInstanceLookup2.ANOTHER2) .build()); assertEquals(test.lookupAllNormalized(), ImmutableMap.builder() .put("Standard", SampleNameds.STANDARD) .put("More", MoreSampleNameds.MORE) .put("Other", OtherSampleNameds.OTHER) .put("Another1", SampleNamedInstanceLookup1.ANOTHER1) .put("Another2", SampleNamedInstanceLookup2.ANOTHER2) .build()); assertEquals(test.alternateNames(), ImmutableMap.of("Alternate", "Standard", "ALTERNATE", "Standard")); assertEquals(test.find("Standard"), Optional.of(SampleNameds.STANDARD)); assertEquals(test.find("STANDARD"), Optional.of(SampleNameds.STANDARD)); assertEquals(test.find("Rubbish"), Optional.empty()); assertEquals(test.lookup("Standard"), SampleNameds.STANDARD); assertEquals(test.lookup("Alternate"), SampleNameds.STANDARD); assertEquals(test.lookup("ALTERNATE"), SampleNameds.STANDARD); assertEquals(test.lookup("More"), MoreSampleNameds.MORE); assertEquals(test.lookup("More", MoreSampleNameds.class), MoreSampleNameds.MORE); assertEquals(test.lookup("Other"), OtherSampleNameds.OTHER); assertEquals(test.lookup("Other", OtherSampleNameds.class), OtherSampleNameds.OTHER); assertEquals(test.lookup("Another1"), SampleNamedInstanceLookup1.ANOTHER1); assertEquals(test.lookup("Another2"), SampleNamedInstanceLookup2.ANOTHER2); assertThrowsIllegalArg(() -> test.lookup("Rubbish")); assertThrowsIllegalArg(() -> test.lookup(null)); assertThrowsIllegalArg(() -> test.lookup("Other", MoreSampleNameds.class)); assertEquals(test.toString(), "ExtendedEnum[SampleNamed]"); } public void test_enum_SampleNamed_externals() { ExtendedEnum<SampleNamed> test = ExtendedEnum.of(SampleNamed.class); assertEquals(test.externalNameGroups(), ImmutableSet.of("Foo", "Bar")); assertThrowsIllegalArg(() -> test.externalNames("Rubbish")); ExternalEnumNames<SampleNamed> fooExternals = test.externalNames("Foo"); assertEquals(fooExternals.lookup("Foo1"), SampleNameds.STANDARD); assertEquals(fooExternals.lookup("Foo1", SampleNamed.class), SampleNameds.STANDARD); assertEquals(fooExternals.lookup("Foo1", SampleNamed.class), SampleNameds.STANDARD); assertEquals(fooExternals.externalNames(), ImmutableMap.of("Foo1", "Standard")); assertThrowsIllegalArg(() -> fooExternals.lookup("Rubbish")); assertThrowsIllegalArg(() -> fooExternals.lookup(null)); assertThrowsIllegalArg(() -> fooExternals.lookup("Other", MoreSampleNameds.class)); assertEquals(fooExternals.toString(), "ExternalEnumNames[SampleNamed:Foo]"); ExternalEnumNames<SampleNamed> barExternals = test.externalNames("Bar"); assertEquals(barExternals.lookup("Foo1"), MoreSampleNameds.MORE); assertEquals(barExternals.lookup("Foo2"), SampleNameds.STANDARD); assertEquals(barExternals.reverseLookup(MoreSampleNameds.MORE), "Foo1"); assertEquals(barExternals.reverseLookup(SampleNameds.STANDARD), "Foo2"); assertThrowsIllegalArg(() -> barExternals.reverseLookup(OtherSampleNameds.OTHER)); assertEquals(barExternals.externalNames(), ImmutableMap.of("Foo1", "More", "Foo2", "Standard")); assertEquals(barExternals.toString(), "ExternalEnumNames[SampleNamed:Bar]"); } public void test_enum_SampleOther() { ExtendedEnum<SampleOther> test = ExtendedEnum.of(SampleOther.class); assertEquals(test.lookupAll(), ImmutableMap.of()); assertEquals(test.alternateNames(), ImmutableMap.of()); assertEquals(test.externalNameGroups(), ImmutableSet.of()); assertThrowsIllegalArg(() -> test.lookup("Rubbish")); assertThrowsIllegalArg(() -> test.lookup(null)); assertEquals(test.toString(), "ExtendedEnum[SampleOther]"); } public void test_enum_invalid() { Logger logger = Logger.getLogger(ExtendedEnum.class.getName()); Level level = logger.getLevel(); try { logger.setLevel(Level.OFF); // these return empty instances to avoid ExceptionInInitializerError assertEquals(ExtendedEnum.of(SampleInvalid1.class).lookupAll().isEmpty(), true); assertEquals(ExtendedEnum.of(SampleInvalid2.class).lookupAll().isEmpty(), true); assertEquals(ExtendedEnum.of(SampleInvalid3.class).lookupAll().isEmpty(), true); assertEquals(ExtendedEnum.of(SampleInvalid4.class).lookupAll().isEmpty(), true); assertEquals(ExtendedEnum.of(SampleInvalid5.class).lookupAll().isEmpty(), true); assertEquals(ExtendedEnum.of(SampleInvalid6.class).lookupAll().isEmpty(), true); assertEquals(ExtendedEnum.of(SampleInvalid7.class).lookupAll().isEmpty(), true); } finally { logger.setLevel(level); } } }