/* * 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 StrictCss2}. * * @author fbenz@google.com (Florian Benz) */ public class StrictCss2Test extends NewFunctionalTestBase { private String compactPrintedResult; @Override protected void runPass() { new StrictCss2(tree.getVisitController(), errorManager).runPass(); CompactPrinter compactPrinterPass = new CompactPrinter(tree); compactPrinterPass.runPass(); compactPrintedResult = compactPrinterPass.getCompactPrintedString(); } public void testPseudoClass1() throws Exception { parseAndRun("div :first-child {}"); assertEquals("div :first-child{}", compactPrintedResult); } public void testPseudoClass2() throws Exception { parseAndRun("div :link {}"); assertEquals("div :link{}", compactPrintedResult); } public void testPseudoClass3() throws Exception { parseAndRun("div :visited {}"); assertEquals("div :visited{}", compactPrintedResult); } public void testPseudoClass4() throws Exception { parseAndRun("div :focus {}"); assertEquals("div :focus{}", 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 testAttributeSelector1() throws Exception { parseAndRun("span[class=example]{}"); assertEquals("span[class=example]{}", compactPrintedResult); } public void testAttributeSelector2() throws Exception { parseAndRun("a[rel~='copyright']{}"); assertEquals("a[rel~='copyright']{}", compactPrintedResult); } public void testAttributeSelector3() throws Exception { parseAndRun("*[lang|=\"en\"]{}"); assertEquals("*[lang|=\"en\"]{}", compactPrintedResult); } public void testPseudoClassNthBad1() throws Exception { parseAndRun("ul :nth-child(5n+3) {}", false, StrictCss2.UNSUPPORTED_PESUDO_CLASS_OR_ELEMENT_ERROR_MESSAGE); } public void testPseudoClassNthBad2() throws Exception { parseAndRun("ol :nth-last-child(5) {}", false, StrictCss2.UNSUPPORTED_PESUDO_CLASS_OR_ELEMENT_ERROR_MESSAGE); } public void testPseudoClassNthBad3() throws Exception { parseAndRun("p :nth-of-type(odd) {}", false, StrictCss2.UNSUPPORTED_PESUDO_CLASS_OR_ELEMENT_ERROR_MESSAGE); } public void testPseudoClassNthBad4() throws Exception { parseAndRun("div :nth-last-of-type(-2n-3) {}", false, StrictCss2.UNSUPPORTED_PESUDO_CLASS_OR_ELEMENT_ERROR_MESSAGE); } public void testPseudoClassBad1() throws Exception { parseAndRun("div :none {}", false, StrictCss2.UNSUPPORTED_PESUDO_CLASS_OR_ELEMENT_ERROR_MESSAGE); } public void testPseudoClassBad2() throws Exception { parseAndRun("div :not(h1) {}", false, StrictCss2.UNSUPPORTED_PESUDO_CLASS_OR_ELEMENT_ERROR_MESSAGE); } public void testPseudoElementBad() throws Exception { parseAndRun("div ::none {}", false, StrictCss2.NEW_PESUDO_ELEMENTS_NOT_ALLOWED_ERROR_MESSAGE); } public void testAtrributeSelectorBad1() throws Exception { parseAndRun("a[rel*='copyright']{}", StrictCss2.FORBIDDEN_ATTRIBUTE_COMPARER_ERROR_MESSAGE); } public void testAtrributeSelectorBad2() throws Exception { parseAndRun("a[rel$='copyright']{}", StrictCss2.FORBIDDEN_ATTRIBUTE_COMPARER_ERROR_MESSAGE); } public void testAtrributeSelectorBad3() throws Exception { parseAndRun("a[rel^='copyright']{}", StrictCss2.FORBIDDEN_ATTRIBUTE_COMPARER_ERROR_MESSAGE); } public void testValidLengthUnits() throws Exception { parseAndRun( "a {" + " width: 0;" + " width: 1em;" + " width: 1ex;" + " width: 1%;" + " width: 1in;" + " width: 1cm;" + " width: 1mm;" + " width: 1pt;" + " width: 1pc;" + " width: 1px;" + "}"); } public void testInvalidLengthUnit() throws Exception { parseAndRun( "a {" + " width: 1p;" + "}", StrictCss2.INVALID_UNIT_PREFIX + "p"); } }