blob: bd0f4d1915b3544dc882a62690ed77d43ae39d39 [file] [log] [blame]
/*
* 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());
}
}