/* * 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); } }