private static EnumValueDefinition parseEnumValue( com.palantir.conjure.parser.types.complex.EnumValueDefinition def) { EnumValueDefinition enumValue = EnumValueDefinition.builder() .value(def.value()) .docs(def.docs().map(Documentation::of)) .build(); EnumValueDefinitionValidator.validateAll(enumValue); return enumValue; }
@Test public void testUnknownValueNotUsed() { for (String value : new String[] { "UNKNOWN", "Unknown" }) { assertThatThrownBy(() -> EnumValueDefinitionValidator .validateAll(EnumValueDefinition.builder().value(value).build())) .isInstanceOf(IllegalArgumentException.class) .hasMessage("UNKNOWN is a reserved enumeration value and cannot be used in an EnumValueDefinition"); } }
@Test @SuppressWarnings("CheckReturnValue") public void testFormat() { EnumValueDefinitionValidator.validateAll(EnumValueDefinition.builder().value("FOO").build()); EnumValueDefinitionValidator.validateAll(EnumValueDefinition.builder().value("FOO_BAR").build()); EnumValueDefinitionValidator.validateAll(EnumValueDefinition.builder().value("FOO_123_BAR").build()); EnumValueDefinitionValidator.validateAll(EnumValueDefinition.builder().value("F12").build()); for (String value : new String[] { "foo", "fooBar", "FOO-BAR", " - a", " - a_b", " - A__B", " - _A", " - A_", "123_FOO" }) { assertThatThrownBy(() -> EnumValueDefinitionValidator.validateAll( EnumValueDefinition.builder().value(value).build())) .isInstanceOf(IllegalArgumentException.class) .hasMessage("Enumeration values must match format [A-Z][A-Z0-9]*(_[A-Z0-9]+)*: %s", value); } } }
@Override public void validate(EnumValueDefinition definition) { Preconditions.checkArgument(!definition.getValue().equalsIgnoreCase("UNKNOWN"), "UNKNOWN is a reserved enumeration value and cannot be used in an %s", EnumValueDefinition.class.getSimpleName()); } }
@Test public void testUniqueEnumValues() { EnumDefinition.Builder definition = EnumDefinition.builder() .typeName(TypeName.of("Foo", "package")) .values(EnumValueDefinition.builder().value("FOO").build()) .values(EnumValueDefinition.builder().value("FOO").build()); assertThatThrownBy(() -> EnumDefinitionValidator.validateAll(definition.build())) .isInstanceOf(IllegalArgumentException.class) .hasMessage("Cannot declare a EnumTypeDefinition with duplicate enum values: FOO"); } }
@Override public void validate(EnumDefinition definition) { Set<String> enumValues = Sets.newHashSet(); for (EnumValueDefinition valueDef : definition.getValues()) { boolean unseen = enumValues.add(valueDef.getValue()); Preconditions.checkArgument(unseen, "Cannot declare a %s with duplicate enum values: %s", EnumTypeDefinition.class.getSimpleName(), valueDef.getValue()); } } }