diff --git a/src/AngleSharp.Css.Tests/Declarations/CssPaddingProperty.cs b/src/AngleSharp.Css.Tests/Declarations/CssPaddingProperty.cs index 70d7794..2560c54 100644 --- a/src/AngleSharp.Css.Tests/Declarations/CssPaddingProperty.cs +++ b/src/AngleSharp.Css.Tests/Declarations/CssPaddingProperty.cs @@ -1,5 +1,7 @@ namespace AngleSharp.Css.Tests.Declarations { + using AngleSharp.Css.Dom; + using AngleSharp.Dom; using NUnit.Framework; using static CssConstructionFunctions; @@ -139,5 +141,62 @@ public void CssPaddingShouldBeRecombinedCorrectly() var actual = result.CssText; Assert.AreEqual(expected, actual); } + + [Test] + public void CssPaddingImportantShouldNotBeOverriddenByNonImportant() + { + var snippet = "padding: 20px !important; font-size: 20px; padding: 0"; + var style = ParseDeclarations(snippet); + var padding = style.GetPropertyValue("padding"); + Assert.AreEqual("20px", padding); + var paddingProp = style.GetProperty("padding"); + Assert.IsNotNull(paddingProp); + Assert.IsTrue(paddingProp.IsImportant); + var fontSize = style.GetPropertyValue("font-size"); + Assert.AreEqual("20px", fontSize); + } + + [Test] + public void CssPaddingImportantShouldBeOverriddenByImportant() + { + var snippet = "padding: 20px !important; padding: 0 !important"; + var style = ParseDeclarations(snippet); + var padding = style.GetPropertyValue("padding"); + Assert.AreEqual("0", padding); + var paddingProp = style.GetProperty("padding"); + Assert.IsNotNull(paddingProp); + Assert.IsTrue(paddingProp.IsImportant); + } + + [Test] + public void CssPaddingNonImportantShouldBeOverriddenByNonImportant() + { + var snippet = "padding: 20px; padding: 0"; + var style = ParseDeclarations(snippet); + var padding = style.GetPropertyValue("padding"); + Assert.AreEqual("0", padding); + } + + [Test] + public void CssPaddingNonImportantShouldBeOverriddenByImportant() + { + var snippet = "padding: 20px; padding: 0 !important"; + var style = ParseDeclarations(snippet); + var padding = style.GetPropertyValue("padding"); + Assert.AreEqual("0", padding); + var paddingProp = style.GetProperty("padding"); + Assert.IsNotNull(paddingProp); + Assert.IsTrue(paddingProp.IsImportant); + } + + [Test] + public void CssInlineStyleImportantPaddingShouldTakePrecedence() + { + var html = "

Test

"; + var dom = ParseDocument(html); + var p = dom.QuerySelector("p"); + var style = p.GetStyle(); + Assert.AreEqual("padding: 20px !important; font-size: 20px", style.CssText); + } } } diff --git a/src/AngleSharp.Css/Dom/Internal/CssStyleDeclaration.cs b/src/AngleSharp.Css/Dom/Internal/CssStyleDeclaration.cs index 11f937e..7661ac1 100644 --- a/src/AngleSharp.Css/Dom/Internal/CssStyleDeclaration.cs +++ b/src/AngleSharp.Css/Dom/Internal/CssStyleDeclaration.cs @@ -424,6 +424,11 @@ private void SetLonghand(ICssProperty property) if (declaration.Name.Is(property.Name)) { + if (declaration.IsImportant && !property.IsImportant) + { + return; + } + _declarations[i] = property; return; }