/** * Copyright © 2010-2014 Nokia * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jsonschema2pojo; import static org.apache.commons.lang3.StringUtils.*; import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; import static org.mockito.Mockito.*; import java.net.URI; import java.net.URISyntaxException; import org.junit.Test; import com.sun.codemodel.JDefinedClass; import com.sun.codemodel.JType; public class SchemaStoreTest { @Test public void createWithAbsolutePath() throws URISyntaxException { URI schemaUri = getClass().getResource("/schema/address.json").toURI(); Schema schema = new SchemaStore().create(schemaUri, "#/."); assertThat(schema, is(notNullValue())); assertThat(schema.getId(), is(equalTo(schemaUri))); assertThat(schema.getContent().has("description"), is(true)); assertThat(schema.getContent().get("description").asText(), is(equalTo("An Address following the convention of http://microformats.org/wiki/hcard"))); } @Test public void createWithRelativePath() throws URISyntaxException { URI addressSchemaUri = getClass().getResource("/schema/address.json").toURI(); SchemaStore schemaStore = new SchemaStore(); Schema addressSchema = schemaStore.create(addressSchemaUri, "#/."); Schema enumSchema = schemaStore.create(addressSchema, "enum.json", "#/."); String expectedUri = removeEnd(addressSchemaUri.toString(), "address.json") + "enum.json"; assertThat(enumSchema, is(notNullValue())); assertThat(enumSchema.getId(), is(equalTo(URI.create(expectedUri)))); assertThat(enumSchema.getContent().has("enum"), is(true)); } @Test public void createWithSelfRef() throws URISyntaxException { URI schemaUri = getClass().getResource("/schema/address.json").toURI(); SchemaStore schemaStore = new SchemaStore(); Schema addressSchema = schemaStore.create(schemaUri, "#/."); Schema selfRefSchema = schemaStore.create(addressSchema, "#", "#/."); assertThat(addressSchema, is(sameInstance(selfRefSchema))); } @Test public void createWithEmbeddedSelfRef() throws URISyntaxException { URI schemaUri = getClass().getResource("/schema/embeddedRef.json").toURI(); SchemaStore schemaStore = new SchemaStore(); Schema topSchema = schemaStore.create(schemaUri, "#/."); Schema embeddedSchema = schemaStore.create(topSchema, "#/definitions/embedded", "#/."); Schema selfRefSchema = schemaStore.create(embeddedSchema, "#", "#/."); assertThat(topSchema, is(sameInstance(selfRefSchema))); } @Test public void createWithFragmentResolution() throws URISyntaxException { URI addressSchemaUri = getClass().getResource("/schema/address.json").toURI(); SchemaStore schemaStore = new SchemaStore(); Schema addressSchema = schemaStore.create(addressSchemaUri, "#/."); Schema innerSchema = schemaStore.create(addressSchema, "#/properties/post-office-box", "#/."); String expectedUri = addressSchemaUri.toString() + "#/properties/post-office-box"; assertThat(innerSchema, is(notNullValue())); assertThat(innerSchema.getId(), is(equalTo(URI.create(expectedUri)))); assertThat(innerSchema.getContent().has("type"), is(true)); assertThat(innerSchema.getContent().get("type").asText(), is("string")); } @Test public void schemaAlreadyReadIsReused() throws URISyntaxException { URI schemaUri = getClass().getResource("/schema/address.json").toURI(); SchemaStore schemaStore = new SchemaStore(); Schema schema1 = schemaStore.create(schemaUri, "#/."); Schema schema2 = schemaStore.create(schemaUri, "#/."); assertThat(schema1, is(sameInstance(schema2))); } @Test public void setIfEmptyOnlySetsIfEmpty() throws URISyntaxException { JType firstClass = mock(JDefinedClass.class); JType secondClass = mock(JDefinedClass.class); URI schemaUri = getClass().getResource("/schema/address.json").toURI(); Schema schema = new SchemaStore().create(schemaUri, "#/."); schema.setJavaTypeIfEmpty(firstClass); assertThat(schema.getJavaType(), is(equalTo(firstClass))); schema.setJavaTypeIfEmpty(secondClass); assertThat(schema.getJavaType(), is(not(equalTo(secondClass)))); } }