/*
* 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 static com.google.common.truth.Truth.assertThat;
import com.google.common.css.compiler.ast.CssMixinDefinitionNode;
import com.google.common.css.compiler.ast.GssParserException;
import com.google.common.css.compiler.passes.testing.PassesTestBase;
import java.util.Map;
/**
* Unit tests for the {@link CollectMixinDefinitions} compiler pass.
*
* @author fbenz@google.com (Florian Benz)
*/
public class CollectMixinDefinitionsTest extends PassesTestBase {
private Map<String, CssMixinDefinitionNode> definitions;
public void testSimpleMixinDefinition() {
parseAndBuildTree(
"@defmixin test(PAR1, PAR2) { width: PAR1; height: PAR2; }");
}
public void testCollectedMixinDefinitions() {
parseAndBuildTree(linesToString(
"@defmixin test1(PAR1, PAR2) { width: PAR1; height: PAR2; }",
"@defmixin test2() {}",
"@defmixin test3(PAR1) { color: PAR1; }"));
assertNotNull(definitions);
assertThat(definitions.keySet()).containsExactly("test1", "test2", "test3");
}
public void testDupilicateMixinDefinitionNames() throws GssParserException {
parseAndRun("@defmixin test() {} @defmixin test() {}",
CollectMixinDefinitions.DUPLICATE_MIXIN_DEFINITION_NAME_ERROR_MESSAGE);
}
public void testDupilicateArgumentNames() throws GssParserException {
parseAndRun("@defmixin test(PAR, PAR) {}",
CollectMixinDefinitions.DUPLICATE_ARGUMENT_NAME_ERROR_MESSAGE);
}
public void testInvalidArgument() throws GssParserException {
parseAndRun("@defmixin test(Par) {}",
CollectMixinDefinitions.INVALID_ARGUMENT_ERROR_MESSAGE);
}
public void testInvalidBlock1() throws GssParserException {
parseAndRun("@if (COND) { @defmixin test(PAR) {} }",
CollectMixinDefinitions.INVALID_BLOCK_ERROR_MESSAGE);
}
public void testInvalidBlock2() throws GssParserException {
parseAndRun("@component X { @defmixin test(PAR) {} }",
CollectMixinDefinitions.INVALID_BLOCK_ERROR_MESSAGE);
}
@Override
protected void runPass() {
// This pass has to run before.
new CreateMixins(tree.getMutatingVisitController(), errorManager).runPass();
new CreateConstantReferences(tree.getMutatingVisitController()).runPass();
CollectMixinDefinitions collectDefinitions = new CollectMixinDefinitions(
tree.getMutatingVisitController(), errorManager);
collectDefinitions.runPass();
definitions = collectDefinitions.getDefinitions();
}
}