/*
*
* 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.hamcrest.core.IsNot.not;
import static org.junit.Assert.assertThat;
import java.util.List;
import org.apache.flex.compiler.css.ICSSCombinator;
import org.apache.flex.compiler.css.ICSSDocument;
import org.apache.flex.compiler.css.ICSSSelector;
import org.junit.Test;
import com.google.common.collect.ImmutableList;
/**
* JUnit tests for {@link CSSSelector}.
*
* @author Gordon Smith
*/
public class CSSSelectorTests extends CSSBaseTests {
private static final String EOL = "\n\t\t";
private String getPostfix()
{
return " { " + EOL +
" fontWeight:bold; " + EOL +
"} ";
}
@Override
public ICSSDocument getCSSNodeBase(String code) {
return super.getCSSNodeBase(code + getPostfix());
}
private ICSSSelector getCSSFirstSelector(String code) {
return getCSSSelectors(code).get(0);
}
@Test
public void CSSSelectorTests_selector1()
{
String code = " s|VBox ";
List<ICSSSelector> selectors = getCSSSelectors(code);
assertThat("selectors.size()" , selectors.size(), is(1) );
CSSSelector selector = (CSSSelector) selectors.get(0);
assertThat("selector" , selector.getOperator(), is( CSSModelTreeType.SELECTOR ) );
assertThat("selector.getCombinator()" , selector.getCombinator() , is( (ICSSCombinator) null ) );
assertThat("selector.getConditions().size()" , selector.getConditions().size(), is( 0 ) );
assertThat("selector.getCSSSyntax()" , selector.getCSSSyntax(), is( "s|VBox" ) );
assertThat("selector.getElementName()" , selector.getElementName(), is( "VBox" ) );
assertThat("selector.getNamespacePrefix()" , selector.getNamespacePrefix(), is( "s" ) );
assertThat("selector.isAdvanced()" , selector.isAdvanced(), is( true ) );
}
@Test
public void CSSSelectorTests_duplicate_selector()
{
String code = " s|VBox, s|VBox ";
List<ICSSSelector> selectors = getCSSSelectors(code);
assertThat("selectors.size()" , selectors.size(), is(2) );
CSSSelector selector1 = (CSSSelector) selectors.get(0);
assertThat("selector1.getOperator()" , selector1.getOperator(), is( CSSModelTreeType.SELECTOR ) );
assertThat("selector.getCombinator()" , selector1.getCombinator() , is( (ICSSCombinator) null ) );
assertThat("selector1.getConditions().size()" , selector1.getConditions().size(), is( 0 ) );
assertThat("selector1.getCSSSyntax()" , selector1.getCSSSyntax(), is( "s|VBox" ) );
assertThat("selector1.getElementName()" , selector1.getElementName(), is( "VBox" ) );
assertThat("selector1.getNamespacePrefix()" , selector1.getNamespacePrefix(), is( "s" ) );
assertThat("selector1.isAdvanced()" , selector1.isAdvanced(), is( true ) );
CSSSelector selector2 = (CSSSelector) selectors.get(0);
assertThat("selector2.getOperator()" , selector2.getOperator(), is( CSSModelTreeType.SELECTOR ) );
assertThat("selector2.getCombinator()" , selector2.getCombinator() , is( (ICSSCombinator) null ) );
assertThat("selector2.getConditions().size()" , selector2.getConditions().size(), is( 0 ) );
assertThat("selector2.getCSSSyntax()" , selector2.getCSSSyntax(), is( "s|VBox" ) );
assertThat("selector2.getElementName()" , selector2.getElementName(), is( "VBox" ) );
assertThat("selector2.getNamespacePrefix()" , selector2.getNamespacePrefix(), is( "s" ) );
assertThat("selector2.isAdvanced()" , selector2.isAdvanced(), is( true ) );
}
@Test
public void CSSSelectorTests_selector_combination()
{
String code = " s|VBox .test";
List<ICSSSelector> selectors = getCSSSelectors(code);
assertThat("selectors.size()" , selectors.size(), is(1) );
CSSSelector selector = (CSSSelector) selectors.get(0);
assertThat("selector.getOperator()" , selector.getOperator(), is( CSSModelTreeType.SELECTOR ) );
assertThat("selector.getCombinator()" , selector.getCombinator() , not( (ICSSCombinator) null ) );
assertThat("selector.getConditions().size()" , selector.getConditions().size(), is( 1 ) );
assertThat("selector.getCSSSyntax()" , selector.getCSSSyntax(), is( "s|VBox .test" ) );
assertThat("selector.getElementName()" , selector.getElementName(), is( (String) null ) );
assertThat("selector.getNamespacePrefix()" , selector.getNamespacePrefix(), is( (String) null ) );
assertThat("selector.isAdvanced()" , selector.isAdvanced(), is( true ) );
}
@Test
public void CSSSelectorTests_selector_conditions()
{
String code = " s|Button.rounded#main:up";
List<ICSSSelector> selectors = getCSSSelectors(code);
assertThat("selectors.size()" , selectors.size(), is(1) );
CSSSelector selector = (CSSSelector) selectors.get(0);
assertThat("selector.getOperator()" , selector.getOperator(), is( CSSModelTreeType.SELECTOR ) );
assertThat("selector.getCombinator()" , selector.getCombinator() , is( (ICSSCombinator) null ) );
assertThat("selector.getConditions().size()" , selector.getConditions().size(), is( 3 ) );
assertThat("selector.getCSSSyntax()" , selector.getCSSSyntax(), is( "s|Button.rounded#main:up" ) );
assertThat("selector.getElementName()" , selector.getElementName(), is( "Button" ) );
assertThat("selector.getNamespacePrefix()" , selector.getNamespacePrefix(), is( "s" ) );
assertThat("selector.isAdvanced()" , selector.isAdvanced(), is( true ) );
}
@Test
public void CSSSelectorTests_selector_combinator()
{
String code = " s|VBox s|Label .test";
List<ICSSSelector> selectors = getCSSSelectors(code);
assertThat("selectors.size()" , selectors.size(), is(1) );
CSSSelector selector = (CSSSelector) selectors.get(0);
assertThat("selector.getOperator()" , selector.getOperator(), is( CSSModelTreeType.SELECTOR ) );
assertThat("selector.getCombinator()" , selector.getCombinator() , not( (ICSSCombinator) null ) );
assertThat("selector.getConditions().size()" , selector.getConditions().size(), is( 1 ) );
assertThat("selector.getCSSSyntax()" , selector.getCSSSyntax(), is( "s|VBox s|Label .test" ) );
assertThat("selector.getElementName()" , selector.getElementName(), is( (String) null ) );
assertThat("selector.getNamespacePrefix()" , selector.getNamespacePrefix(), is( (String) null ) );
assertThat("selector.isAdvanced()" , selector.isAdvanced(), is( true ) );
}
@Test
public void CSSSelectorTests_selector_combinator_conditions()
{
String code = " s|VBox , s|HBox s|Button.rounded#main:up ";
List<ICSSSelector> selectors = getCSSSelectors(code);
assertThat("selectors.size()" , selectors.size(), is(2) );
CSSSelector selector1 = (CSSSelector) selectors.get(0);
assertThat("selector1.getOperator()" , selector1.getOperator(), is( CSSModelTreeType.SELECTOR ) );
assertThat("selector1.getCombinator()" , selector1.getCombinator() , is( (ICSSCombinator) null ) );
assertThat("selector1.getConditions().size()" , selector1.getConditions().size(), is( 0 ) );
assertThat("selector1.getCSSSyntax()" , selector1.getCSSSyntax(), is( "s|VBox" ) );
assertThat("selector1.getElementName()" , selector1.getElementName(), is( "VBox") );
assertThat("selector1.getNamespacePrefix()" , selector1.getNamespacePrefix(), is( "s" ) );
assertThat("selector1.isAdvanced()" , selector1.isAdvanced(), is( true ) );
CSSSelector selector2 = (CSSSelector) selectors.get(1);
assertThat("selector2.getOperator()" , selector1.getOperator(), is( CSSModelTreeType.SELECTOR ) );
assertThat("selector2.getCombinator()" , selector2.getCombinator() , not( (ICSSCombinator) null ) );
assertThat("selector2.getConditions().size()" , selector2.getConditions().size(), is( 3 ) );
assertThat("selector2.getCSSSyntax()" , selector2.getCSSSyntax(), is( "s|HBox s|Button.rounded#main:up" ) );
assertThat("selector2.getElementName()" , selector2.getElementName(), is( "Button" ) );
assertThat("selector2.getNamespacePrefix()" , selector2.getNamespacePrefix(), is( "s") );
assertThat("selector2.isAdvanced()" , selector2.isAdvanced(), is( true ) );
}
@Test
public void CSSSelectorTests_static_getCombinedSelectorList()
{
ImmutableList<ICSSSelector> combinedSelectors1 = CSSSelector.getCombinedSelectorList( getCSSFirstSelector("s|Label .test #Name") );
assertThat("combinedSelectors1.size()" , combinedSelectors1.size(), is( 3 ) );
ImmutableList<ICSSSelector> combinedSelectors2 = CSSSelector.getCombinedSelectorList( getCSSFirstSelector("#Name") );
assertThat("combinedSelectors2.size()" , combinedSelectors2.size(), is( 1 ) );
ImmutableList<ICSSSelector> combinedSelectors3 = CSSSelector.getCombinedSelectorList( getCSSFirstSelector("s|Label") );
assertThat("combinedSelectors3.size()" , combinedSelectors3.size(), is( 1 ) );
ImmutableList<ICSSSelector> combinedSelectors4 = CSSSelector.getCombinedSelectorList( null );
assertThat("combinedSelectors4.size()" , combinedSelectors4.size(), is( 0 ) );
}
}