### Question:
AvailableValuesAspectDefinition implements LinkkiAspectDefinition { public Aspect<Collection<?>> createAspect(String propertyName, Class<?> valueClass) { AvailableValuesType type = getAvailableValuesType(); if (type == AvailableValuesType.DYNAMIC) { return Aspect.of(NAME); } else if (type == AvailableValuesType.NO_VALUES) { return Aspect.of(NAME, new ArrayList<>()); } else { return Aspect.of(NAME, getValuesDerivedFromDatatype(propertyName, valueClass)); } } AvailableValuesAspectDefinition(AvailableValuesType availableValuesType,
            BiConsumer<C, ListDataProvider<Object>> dataProviderSetter); @Override Handler createUiUpdater(PropertyDispatcher propertyDispatcher, ComponentWrapper componentWrapper); Aspect<Collection<?>> createAspect(String propertyName, Class<?> valueClass); static final String NAME; }### Answer:
@Test public void testCreateAspect_Dynamic() { AvailableValuesAspectDefinition<HasItems<?>> availableValuesAspectDefinition = new AvailableValuesAspectDefinition<>( AvailableValuesType.DYNAMIC, NOP); Aspect<Collection<?>> aspect = availableValuesAspectDefinition.createAspect("foo", TestEnum.class); assertThat(aspect.getName(), is(AvailableValuesAspectDefinition.NAME)); assertThat(aspect.isValuePresent(), is(false)); }
@Test public void testCreateAspect_NoValues() { AvailableValuesAspectDefinition<HasItems<?>> availableValuesAspectDefinition = new AvailableValuesAspectDefinition<>( AvailableValuesType.NO_VALUES, NOP); Aspect<Collection<?>> aspect = availableValuesAspectDefinition.createAspect("foo", TestEnum.class); assertThat(aspect.getName(), is(AvailableValuesAspectDefinition.NAME)); assertThat(aspect.isValuePresent(), is(true)); assertThat(aspect.getValue(), is(empty())); }
@Test public void testCreateAspect_EnumValuesExclNull() { AvailableValuesAspectDefinition<HasItems<?>> availableValuesAspectDefinition = new AvailableValuesAspectDefinition<>( AvailableValuesType.ENUM_VALUES_EXCL_NULL, NOP); Aspect<Collection<?>> aspect = availableValuesAspectDefinition.createAspect("foo", TestEnum.class); assertThat(aspect.getName(), is(AvailableValuesAspectDefinition.NAME)); assertThat(aspect.isValuePresent(), is(true)); assertThat(aspect.getValue(), contains(TestEnum.ONE, TestEnum.TWO, TestEnum.THREE)); }
@Test public void testCreateAspect_EnumValuesInclNull() { AvailableValuesAspectDefinition<HasItems<?>> availableValuesAspectDefinition = new AvailableValuesAspectDefinition<>( AvailableValuesType.ENUM_VALUES_INCL_NULL, NOP); Aspect<Collection<?>> aspect = availableValuesAspectDefinition.createAspect("foo", TestEnum.class); assertThat(aspect.getName(), is(AvailableValuesAspectDefinition.NAME)); assertThat(aspect.isValuePresent(), is(true)); assertThat(aspect.getValue(), contains(null, TestEnum.ONE, TestEnum.TWO, TestEnum.THREE)); }