/**
* Copyright (C) 2014-2017 Philip Helger (www.helger.com)
* philip[at]helger[dot]com
*
* 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.helger.css.decl;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import javax.annotation.Nonnull;
import org.junit.Test;
import com.helger.commons.mock.CommonsTestHelper;
import com.helger.css.ECSSVersion;
import com.helger.css.reader.CSSReader;
/**
* Test class for {@link CSSStyleRule}.
*
* @author Philip Helger
*/
public final class CSSStyleRuleTest
{
@Nonnull
private static CSSStyleRule _parse (@Nonnull final String sCSS)
{
final CascadingStyleSheet aCSS = CSSReader.readFromString (sCSS, ECSSVersion.CSS30);
assertNotNull (sCSS, aCSS);
assertTrue (aCSS.hasStyleRules ());
assertEquals (1, aCSS.getStyleRuleCount ());
final CSSStyleRule ret = aCSS.getAllStyleRules ().get (0);
assertNotNull (ret);
return ret;
}
@Test
public void testRead1 ()
{
CSSStyleRule aSR;
aSR = _parse ("div { color: red; }");
assertEquals (1, aSR.getSelectorCount ());
assertEquals (1, aSR.getSelectorAtIndex (0).getMemberCount ());
assertTrue (aSR.getSelectorAtIndex (0).getMemberAtIndex (0) instanceof CSSSelectorSimpleMember);
assertEquals ("div", ((CSSSelectorSimpleMember) aSR.getSelectorAtIndex (0).getMemberAtIndex (0)).getValue ());
assertEquals (1, aSR.getDeclarationCount ());
assertEquals ("color", aSR.getDeclarationAtIndex (0).getProperty ());
assertEquals (1, aSR.getDeclarationAtIndex (0).getExpression ().getMemberCount ());
assertTrue (aSR.getDeclarationAtIndex (0)
.getExpression ()
.getMemberAtIndex (0) instanceof CSSExpressionMemberTermSimple);
assertEquals ("red",
((CSSExpressionMemberTermSimple) aSR.getDeclarationAtIndex (0)
.getExpression ()
.getMemberAtIndex (0)).getValue ());
// Create the same rule by application
final CSSStyleRule aCreated = new CSSStyleRule ();
aCreated.addSelector (new CSSSelectorSimpleMember ("div"));
aCreated.addDeclaration ("color", CSSExpression.createSimple ("red"), false);
CommonsTestHelper.testDefaultImplementationWithEqualContentObject (aSR, aCreated);
}
@Test
public void testRead2 ()
{
CSSStyleRule aSR;
aSR = _parse ("div, .colored, #my-red, #menu > .active, a[href^=red] { }");
assertEquals (5, aSR.getSelectorCount ());
assertEquals (1, aSR.getSelectorAtIndex (0).getMemberCount ());
assertTrue (aSR.getSelectorAtIndex (0).getMemberAtIndex (0) instanceof CSSSelectorSimpleMember);
assertEquals (1, aSR.getSelectorAtIndex (1).getMemberCount ());
assertTrue (aSR.getSelectorAtIndex (1).getMemberAtIndex (0) instanceof CSSSelectorSimpleMember);
assertEquals (1, aSR.getSelectorAtIndex (2).getMemberCount ());
assertTrue (aSR.getSelectorAtIndex (2).getMemberAtIndex (0) instanceof CSSSelectorSimpleMember);
assertEquals (3, aSR.getSelectorAtIndex (3).getMemberCount ());
assertTrue (aSR.getSelectorAtIndex (3).getMemberAtIndex (0) instanceof CSSSelectorSimpleMember);
assertTrue (aSR.getSelectorAtIndex (3).getMemberAtIndex (1) instanceof ECSSSelectorCombinator);
assertTrue (aSR.getSelectorAtIndex (3).getMemberAtIndex (2) instanceof CSSSelectorSimpleMember);
assertEquals (2, aSR.getSelectorAtIndex (4).getMemberCount ());
assertTrue (aSR.getSelectorAtIndex (4).getMemberAtIndex (0) instanceof CSSSelectorSimpleMember);
assertTrue (aSR.getSelectorAtIndex (4).getMemberAtIndex (1) instanceof CSSSelectorAttribute);
// Create the same rule by application
final CSSStyleRule aCreated = new CSSStyleRule ();
aCreated.addSelector (new CSSSelectorSimpleMember ("div"));
aCreated.addSelector (new CSSSelectorSimpleMember (".colored"));
aCreated.addSelector (new CSSSelectorSimpleMember ("#my-red"));
aCreated.addSelector (new CSSSelector ().addMember (new CSSSelectorSimpleMember ("#menu"))
.addMember (ECSSSelectorCombinator.GREATER)
.addMember (new CSSSelectorSimpleMember (".active")));
aCreated.addSelector (new CSSSelector ().addMember (new CSSSelectorSimpleMember ("a"))
.addMember (new CSSSelectorAttribute (null,
"href",
ECSSAttributeOperator.BEGINMATCH,
"red")));
CommonsTestHelper.testDefaultImplementationWithEqualContentObject (aSR, aCreated);
}
}