/* * 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 org.easymock.EasyMock; 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 = EasyMock.createMock(ResourceContext.class); Map<JMethod, String> testMap = new HashMap<JMethod, String>(); OutputStream mockOutputStream = EasyMock.createMock(OutputStream.class); GeneratorContext mockGeneratorContext = EasyMock.createMock(GeneratorContext.class); GeneratedResource mockGeneratedResource = EasyMock.createMock(GeneratedResource.class); EasyMock.expect(mockResourceContext.getGeneratorContext()).andReturn(mockGeneratorContext); EasyMock.expectLastCall().times(2); EasyMock.expect(mockGeneratorContext.tryCreateResource( testLogger, "cssResource/com.test.Bundle.cssMethod.cssmap")).andReturn(mockOutputStream); EasyMock.expect(mockGeneratorContext.commitResource(testLogger, mockOutputStream)).andReturn( mockGeneratedResource); JMethod method = EasyMock.createMock(JMethod.class); JClassType bundleType = EasyMock.createMock(JClassType.class); EasyMock.expect(method.getEnclosingType()).andReturn(bundleType); EasyMock.expect(bundleType.getQualifiedSourceName()).andReturn("com.test.Bundle"); EasyMock.expect(method.getName()).andReturn("cssMethod"); EasyMock.replay(mockResourceContext); EasyMock.replay(mockGeneratorContext); EasyMock.replay(method); EasyMock.replay(bundleType); CssResourceGenerator crg = new CssResourceGenerator(); crg.outputCssMapArtifact(testLogger, mockResourceContext, method, testMap); testLogger.assertCorrectLogEntries(); EasyMock.verify(mockResourceContext); EasyMock.verify(mockGeneratorContext); EasyMock.verify(method); EasyMock.verify(bundleType); } 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 = EasyMock.createMock(ResourceContext.class); Map<JMethod, String> testMap = new HashMap<JMethod, String>(); OutputStream mockOutputStream = EasyMock.createMock(OutputStream.class); GeneratorContext mockGeneratorContext = EasyMock.createMock(GeneratorContext.class); GeneratedResource mockGeneratedResource = EasyMock.createMock(GeneratedResource.class); EasyMock.expect(mockResourceContext.getGeneratorContext()).andReturn(mockGeneratorContext); EasyMock.expect(mockGeneratorContext.tryCreateResource(testLogger, "cssResource/com.test.Bundle.cssMethod.cssmap")).andThrow(new UnableToCompleteException()); JMethod method = EasyMock.createMock(JMethod.class); JClassType bundleType = EasyMock.createMock(JClassType.class); EasyMock.expect(method.getEnclosingType()).andReturn(bundleType); EasyMock.expect(bundleType.getQualifiedSourceName()).andReturn("com.test.Bundle"); EasyMock.expect(method.getName()).andReturn("cssMethod"); EasyMock.replay(mockResourceContext); EasyMock.replay(mockGeneratorContext); EasyMock.replay(method); EasyMock.replay(bundleType); CssResourceGenerator crg = new CssResourceGenerator(); crg.outputCssMapArtifact(testLogger, mockResourceContext, method, testMap); testLogger.assertCorrectLogEntries(); EasyMock.verify(mockResourceContext); EasyMock.verify(mockGeneratorContext); EasyMock.verify(method); EasyMock.verify(bundleType); } public void testOutputCssMapArtifactReturnNullOutputString() throws UnableToCompleteException { UnitTestTreeLogger testLogger = new UnitTestTreeLogger.Builder().createLogger(); ResourceContext mockResourceContext = EasyMock.createMock(ResourceContext.class); Map<JMethod, String> testMap = new HashMap<JMethod, String>(); OutputStream mockOutputStream = EasyMock.createMock(OutputStream.class); GeneratorContext mockGeneratorContext = EasyMock.createMock(GeneratorContext.class); GeneratedResource mockGeneratedResource = EasyMock.createMock(GeneratedResource.class); EasyMock.expect(mockResourceContext.getGeneratorContext()).andReturn(mockGeneratorContext); EasyMock.expect(mockGeneratorContext.tryCreateResource( testLogger, "cssResource/com.test.Bundle.cssMethod.cssmap")).andReturn(null); JMethod method = EasyMock.createMock(JMethod.class); JClassType bundleType = EasyMock.createMock(JClassType.class); EasyMock.expect(method.getEnclosingType()).andReturn(bundleType); EasyMock.expect(bundleType.getQualifiedSourceName()).andReturn("com.test.Bundle"); EasyMock.expect(method.getName()).andReturn("cssMethod"); EasyMock.replay(mockResourceContext); EasyMock.replay(mockGeneratorContext); EasyMock.replay(method); EasyMock.replay(bundleType); CssResourceGenerator crg = new CssResourceGenerator(); crg.outputCssMapArtifact(testLogger, mockResourceContext, method, testMap); testLogger.assertCorrectLogEntries(); EasyMock.verify(mockResourceContext); EasyMock.verify(mockGeneratorContext); EasyMock.verify(method); EasyMock.verify(bundleType); } 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 = EasyMock.createMock(ResourceContext.class); Map<JMethod, String> testMap = new HashMap<JMethod, String>(); OutputStream mockOutputStream = EasyMock.createMock(OutputStream.class); GeneratorContext mockGeneratorContext = EasyMock.createMock(GeneratorContext.class); GeneratedResource mockGeneratedResource = EasyMock.createMock(GeneratedResource.class); EasyMock.expect(mockResourceContext.getGeneratorContext()).andReturn(mockGeneratorContext); EasyMock.expectLastCall().times(2); EasyMock.expect(mockGeneratorContext.tryCreateResource( testLogger, "cssResource/com.test.Bundle.cssMethod.cssmap")).andReturn(mockOutputStream); EasyMock.expect(mockGeneratorContext.commitResource(testLogger, mockOutputStream)).andThrow( new UnableToCompleteException()); JMethod method = EasyMock.createMock(JMethod.class); JClassType bundleType = EasyMock.createMock(JClassType.class); EasyMock.expect(method.getEnclosingType()).andReturn(bundleType); EasyMock.expect(bundleType.getQualifiedSourceName()).andReturn("com.test.Bundle"); EasyMock.expect(method.getName()).andReturn("cssMethod"); EasyMock.replay(mockResourceContext); EasyMock.replay(mockGeneratorContext); EasyMock.replay(method); EasyMock.replay(bundleType); CssResourceGenerator crg = new CssResourceGenerator(); crg.outputCssMapArtifact(testLogger, mockResourceContext, method, testMap); testLogger.assertCorrectLogEntries(); EasyMock.verify(mockResourceContext); EasyMock.verify(mockGeneratorContext); EasyMock.verify(method); EasyMock.verify(bundleType); } public void testOutputCssMapArtifactWithTestData() throws UnableToCompleteException { UnitTestTreeLogger testLogger = new UnitTestTreeLogger.Builder().createLogger(); ResourceContext mockResourceContext = EasyMock.createMock(ResourceContext.class); JMethod mockJMethod1 = EasyMock.createMock(JMethod.class); JMethod mockJMethod2 = EasyMock.createMock(JMethod.class); JMethod mockJMethod3 = EasyMock.createMock(JMethod.class); JClassType mockJClassType1 = EasyMock.createMock(JClassType.class); JClassType mockJClassType2 = EasyMock.createMock(JClassType.class); JClassType mockJClassType3 = EasyMock.createMock(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 = EasyMock.createMock(GeneratorContext.class); GeneratedResource mockGeneratedResource = EasyMock.createMock(GeneratedResource.class); EasyMock.expect(mockResourceContext.getGeneratorContext()).andReturn(mockGeneratorContext); EasyMock.expectLastCall().times(2); EasyMock.expect(mockGeneratorContext.tryCreateResource( testLogger, "cssResource/com.test.Bundle.cssMethod.cssmap")).andReturn(testOutputStream); EasyMock.expect(mockJMethod1.getEnclosingType()).andReturn(mockJClassType1); EasyMock.expect(mockJClassType1.getQualifiedSourceName()).andReturn("test.class.type.1"); EasyMock.expect(mockJMethod1.getName()).andReturn("basename1"); EasyMock.expect(mockJMethod2.getEnclosingType()).andReturn(mockJClassType2); EasyMock.expect(mockJClassType2.getQualifiedSourceName()).andReturn("test.class.type.2"); EasyMock.expect(mockJMethod2.getName()).andReturn("basename2"); EasyMock.expect(mockJMethod3.getEnclosingType()).andReturn(mockJClassType3); EasyMock.expect(mockJClassType3.getQualifiedSourceName()).andReturn("test.class.type.3"); EasyMock.expect(mockJMethod3.getName()).andReturn("basename3"); EasyMock.expect(mockGeneratorContext.commitResource(testLogger, testOutputStream)).andReturn( mockGeneratedResource); JMethod method = EasyMock.createMock(JMethod.class); JClassType bundleType = EasyMock.createMock(JClassType.class); EasyMock.expect(method.getEnclosingType()).andReturn(bundleType); EasyMock.expect(bundleType.getQualifiedSourceName()).andReturn("com.test.Bundle"); EasyMock.expect(method.getName()).andReturn("cssMethod"); EasyMock.replay(mockResourceContext); EasyMock.replay(mockGeneratorContext); EasyMock.replay(mockJMethod1); EasyMock.replay(mockJMethod2); EasyMock.replay(mockJMethod3); EasyMock.replay(mockJClassType1); EasyMock.replay(mockJClassType2); EasyMock.replay(mockJClassType3); EasyMock.replay(method); EasyMock.replay(bundleType); 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(); EasyMock.verify(mockResourceContext); EasyMock.verify(mockGeneratorContext); EasyMock.verify(mockJMethod1); EasyMock.verify(mockJMethod2); EasyMock.verify(mockJMethod3); EasyMock.verify(mockJClassType1); EasyMock.verify(mockJClassType2); EasyMock.verify(mockJClassType3); EasyMock.verify(method); EasyMock.verify(bundleType); } }