@Test
public void testRecursiveTypeOkInReference() {
Type referenceType = Type.reference(FOO);
TypeDefinition objectDefinition = TypeDefinition.object(
ObjectDefinition.builder()
.typeName(TypeName.of("Foo", "bar"))
.addAllFields(ImmutableList.of(
FieldDefinition.of(FieldName.of("selfOptional"),
Type.optional(OptionalType.of(Type.reference(FOO))), DOCS),
FieldDefinition.of(FieldName.of("selfMap"),
Type.map(MapType.of(referenceType, referenceType)), DOCS),
FieldDefinition.of(FieldName.of("selfSet"),
Type.set(SetType.of(referenceType)), DOCS),
FieldDefinition.of(FieldName.of("selfList"),
Type.list(ListType.of(referenceType)), DOCS)))
.build());
ConjureDefinition conjureDef = ConjureDefinition.builder()
.version(1)
.types(ImmutableList.of(objectDefinition))
.build();
ConjureDefinitionValidator.NO_RECURSIVE_TYPES.validate(conjureDef);
}