/*
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 org.apache.flex.compiler.internal.css;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;
import java.util.List;
import org.apache.flex.compiler.css.ICSSRule;
import org.junit.Test;
/**
* JUnit tests for {@link CSSRule}.
*
* @author Gordon Smith
*/
public class CSSRuleTests extends CSSBaseTests {
private static final String EOL = "\n\t\t";
protected List<ICSSRule> getCSSRules(String code) {
return getCSSNodeBase( code ).getRules();
}
@Test
public void CSSRulesTests_properties()
{
String code =
" s|VBox { " + EOL +
" fontWeight:bold; " + EOL +
"} ";
List<ICSSRule> rules = getCSSRules(code);
assertThat("rules.size()" , rules.size(), is(1) );
CSSRule rule = (CSSRule) rules.get(0);
assertThat("rule.getOperator()" , rule.getOperator(), is( CSSModelTreeType.RULE ) );
assertThat("rule.getMediaQueryConditions().size()" , rule.getMediaQueryConditions().size(), is( 0 ) );
assertThat("rule.getProperties().size()" , rule.getProperties().size(), is( 1 ) );
assertThat("rule.getSelectorGroup().size()" , rule.getSelectorGroup().size(), is( 1 ) );
CSSTypedNode selectorGroup = (CSSTypedNode) rule.children.get(0);
assertThat("selectorGroup.getOperator()", selectorGroup.getOperator(), is( CSSModelTreeType.SELECTOR_GROUP ) );
assertThat("selectorGroup.children.size()", selectorGroup.children.size(), is( 1 ) );
CSSTypedNode mediaQuery = (CSSTypedNode) rule.children.get(1);
assertThat("mediaQuery.getOperator()", mediaQuery.getOperator(), is( CSSModelTreeType.MEDIA_QUERY ) );
assertThat("mediaQuery.children.size()", mediaQuery.children.size(), is( 0 ) );
CSSTypedNode propertyList = (CSSTypedNode) rule.children.get(2);
assertThat("propertyList.getOperator()", propertyList.getOperator(), is( CSSModelTreeType.PROPERTY_LIST ) );
assertThat("propertyList.children.size()", propertyList.children.size(), is( 1 ) );
}
@Test
public void CSSRulesTests_multiple_properties()
{
String code =
" s|VBox { " + EOL +
" fontWeight:bold; " + EOL +
" fontSize:16; " + EOL +
"} ";
List<ICSSRule> rules = getCSSRules(code);
assertThat("rules.size()" , rules.size(), is(1) );
CSSRule rule = (CSSRule) rules.get(0);
assertThat("rule.getOperator()" , rule.getOperator(), is( CSSModelTreeType.RULE ) );
assertThat("rule.getMediaQueryConditions().size()" , rule.getMediaQueryConditions().size(), is( 0 ) );
assertThat("rule.getProperties().size()" , rule.getProperties().size(), is( 2 ) );
assertThat("rule.getSelectorGroup().size()" , rule.getSelectorGroup().size(), is( 1 ) );
CSSTypedNode selectorGroup = (CSSTypedNode) rule.children.get(0);
assertThat("selectorGroup.getOperator()", selectorGroup.getOperator(), is( CSSModelTreeType.SELECTOR_GROUP ) );
assertThat("selectorGroup.children.size()", selectorGroup.children.size(), is( 1 ) );
CSSTypedNode mediaQuery = (CSSTypedNode) rule.children.get(1);
assertThat("mediaQuery.getOperator()", mediaQuery.getOperator(), is( CSSModelTreeType.MEDIA_QUERY ) );
assertThat("mediaQuery.children.size()", mediaQuery.children.size(), is( 0 ) );
CSSTypedNode propertyList = (CSSTypedNode) rule.children.get(2);
assertThat("propertyList.getOperator()", propertyList.getOperator(), is( CSSModelTreeType.PROPERTY_LIST ) );
assertThat("propertyList.children.size()", propertyList.children.size(), is( 2 ) );
}
@Test
public void CSSRulesTests_selecterGroup1()
{
String code =
" s|HBox .rounded s|Label.big, " + EOL +
" s|VBox .rounded s|Label.small { " + EOL +
" fontWeight:bold; " + EOL +
"} ";
List<ICSSRule> rules = getCSSRules(code);
assertThat("rules.size()" , rules.size(), is(1) );
CSSRule rule = (CSSRule) rules.get(0);
assertThat("rule.getOperator()" , rule.getOperator(), is( CSSModelTreeType.RULE ) );
assertThat("rule.getMediaQueryConditions().size()" , rule.getMediaQueryConditions().size(), is( 0 ) );
assertThat("rule.getProperties().size()" , rule.getProperties().size(), is( 1 ) );
assertThat("rule.getSelectorGroup().size()" , rule.getSelectorGroup().size(), is( 2 ) );
CSSTypedNode selectorGroup = (CSSTypedNode) rule.children.get(0);
assertThat("selectorGroup.getOperator()", selectorGroup.getOperator(), is( CSSModelTreeType.SELECTOR_GROUP ) );
assertThat("selectorGroup.children.size()", selectorGroup.children.size(), is( 2 ) );
CSSTypedNode mediaQuery = (CSSTypedNode) rule.children.get(1);
assertThat("mediaQuery.getOperator()", mediaQuery.getOperator(), is( CSSModelTreeType.MEDIA_QUERY ) );
assertThat("mediaQuery.children.size()", mediaQuery.children.size(), is( 0 ) );
CSSTypedNode propertyList = (CSSTypedNode) rule.children.get(2);
assertThat("propertyList.getOperator()", propertyList.getOperator(), is( CSSModelTreeType.PROPERTY_LIST ) );
assertThat("propertyList.children.size()", propertyList.children.size(), is( 1 ) );
}
@Test
public void CSSRulesTests_selecterGroup2()
{
String code =
" s|HBox, .rounded, s|Label.big, " + EOL +
" s|VBox, .rounded, s|Label.small { " + EOL +
" fontWeight:bold; " + EOL +
"} ";
List<ICSSRule> rules = getCSSRules(code);
assertThat("rules.size()" , rules.size(), is(1) );
CSSRule rule = (CSSRule) rules.get(0);
assertThat("rule.getOperator()" , rule.getOperator(), is( CSSModelTreeType.RULE ) );
assertThat("rule.getMediaQueryConditions().size()" , rule.getMediaQueryConditions().size(), is( 0 ) );
assertThat("rule.getProperties().size()" , rule.getProperties().size(), is( 1 ) );
assertThat("rule.getSelectorGroup().size()" , rule.getSelectorGroup().size(), is( 6 ) );
CSSTypedNode selectorGroup = (CSSTypedNode) rule.children.get(0);
assertThat("selectorGroup.getOperator()", selectorGroup.getOperator(), is( CSSModelTreeType.SELECTOR_GROUP ) );
assertThat("selectorGroup.children.size()", selectorGroup.children.size(), is( 6 ) );
CSSTypedNode mediaQuery = (CSSTypedNode) rule.children.get(1);
assertThat("mediaQuery.getOperator()", mediaQuery.getOperator(), is( CSSModelTreeType.MEDIA_QUERY ) );
assertThat("mediaQuery.children.size()", mediaQuery.children.size(), is( 0 ) );
CSSTypedNode propertyList = (CSSTypedNode) rule.children.get(2);
assertThat("propertyList.getOperator()", propertyList.getOperator(), is( CSSModelTreeType.PROPERTY_LIST ) );
assertThat("propertyList.children.size()", propertyList.children.size(), is( 1 ) );
}
@Test
public void CSSRulesTests_mediaQueryConditioselectorGroup()
{
String code =
"@media all and (application-dpi: 240) and (os-platform: \"Android\") { " + EOL +
" s|Label { fontWeight:bold; } " + EOL +
"}";
List<ICSSRule> rules = getCSSRules(code);
assertThat("rules.size()" , rules.size(), is(1) );
CSSRule rule = (CSSRule) rules.get(0);
assertThat("rule.getOperator()" , rule.getOperator(), is( CSSModelTreeType.RULE ) );
assertThat("rule.getMediaQueryConditions().size()" , rule.getMediaQueryConditions().size(), is( 3 ) );
assertThat("rule.getProperties().size()" , rule.getProperties().size(), is( 1 ) );
assertThat("rule.getSelectorGroup().size()" , rule.getSelectorGroup().size(), is( 1 ) );
CSSTypedNode selectorGroup = (CSSTypedNode) rule.children.get(0);
assertThat("selectorGroup.getOperator()", selectorGroup.getOperator(), is( CSSModelTreeType.SELECTOR_GROUP ) );
assertThat("selectorGroup.children.size()", selectorGroup.children.size(), is( 1 ) );
CSSTypedNode mediaQuery = (CSSTypedNode) rule.children.get(1);
assertThat("mediaQuery.getOperator()", mediaQuery.getOperator(), is( CSSModelTreeType.MEDIA_QUERY ) );
assertThat("mediaQuery.children.size()", mediaQuery.children.size(), is( 3 ) );
CSSTypedNode propertyList = (CSSTypedNode) rule.children.get(2);
assertThat("propertyList.getOperator()", propertyList.getOperator(), is( CSSModelTreeType.PROPERTY_LIST ) );
assertThat("propertyList.children.size()", propertyList.children.size(), is( 1 ) );
}
@Test
public void CSSRulesTests_mediaQueryConditiomediaQuery()
{
String code =
"@media all { " + EOL +
" s|Label { fontWeight:bold; } " + EOL +
"}";
List<ICSSRule> rules = getCSSRules(code);
assertThat("rules.size()" , rules.size(), is(1) );
CSSRule rule = (CSSRule) rules.get(0);
assertThat("rule.getOperator()" , rule.getOperator(), is( CSSModelTreeType.RULE ) );
assertThat("rule.getMediaQueryConditions().size()" , rule.getMediaQueryConditions().size(), is( 1 ) );
assertThat("rule.getProperties().size()" , rule.getProperties().size(), is( 1 ) );
assertThat("rule.getSelectorGroup().size()" , rule.getSelectorGroup().size(), is( 1 ) );
CSSTypedNode selectorGroup = (CSSTypedNode) rule.children.get(0);
assertThat("selectorGroup.getOperator()", selectorGroup.getOperator(), is( CSSModelTreeType.SELECTOR_GROUP ) );
assertThat("selectorGroup.children.size()", selectorGroup.children.size(), is( 1 ) );
CSSTypedNode mediaQuery = (CSSTypedNode) rule.children.get(1);
assertThat("mediaQuery.getOperator()", mediaQuery.getOperator(), is( CSSModelTreeType.MEDIA_QUERY ) );
assertThat("mediaQuery.children.size()", mediaQuery.children.size(), is( 1 ) );
CSSTypedNode propertyList = (CSSTypedNode) rule.children.get(2);
assertThat("propertyList.getOperator()", propertyList.getOperator(), is( CSSModelTreeType.PROPERTY_LIST ) );
assertThat("propertyList.children.size()", propertyList.children.size(), is( 1 ) );
}
}