Skip to content

Commit 586b888

Browse files
authored
Merge pull request #199 from jafin/fix/important-declaration-override
Fix !important declarations being overridden by non-important duplicates
2 parents cbb53f9 + 6a1027d commit 586b888

2 files changed

Lines changed: 64 additions & 0 deletions

File tree

src/AngleSharp.Css.Tests/Declarations/CssPaddingProperty.cs

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
namespace AngleSharp.Css.Tests.Declarations
22
{
3+
using AngleSharp.Css.Dom;
4+
using AngleSharp.Dom;
35
using NUnit.Framework;
46
using static CssConstructionFunctions;
57

@@ -139,5 +141,62 @@ public void CssPaddingShouldBeRecombinedCorrectly()
139141
var actual = result.CssText;
140142
Assert.AreEqual(expected, actual);
141143
}
144+
145+
[Test]
146+
public void CssPaddingImportantShouldNotBeOverriddenByNonImportant()
147+
{
148+
var snippet = "padding: 20px !important; font-size: 20px; padding: 0";
149+
var style = ParseDeclarations(snippet);
150+
var padding = style.GetPropertyValue("padding");
151+
Assert.AreEqual("20px", padding);
152+
var paddingProp = style.GetProperty("padding");
153+
Assert.IsNotNull(paddingProp);
154+
Assert.IsTrue(paddingProp.IsImportant);
155+
var fontSize = style.GetPropertyValue("font-size");
156+
Assert.AreEqual("20px", fontSize);
157+
}
158+
159+
[Test]
160+
public void CssPaddingImportantShouldBeOverriddenByImportant()
161+
{
162+
var snippet = "padding: 20px !important; padding: 0 !important";
163+
var style = ParseDeclarations(snippet);
164+
var padding = style.GetPropertyValue("padding");
165+
Assert.AreEqual("0", padding);
166+
var paddingProp = style.GetProperty("padding");
167+
Assert.IsNotNull(paddingProp);
168+
Assert.IsTrue(paddingProp.IsImportant);
169+
}
170+
171+
[Test]
172+
public void CssPaddingNonImportantShouldBeOverriddenByNonImportant()
173+
{
174+
var snippet = "padding: 20px; padding: 0";
175+
var style = ParseDeclarations(snippet);
176+
var padding = style.GetPropertyValue("padding");
177+
Assert.AreEqual("0", padding);
178+
}
179+
180+
[Test]
181+
public void CssPaddingNonImportantShouldBeOverriddenByImportant()
182+
{
183+
var snippet = "padding: 20px; padding: 0 !important";
184+
var style = ParseDeclarations(snippet);
185+
var padding = style.GetPropertyValue("padding");
186+
Assert.AreEqual("0", padding);
187+
var paddingProp = style.GetProperty("padding");
188+
Assert.IsNotNull(paddingProp);
189+
Assert.IsTrue(paddingProp.IsImportant);
190+
}
191+
192+
[Test]
193+
public void CssInlineStyleImportantPaddingShouldTakePrecedence()
194+
{
195+
var html = "<p style=\"padding: 20px !important; font-size: 20px; padding: 0;\">Test</p>";
196+
var dom = ParseDocument(html);
197+
var p = dom.QuerySelector("p");
198+
var style = p.GetStyle();
199+
Assert.AreEqual("padding: 20px !important; font-size: 20px", style.CssText);
200+
}
142201
}
143202
}

src/AngleSharp.Css/Dom/Internal/CssStyleDeclaration.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -424,6 +424,11 @@ private void SetLonghand(ICssProperty property)
424424

425425
if (declaration.Name.Is(property.Name))
426426
{
427+
if (declaration.IsImportant && !property.IsImportant)
428+
{
429+
return;
430+
}
431+
427432
_declarations[i] = property;
428433
return;
429434
}

0 commit comments

Comments
 (0)