package org.jooby.raml;
import static org.junit.Assert.assertEquals;
import java.lang.reflect.Type;
import java.time.LocalDate;
import java.util.Date;
import java.util.Optional;
import org.jooby.Upload;
import org.jooby.internal.raml.RamlType;
import org.junit.Test;
import com.google.inject.util.Types;
public class RamlTypeTest {
@Test
public void scalar() {
assertEquals("type: boolean", RamlType.parse(boolean.class).toString());
assertEquals("type: boolean", RamlType.parse(Boolean.class).toString());
assertEquals("type: integer", RamlType.parse(int.class).toString());
assertEquals("type: integer", RamlType.parse(Integer.class).toString());
assertEquals("type: number", RamlType.parse(double.class).toString());
assertEquals("type: number", RamlType.parse(double.class).toString());
assertEquals("type: string", RamlType.parse(String.class).toString());
assertEquals("type: string", RamlType.parse(char.class).toString());
assertEquals("type: integer\nrequired: false", RamlType.parse(optional(Integer.class)).toString());
assertEquals("type: date", RamlType.parse(Date.class).toString());
assertEquals("type: date", RamlType.parse(LocalDate.class).toString());
}
@Test
public void file() {
assertEquals("type: file", RamlType.parse(Upload.class).toString());
}
@Test
public void enums() {
assertEquals("Freq:\n" +
" type: string\n" +
" enum: [DAILY, WEEKLY]", RamlType.parse(Freq.class).toString());
}
@Test
public void array() {
assertEquals("type: integer[]", RamlType.parse(Types.listOf(Integer.class)).toString());
assertEquals("type: string[]", RamlType.parse(Types.listOf(String.class)).toString());
assertEquals("type: Person[]", RamlType.parse(Types.listOf(Person.class)).toString());
assertEquals("type: Person[]\nuniqueItems: true", RamlType.parse(Types.setOf(Person.class)).toString());
}
@Test
public void object() {
assertEquals("Person:\n" +
" type: object\n" +
" properties:\n" +
" name:\n" +
" type: string\n" +
" parent:\n" +
" type: Person\n" +
" children:\n" +
" type: Person[]\n" +
" age:\n" +
" type: integer\n" +
" required: false", RamlType.parse(Person.class).toString());
}
private Type optional(final Class<?> type) {
return Types.newParameterizedType(Optional.class, type);
}
}