package org.dddlib.codegen.api; import com.google.common.collect.Sets; import org.dddlib.codegen.classdef.ClassDefinition; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import java.io.File; import java.io.InputStreamReader; import java.io.Reader; import java.util.Collections; import java.util.Set; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.*; /** * Created by yyang on 2016/12/23. */ public class DomainClassGeneratorTest { @Mock private DefinitionParser parser; @Mock private ClassGenerator generator; @Mock private ClassDefinition definition1; @Mock private ClassDefinition definition2; @Mock private JavaSourceFile sourceFile1; @Mock private JavaSourceFile sourceFile2; private Set<ClassDefinition> definitions; private Set<JavaSourceFile> sourceFiles; private DomainClassGenerator instance; @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); instance = new DomainClassGenerator(Collections.singleton(parser), generator); definitions = Sets.newHashSet(definition1, definition2); sourceFiles = Sets.newHashSet(sourceFile1, sourceFile2); when(parser.accept("yml")).thenReturn(true); } @Test public void generateFromFile() throws Exception { String filename = getClass().getResource("/sales.yml").getFile(); File file = new File(filename); when(parser.parseFile(file)).thenReturn(definitions); when(generator.generate(definition1)).thenReturn(sourceFile1); when(generator.generate(definition2)).thenReturn(sourceFile2); Set<JavaSourceFile> results = instance.generateFromFile(file); assertThat(results).containsExactlyInAnyOrder(sourceFile1, sourceFile2); } @Test public void generateFromFilename() throws Exception { String filename = getClass().getResource("/sales.yml").getFile(); when(parser.parseFile(filename)).thenReturn(definitions); when(generator.generate(definition1)).thenReturn(sourceFile1); when(generator.generate(definition2)).thenReturn(sourceFile2); Set<JavaSourceFile> results = instance.generateFromFile(filename); assertThat(results).containsExactlyInAnyOrder(sourceFile1, sourceFile2); } @Test public void generateFromClasspath() throws Exception { String filename = "/sales.yml"; when(parser.parseClasspath(filename)).thenReturn(definitions); when(generator.generate(definition1)).thenReturn(sourceFile1); when(generator.generate(definition2)).thenReturn(sourceFile2); Set<JavaSourceFile> results = instance.generateFromClasspath(filename); assertThat(results).containsExactlyInAnyOrder(sourceFile1, sourceFile2); } @Test public void generateFromReader() throws Exception { String filename = "/sales.yml"; Reader in = new InputStreamReader(getClass().getResourceAsStream(filename)); when(parser.parseReader(in)).thenReturn(definitions); when(generator.generate(definition1)).thenReturn(sourceFile1); when(generator.generate(definition2)).thenReturn(sourceFile2); Set<JavaSourceFile> results = instance.generateFromReader(in, "yml"); assertThat(results).containsExactlyInAnyOrder(sourceFile1, sourceFile2); } }