/*
* Copyright 2009 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.collect.Sets;
import com.google.common.css.compiler.ast.testing.NewFunctionalTestBase;
/**
* Unit tests for {@link HandleUnknownAtRuleNodes}.
*
*/
public class HandleUnknownAtRuleNodesTest extends NewFunctionalTestBase {
private final String errorMessage = HandleUnknownAtRuleNodes.unknownAtRuleErrorMessage;
private final String testCode = "@foo a b c {.x {y: z}\n@bar {}\n@baz X;}";
private final String testCodePrettyPrintedResult = linesToString(
"@foo a b c {",
" .x {",
" y: z;",
" }",
" @bar {",
" }",
" @baz X;",
"}",
"");
private final String testCodeCompactPrintedResult = "@foo a b c{.x{y:z}@bar{}@baz X;}";
private boolean report;
private boolean remove;
private String prettyPrintedResult;
private String compactPrintedResult;
@Override
protected void runPass() {
new HandleUnknownAtRuleNodes(
tree.getMutatingVisitController(), errorManager,
Sets.<String>newHashSet("-custom-at-rule"),
report, remove).runPass();
PrettyPrinter prettyPrinterPass = new PrettyPrinter(tree.getVisitController());
prettyPrinterPass.runPass();
prettyPrintedResult = prettyPrinterPass.getPrettyPrintedString();
CompactPrinter compactPrinterPass = new CompactPrinter(tree);
compactPrinterPass.runPass();
compactPrintedResult = compactPrinterPass.getCompactPrintedString();
}
public void testReportRemove() throws Exception {
report = true;
remove = true;
parseAndRun(testCode, errorMessage);
assertEquals("", prettyPrintedResult);
assertEquals("", compactPrintedResult);
}
public void testReportDoNotRemove() throws Exception {
report = true;
remove = false;
parseAndRun(testCode, errorMessage, errorMessage, errorMessage);
assertEquals(testCodePrettyPrintedResult, prettyPrintedResult);
assertEquals(testCodeCompactPrintedResult, compactPrintedResult);
}
public void testDoNotReportRemove() throws Exception {
report = false;
remove = true;
parseAndRun(testCode);
assertEquals("", prettyPrintedResult);
assertEquals("", compactPrintedResult);
}
public void testDoNotReportDoNotRemove() throws Exception {
report = false;
remove = false;
parseAndRun(testCode);
assertEquals(testCodePrettyPrintedResult, prettyPrintedResult);
assertEquals(testCodeCompactPrintedResult, compactPrintedResult);
}
public void testDoNotReportDoNotRemoveMedia() throws Exception {
report = true;
remove = true;
parseAndRun("@media print { .A { margin: 0; } }");
assertEquals(linesToString(
"@media print {",
" .A {",
" margin: 0;",
" }",
"}",
""), prettyPrintedResult);
assertEquals("@media print{.A{margin:0}}", compactPrintedResult);
}
public void testDoNotReportDoNotRemoveMediaWithUnknown() throws Exception {
report = true;
remove = true;
parseAndRun("@media print { @foo { .A { margin: 0; } } }", errorMessage);
assertEquals(linesToString(
"@media print {",
"}",
""), prettyPrintedResult);
assertEquals("@media print{}", compactPrintedResult);
}
public void testDoNotReportDoNotRemoveCustomAtRule() throws Exception {
report = true;
remove = true;
parseAndRun("@-custom-at-rule print { }");
assertEquals("@-custom-at-rule print{}", compactPrintedResult);
}
}