From 7c2f893f4dd151403055f6ac3d15f8a81d8d39ee Mon Sep 17 00:00:00 2001 From: Simon Baynes Date: Fri, 23 Aug 2024 14:10:11 +0100 Subject: [PATCH] Add capability to add custom replacer to scheme Closes #463 --- CHANGELOG.md | 4 + src/Html2Markdown/Scheme/AbstractScheme.cs | 5 + .../Scheme/AbstractSchemeTests.cs | 106 ++++++++++++++++++ 3 files changed, 115 insertions(+) create mode 100644 test/Html2Markdown.Test/Scheme/AbstractSchemeTests.cs diff --git a/CHANGELOG.md b/CHANGELOG.md index 1ba9c488..ce469d5b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added + +- Added support extending existing Schemes for customisation + ## [7.0.0.8] - 2024-08-15 ### Added diff --git a/src/Html2Markdown/Scheme/AbstractScheme.cs b/src/Html2Markdown/Scheme/AbstractScheme.cs index 5e2cb620..c1d5fc9e 100644 --- a/src/Html2Markdown/Scheme/AbstractScheme.cs +++ b/src/Html2Markdown/Scheme/AbstractScheme.cs @@ -30,4 +30,9 @@ public IList Replacers() { return ReplacerCollection; } + + public void AddReplacer(IReplacer replacer) + { + ReplacerCollection.Add(replacer); + } } \ No newline at end of file diff --git a/test/Html2Markdown.Test/Scheme/AbstractSchemeTests.cs b/test/Html2Markdown.Test/Scheme/AbstractSchemeTests.cs new file mode 100644 index 00000000..16872329 --- /dev/null +++ b/test/Html2Markdown.Test/Scheme/AbstractSchemeTests.cs @@ -0,0 +1,106 @@ +using System.Collections.Generic; +using Html2Markdown.Replacement; +using Html2Markdown.Scheme; + +namespace Html2Markdown.Test.Scheme; + +public class AbstractSchemeTests +{ + [Test] + public void Replacers_WhenCalled_ReturnsReplacerCollection() + { + // arrange + const int expectedCount = 1; + var scheme = new TestScheme(); + + // act + var replacers = scheme.Replacers(); + + // assert + Assert.That(replacers.Count, Is.EqualTo(expectedCount)); + } + + [Test] + public void Replacers_WhenCalled_ReturnsReplacerCollectionWithTestReplacer() + { + // arrange + var scheme = new TestScheme(); + + // act + var replacers = scheme.Replacers(); + + // assert + Assert.That(replacers[0], Is.InstanceOf()); + } + + [Test] + public void Replacers_WhenCalled_ReturnsReplacerCollectionWithTestReplacerReplaceMethod() + { + // arrange + const string expected = "test"; + var scheme = new TestScheme(); + + // act + var replacers = scheme.Replacers(); + var result = replacers[0].Replace(string.Empty); + + // assert + Assert.That(result, Is.EqualTo(expected)); + } + + [Test] + public void AddReplacer_WhenCalled_AddsReplacerToReplacerCollection() + { + // arrange + const int expectedCount = 2; + var scheme = new TestScheme(); + + // act + scheme.AddReplacer(new TestReplacer()); + var replacers = scheme.Replacers(); + + // assert + Assert.That(replacers.Count, Is.EqualTo(expectedCount)); + } + + [Test] + public void AddReplacer_WhenCalled_AddsReplacerToReplacerCollectionWithTestReplacer() + { + // arrange + var scheme = new TestScheme(); + + // act + scheme.AddReplacer(new TestReplacer()); + var replacers = scheme.Replacers(); + + // assert + Assert.That(replacers[1], Is.InstanceOf()); + } +} + +public class TestScheme : AbstractScheme +{ + public TestScheme() + { + AddReplacementGroup(ReplacerCollection, new TestReplacementGroup()); + } +} + +public class TestReplacementGroup : IReplacementGroup +{ + public IEnumerable Replacers() + { + return new List + { + new TestReplacer() + }; + } +} + +public class TestReplacer : IReplacer +{ + public string Replace(string html) + { + return "test"; + } +} \ No newline at end of file