blob: 2f1d9742c20c5de13d110fccb4a202d09b60f0f4 [file] [log] [blame]
/*
* Copyright 2011 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.gwt.resources.rg;
import com.google.gwt.core.ext.GeneratorContext;
import com.google.gwt.core.ext.UnableToCompleteException;
import com.google.gwt.core.ext.linker.GeneratedResource;
import com.google.gwt.core.ext.typeinfo.JClassType;
import com.google.gwt.core.ext.typeinfo.JMethod;
import com.google.gwt.dev.util.UnitTestTreeLogger;
import com.google.gwt.resources.ext.ResourceContext;
import junit.framework.TestCase;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;
import java.io.ByteArrayOutputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* Tests output functions.
*/
public class CssOutputTestCase extends TestCase {
public void testOutputCssMapArtifact() throws UnableToCompleteException {
UnitTestTreeLogger testLogger = new UnitTestTreeLogger.Builder().createLogger();
ResourceContext mockResourceContext = mock(ResourceContext.class);
Map<JMethod, String> testMap = new HashMap<JMethod, String>();
OutputStream mockOutputStream = mock(OutputStream.class);
GeneratorContext mockGeneratorContext = mock(GeneratorContext.class);
GeneratedResource mockGeneratedResource = mock(GeneratedResource.class);
when(mockResourceContext.getGeneratorContext()).thenReturn(mockGeneratorContext);
when(mockGeneratorContext.tryCreateResource(
testLogger, "cssResource/com.test.Bundle.cssMethod.cssmap")).thenReturn(mockOutputStream);
when(mockGeneratorContext.commitResource(testLogger, mockOutputStream)).thenReturn(
mockGeneratedResource);
JMethod method = mock(JMethod.class);
JClassType bundleType = mock(JClassType.class);
when(method.getEnclosingType()).thenReturn(bundleType);
when(bundleType.getQualifiedSourceName()).thenReturn("com.test.Bundle");
when(method.getName()).thenReturn("cssMethod");
CssResourceGenerator crg = new CssResourceGenerator();
// Test the method
crg.outputCssMapArtifact(testLogger, mockResourceContext, method, testMap);
testLogger.assertCorrectLogEntries();
verify(mockGeneratorContext).tryCreateResource(testLogger, "cssResource/com.test.Bundle.cssMethod.cssmap");
verify(mockGeneratorContext).commitResource(testLogger, mockOutputStream);
verifyNoMoreInteractions(mockGeneratorContext);
}
public void testOutputCssMapArtifactThrowOnTryCreateResource() throws UnableToCompleteException {
UnitTestTreeLogger.Builder builder = new UnitTestTreeLogger.Builder();
builder.expectWarn(
"Could not create resource: cssResource/com.test.Bundle.cssMethod.cssmap", null);
UnitTestTreeLogger testLogger = builder.createLogger();
ResourceContext mockResourceContext = mock(ResourceContext.class);
Map<JMethod, String> testMap = new HashMap<JMethod, String>();
GeneratorContext mockGeneratorContext = mock(GeneratorContext.class);
when(mockResourceContext.getGeneratorContext()).thenReturn(mockGeneratorContext);
when(mockGeneratorContext.tryCreateResource(testLogger,
"cssResource/com.test.Bundle.cssMethod.cssmap")).thenThrow(new UnableToCompleteException());
JMethod method = mock(JMethod.class);
JClassType bundleType = mock(JClassType.class);
when(method.getEnclosingType()).thenReturn(bundleType);
when(bundleType.getQualifiedSourceName()).thenReturn("com.test.Bundle");
when(method.getName()).thenReturn("cssMethod");
CssResourceGenerator crg = new CssResourceGenerator();
crg.outputCssMapArtifact(testLogger, mockResourceContext, method, testMap);
testLogger.assertCorrectLogEntries();
verify(mockGeneratorContext).tryCreateResource(testLogger, "cssResource/com.test.Bundle.cssMethod.cssmap");
verifyNoMoreInteractions(mockGeneratorContext);
}
public void testOutputCssMapArtifactReturnNullOutputString() throws UnableToCompleteException {
UnitTestTreeLogger testLogger = new UnitTestTreeLogger.Builder().createLogger();
ResourceContext mockResourceContext = mock(ResourceContext.class);
Map<JMethod, String> testMap = new HashMap<JMethod, String>();
GeneratorContext mockGeneratorContext = mock(GeneratorContext.class);
when(mockResourceContext.getGeneratorContext()).thenReturn(mockGeneratorContext);
when(mockGeneratorContext.tryCreateResource(
testLogger, "cssResource/com.test.Bundle.cssMethod.cssmap")).thenReturn(null);
JMethod method = mock(JMethod.class);
JClassType bundleType = mock(JClassType.class);
when(method.getEnclosingType()).thenReturn(bundleType);
when(bundleType.getQualifiedSourceName()).thenReturn("com.test.Bundle");
when(method.getName()).thenReturn("cssMethod");
CssResourceGenerator crg = new CssResourceGenerator();
crg.outputCssMapArtifact(testLogger, mockResourceContext, method, testMap);
testLogger.assertCorrectLogEntries();
verify(mockGeneratorContext).tryCreateResource(testLogger,
"cssResource/com.test.Bundle.cssMethod.cssmap");
verifyNoMoreInteractions(mockGeneratorContext);
}
public void testOutputCssMapArtifactThrowOnCommitResource() throws UnableToCompleteException {
UnitTestTreeLogger.Builder builder = new UnitTestTreeLogger.Builder();
builder.expectWarn(
"Error trying to commit artifact: cssResource/com.test.Bundle.cssMethod.cssmap", null);
UnitTestTreeLogger testLogger = builder.createLogger();
ResourceContext mockResourceContext = mock(ResourceContext.class);
Map<JMethod, String> testMap = new HashMap<JMethod, String>();
OutputStream mockOutputStream = mock(OutputStream.class);
GeneratorContext mockGeneratorContext = mock(GeneratorContext.class);
when(mockResourceContext.getGeneratorContext()).thenReturn(mockGeneratorContext);
when(mockGeneratorContext.tryCreateResource(
testLogger, "cssResource/com.test.Bundle.cssMethod.cssmap")).thenReturn(mockOutputStream);
when(mockGeneratorContext.commitResource(testLogger, mockOutputStream)).thenThrow(
new UnableToCompleteException());
JMethod method = mock(JMethod.class);
JClassType bundleType = mock(JClassType.class);
when(method.getEnclosingType()).thenReturn(bundleType);
when(bundleType.getQualifiedSourceName()).thenReturn("com.test.Bundle");
when(method.getName()).thenReturn("cssMethod");
CssResourceGenerator crg = new CssResourceGenerator();
crg.outputCssMapArtifact(testLogger, mockResourceContext, method, testMap);
testLogger.assertCorrectLogEntries();
verify(mockGeneratorContext).tryCreateResource(testLogger, "cssResource/com.test.Bundle.cssMethod.cssmap");
verify(mockGeneratorContext).commitResource(testLogger, mockOutputStream);
}
public void testOutputCssMapArtifactWithTestData() throws UnableToCompleteException {
UnitTestTreeLogger testLogger = new UnitTestTreeLogger.Builder().createLogger();
ResourceContext mockResourceContext = mock(ResourceContext.class);
JMethod mockJMethod1 = mock(JMethod.class);
JMethod mockJMethod2 = mock(JMethod.class);
JMethod mockJMethod3 = mock(JMethod.class);
JClassType mockJClassType1 = mock(JClassType.class);
JClassType mockJClassType2 = mock(JClassType.class);
JClassType mockJClassType3 = mock(JClassType.class);
Map<JMethod, String> testMap = new LinkedHashMap<JMethod, String>();
testMap.put(mockJMethod1, "TESTCSSNAME1");
testMap.put(mockJMethod2, "TESTCSSNAME2");
testMap.put(mockJMethod3, "TESTCSSNAME3");
ByteArrayOutputStream testOutputStream = new ByteArrayOutputStream();
GeneratorContext mockGeneratorContext = mock(GeneratorContext.class);
GeneratedResource mockGeneratedResource = mock(GeneratedResource.class);
when(mockResourceContext.getGeneratorContext()).thenReturn(mockGeneratorContext);
when(mockGeneratorContext.tryCreateResource(
testLogger, "cssResource/com.test.Bundle.cssMethod.cssmap")).thenReturn(testOutputStream);
when(mockJMethod1.getEnclosingType()).thenReturn(mockJClassType1);
when(mockJClassType1.getQualifiedSourceName()).thenReturn("test.class.type.1");
when(mockJMethod1.getName()).thenReturn("basename1");
when(mockJMethod2.getEnclosingType()).thenReturn(mockJClassType2);
when(mockJClassType2.getQualifiedSourceName()).thenReturn("test.class.type.2");
when(mockJMethod2.getName()).thenReturn("basename2");
when(mockJMethod3.getEnclosingType()).thenReturn(mockJClassType3);
when(mockJClassType3.getQualifiedSourceName()).thenReturn("test.class.type.3");
when(mockJMethod3.getName()).thenReturn("basename3");
when(mockGeneratorContext.commitResource(testLogger, testOutputStream)).thenReturn(
mockGeneratedResource);
JMethod method = mock(JMethod.class);
JClassType bundleType = mock(JClassType.class);
when(method.getEnclosingType()).thenReturn(bundleType);
when(bundleType.getQualifiedSourceName()).thenReturn("com.test.Bundle");
when(method.getName()).thenReturn("cssMethod");
CssResourceGenerator crg = new CssResourceGenerator();
crg.outputCssMapArtifact(testLogger, mockResourceContext, method, testMap);
String expectedOutput = "test-class-type-1-basename1,TESTCSSNAME1\n" +
"test-class-type-2-basename2,TESTCSSNAME2\n" +
"test-class-type-3-basename3,TESTCSSNAME3\n";
assertEquals(expectedOutput, testOutputStream.toString());
testLogger.assertCorrectLogEntries();
verify(mockGeneratorContext).tryCreateResource(testLogger, "cssResource/com.test.Bundle.cssMethod.cssmap");
verify(mockGeneratorContext).commitResource(testLogger, testOutputStream);
}
}