/* * Copyright 2014 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.client.gss; import com.google.gwt.core.shared.GWT; import com.google.gwt.junit.client.GWTTestCase; import com.google.gwt.resources.client.gss.TestResources.ExternalClasses; import com.google.gwt.resources.client.gss.TestResources.TestImportCss; /** * These tests are tested with several configurations. * * @see com.google.gwt.resources.client.gss.StableNoTypeObfuscationStyleTest * @see com.google.gwt.resources.client.gss.StableObfuscationStyleTest * @see com.google.gwt.resources.client.gss.StableShortTypeObfuscationStyleTest * @see com.google.gwt.resources.client.gss.DebugObfuscationStyleTest * @see com.google.gwt.resources.client.gss.GssResourceTest */ public abstract class RenamingClassNameTest extends GWTTestCase { static final String OBFUSCATION_PATTERN = "[a-zA-Z][a-zA-Z0-9]*-[a-zA-Z][a-zA-Z0-9]*"; /** * Test that style classes mentioned as external are not obfuscated. */ public void testExternalClasses() { ExternalClasses externalClasses = res().externalClasses(); assertNotSame("obfuscatedClass", externalClasses.obfuscatedClass()); assertEquals("externalClass", externalClasses.externalClass()); assertEquals("externalClass2", externalClasses.externalClass2()); assertEquals("unobfuscated", externalClasses.unobfuscated()); assertEquals("unobfuscated2", externalClasses.unobfuscated2()); String css = externalClasses.getText(); // external at-rule shouldn't be printed assertFalse(css.contains("@external")); String expectedCss = "." + externalClasses.obfuscatedClass() + "{width:100%}" + ".externalClass,.externalClass2,.unobfuscated{height:50px}" + ".unobfuscated-with-prefix-without-method{width:15px}" + ".unobfuscated2{height:50px}" + ".externalWithoutMethod{color:white}"; assertEquals(expectedCss, css); } public void testObfuscationScope() { ScopeResource res = GWT.create(ScopeResource.class); assertEquals(res.scopeA().foo(), res.scopeA2().foo()); assertNotSame(res.scopeA().foo(), res.scopeB().foo()); assertNotSame(res.scopeB().foo(), res.scopeC().foo()); assertNotSame(res.scopeA().foo(), res.scopeC().foo()); } public void testImportAndImportWithPrefix() { TestImportCss css = res().testImportCss(); ImportResource importResource = GWT.create(ImportResource.class); ImportResource.ImportCss importCss = importResource.importCss(); ImportResource.ImportWithPrefixCss importWithPrefixCss = importResource.importWithPrefixCss(); String expectedCss = "." + css.other() + "{color:black}." + importCss.className() + " ." + css.other() + "{color:white}." + importWithPrefixCss.className() + " ." + css.other() + "{color:gray}"; assertEquals(expectedCss, css.getText()); } public void testSharedScope() { ScopeResource res = GWT.create(ScopeResource.class); TestResources res2 = res(); // shareClassName1 is shared assertEquals(res.sharedParent().sharedClassName1(), res.sharedChild1().sharedClassName1()); assertEquals(res.sharedParent().sharedClassName1(), res.sharedChild2().sharedClassName1()); assertEquals(res.sharedParent().sharedClassName1(), res.sharedGreatChild().sharedClassName1()); assertEquals(res.sharedParent().sharedClassName1(), res2.sharedChild3().sharedClassName1()); // shareClassName2 is shared assertEquals(res.sharedParent().sharedClassName2(), res.sharedChild1().sharedClassName2()); assertEquals(res.sharedParent().sharedClassName2(), res.sharedChild2().sharedClassName2()); assertEquals(res.sharedParent().sharedClassName2(), res.sharedGreatChild().sharedClassName2()); assertEquals(res.sharedParent().sharedClassName2(), res2.sharedChild3().sharedClassName2()); // nonSharedClassName isn't shared assertNotSame(res.sharedChild1().nonSharedClassName(), res.sharedChild2().nonSharedClassName()); assertNotSame(res.sharedChild1().nonSharedClassName(), res.sharedGreatChild().nonSharedClassName()); assertNotSame(res.sharedChild1().nonSharedClassName(), res2.sharedChild3().nonSharedClassName()); assertNotSame(res.sharedChild2().nonSharedClassName(), res.sharedGreatChild().nonSharedClassName()); assertNotSame(res.sharedChild2().nonSharedClassName(), res2.sharedChild3().nonSharedClassName()); assertNotSame(res2.sharedChild3().nonSharedClassName(), res.sharedGreatChild().nonSharedClassName()); } public abstract void testClassesRenaming(); protected TestResources res() { return GWT.create(TestResources.class); } }