/* * 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.common.css.compiler.passes; import com.google.common.css.compiler.ast.testing.NewFunctionalTestBase; /** * Unit tests for {@link StrictCss3}. * * @author fbenz@google.com (Florian Benz) */ public class StrictCss3Test extends NewFunctionalTestBase { private String compactPrintedResult; @Override protected void runPass() { new StrictCss3(tree.getVisitController(), errorManager).runPass(); CompactPrinter compactPrinterPass = new CompactPrinter(tree); compactPrinterPass.runPass(); compactPrintedResult = compactPrinterPass.getCompactPrintedString(); } public void testPseudoClass1() throws Exception { parseAndRun("div :root {}"); assertEquals("div :root{}", compactPrintedResult); } public void testPseudoClass2() throws Exception { parseAndRun("div :last-child {}"); assertEquals("div :last-child{}", compactPrintedResult); } public void testPseudoClass3() throws Exception { parseAndRun("div :empty {}"); assertEquals("div :empty{}", compactPrintedResult); } public void testPseudoClass4() throws Exception { parseAndRun("div :checked {}"); assertEquals("div :checked{}", compactPrintedResult); } public void testPseudoElement1() throws Exception { parseAndRun("p ::first-line {}"); assertEquals("p ::first-line{}", compactPrintedResult); } public void testPseudoElement2() throws Exception { parseAndRun("h1 ::first-letter {}"); assertEquals("h1 ::first-letter{}", compactPrintedResult); } public void testPseudoElement3() throws Exception { parseAndRun("div ::after {}"); assertEquals("div ::after{}", compactPrintedResult); } public void testPseudoElement4() throws Exception { parseAndRun("div ::before {}"); assertEquals("div ::before{}", compactPrintedResult); } public void testPseudoClassNth1() throws Exception { parseAndRun("ul :nth-child(5n+3) {}"); assertEquals("ul :nth-child(5n+3){}", compactPrintedResult); } public void testPseudoClassNth2() throws Exception { parseAndRun("ol :nth-last-child(5) {}"); assertEquals("ol :nth-last-child(5){}", compactPrintedResult); } public void testPseudoClassNth3() throws Exception { parseAndRun("p :nth-of-type(odd) {}"); assertEquals("p :nth-of-type(odd){}", compactPrintedResult); } public void testPseudoClassNth4() throws Exception { parseAndRun("div :nth-last-of-type(-2n-3) {}"); assertEquals("div :nth-last-of-type(-2n-3){}", compactPrintedResult); } public void testPseudoClassBad1() throws Exception { parseAndRun("div :none {}", false, StrictCss3.UNSUPPORTED_PESUDO_CLASS_ERROR_MESSAGE); } public void testPseudoClassBad2() throws Exception { parseAndRun("div :first-line {}", false, StrictCss3.UNSUPPORTED_PESUDO_CLASS_ERROR_MESSAGE); } public void testPseudoClassBad3() throws Exception { parseAndRun("div :after {}", false, StrictCss3.UNSUPPORTED_PESUDO_CLASS_ERROR_MESSAGE); } public void testPseudoElementBad() throws Exception { parseAndRun("div ::none {}", false, StrictCss3.UNSUPPORTED_PESUDO_ELEMENT_ERROR_MESSAGE); } public void testPseudoClassNthBad1() throws Exception { parseAndRun("div :none(2n) {}", false, StrictCss3.UNSUPPORTED_PESUDO_CLASS_NTH_ERROR_MESSAGE); } public void testPseudoClassNthBad2() throws Exception { parseAndRun("div :bad(odd) {}", false, StrictCss3.UNSUPPORTED_PESUDO_CLASS_NTH_ERROR_MESSAGE); } public void testPseudoClassNthBad3() throws Exception { parseAndRun("div :nth-last-of-type {}", false, StrictCss3.MISSING_FUNCTION_PESUDO_CLASS_NTH_ERROR_MESSAGE); } public void testValidLengthUnits() throws Exception { parseAndRun( "a {" + " width: 0;" + " width: 1em;" + " width: 1ex;" + " width: 1ch;" + " width: 1rem;" + " width: 1vw;" + " width: 1vh;" + " width: 1vm;" + " width: 1%;" + " width: 1in;" + " width: 1cm;" + " width: 1mm;" + " width: 1pt;" + " width: 1pc;" + " width: 1px;" + " color: #fff;" + " transform: rotate(90deg);" + " transform: rotate(2rad);" + " transform: rotate(2turn);" + " transform: rotate(2grad);" + " transition-duration: 1s;" + " transition-duration: 1ms;" + " voice-pitch: 1Hz;" + " voice-pitch: 1kHz;" + "}"); } public void testInvalidLengthUnit() throws Exception { parseAndRun( "a {" + " width: 1p;" + "}", StrictCss3.INVALID_UNIT_PREFIX + "p"); } public void testBorderValidation() throws Exception { parseAndRun( "a {" + " border-width: 1px medium 4px;" + "}"); } public void testBorderValidation2() throws Exception { parseAndRun( "a {" + " border-width: 1px medium 4xx;" + "}", StrictCss3.INVALID_UNIT_PREFIX + "xx"); } public void testBorderValidation3() throws Exception { parseAndRun( "a {" + " border-width: 1xx medium 4px;" + "}", StrictCss3.INVALID_UNIT_PREFIX + "xx"); } }