From 0751cbed9da28f97ca52edd33daa3953aedced27 Mon Sep 17 00:00:00 2001 From: Florian Rappl Date: Thu, 2 Jun 2022 00:39:17 +0200 Subject: [PATCH] Fixed shorthand properties using inherit #100 --- CHANGELOG.md | 1 + .../Library/StringRepresentation.cs | 32 +++++++++++++++++++ .../Declarations/MarginDeclaration.cs | 2 +- .../Declarations/PaddingDeclaration.cs | 2 +- .../Extensions/ValueConverterExtensions.cs | 3 +- 5 files changed, 37 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 797b5bb5..e9d7f38b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ Released on Tuesday, May 31 2022. - Dropped .NET Framework 4.6 - Updated to use AngleSharp 0.17 - Fixed casing issue with color, timing, and gradient functions (#109) +- Fixed shorthand properties using `inherit` being omitted (#100) # 0.16.4 diff --git a/src/AngleSharp.Css.Tests/Library/StringRepresentation.cs b/src/AngleSharp.Css.Tests/Library/StringRepresentation.cs index e6a8629e..70b421c0 100644 --- a/src/AngleSharp.Css.Tests/Library/StringRepresentation.cs +++ b/src/AngleSharp.Css.Tests/Library/StringRepresentation.cs @@ -1,9 +1,11 @@ namespace AngleSharp.Css.Tests.Library { + using AngleSharp.Css.Dom; using AngleSharp.Css.Parser; using AngleSharp.Css.Values; using NUnit.Framework; using System.IO; + using static CssConstructionFunctions; [TestFixture] public class StringRepresentationTests @@ -41,5 +43,35 @@ public void TransparentColorDoesNotWorkWithHexOutput_Issue96() Color.UseHex = false; Assert.AreEqual("rgba(65, 12, 48, 0.04)", text); } + + [Test] + public void ShorthandPaddingInheritPropertiesShouldBeIncluded_Issue100() + { + var html = @""; + var dom = ParseDocument(html); + var styleSheet = dom.StyleSheets[0] as ICssStyleSheet; + var css = styleSheet.ToCss(); + Assert.AreEqual("#x div { padding: inherit }", css); + } + + [Test] + public void ShorthandMarginInheritPropertiesShouldBeIncluded_Issue100() + { + var html = @""; + var dom = ParseDocument(html); + var styleSheet = dom.StyleSheets[0] as ICssStyleSheet; + var css = styleSheet.ToCss(); + Assert.AreEqual("#x div { margin: inherit }", css); + } + + [Test] + public void ShorthandBorderInheritPropertiesShouldBeIncluded_Issue100() + { + var html = @""; + var dom = ParseDocument(html); + var styleSheet = dom.StyleSheets[0] as ICssStyleSheet; + var css = styleSheet.ToCss(); + Assert.AreEqual("#x div { border: inherit }", css); + } } } diff --git a/src/AngleSharp.Css/Declarations/MarginDeclaration.cs b/src/AngleSharp.Css/Declarations/MarginDeclaration.cs index d7062e04..dd0d9fca 100644 --- a/src/AngleSharp.Css/Declarations/MarginDeclaration.cs +++ b/src/AngleSharp.Css/Declarations/MarginDeclaration.cs @@ -27,7 +27,7 @@ static class MarginDeclaration sealed class MarginAggregator : IValueAggregator, IValueConverter { - private static readonly IValueConverter converter = AutoLengthOrPercentConverter.Periodic(); + private static readonly IValueConverter converter = Or(AutoLengthOrPercentConverter, AssignInitial(Length.Zero)).Periodic(); public ICssValue Convert(StringSource source) => converter.Convert(source); diff --git a/src/AngleSharp.Css/Declarations/PaddingDeclaration.cs b/src/AngleSharp.Css/Declarations/PaddingDeclaration.cs index 20d08b4d..6f846a3c 100644 --- a/src/AngleSharp.Css/Declarations/PaddingDeclaration.cs +++ b/src/AngleSharp.Css/Declarations/PaddingDeclaration.cs @@ -27,7 +27,7 @@ static class PaddingDeclaration sealed class PaddingAggregator : IValueAggregator, IValueConverter { - private static readonly IValueConverter converter = LengthOrPercentConverter.Periodic(); + private static readonly IValueConverter converter = Or(LengthOrPercentConverter, AssignInitial(Length.Zero)).Periodic(); public ICssValue Convert(StringSource source) => converter.Convert(source); diff --git a/src/AngleSharp.Css/Extensions/ValueConverterExtensions.cs b/src/AngleSharp.Css/Extensions/ValueConverterExtensions.cs index ba84dbfc..17b59636 100644 --- a/src/AngleSharp.Css/Extensions/ValueConverterExtensions.cs +++ b/src/AngleSharp.Css/Extensions/ValueConverterExtensions.cs @@ -5,6 +5,7 @@ namespace AngleSharp.Css.Converters using AngleSharp.Text; using System; using System.Collections.Generic; + using static ValueConverters; /// /// Essential extensions for using the value converters. @@ -61,7 +62,7 @@ public static IValueConverter Exclusive(this IValueConverter converter) } public static IValueConverter Option(this IValueConverter converter, ICssValue defaultValue) => - new OptionValueConverter(converter, defaultValue); + Or(new OptionValueConverter(converter, defaultValue), AssignInitial(defaultValue)); public static String Join(this IEnumerable values, String separator) where T : ICssValue