private static FieldName parseFieldName(com.palantir.conjure.parser.types.names.FieldName parserFieldName) { FieldName fieldName = FieldName.of(parserFieldName.name()); FieldNameValidator.validate(fieldName); return fieldName; }
@Override public void validate(Set<FieldName> args) { Map<FieldName, FieldName> seenNormalizedToOriginal = Maps.newHashMap(); for (FieldName argName : args) { FieldName normalizedName = FieldNameValidator.toCase(argName, CaseConverter.Case.LOWER_CAMEL_CASE); FieldName seenName = seenNormalizedToOriginal.get(normalizedName); Preconditions.checkArgument(seenName == null, "%s must not contain duplicate field names (modulo case normalization): %s vs %s", classSimpleName, argName.get(), seenName == null ? "" : seenName.get()); seenNormalizedToOriginal.put(normalizedName, argName); } }
@Test public void capitalize_capture_unused_behavior() throws Exception { assertThat(FieldNameValidator.capitalize(FieldName.of("my-variant"))).isEqualTo("My-variant"); assertThat(FieldNameValidator.capitalize(FieldName.of("my_variant"))).isEqualTo("My_variant"); } }
/** Converts this {@link FieldName} to a {@link FieldName} with the given case. */ public static FieldName toCase(FieldName fieldName, CaseConverter.Case targetCase) { return FieldName.of(nameCase(fieldName).convertTo(fieldName.get(), targetCase)); }
@Test public void capitalize_should_turn_camel_case_into_sensible_class_name() throws Exception { assertThat(FieldNameValidator.capitalize(FieldName.of("myVariant"))).isEqualTo("MyVariant"); }
@Test public void testValidNames() { FieldNameValidator.validate(FieldName.of("camel")); FieldNameValidator.validate(FieldName.of("camelCase")); FieldNameValidator.validate(FieldName.of("camelCase1")); FieldNameValidator.validate(FieldName.of("camel1Case2")); FieldNameValidator.validate(FieldName.of("kebab-case")); FieldNameValidator.validate(FieldName.of("kebab1-case123")); FieldNameValidator.validate(FieldName.of("snake_case")); FieldNameValidator.validate(FieldName.of("snake1_case123")); FieldNameValidator.validate(FieldName.of("xCoordinate")); FieldNameValidator.validate(FieldName.of("defaultXPosition")); FieldNameValidator.validate(FieldName.of("defaultX")); }
@Test public void testInvalidNames() throws Exception { for (String invalid : new String[] { "UpperCamelCase", "Upper-Kebab-Case", "Upper_Snake_Case", "ABC", "$special", "special%", "snake_123_case", "kebab-123-case", "mixed-kebab_snake-case", "x", "defaultDNSName" }) { assertThatThrownBy(() -> FieldNameValidator.validate(FieldName.of(invalid))) .isInstanceOf(IllegalArgumentException.class) .hasMessageContaining(String.format( "FieldName \"%s\" must follow one of the following patterns", invalid)); } }