| /* |
| * Copyright 2015 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; |
| |
| |
| /** |
| * Contains various full-stack tests of the CssResource system with gss enabled. |
| */ |
| public class CSSResourceWithGSSTest extends CSSResourceTest { |
| |
| @Override |
| public String getModuleName() { |
| return "com.google.gwt.resources.ResourcesGssTest"; |
| } |
| |
| @Override |
| public void testCss() { |
| FullTestCss css = Resources.INSTANCE.css(); |
| String text = css.getText(); |
| |
| // Check the sprite |
| assertTrue(text.contains("height:16px")); |
| assertTrue(text.contains("width:16px")); |
| |
| // Check the value() expansion |
| assertTrue(text.contains("offset-left:\"guard\" 16px!important")); |
| assertTrue(text.contains("offset:16px 16px")); |
| |
| // Make sure renaming works |
| assertFalse("replacement".equals(css.replacement())); |
| assertTrue(text.contains("." + css.replacement())); |
| assertTrue(text.contains("." + css.replacement() + ":after")); |
| assertTrue(text.contains("." + css.replacementNotJavaIdent())); |
| |
| // Make sure renaming for multi-class selectors (.foo.bar) works |
| assertFalse("multiClassA".equals(css.multiClassA())); |
| assertFalse("multiClassB".equals(css.multiClassB())); |
| assertTrue(text.contains("." + css.multiClassA() + "." + css.multiClassB())); |
| |
| // Check static if evaluation |
| assertTrue(text.contains("static:passed")); |
| assertFalse(text.contains("FAIL")); |
| |
| // Check runtime if evaluation |
| assertTrue(text.contains("runtime:passed")); |
| |
| // Check interestingly-named idents |
| assertTrue(text.contains("-some-wacky-extension")); |
| assertTrue(text.contains("another-extension:-bar")); |
| assertTrue(text.contains("-unescaped-hyphen:-is-better")); |
| assertTrue(text.contains("with_underscore:_is_better")); |
| |
| assertTrue(text.contains("ns:tag")); |
| assertTrue(text.contains("ns:tag:pseudo")); |
| assertTrue(text.contains("ns:tag::double-pseudo")); |
| assertTrue(text.contains("ns:tag::-webkit-scrollbar")); |
| |
| // Check escaped string values |
| // GSS outputs an extra whitespace which is okay, see: |
| // http://www.w3.org/TR/css3-syntax/#consume-an-escaped-code-point |
| assertTrue(text.contains("Hello\\\\\\000022 world")); |
| |
| // Check values |
| assertFalse(text.contains("0.0;")); |
| assertFalse(text.contains("0.0px;")); |
| assertFalse(text.contains("0px;")); |
| assertTrue(text.contains("background-color:#fff")); |
| assertTrue(text.contains("content:\"bar\"")); |
| |
| // Check data URL expansion |
| assertTrue(text.contains("backgroundTopLevel:url(" |
| + Resources.INSTANCE.dataMethod().getSafeUri().asString() + ")")); |
| assertTrue(text.contains("backgroundNested:url(" |
| + Resources.INSTANCE.nested().dataMethod().getSafeUri().asString() + ")")); |
| assertTrue(text.contains("backgroundCustom:url(" |
| + Resources.INSTANCE.customDataMethod().getSafeUri().asString() + ")")); |
| assertTrue(text.contains("backgroundImage:url(" |
| + Resources.INSTANCE.spriteMethod().getSafeUri().asString() + ")")); |
| assertTrue(text.contains("backgroundImageNested:url(" |
| + Resources.INSTANCE.nested().spriteMethod().getSafeUri().asString() + ")")); |
| assertTrue(text.contains("backgroundImageCustom:url(" |
| + Resources.INSTANCE.customSpriteMethod().getSafeUri().asString() + ")")); |
| |
| // Check @eval expansion |
| assertTrue(text.contains(red())); |
| |
| // Check @def substitution |
| assertTrue(text.contains("50px")); |
| // Check @def substitution into function arguments |
| // Note that GWT transforms rgb(R, G, B) into #rrggbb form. |
| assertTrue(text.contains("-moz-linear-gradient(left,#007f00,#00007f 50%)")); |
| assertTrue(text.contains("-webkit-linear-gradient(left,#007f00,#00007f 50%)")); |
| assertTrue(text.contains("linear-gradient(to right,#007f00,#00007f 50%)")); |
| |
| // Check merging semantics |
| assertTrue(text.indexOf("merge:merge") != -1); |
| assertTrue(text.indexOf("merge:merge") < text.indexOf("." |
| + css.mayNotCombine())); |
| assertTrue(text.indexOf("may-not-combine") < text.indexOf("prevent:true")); |
| assertTrue(text.indexOf("prevent:true") < text.indexOf("prevent-merge:true")); |
| assertTrue(text.indexOf("prevent:true") < text.indexOf("." |
| + css.mayNotCombine2())); |
| |
| // Check commonly-used CSS3 constructs |
| assertTrue(text.contains("background-color:rgba(0,0,0,0.5)")); |
| |
| // Check external references |
| assertEquals("externalA", css.externalA()); |
| assertTrue(text.contains(".externalA ." + css.replacement())); |
| assertTrue(text.contains(".externalB")); |
| assertTrue(text.contains(".externalC")); |
| |
| // Test font-face contents |
| assertTrue(text.contains("url(Foo.otf) format(\"opentype\")")); |
| } |
| |
| @Override |
| public void testFileChoice() { |
| // resource without @Source annotation |
| ResourceFileChooser css = Resources.INSTANCE.resourceFileChooser(); |
| // should use the gss file. |
| String expectedCss = "." + css.myClass() + "{width:10px}"; |
| assertEquals(expectedCss, css.getText()); |
| |
| // resource with @Source annotation targeting one .css file |
| css = Resources.INSTANCE.resourceFileChooserWithSourceTargetingOneCssFile(); |
| // should use the gss file instead of the css file. |
| assertEquals(expectedCss, css.getText()); |
| |
| // resource with @Source annotation targeting one .gss file |
| css = Resources.INSTANCE.resourceFileChooserWithSourceTargetingOneGssFile(); |
| // should use the gss file |
| assertEquals(expectedCss, css.getText()); |
| |
| // resource with @Source annotation targeting several .css files |
| css = Resources.INSTANCE.resourceFileChooserWithSourceTargetingCssFiles(); |
| // should use the gss files instead of the css files |
| expectedCss = "." + css.myClass() + "{width:10px;margin:10px}"; |
| assertEquals(expectedCss, css.getText()); |
| |
| // resource with @Source annotation targeting several .gss files |
| css = Resources.INSTANCE.resourceFileChooserWithSourceTargetingGssFiles(); |
| // should use the gss files |
| assertEquals(expectedCss, css.getText()); |
| |
| // resource with @Source annotation targeting several .css files but one css file doesn't have |
| // a corresponding gss file. |
| css = Resources.INSTANCE.resourceFileChooserWithSourceTargetingCssFilesWithoutGssFile(); |
| // should use the css file (will be auto-converted) |
| expectedCss = "." + css.myClass() + "{width:5px;padding:5px;height:5px}"; |
| assertEquals(expectedCss, css.getText()); |
| } |
| } |