| /* |
| * 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.resources.client.gss.TestResources.Charset; |
| import com.google.gwt.resources.client.gss.TestResources.ClassNameAnnotation; |
| import com.google.gwt.resources.client.gss.TestResources.EmptyClass; |
| import com.google.gwt.resources.client.gss.TestResources.Forloop; |
| import com.google.gwt.resources.client.gss.TestResources.GenKeyFrames; |
| import com.google.gwt.resources.client.gss.TestResources.NonStandardAtRules; |
| import com.google.gwt.resources.client.gss.TestResources.NonStandardFunctions; |
| import com.google.gwt.resources.client.gss.TestResources.RuntimeConditional; |
| import com.google.gwt.resources.client.gss.TestResources.SomeGssResource; |
| import com.google.gwt.resources.client.gss.TestResources.WithConstant; |
| |
| /** |
| * Contains various full-stack tests of the CssResource system with GSS. |
| */ |
| public class GssResourceTest extends RenamingClassNameTest { |
| @Override |
| public String getModuleName() { |
| return "com.google.gwt.resources.GssResourceTest"; |
| } |
| |
| @Override |
| public void testClassesRenaming() { |
| ClassNameAnnotation classNameAnnotation = res().classNameAnnotation(); |
| String renamedClass = classNameAnnotation.renamedClass(); |
| String nonRenamedClass = classNameAnnotation.nonRenamedClass(); |
| |
| assertTrue(renamedClass.matches(OBFUSCATION_PATTERN)); |
| assertTrue(nonRenamedClass.matches(OBFUSCATION_PATTERN)); |
| } |
| |
| public void testMixin() { |
| String text = res().mixin().getText(); |
| |
| assertTrue(text.contains("{width:120px;height:100px}")); |
| } |
| |
| public void testAdd() { |
| String text = res().add().getText(); |
| |
| assertTrue(text.contains("{width:220px}")); |
| } |
| |
| public void testEval() { |
| String text = res().eval().getText(); |
| |
| assertTrue(text.contains("{color:#fff;background-color:#f00;width:30px}")); |
| } |
| |
| public void testSprite() { |
| String text = res().sprite().getText(); |
| |
| String expected = "{height:64px;width:64px;overflow:hidden;background:url(" + res() |
| .someImageResource().getSafeUri().asString() + ") -0px -0px no-repeat}"; |
| |
| assertTrue(text.contains(expected)); |
| } |
| |
| public void testResourceUrl() { |
| String text = res().resourceUrl().getText(); |
| |
| String expected = "{cursor:url(" + res().someDataResource().getSafeUri().asString() + ");" |
| + "background-image:url(" + res().someImageResource().getSafeUri().asString() + ");" |
| + "cursor:url(" + res().someDataResource().getSafeUri().asString() + ");" |
| + "background-image:url(" + res().someImageResource().getSafeUri().asString() + ")}"; |
| assertTrue(text.contains(expected)); |
| } |
| |
| /** |
| * Test that empty class definitions are removed from the resulting css. |
| */ |
| public void testEmptyClass() { |
| EmptyClass emptyClass = res().emptyClass(); |
| |
| assertEquals("", emptyClass.getText()); |
| } |
| |
| public void testConstant() { |
| WithConstant withConstant = res().withConstant(); |
| |
| assertEquals("15px", withConstant.constantOne()); |
| |
| String expectedCss = "." + withConstant.classOne() + "{padding:" + withConstant.constantOne() |
| + "}"; |
| assertEquals(expectedCss, withConstant.getText()); |
| } |
| |
| public void testClassNameAnnotation() { |
| ClassNameAnnotation css = res().classNameAnnotation(); |
| |
| String expectedCss = "." + css.renamedClass() + "{color:black}." + css.nonRenamedClass() |
| + "{color:white}"; |
| assertEquals(expectedCss, css.getText()); |
| } |
| |
| public void testConstants() { |
| assertEquals("15px", res().cssWithConstant().constantOne()); |
| assertEquals(5, res().cssWithConstant().constantTwo()); |
| assertEquals("black", res().cssWithConstant().CONSTANT_THREE()); |
| |
| assertNotSame("white", res().cssWithConstant().conflictConstantClass()); |
| |
| assertEquals(15, res().cssWithConstant().overrideConstantInt()); |
| assertNotSame("15px", res().cssWithConstant().overrideConstantIntClass()); |
| } |
| |
| public void testNotStrict() { |
| SomeGssResource notStrict = res().notstrict(); |
| |
| String expectedCss = "." + notStrict.someClass() + "{color:black}.otherNotStrictClass{" + |
| "color:white}"; |
| |
| assertEquals(expectedCss, notStrict.getText()); |
| } |
| |
| public void testRuntimeConditional() { |
| RuntimeConditional runtimeConditional = res().runtimeConditional(); |
| String foo = runtimeConditional.foo(); |
| |
| BooleanEval.FIRST = true; |
| BooleanEval.SECOND = true; |
| BooleanEval.THIRD = true; |
| |
| assertEquals(runtimeExpectedCss("purple", "10px", foo), runtimeConditional.getText()); |
| |
| BooleanEval.FIRST = false; |
| BooleanEval.SECOND = true; |
| BooleanEval.THIRD = true; |
| |
| assertEquals(runtimeExpectedCss("black", "10px", foo), runtimeConditional.getText()); |
| |
| BooleanEval.FIRST = false; |
| BooleanEval.SECOND = true; |
| BooleanEval.THIRD = false; |
| |
| assertEquals(runtimeExpectedCss("khaki", "10px", foo), runtimeConditional.getText()); |
| |
| BooleanEval.FIRST = false; |
| BooleanEval.SECOND = false; |
| |
| assertEquals(runtimeExpectedCss("gray", "10px", foo), runtimeConditional.getText()); |
| } |
| |
| public void testNonStandardAtRules() { |
| NonStandardAtRules nonStandardAtRules = res().nonStandardAtRules(); |
| |
| String css = nonStandardAtRules.getText(); |
| assertTrue(css.contains("@extenal")); |
| assertTrue(css.contains("@-moz-document")); |
| assertTrue(css.contains("@supports")); |
| } |
| |
| public void testNonStandardFunctions() { |
| NonStandardFunctions nonStandardFunctions = res().nonStandardFunctions(); |
| |
| String css = nonStandardFunctions.getText(); |
| assertTrue(css.contains("expression(")); |
| assertTrue(css.contains("progid:DXImageTransform.Microsoft.gradient(")); |
| } |
| |
| public void testCharset() { |
| Charset charset = res().charset(); |
| |
| assertEquals("div{content:\"\\008305\\008306\\008307\"}", charset.getText()); |
| } |
| |
| public void testConstantAccess() { |
| assertEquals("10px", res().constants().padding2()); |
| assertEquals("#012345", res().constants().color1()); |
| assertEquals("#012345", res().constants().mycolor()); |
| assertEquals("#012345", res().constants().mycolor1()); |
| assertEquals(10, res().constants().margin()); |
| assertEquals(120, res().constants().width()); |
| assertEquals(1, res().constants().bar()); |
| |
| assertEquals("div{width:120px}", res().constants().getText()); |
| } |
| |
| public void testEmpty() { |
| // should not throw an exception if the file is empty |
| assertEquals("", res().empty().getText()); |
| } |
| |
| public void testForLoop() { |
| Forloop forloop = res().forloop(); |
| |
| String expectedCss = "." + forloop.foo0() + "{padding:0}." + forloop.foo2() + "{padding:2px}." + forloop.foo4() + "{padding:4px}"; |
| |
| assertEquals(expectedCss, forloop.getText()); |
| } |
| |
| public void testGenKeyFrames() { |
| GenKeyFrames genKeyFrames = res().genKeyFrames(); |
| |
| String expectedCss = "@keyframes myframe{0%{top:0}to{top:200px}}@-webkit-keyframes myframe{0%{top:0}to{top:200px}}" + |
| "div{animation:myframe 5s infinite}"; |
| |
| assertEquals(expectedCss, genKeyFrames.getText()); |
| } |
| |
| private String runtimeExpectedCss(String color, String padding, String foo) { |
| String s = "." + foo + "{width:100%}" + "." + foo + "{color:" + color + "}"; |
| |
| if (padding != null) { |
| s += "." + foo + "{padding:" + padding + "}"; |
| } |
| |
| s += "." + foo + "{margin:100px}"; |
| |
| if (RuntimeConditional.CONSTANT_DEFINED_ON_INTERFACE) { |
| s += "." + foo + "{height:10px}"; |
| } |
| |
| s += "." + foo + "{font-family:kennedy;top:5px}"; |
| |
| return s; |
| } |
| } |