Bug 7182 related: yang-maven-plugin no hard-coded target/ (target-ide/)
[yangtools.git] / yang / yang-maven-plugin / src / test / java / org / opendaylight / yangtools / yang2sources / plugin / GenerateSourcesTest.java
index 2f7a050cb02e2f5dc1ca03412220efd514432b1c..e53c53d6b150b85fd92bebad52d49bfd6541a078 100644 (file)
@@ -7,20 +7,25 @@
  */
 package org.opendaylight.yangtools.yang2sources.plugin;
 
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.*;
-import static org.junit.matchers.JUnitMatchers.containsString;
+import static org.hamcrest.CoreMatchers.containsString;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
 import static org.mockito.Matchers.any;
-import static org.mockito.Mockito.*;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
 
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
 import java.io.File;
 import java.io.IOException;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Map;
 import java.util.Set;
-
-import org.apache.maven.plugin.MojoFailureException;
-import org.apache.maven.plugin.logging.Log;
+import org.apache.maven.model.Build;
+import org.apache.maven.model.Plugin;
 import org.apache.maven.project.MavenProject;
 import org.junit.Before;
 import org.junit.Test;
@@ -29,60 +34,66 @@ import org.mockito.MockitoAnnotations;
 import org.opendaylight.yangtools.yang.model.api.Module;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang2sources.plugin.ConfigArg.CodeGeneratorArg;
-import org.opendaylight.yangtools.yang2sources.plugin.YangToSourcesProcessor.YangProvider;
-import org.opendaylight.yangtools.yang2sources.spi.CodeGenerator;
-
-import com.google.common.collect.Lists;
+import org.opendaylight.yangtools.yang2sources.spi.BasicCodeGenerator;
+import org.opendaylight.yangtools.yang2sources.spi.MavenProjectAware;
 
 public class GenerateSourcesTest {
 
     private String yang;
     private YangToSourcesMojo mojo;
     private File outDir;
+
     @Mock
     private MavenProject project;
 
+    @Mock
+    private Build build;
+
+    @Mock
+    private Plugin plugin;
+
     @Before
-    public void setUp() throws MojoFailureException {
+    public void setUp() throws Exception {
         MockitoAnnotations.initMocks(this);
 
-        yang = new File(getClass().getResource("/yang/mock.yang").getFile()).getParent();
-        outDir = new File("/outputDir");
-        YangProvider mock = mock(YangProvider.class);
-        doNothing().when(mock).addYangsToMETA_INF(any(Log.class), any(MavenProject.class), any(File.class),
-                any(File[].class));
+        this.yang = new File(getClass().getResource("/yang/mock.yang").toURI()).getParent();
+        this.outDir = new File("/outputDir");
+        final YangProvider mock = mock(YangProvider.class);
+        doNothing().when(mock).addYangsToMetaInf(any(MavenProject.class), any(File.class),
+                any(Collection.class));
 
-        YangToSourcesProcessor processor = new YangToSourcesProcessor(mock(Log.class), new File(yang), new File[] {},
-                Lists.newArrayList(new CodeGeneratorArg(GeneratorMock.class.getName(), "outputDir")), project, false,
+        final YangToSourcesProcessor processor = new YangToSourcesProcessor(new File(this.yang), ImmutableList.of(),
+                ImmutableList.of(new CodeGeneratorArg(GeneratorMock.class.getName(), "outputDir")), this.project, false,
                 mock);
-        mojo = new YangToSourcesMojo(processor);
-        doReturn(new File("")).when(project).getBasedir();
-        mojo.project = project;
+        this.mojo = new YangToSourcesMojo(processor);
+        doReturn(new File("")).when(this.project).getBasedir();
+        doReturn("target/").when(this.build).getDirectory();
+        doReturn(this.build).when(this.project).getBuild();
+        doReturn(Collections.emptyList()).when(this.plugin).getDependencies();
+        doReturn(this.plugin).when(this.project).getPlugin(YangToSourcesMojo.PLUGIN_NAME);
+        this.mojo.setProject(this.project);
     }
 
     @Test
     public void test() throws Exception {
-        mojo.execute();
-        assertThat(GeneratorMock.called, is(1));
-        assertThat(GeneratorMock.outputDir, is(outDir));
-        assertThat(GeneratorMock.project, is(project));
-        assertNotNull(GeneratorMock.log);
+        this.mojo.execute();
+        assertEquals(this.outDir, GeneratorMock.outputDir);
+        assertEquals(this.project, GeneratorMock.project);
         assertTrue(GeneratorMock.additionalCfg.isEmpty());
         assertThat(GeneratorMock.resourceBaseDir.toString(), containsString("target" + File.separator
-                + "generated-resources"));
+                + "generated-sources" + File.separator + "spi"));
     }
 
-    public static class GeneratorMock implements CodeGenerator {
+    public static class GeneratorMock implements BasicCodeGenerator, MavenProjectAware {
 
         private static int called = 0;
         private static File outputDir;
-        private static Log log;
         private static Map<String, String> additionalCfg;
         private static File resourceBaseDir;
         private static MavenProject project;
 
         @Override
-        public Collection<File> generateSources(SchemaContext context, File outputBaseDir, Set<Module> currentModules)
+        public Collection<File> generateSources(final SchemaContext context, final File outputBaseDir, final Set<Module> currentModules)
                 throws IOException {
             called++;
             outputDir = outputBaseDir;
@@ -90,23 +101,18 @@ public class GenerateSourcesTest {
         }
 
         @Override
-        public void setLog(Log log) {
-            GeneratorMock.log = log;
-        }
-
-        @Override
-        public void setAdditionalConfig(Map<String, String> additionalConfiguration) {
+        public void setAdditionalConfig(final Map<String, String> additionalConfiguration) {
             GeneratorMock.additionalCfg = additionalConfiguration;
         }
 
         @Override
-        public void setResourceBaseDir(File resourceBaseDir) {
+        public void setResourceBaseDir(final File resourceBaseDir) {
             GeneratorMock.resourceBaseDir = resourceBaseDir;
 
         }
 
         @Override
-        public void setMavenProject(MavenProject project) {
+        public void setMavenProject(final MavenProject project) {
             GeneratorMock.project = project;
         }
     }