package com.github.jknack.antlr4ide.generator; import static com.google.common.collect.Sets.newHashSet; import static org.easymock.EasyMock.capture; import static org.easymock.EasyMock.createMock; import static org.easymock.EasyMock.eq; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.replay; import static org.easymock.EasyMock.verify; import static org.junit.Assert.assertNotNull; import java.util.Set; import org.easymock.Capture; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.debug.core.ILaunchConfigurationType; import org.eclipse.debug.core.ILaunchManager; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.xtext.generator.IFileSystemAccess; import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.api.easymock.PowerMock; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import com.github.jknack.antlr4ide.console.Console; import com.github.jknack.antlr4ide.services.GrammarResource; import com.google.common.base.Function; @RunWith(PowerMockRunner.class) @PrepareForTest({Antlr4Generator.class, Jobs.class }) public class Antlr4GeneratorTest { @Test public void doGenerate() throws CoreException { Resource resource = createMock(Resource.class); IFileSystemAccess fsa = createMock(IFileSystemAccess.class); GrammarResource grammarResource = createMock(GrammarResource.class); URI resourceURI = createMock(URI.class); IFile file = createMock(IFile.class); ToolOptionsProvider optionsProvider = createMock(ToolOptionsProvider.class); ToolOptions options = createMock(ToolOptions.class); ILaunchManager launchManager = createMock(ILaunchManager.class); IPath fileFullPath = createMock(IPath.class); ILaunchConfigurationType configType = createMock(ILaunchConfigurationType.class); CodeGeneratorListener listener = createMock(CodeGeneratorListener.class); Set<CodeGeneratorListener> listeners = newHashSet(listener); ToolRunner toolRunner = createMock(ToolRunner.class); Console console = createMock(Console.class); expect(grammarResource.fileFrom(resource)).andReturn(file); expect(optionsProvider.options(file)).andReturn(options); listener.beforeProcess(file, options); toolRunner.run(file, options, console); listener.afterProcess(file, options); Object[] mocks = {resource, fsa, grammarResource, resourceURI, file, optionsProvider, options, fileFullPath, configType, listener, toolRunner, console }; replay(mocks); Antlr4Generator generator = newAntlr4Generator(console, launchManager, listeners, optionsProvider, toolRunner, grammarResource); generator.doGenerate(resource, fsa); verify(mocks); } public Antlr4Generator newAntlr4Generator(final Console console, final ILaunchManager launchManager, final Set<CodeGeneratorListener> listeners, final ToolOptionsProvider optionsProvider, final ToolRunner toolRunner, final GrammarResource grammarResource) { Antlr4Generator generator = new Antlr4Generator(); generator.setGrammarResource(grammarResource); generator.setOptionsProvider(optionsProvider); generator.setListeners(listeners); generator.setToolRunner(toolRunner); generator.setConsole(console); return generator; } @Test public void generate() throws CoreException { GrammarResource grammarResource = createMock(GrammarResource.class); IFile file = createMock(IFile.class); ToolOptionsProvider optionsProvider = createMock(ToolOptionsProvider.class); ToolOptions options = createMock(ToolOptions.class); ILaunchManager launchManager = createMock(ILaunchManager.class); CodeGeneratorListener listener = createMock(CodeGeneratorListener.class); Set<CodeGeneratorListener> listeners = newHashSet(listener); ToolRunner toolRunner = createMock(ToolRunner.class); Console console = createMock(Console.class); expect(file.getName()).andReturn("Test.g4"); listener.beforeProcess(file, options); toolRunner.run(file, options, console); listener.afterProcess(file, options); PowerMock.mockStatic(Jobs.class); Capture<Function<IProgressMonitor, IStatus>> fn = new Capture<Function<IProgressMonitor, IStatus>>(); expect(Jobs.schedule(eq("Generating Test.g4"), capture(fn))).andReturn(null); PowerMock.replay(Jobs.class); Object[] mocks = {file, optionsProvider, options, launchManager, listener, toolRunner, console }; replay(mocks); Antlr4Generator generator = newAntlr4Generator(console, launchManager, listeners, optionsProvider, toolRunner, grammarResource); generator.generate(file, options); assertNotNull(fn.getValue()); fn.getValue().apply(new NullProgressMonitor()); verify(mocks); PowerMock.verify(Jobs.class); } }