/**
*
*/
package com.google.gwt.chrome.crx.linker.emiter;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import com.google.gwt.chrome.crx.client.GwtContentScript;
import com.google.gwt.core.ext.GeneratorContext;
import com.google.gwt.core.ext.TreeLogger;
import com.google.gwt.core.ext.UnableToCompleteException;
import com.google.gwt.core.ext.typeinfo.JClassType;
import com.google.gwt.core.ext.typeinfo.JPackage;
import com.google.gwt.dev.cfg.ModuleDef;
/**
* @author webdizz
*
*/
public class GwtContentScriptEmiterTest {
@Mock
private TreeLogger logger;
@Mock
private GeneratorContext context;
@Mock
private JClassType userType;
@Mock
private ModuleDefinitionLoader definitionLoader;
@Mock
private GwtContentScript.ManifestInfo spec;
@Mock
private ModuleDef moduleDef;
private static final String MODULE_NAME = "com.gwt.contentscript.GwtContentScriptModule";
@Before
public void setUp() throws UnableToCompleteException {
MockitoAnnotations.initMocks(this);
when(userType.getSimpleSourceName()).thenReturn(Emiter.GWT_CONTENTSCRIPT_USER_TYPE);
when(userType.getQualifiedSourceName()).thenReturn(Emiter.GWT_CONTENTSCRIPT_USER_TYPE);
JPackage jpackage = mock(JPackage.class);
when(userType.getPackage()).thenReturn(jpackage);
when(userType.getAnnotation(GwtContentScript.ManifestInfo.class)).thenReturn(spec);
when(spec.module()).thenReturn(MODULE_NAME);
when(definitionLoader.loadModule(logger, MODULE_NAME)).thenReturn(moduleDef);
}
@Test(expected = UnableToCompleteException.class)
public void shouldThrowUnableToCompleteExceptionArtifactWithoutManifestAnnotation()
throws UnableToCompleteException {
when(userType.getAnnotation(GwtContentScript.ManifestInfo.class)).thenReturn(null);
invokeCodeEmition();
}
@Test(expected = UnableToCompleteException.class)
public void shouldThrowUnableToCompleteExceptionIfModuleIsEmpty() throws UnableToCompleteException {
when(spec.module()).thenReturn("");
invokeCodeEmition();
}
@Test(expected = UnableToCompleteException.class)
public void shouldThrowUnableToCompleteExceptionIfModuleWasNotFound() throws UnableToCompleteException {
when(spec.module()).thenReturn(MODULE_NAME + "wrong_path");
invokeCodeEmition();
}
@Test(expected = UnableToCompleteException.class)
public void shouldThrowUnableToCompleteExceptionIfModuleWasNotLoaded() throws UnableToCompleteException {
when(definitionLoader.loadModule(logger, MODULE_NAME)).thenReturn(null);
invokeCodeEmition();
}
@Test(expected = UnableToCompleteException.class)
public void shouldThrowUnableToCompleteExceptionIfGeneratedFileCannotBeFined() throws UnableToCompleteException {
invokeCodeEmition();
}
protected void invokeCodeEmition() throws UnableToCompleteException {
Emiter emiter = new GwtContentScriptEmiter(definitionLoader);
emiter.emit(logger, context, userType, Emiter.GWT_CONTENTSCRIPT_USER_TYPE);
}
}