/*
* 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.css.compiler.ast.FunctionalTestBase;
/**
* Functional tests for {@link UnsafeMergeRulesetNodes}.
*
*/
public class UnsafeMergeRulesetNodesFunctionalTest extends FunctionalTestBase {
private boolean byPartition = false;
public void testSorting() {
testEachTreeConstruction(
"c, a, b {x: 1px;}",
"[[a, b, c]{[x:[1px]]}]");
}
public void testGroupByDeclarations() {
testEachTreeConstruction(
linesToString(
"c {x: 2px;}",
"a, b {x: 2px; y: 3px}"),
"[[a, b, c]{[x:[2px]]}, "
+ "[a, b]{[y:[3px]]}]");
}
public void testPropertyPartition() {
testEachTreeConstruction(
linesToString(
"c {padding: 1px;}",
"a {padding: 1px; padding-right: 3px; padding-left: 2px;}",
"b {padding: 1px; padding-left: 2px; padding-right: 3px;}"),
// Not grouped by partition.
"[[a, b, c]{[padding:[1px]]}, "
+ "[a, b]{[padding-left:[2px]]}, "
+ "[a, b]{[padding-right:[3px]]}]",
// Grouped by partition.
"[[c]{[padding:[1px]]}, "
+ "[a, b]{[padding:[1px], padding-left:[2px], padding-right:[3px]]}]");
}
public void testBorderAlwaysPartitioned() {
testEachTreeConstruction(
linesToString(
"a {border-left: red;}",
"b {border-color: red; border-left: blue;}",
"c {border-left: red; border-color: blue;}"),
// The border property is always grouped by partition
// because ordering might matter.
"[[b]{[border-color:[red], border-left:[blue]]}, "
+ "[a]{[border-left:[red]]}, "
+ "[c]{[border-left:[red], border-color:[blue]]}]");
}
private void testEachTreeConstruction(String input, String output) {
testEachTreeConstruction(input, output, output);
}
private void testEachTreeConstruction(String input, String output1, String output2) {
byPartition = false;
testTreeConstruction(input, output1);
byPartition = true;
testTreeConstruction(input, output2);
}
@Override
protected void runPass() {
new SplitRulesetNodes(tree.getMutatingVisitController(), true).runPass();
new MarkRemovableRulesetNodes(tree, true).runPass();
new EliminateUselessRulesetNodes(tree).runPass();
new UnsafeMergeRulesetNodes(tree, byPartition, true).runPass();
}
}