Skip to content
This repository has been archived by the owner on May 26, 2020. It is now read-only.

Commit

Permalink
Add generator util for IT tests
Browse files Browse the repository at this point in the history
  • Loading branch information
mapingo committed Sep 8, 2017
1 parent 0872e97 commit 1b96a73
Show file tree
Hide file tree
Showing 14 changed files with 230 additions and 619 deletions.
Original file line number Diff line number Diff line change
@@ -1,48 +1,26 @@
package uk.gov.justice.generation.pojo.integration.test;

import static com.jayway.jsonassert.JsonAssert.with;
import static java.util.Collections.emptyList;
import static org.apache.commons.io.FileUtils.cleanDirectory;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;

import uk.gov.justice.generation.io.files.loader.SchemaLoader;
import uk.gov.justice.generation.pojo.core.GenerationContext;
import uk.gov.justice.generation.pojo.core.NameGenerator;
import uk.gov.justice.generation.pojo.generators.JavaGeneratorFactory;
import uk.gov.justice.generation.pojo.generators.plugin.DefaultPluginProvider;
import uk.gov.justice.generation.pojo.generators.plugin.PluginProvider;
import uk.gov.justice.generation.pojo.integration.utils.ClassCompiler;
import uk.gov.justice.generation.pojo.integration.utils.GeneratorFactoryBuilder;
import uk.gov.justice.generation.pojo.visitable.Visitable;
import uk.gov.justice.generation.pojo.visitable.VisitableFactory;
import uk.gov.justice.generation.pojo.visitable.acceptor.DefaultAcceptorService;
import uk.gov.justice.generation.pojo.visitor.DefaultDefinitionFactory;
import uk.gov.justice.generation.pojo.visitor.DefinitionBuilderVisitor;
import uk.gov.justice.generation.pojo.write.SourceWriter;
import uk.gov.justice.generation.pojo.integration.utils.GeneratorUtil;
import uk.gov.justice.services.common.converter.jackson.ObjectMapperProducer;

import java.io.File;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

import com.fasterxml.jackson.databind.ObjectMapper;
import org.everit.json.schema.Schema;
import org.junit.Before;
import org.junit.Test;

public class AdditionalPropertiesIT {

private final SourceWriter sourceWriter = new SourceWriter();
private final ClassCompiler classCompiler = new ClassCompiler();

private final NameGenerator rootFieldNameGenerator = new NameGenerator();
private final SchemaLoader schemaLoader = new SchemaLoader();
private final ObjectMapper objectMapper = new ObjectMapperProducer().objectMapper();
private final DefaultDefinitionFactory definitionFactory = new DefaultDefinitionFactory();
private final GeneratorFactoryBuilder generatorFactoryBuilder = new GeneratorFactoryBuilder();
private final GeneratorUtil generatorUtil = new GeneratorUtil();

private File sourceOutputDirectory;
private File classesOutputDirectory;
Expand All @@ -64,37 +42,13 @@ public void setup() throws Exception {
@Test
public void shouldGenerateAClassWithAMapForAdditionalPropertiesIfAdditionalPropertiesIsTrue() throws Exception {
final File jsonSchemaFile = new File("src/test/resources/schemas/additional-properties.json");
final Schema schema = schemaLoader.loadFrom(jsonSchemaFile);
final String fieldName = rootFieldNameGenerator.rootFieldNameFrom(jsonSchemaFile);
final String packageName = "uk.gov.justice.pojo.additional.properties";
final GenerationContext generationContext = new GenerationContext(
sourceOutputDirectory.toPath(),
packageName,
jsonSchemaFile.getName(),
emptyList());

final DefinitionBuilderVisitor definitionBuilderVisitor = new DefinitionBuilderVisitor(definitionFactory);
final VisitableFactory visitableFactory = new VisitableFactory();
final Visitable visitableSchema = visitableFactory.createWith(fieldName, schema, new DefaultAcceptorService(visitableFactory));

visitableSchema.accept(definitionBuilderVisitor);

final List<Class<?>> newClasses = new ArrayList<>();

final PluginProvider pluginProvider = new DefaultPluginProvider();

final JavaGeneratorFactory javaGeneratorFactory = generatorFactoryBuilder
.withGenerationContext(generationContext)
.withPluginProvider(pluginProvider)
.build();

javaGeneratorFactory
.createClassGeneratorsFor(definitionBuilderVisitor.getDefinitions(), pluginProvider, generationContext)
.forEach(classGeneratable -> {
sourceWriter.write(classGeneratable, generationContext);
final Class<?> newClass = classCompiler.compile(classGeneratable, generationContext, classesOutputDirectory);
newClasses.add(newClass);
});
final List<Class<?>> newClasses = generatorUtil.generateAndCompileJavaSource(
jsonSchemaFile,
packageName,
sourceOutputDirectory.toPath(),
classesOutputDirectory.toPath());

assertThat(newClasses.size(), is(1));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,30 +2,16 @@

import static com.jayway.jsonassert.JsonAssert.with;
import static java.util.Arrays.asList;
import static java.util.Collections.emptyList;
import static org.apache.commons.io.FileUtils.cleanDirectory;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;

import uk.gov.justice.generation.io.files.loader.SchemaLoader;
import uk.gov.justice.generation.pojo.core.GenerationContext;
import uk.gov.justice.generation.pojo.core.NameGenerator;
import uk.gov.justice.generation.pojo.generators.JavaGeneratorFactory;
import uk.gov.justice.generation.pojo.generators.plugin.DefaultPluginProvider;
import uk.gov.justice.generation.pojo.generators.plugin.PluginProvider;
import uk.gov.justice.generation.pojo.integration.utils.ClassCompiler;
import uk.gov.justice.generation.pojo.integration.utils.GeneratorFactoryBuilder;
import uk.gov.justice.generation.pojo.visitable.Visitable;
import uk.gov.justice.generation.pojo.visitable.VisitableFactory;
import uk.gov.justice.generation.pojo.visitable.acceptor.DefaultAcceptorService;
import uk.gov.justice.generation.pojo.visitor.DefaultDefinitionFactory;
import uk.gov.justice.generation.pojo.visitor.DefinitionBuilderVisitor;
import uk.gov.justice.generation.pojo.write.SourceWriter;
import uk.gov.justice.generation.pojo.integration.utils.GeneratorUtil;
import uk.gov.justice.services.common.converter.jackson.ObjectMapperProducer;

import java.io.File;
import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.List;

import com.fasterxml.jackson.databind.ObjectMapper;
Expand All @@ -36,14 +22,9 @@

public class ArrayIT {

private final SourceWriter sourceWriter = new SourceWriter();
private final ClassCompiler classCompiler = new ClassCompiler();

private final NameGenerator rootFieldNameGenerator = new NameGenerator();
private final SchemaLoader schemaLoader = new SchemaLoader();
private final ObjectMapper objectMapper = new ObjectMapperProducer().objectMapper();
private final DefaultDefinitionFactory definitionFactory = new DefaultDefinitionFactory();
private final GeneratorFactoryBuilder generatorFactoryBuilder = new GeneratorFactoryBuilder();
private final SchemaLoader schemaLoader = new SchemaLoader();
private final GeneratorUtil generatorUtil = new GeneratorUtil();

private File sourceOutputDirectory;
private File classesOutputDirectory;
Expand All @@ -66,37 +47,15 @@ public void setup() throws Exception {
public void shouldAnArraySchemaDocumentWithAnArrayOfItemSchemas() throws Exception {

final File jsonSchemaFile = new File("src/test/resources/schemas/example.recipe-added.json");
final Schema schema = schemaLoader.loadFrom(jsonSchemaFile);
final String fieldName = rootFieldNameGenerator.rootFieldNameFrom(jsonSchemaFile);
final String packageName = "uk.gov.justice.pojo.arrays";
final GenerationContext generationContext = new GenerationContext(
sourceOutputDirectory.toPath(),
packageName,
jsonSchemaFile.getName(),
emptyList());

final DefinitionBuilderVisitor definitionBuilderVisitor = new DefinitionBuilderVisitor(definitionFactory);
final VisitableFactory visitableFactory = new VisitableFactory();
final Visitable visitableSchema = visitableFactory.createWith(fieldName, schema, new DefaultAcceptorService(visitableFactory));

visitableSchema.accept(definitionBuilderVisitor);

final List<Class<?>> newClasses = new ArrayList<>();

final PluginProvider pluginProvider = new DefaultPluginProvider();

final JavaGeneratorFactory javaGeneratorFactory = generatorFactoryBuilder
.withGenerationContext(generationContext)
.withPluginProvider(pluginProvider)
.build();
final Schema schema = schemaLoader.loadFrom(jsonSchemaFile);

javaGeneratorFactory
.createClassGeneratorsFor(definitionBuilderVisitor.getDefinitions(), pluginProvider, generationContext)
.forEach(classGeneratable -> {
sourceWriter.write(classGeneratable, generationContext);
final Class<?> newClass = classCompiler.compile(classGeneratable, generationContext, classesOutputDirectory);
newClasses.add(newClass);
});
final List<Class<?>> newClasses = generatorUtil.generateAndCompileJavaSource(
jsonSchemaFile,
packageName,
schema,
sourceOutputDirectory.toPath(),
classesOutputDirectory.toPath());

assertThat(newClasses.size(), is(2));
assertThat(newClasses.get(0).getSimpleName(), is("Ingredients"));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,29 +1,15 @@
package uk.gov.justice.generation.pojo.integration.test;

import static com.jayway.jsonassert.JsonAssert.with;
import static java.util.Collections.emptyList;
import static org.apache.commons.io.FileUtils.cleanDirectory;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;

import uk.gov.justice.generation.io.files.loader.SchemaLoader;
import uk.gov.justice.generation.pojo.core.GenerationContext;
import uk.gov.justice.generation.pojo.core.NameGenerator;
import uk.gov.justice.generation.pojo.generators.JavaGeneratorFactory;
import uk.gov.justice.generation.pojo.generators.plugin.DefaultPluginProvider;
import uk.gov.justice.generation.pojo.generators.plugin.PluginProvider;
import uk.gov.justice.generation.pojo.integration.utils.ClassCompiler;
import uk.gov.justice.generation.pojo.integration.utils.GeneratorFactoryBuilder;
import uk.gov.justice.generation.pojo.visitable.Visitable;
import uk.gov.justice.generation.pojo.visitable.VisitableFactory;
import uk.gov.justice.generation.pojo.visitable.acceptor.DefaultAcceptorService;
import uk.gov.justice.generation.pojo.visitor.DefaultDefinitionFactory;
import uk.gov.justice.generation.pojo.visitor.DefinitionBuilderVisitor;
import uk.gov.justice.generation.pojo.write.SourceWriter;
import uk.gov.justice.generation.pojo.integration.utils.GeneratorUtil;
import uk.gov.justice.services.common.converter.jackson.ObjectMapperProducer;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import com.fasterxml.jackson.databind.ObjectMapper;
Expand All @@ -34,14 +20,9 @@

public class BuilderIT {

private final SourceWriter sourceWriter = new SourceWriter();
private final ClassCompiler classCompiler = new ClassCompiler();

private final NameGenerator rootFieldNameGenerator = new NameGenerator();
private final SchemaLoader schemaLoader = new SchemaLoader();
private final ObjectMapper objectMapper = new ObjectMapperProducer().objectMapper();
private final DefaultDefinitionFactory definitionFactory = new DefaultDefinitionFactory();
private final GeneratorFactoryBuilder generatorFactoryBuilder = new GeneratorFactoryBuilder();
private final GeneratorUtil generatorUtil = new GeneratorUtil();

private File sourceOutputDirectory;
private File classesOutputDirectory;
Expand All @@ -63,37 +44,15 @@ public void setup() throws Exception {
@Test
public void shouldGenerateAClassWithAMapForAdditionalPropertiesIfAdditionalPropertiesIsTrue() throws Exception {
final File jsonSchemaFile = new File("src/test/resources/schemas/student.json");
final Schema schema = schemaLoader.loadFrom(jsonSchemaFile);
final String fieldName = rootFieldNameGenerator.rootFieldNameFrom(jsonSchemaFile);
final String packageName = "uk.gov.justice.pojo.builder.student";
final GenerationContext generationContext = new GenerationContext(
sourceOutputDirectory.toPath(),
packageName,
jsonSchemaFile.getName(),
emptyList());

final DefinitionBuilderVisitor definitionBuilderVisitor = new DefinitionBuilderVisitor(definitionFactory);
final VisitableFactory visitableFactory = new VisitableFactory();
final Visitable visitableSchema = visitableFactory.createWith(fieldName, schema, new DefaultAcceptorService(visitableFactory));

visitableSchema.accept(definitionBuilderVisitor);

final List<Class<?>> newClasses = new ArrayList<>();

final PluginProvider pluginProvider = new DefaultPluginProvider();

final JavaGeneratorFactory javaGeneratorFactory = generatorFactoryBuilder
.withGenerationContext(generationContext)
.withPluginProvider(pluginProvider)
.build();
final Schema schema = schemaLoader.loadFrom(jsonSchemaFile);

javaGeneratorFactory
.createClassGeneratorsFor(definitionBuilderVisitor.getDefinitions(), pluginProvider, generationContext)
.forEach(classGeneratable -> {
sourceWriter.write(classGeneratable, generationContext);
final Class<?> newClass = classCompiler.compile(classGeneratable, generationContext, classesOutputDirectory);
newClasses.add(newClass);
});
final List<Class<?>> newClasses = generatorUtil.generateAndCompileJavaSource(
jsonSchemaFile,
packageName,
schema,
sourceOutputDirectory.toPath(),
classesOutputDirectory.toPath());

assertThat(newClasses.size(), is(1));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,17 @@

import static com.jayway.jsonassert.JsonAssert.with;
import static java.util.Arrays.asList;
import static java.util.Collections.emptyList;
import static java.util.stream.Collectors.toList;
import static org.apache.commons.io.FileUtils.cleanDirectory;
import static org.hamcrest.CoreMatchers.is;
import static uk.gov.justice.generation.pojo.dom.DefinitionType.ARRAY;
import static uk.gov.justice.generation.pojo.dom.DefinitionType.CLASS;
import static uk.gov.justice.generation.pojo.dom.DefinitionType.NUMBER;
import static uk.gov.justice.generation.pojo.dom.DefinitionType.STRING;

import uk.gov.justice.generation.pojo.core.GenerationContext;
import uk.gov.justice.generation.pojo.dom.ClassDefinition;
import uk.gov.justice.generation.pojo.dom.FieldDefinition;
import uk.gov.justice.generation.pojo.dom.ReferenceDefinition;
import uk.gov.justice.generation.pojo.generators.JavaGeneratorFactory;
import uk.gov.justice.generation.pojo.generators.plugin.DefaultPluginProvider;
import uk.gov.justice.generation.pojo.generators.plugin.PluginProvider;
import uk.gov.justice.generation.pojo.integration.utils.ClassCompiler;
import uk.gov.justice.generation.pojo.integration.utils.GeneratorFactoryBuilder;
import uk.gov.justice.generation.pojo.write.SourceWriter;
import uk.gov.justice.generation.pojo.integration.utils.GeneratorUtil;
import uk.gov.justice.services.common.converter.ZonedDateTimes;
import uk.gov.justice.services.common.converter.jackson.ObjectMapperProducer;

Expand All @@ -39,11 +31,8 @@
@RunWith(MockitoJUnitRunner.class)
public class ClassGeneratorIT {

private final SourceWriter sourceWriter = new SourceWriter();
private final ClassCompiler classCompiler = new ClassCompiler();

private final ObjectMapper objectMapper = new ObjectMapperProducer().objectMapper();
private final GeneratorFactoryBuilder generatorFactoryBuilder = new GeneratorFactoryBuilder();
private final GeneratorUtil generatorUtil = new GeneratorUtil();

private File sourceOutputDirectory;
private File classesOutputDirectory;
Expand All @@ -68,28 +57,15 @@ public void shouldGenerateJavaClassSourceCode() throws Exception {
final String packageName = "uk.gov.justice.pojo.classgenerator";
final String sourceFilename = "source.json";

final GenerationContext generationContext = new GenerationContext(
sourceOutputDirectory.toPath(),
packageName,
sourceFilename,
emptyList());
final ClassDefinition addressDefinition = addressDefinition();
final ClassDefinition employeeDefinition = employeeDefinition(addressDefinition);

final PluginProvider pluginProvider = new DefaultPluginProvider();

final JavaGeneratorFactory javaGeneratorFactory = generatorFactoryBuilder
.withGenerationContext(generationContext)
.withPluginProvider(pluginProvider)
.build();

final List<? extends Class<?>> classes = javaGeneratorFactory
.createClassGeneratorsFor(asList(addressDefinition, employeeDefinition), pluginProvider, generationContext)
.stream()
.map(classGenerator -> {
sourceWriter.write(classGenerator, generationContext);
return classCompiler.compile(classGenerator, generationContext, classesOutputDirectory);
}).collect(toList());
final List<Class<?>> classes = generatorUtil.generateAndCompileFromDefinitions(
sourceFilename,
packageName,
sourceOutputDirectory.toPath(),
classesOutputDirectory.toPath(),
asList(addressDefinition, employeeDefinition));

final String firstName = "firstName";
final String lastName = "lastName";
Expand Down
Loading

0 comments on commit 1b96a73

Please sign in to comment.