Remove yang-maven-plugin interfaces
[yangtools.git] / plugin / yang-maven-plugin / src / test / java / org / opendaylight / yangtools / yang2sources / plugin / AbstractCodeGeneratorTest.java
index ca3153eb2011bc927a17fac3ad4f3bbb7e2a8470..e6faef3ce3fc1158939999bc30e0cf3defa51230 100644 (file)
@@ -8,21 +8,30 @@
 package org.opendaylight.yangtools.yang2sources.plugin;
 
 import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.doNothing;
+import static org.mockito.ArgumentMatchers.anyCollection;
+import static org.mockito.ArgumentMatchers.anyMap;
+import static org.mockito.Mockito.doCallRealMethod;
 import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.lenient;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.mockStatic;
 
-import java.io.File;
+import com.google.common.collect.Iterators;
 import java.io.IOException;
-import java.util.Collection;
-import java.util.Collections;
+import java.util.List;
+import java.util.ServiceLoader;
 import org.apache.maven.model.Build;
 import org.apache.maven.model.Plugin;
 import org.apache.maven.project.MavenProject;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
+import org.mockito.MockedStatic;
 import org.mockito.junit.MockitoJUnitRunner;
+import org.opendaylight.yangtools.plugin.generator.api.FileGenerator;
+import org.opendaylight.yangtools.plugin.generator.api.FileGeneratorException;
+import org.opendaylight.yangtools.plugin.generator.api.FileGeneratorFactory;
 
-@RunWith(MockitoJUnitRunner.StrictStubs.class)
+@RunWith(MockitoJUnitRunner.Silent.class)
 public abstract class AbstractCodeGeneratorTest {
     @Mock
     MavenProject project;
@@ -33,18 +42,62 @@ public abstract class AbstractCodeGeneratorTest {
     @Mock
     private Plugin plugin;
 
-    final YangToSourcesMojo setupMojo(final YangToSourcesProcessor processor) throws IOException {
+    final YangToSourcesMojo setupMojo(final YangToSourcesProcessor processor) {
         doReturn("target/").when(build).getDirectory();
-        doReturn(new File("")).when(project).getBasedir();
+//        doReturn(new File("")).when(project).getBasedir();
         doReturn(build).when(project).getBuild();
 
-        doReturn(Collections.emptyList()).when(plugin).getDependencies();
+        doReturn(List.of()).when(plugin).getDependencies();
         doReturn(plugin).when(project).getPlugin(YangToSourcesMojo.PLUGIN_NAME);
 
-        doNothing().when(yangProvider).addYangsToMetaInf(any(MavenProject.class), any(Collection.class));
+        try {
+            lenient().doNothing().when(yangProvider).addYangsToMetaInf(any(MavenProject.class), anyCollection());
+        } catch (IOException e) {
+            throw new AssertionError(e);
+        }
 
         final YangToSourcesMojo mojo = new YangToSourcesMojo(processor);
         mojo.setProject(project);
         return mojo;
     }
+
+    @SuppressWarnings({ "rawtypes", "checkstyle:illegalCatch" })
+    final void assertMojoExecution(final YangToSourcesProcessor processor, final Prepare prepare, final Verify verify) {
+        try (MockedStatic<ServiceLoader> staticLoader = mockStatic(ServiceLoader.class)) {
+            final FileGenerator generator = mock(FileGenerator.class);
+            doCallRealMethod().when(generator).importResolutionMode();
+
+            final FileGeneratorFactory factory = mock(FileGeneratorFactory.class);
+            doReturn("mockGenerator").when(factory).getIdentifier();
+
+            try {
+                doReturn(generator).when(factory).newFileGenerator(anyMap());
+            } catch (FileGeneratorException e) {
+                throw new AssertionError(e);
+            }
+
+            final ServiceLoader<?> loader = mock(ServiceLoader.class);
+            doReturn(Iterators.singletonIterator(factory)).when(loader).iterator();
+            staticLoader.when(() -> ServiceLoader.load(FileGeneratorFactory.class)).thenReturn(loader);
+
+            final YangToSourcesMojo mojo = setupMojo(processor);
+            try {
+                prepare.prepare(generator);
+                mojo.execute();
+                verify.verify(generator);
+            } catch (Exception e) {
+                throw new AssertionError(e);
+            }
+        }
+    }
+
+    @FunctionalInterface
+    interface Prepare {
+        void prepare(FileGenerator mock) throws Exception;
+    }
+
+    @FunctionalInterface
+    interface Verify {
+        void verify(FileGenerator mock) throws Exception;
+    }
 }