static List<FieldDefinition> parseField( Map<com.palantir.conjure.parser.types.names.FieldName, com.palantir.conjure.parser.types.complex.FieldDefinition> def, ConjureTypeParserVisitor.ReferenceTypeResolver typeResolver) { return def.entrySet().stream().map(entry -> { FieldDefinition fieldDefinition = FieldDefinition.builder() .fieldName(parseFieldName(entry.getKey())) .type(entry.getValue().type().visit(new ConjureTypeParserVisitor(typeResolver))) .docs(entry.getValue().docs().map(Documentation::of)).build(); FieldDefinitionValidator.validate(fieldDefinition); return fieldDefinition; }).collect(Collectors.toList()); }
@Test public void testUnionMemberKeyMustNotBeIllegalJavaIdentifier() { ImmutableList.of("%foo", "foo@").forEach(key -> { FieldDefinition fieldDefinition = FieldDefinition.builder() .fieldName(FieldName.of(key)) .type(Type.primitive(PrimitiveType.STRING)) .build(); assertThatThrownBy(() -> UnionDefinitionValidator.validateAll(UnionDefinition.builder() .union(fieldDefinition) .typeName(TypeName.of("string", "")) .build())) .isInstanceOf(IllegalArgumentException.class) .hasMessageStartingWith( String.format("Union member key must be a valid Java identifier: %s", key)); }); }
private void testUniqueFieldNameValidator(String fieldName1, String fieldName2) { FieldDefinition field1 = FieldDefinition.builder() .fieldName(FieldName.of(fieldName1)) .type(Type.primitive(PrimitiveType.STRING)) .build(); FieldDefinition field2 = FieldDefinition.builder() .fieldName(FieldName.of(fieldName2)) .type(Type.primitive(PrimitiveType.STRING)) .build(); TypeName name = TypeName.of("Foo", "package"); ObjectDefinition definition = ObjectDefinition.builder() .typeName(name) .fields(field1) .fields(field2) .build(); assertThatThrownBy(() -> ObjectDefinitionValidator.validate(definition)) .isInstanceOf(IllegalArgumentException.class) .hasMessage(String.format("ObjectDefinition must not contain duplicate field names " + "(modulo case normalization): %s vs %s", fieldName2, fieldName1)); } }
.fieldName(FieldName.of("fooBar")) .type(Type.primitive(PrimitiveType.STRING)) .build(); FieldDefinition unsafeArg1 = FieldDefinition.builder() .fieldName(FieldName.of("foo-bar")) .type(Type.primitive(PrimitiveType.STRING)) .build(); ErrorDefinition definition1 = ErrorDefinition.builder() .errorName(TypeName.of("Foo", "package")) .fieldName(FieldName.of("foo-bar")) .type(Type.primitive(PrimitiveType.STRING)) .build(); FieldDefinition unsafeArg2 = FieldDefinition.builder() .fieldName(FieldName.of("foo_bar")) .type(Type.primitive(PrimitiveType.STRING)) .build(); ErrorDefinition definition2 = ErrorDefinition.builder() .errorName(TypeName.of("Foo", "package"))
@Test public void testUnionMemberKeyMustNotHaveTrailingUnderscore() { FieldDefinition fieldDefinition = FieldDefinition.builder() .fieldName(FieldName.of("foo_")) .type(Type.primitive(PrimitiveType.STRING)) .build(); assertThatThrownBy(() -> UnionDefinitionValidator.validateAll(UnionDefinition.builder() .union(fieldDefinition) .typeName(TypeName.of("string", "")) .build())) .isInstanceOf(IllegalArgumentException.class) .hasMessageStartingWith("Union member key must not end with an underscore: foo_"); } }
@Test public void testUnionMemberKeyMustNotBeEmpty() { FieldDefinition fieldDefinition = FieldDefinition.builder() .fieldName(FieldName.of("")) .type(Type.primitive(PrimitiveType.STRING)) .build(); assertThatThrownBy(() -> UnionDefinitionValidator.validateAll(UnionDefinition.builder() .union(fieldDefinition) .typeName(TypeName.of("string", "")) .build())) .isInstanceOf(IllegalArgumentException.class) .hasMessageStartingWith("Union member key must not be empty"); }