From 6b492ea91a7af32aa746ad9f088615e3f6ef10f3 Mon Sep 17 00:00:00 2001 From: Divyansh Date: Thu, 16 Jan 2020 15:15:23 -0800 Subject: [PATCH 1/6] Added Extension for html post processing --- PowerToys.sln | 14 +++ .../BootstrapExtension.cs | 85 +++++++++++++++++++ .../MarkDownPreviewHandler/Extension.cs | 85 +++++++++++++++++++ .../MarkDownPreviewHandler.csproj | 69 +++++++++++++++ .../Properties/AssemblyInfo.cs | 40 +++++++++ unit/PreviewPaneUnitTests.csproj | 58 +++++++++++++ unit/Properties/AssemblyInfo.cs | 20 +++++ unit/UnitTest1.cs | 14 +++ 8 files changed, 385 insertions(+) create mode 100644 src/modules/previewpane/MarkDownPreviewHandler/BootstrapExtension.cs create mode 100644 src/modules/previewpane/MarkDownPreviewHandler/Extension.cs create mode 100644 src/modules/previewpane/MarkDownPreviewHandler/MarkDownPreviewHandler.csproj create mode 100644 src/modules/previewpane/MarkDownPreviewHandler/Properties/AssemblyInfo.cs create mode 100644 unit/PreviewPaneUnitTests.csproj create mode 100644 unit/Properties/AssemblyInfo.cs create mode 100644 unit/UnitTest1.cs diff --git a/PowerToys.sln b/PowerToys.sln index 3fc62ac04940..de91d00789ee 100644 --- a/PowerToys.sln +++ b/PowerToys.sln @@ -90,6 +90,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "previewpane", "previewpane" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Common", "src\modules\previewpane\common\Common.csproj", "{AF2349B8-E5B6-4004-9502-687C1C7730B1}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MarkDownPreviewHandler", "src\modules\previewpane\MarkDownPreviewHandler\MarkDownPreviewHandler.csproj", "{6A71162E-FC4C-4A2C-B90F-3CF94F59A9BB}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PreviewPaneUnitTests", "unit\PreviewPaneUnitTests.csproj", "{209FBCAC-23EB-4D0C-AB49-6CC11D6DE1C4}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64 = Debug|x64 @@ -168,6 +172,14 @@ Global {AF2349B8-E5B6-4004-9502-687C1C7730B1}.Debug|x64.Build.0 = Debug|x64 {AF2349B8-E5B6-4004-9502-687C1C7730B1}.Release|x64.ActiveCfg = Release|x64 {AF2349B8-E5B6-4004-9502-687C1C7730B1}.Release|x64.Build.0 = Release|x64 + {6A71162E-FC4C-4A2C-B90F-3CF94F59A9BB}.Debug|x64.ActiveCfg = Debug|x64 + {6A71162E-FC4C-4A2C-B90F-3CF94F59A9BB}.Debug|x64.Build.0 = Debug|x64 + {6A71162E-FC4C-4A2C-B90F-3CF94F59A9BB}.Release|x64.ActiveCfg = Release|x64 + {6A71162E-FC4C-4A2C-B90F-3CF94F59A9BB}.Release|x64.Build.0 = Release|x64 + {209FBCAC-23EB-4D0C-AB49-6CC11D6DE1C4}.Debug|x64.ActiveCfg = Debug|Any CPU + {209FBCAC-23EB-4D0C-AB49-6CC11D6DE1C4}.Debug|x64.Build.0 = Debug|Any CPU + {209FBCAC-23EB-4D0C-AB49-6CC11D6DE1C4}.Release|x64.ActiveCfg = Release|Any CPU + {209FBCAC-23EB-4D0C-AB49-6CC11D6DE1C4}.Release|x64.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -193,6 +205,8 @@ Global {0485F45C-EA7A-4BB5-804B-3E8D14699387} = {89E20BCE-EB9C-46C8-8B50-E01A82E6FDC3} {2F305555-C296-497E-AC20-5FA1B237996A} = {4574FDD0-F61D-4376-98BF-E5A1262C11EC} {AF2349B8-E5B6-4004-9502-687C1C7730B1} = {2F305555-C296-497E-AC20-5FA1B237996A} + {6A71162E-FC4C-4A2C-B90F-3CF94F59A9BB} = {2F305555-C296-497E-AC20-5FA1B237996A} + {209FBCAC-23EB-4D0C-AB49-6CC11D6DE1C4} = {2F305555-C296-497E-AC20-5FA1B237996A} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {C3A2F9D1-7930-4EF4-A6FC-7EE0A99821D0} diff --git a/src/modules/previewpane/MarkDownPreviewHandler/BootstrapExtension.cs b/src/modules/previewpane/MarkDownPreviewHandler/BootstrapExtension.cs new file mode 100644 index 000000000000..dcca64391989 --- /dev/null +++ b/src/modules/previewpane/MarkDownPreviewHandler/BootstrapExtension.cs @@ -0,0 +1,85 @@ +// Copyright (c) Alexandre Mutel. All rights reserved. +// This file is licensed under the BSD-Clause 2 license. +// See the license.txt file in the project root for more information. + +using System; +using System.IO; +using Markdig; +using Markdig.Extensions.Figures; +using Markdig.Extensions.Tables; +using Markdig.Renderers; +using Markdig.Renderers.Html; +using Markdig.Syntax; +using Markdig.Syntax.Inlines; + +namespace MarkDownPreviewHandler +{ + /// + /// Extension for tagging some HTML elements with bootstrap classes. + /// + /// + public class BootstrapExtension : IMarkdownExtension + { + public static string BaseUrl; + + public void Setup(MarkdownPipelineBuilder pipeline) + { + // Make sure we don't have a delegate twice + pipeline.DocumentProcessed -= PipelineOnDocumentProcessed; + pipeline.DocumentProcessed += PipelineOnDocumentProcessed; + } + + public void Setup(MarkdownPipeline pipeline, IMarkdownRenderer renderer) + { + } + + private static void PipelineOnDocumentProcessed(MarkdownDocument document) + { + foreach (var node in document.Descendants()) + { + if (node is HtmlBlock) + { + var content = node as HtmlBlock; + Console.WriteLine(content.Type); + + } + if (node is Block) + { + if (node is Table) + { + node.GetAttributes().AddClass("table table-striped table-bordered"); + } + else if (node is QuoteBlock) + { + node.GetAttributes().AddClass("blockquote"); + } + else if (node is Figure) + { + node.GetAttributes().AddClass("figure"); + } + else if (node is FigureCaption) + { + node.GetAttributes().AddClass("figure-caption"); + } + } + else if (node is Inline) + { + var link = node as LinkInline; + + if (link != null && link.IsImage) + { + if (!Uri.TryCreate(link.Url, UriKind.Absolute, out Uri uriLink)) + { + link.Url = link.Url.TrimStart('/'); + BaseUrl = BaseUrl.TrimEnd('/'); + uriLink = new Uri(Path.Combine(BaseUrl, link.Url)); + //link.GetAttributes().AddClass("img-fluid"); + link.Url = uriLink.ToString(); + } + link.GetAttributes().AddClass("img-fluid"); + } + } + } + } + } +} \ No newline at end of file diff --git a/src/modules/previewpane/MarkDownPreviewHandler/Extension.cs b/src/modules/previewpane/MarkDownPreviewHandler/Extension.cs new file mode 100644 index 000000000000..be0411dd86aa --- /dev/null +++ b/src/modules/previewpane/MarkDownPreviewHandler/Extension.cs @@ -0,0 +1,85 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.IO; +using Markdig; +using Markdig.Extensions.Figures; +using Markdig.Extensions.Tables; +using Markdig.Renderers; +using Markdig.Renderers.Html; +using Markdig.Syntax; +using Markdig.Syntax.Inlines; + +namespace MarkDownPreviewHandler +{ + /// + /// Markdig Extension to process html nodes in markdown AST. + /// + internal class Extension : IMarkdownExtension + { + /// + /// Gets or sets path to directory containing markdown file. + /// + private string BaseUrl { get; set; } + + /// + public void Setup(MarkdownPipelineBuilder pipeline) + { + // Make sure we don't have a delegate twice + pipeline.DocumentProcessed -= this.PipelineOnDocumentProcessed; + pipeline.DocumentProcessed += this.PipelineOnDocumentProcessed; + } + + /// + public void Setup(MarkdownPipeline pipeline, IMarkdownRenderer renderer) + { + } + + /// + /// Process nodes in markdown AST. + /// + /// Markdown Document. + private void PipelineOnDocumentProcessed(MarkdownDocument document) + { + foreach (var node in document.Descendants()) + { + if (node is Block) + { + if (node is Table) + { + node.GetAttributes().AddClass("table table-striped table-bordered"); + } + else if (node is QuoteBlock) + { + node.GetAttributes().AddClass("blockquote"); + } + else if (node is Figure) + { + node.GetAttributes().AddClass("figure"); + } + else if (node is FigureCaption) + { + node.GetAttributes().AddClass("figure-caption"); + } + } + else if (node is Inline) + { + if (node is LinkInline link && link.IsImage) + { + if (!Uri.TryCreate(link.Url, UriKind.Absolute, out Uri uriLink)) + { + link.Url = link.Url.TrimStart('/'); + this.BaseUrl = this.BaseUrl.TrimEnd('/'); + uriLink = new Uri(Path.Combine(this.BaseUrl, link.Url)); + link.Url = uriLink.ToString(); + } + + link.GetAttributes().AddClass("img-fluid"); + } + } + } + } + } +} diff --git a/src/modules/previewpane/MarkDownPreviewHandler/MarkDownPreviewHandler.csproj b/src/modules/previewpane/MarkDownPreviewHandler/MarkDownPreviewHandler.csproj new file mode 100644 index 000000000000..0d6e84ac585e --- /dev/null +++ b/src/modules/previewpane/MarkDownPreviewHandler/MarkDownPreviewHandler.csproj @@ -0,0 +1,69 @@ + + + + + Debug + AnyCPU + {6A71162E-FC4C-4A2C-B90F-3CF94F59A9BB} + Library + Properties + MarkDownPreviewHandler + MarkDownPreviewHandler + v4.8 + 512 + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + true + bin/Debug/commonDocumentation.xml + x64 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + true + bin/Release/commonDocumentation.xml + x64 + + + + + + + + + + + + + + + + + + 0.18.0 + + + 1.1.118 + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + + StyleCop.json + + + + \ No newline at end of file diff --git a/src/modules/previewpane/MarkDownPreviewHandler/Properties/AssemblyInfo.cs b/src/modules/previewpane/MarkDownPreviewHandler/Properties/AssemblyInfo.cs new file mode 100644 index 000000000000..f4c69d03e632 --- /dev/null +++ b/src/modules/previewpane/MarkDownPreviewHandler/Properties/AssemblyInfo.cs @@ -0,0 +1,40 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("MarkDownPreviewHandler")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("MarkDownPreviewHandler")] +[assembly: AssemblyCopyright("Copyright © 2020")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("6a71162e-fc4c-4a2c-b90f-3cf94f59a9bb")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/unit/PreviewPaneUnitTests.csproj b/unit/PreviewPaneUnitTests.csproj new file mode 100644 index 000000000000..255dca0d757e --- /dev/null +++ b/unit/PreviewPaneUnitTests.csproj @@ -0,0 +1,58 @@ + + + + + Debug + AnyCPU + {209FBCAC-23EB-4D0C-AB49-6CC11D6DE1C4} + Library + Properties + unit + unit + v4.8 + 512 + {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 15.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages + False + UnitTest + + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + 1.3.2 + + + 1.3.2 + + + + + \ No newline at end of file diff --git a/unit/Properties/AssemblyInfo.cs b/unit/Properties/AssemblyInfo.cs new file mode 100644 index 000000000000..692fe11f16d8 --- /dev/null +++ b/unit/Properties/AssemblyInfo.cs @@ -0,0 +1,20 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +[assembly: AssemblyTitle("unit")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("unit")] +[assembly: AssemblyCopyright("Copyright © 2020")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +[assembly: ComVisible(false)] + +[assembly: Guid("209fbcac-23eb-4d0c-ab49-6cc11d6de1c4")] + +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/unit/UnitTest1.cs b/unit/UnitTest1.cs new file mode 100644 index 000000000000..ea69f7e5da6b --- /dev/null +++ b/unit/UnitTest1.cs @@ -0,0 +1,14 @@ +using System; +using Microsoft.VisualStudio.TestTools.UnitTesting; + +namespace unit +{ + [TestClass] + public class UnitTest1 + { + [TestMethod] + public void TestMethod1() + { + } + } +} From 067fa4e04e3842aa1afeb9f6d7744018e0f44aae Mon Sep 17 00:00:00 2001 From: Divyansh Date: Thu, 16 Jan 2020 15:21:19 -0800 Subject: [PATCH 2/6] Added unit test poroject for preview pane --- PowerToys.sln | 12 ++++++------ .../UnitTestProject1}/PreviewPaneUnitTests.csproj | 6 +++--- .../UnitTestProject1}/Properties/AssemblyInfo.cs | 6 +++--- .../previewpane/UnitTestProject1}/UnitTest1.cs | 2 +- 4 files changed, 13 insertions(+), 13 deletions(-) rename {unit => src/modules/previewpane/UnitTestProject1}/PreviewPaneUnitTests.csproj (92%) rename {unit => src/modules/previewpane/UnitTestProject1}/Properties/AssemblyInfo.cs (73%) rename {unit => src/modules/previewpane/UnitTestProject1}/UnitTest1.cs (83%) diff --git a/PowerToys.sln b/PowerToys.sln index de91d00789ee..a60d626925ee 100644 --- a/PowerToys.sln +++ b/PowerToys.sln @@ -92,7 +92,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Common", "src\modules\previ EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MarkDownPreviewHandler", "src\modules\previewpane\MarkDownPreviewHandler\MarkDownPreviewHandler.csproj", "{6A71162E-FC4C-4A2C-B90F-3CF94F59A9BB}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PreviewPaneUnitTests", "unit\PreviewPaneUnitTests.csproj", "{209FBCAC-23EB-4D0C-AB49-6CC11D6DE1C4}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PreviewPaneUnitTests", "src\modules\previewpane\UnitTestProject1\PreviewPaneUnitTests.csproj", "{E8FF927E-8E4D-4899-B439-615A9895D6A9}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -176,10 +176,10 @@ Global {6A71162E-FC4C-4A2C-B90F-3CF94F59A9BB}.Debug|x64.Build.0 = Debug|x64 {6A71162E-FC4C-4A2C-B90F-3CF94F59A9BB}.Release|x64.ActiveCfg = Release|x64 {6A71162E-FC4C-4A2C-B90F-3CF94F59A9BB}.Release|x64.Build.0 = Release|x64 - {209FBCAC-23EB-4D0C-AB49-6CC11D6DE1C4}.Debug|x64.ActiveCfg = Debug|Any CPU - {209FBCAC-23EB-4D0C-AB49-6CC11D6DE1C4}.Debug|x64.Build.0 = Debug|Any CPU - {209FBCAC-23EB-4D0C-AB49-6CC11D6DE1C4}.Release|x64.ActiveCfg = Release|Any CPU - {209FBCAC-23EB-4D0C-AB49-6CC11D6DE1C4}.Release|x64.Build.0 = Release|Any CPU + {E8FF927E-8E4D-4899-B439-615A9895D6A9}.Debug|x64.ActiveCfg = Debug|Any CPU + {E8FF927E-8E4D-4899-B439-615A9895D6A9}.Debug|x64.Build.0 = Debug|Any CPU + {E8FF927E-8E4D-4899-B439-615A9895D6A9}.Release|x64.ActiveCfg = Release|Any CPU + {E8FF927E-8E4D-4899-B439-615A9895D6A9}.Release|x64.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -206,7 +206,7 @@ Global {2F305555-C296-497E-AC20-5FA1B237996A} = {4574FDD0-F61D-4376-98BF-E5A1262C11EC} {AF2349B8-E5B6-4004-9502-687C1C7730B1} = {2F305555-C296-497E-AC20-5FA1B237996A} {6A71162E-FC4C-4A2C-B90F-3CF94F59A9BB} = {2F305555-C296-497E-AC20-5FA1B237996A} - {209FBCAC-23EB-4D0C-AB49-6CC11D6DE1C4} = {2F305555-C296-497E-AC20-5FA1B237996A} + {E8FF927E-8E4D-4899-B439-615A9895D6A9} = {2F305555-C296-497E-AC20-5FA1B237996A} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {C3A2F9D1-7930-4EF4-A6FC-7EE0A99821D0} diff --git a/unit/PreviewPaneUnitTests.csproj b/src/modules/previewpane/UnitTestProject1/PreviewPaneUnitTests.csproj similarity index 92% rename from unit/PreviewPaneUnitTests.csproj rename to src/modules/previewpane/UnitTestProject1/PreviewPaneUnitTests.csproj index 255dca0d757e..3e34251c7c02 100644 --- a/unit/PreviewPaneUnitTests.csproj +++ b/src/modules/previewpane/UnitTestProject1/PreviewPaneUnitTests.csproj @@ -4,11 +4,11 @@ Debug AnyCPU - {209FBCAC-23EB-4D0C-AB49-6CC11D6DE1C4} + {E8FF927E-8E4D-4899-B439-615A9895D6A9} Library Properties - unit - unit + UnitTestProject1 + UnitTestProject1 v4.8 512 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} diff --git a/unit/Properties/AssemblyInfo.cs b/src/modules/previewpane/UnitTestProject1/Properties/AssemblyInfo.cs similarity index 73% rename from unit/Properties/AssemblyInfo.cs rename to src/modules/previewpane/UnitTestProject1/Properties/AssemblyInfo.cs index 692fe11f16d8..d56e0e8651ea 100644 --- a/unit/Properties/AssemblyInfo.cs +++ b/src/modules/previewpane/UnitTestProject1/Properties/AssemblyInfo.cs @@ -2,18 +2,18 @@ using System.Runtime.CompilerServices; using System.Runtime.InteropServices; -[assembly: AssemblyTitle("unit")] +[assembly: AssemblyTitle("UnitTestProject1")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("unit")] +[assembly: AssemblyProduct("UnitTestProject1")] [assembly: AssemblyCopyright("Copyright © 2020")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] -[assembly: Guid("209fbcac-23eb-4d0c-ab49-6cc11d6de1c4")] +[assembly: Guid("e8ff927e-8e4d-4899-b439-615a9895d6a9")] // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] diff --git a/unit/UnitTest1.cs b/src/modules/previewpane/UnitTestProject1/UnitTest1.cs similarity index 83% rename from unit/UnitTest1.cs rename to src/modules/previewpane/UnitTestProject1/UnitTest1.cs index ea69f7e5da6b..20dbba744b4a 100644 --- a/unit/UnitTest1.cs +++ b/src/modules/previewpane/UnitTestProject1/UnitTest1.cs @@ -1,7 +1,7 @@ using System; using Microsoft.VisualStudio.TestTools.UnitTesting; -namespace unit +namespace UnitTestProject1 { [TestClass] public class UnitTest1 From fd87968bf4cdb1fffc8253348aa1fac14994d26c Mon Sep 17 00:00:00 2001 From: Divyansh Date: Thu, 16 Jan 2020 16:42:41 -0800 Subject: [PATCH 3/6] Added pipline test and base test function --- PowerToys.sln | 14 +-- .../BootstrapExtension.cs | 85 ------------------- .../{Extension.cs => HTMLParsingExtension.cs} | 4 +- .../MarkDownPreviewHandler.csproj | 10 ++- .../Properties/AssemblyInfo.cs | 3 + ...nPreviewHandlerHTMLParsingExtensionTest.cs | 49 +++++++++++ .../PreviewPaneUnitTests.csproj | 23 +++-- .../Properties/AssemblyInfo.cs | 6 +- .../previewpane/UnitTestProject1/UnitTest1.cs | 14 --- .../common/Properties/AssemblyInfo.cs | 4 +- src/modules/previewpane/common/common.csproj | 4 +- 11 files changed, 93 insertions(+), 123 deletions(-) delete mode 100644 src/modules/previewpane/MarkDownPreviewHandler/BootstrapExtension.cs rename src/modules/previewpane/MarkDownPreviewHandler/{Extension.cs => HTMLParsingExtension.cs} (92%) create mode 100644 src/modules/previewpane/PreviewPaneUnitTests/MarkDownPreviewHandlerHTMLParsingExtensionTest.cs rename src/modules/previewpane/{UnitTestProject1 => PreviewPaneUnitTests}/PreviewPaneUnitTests.csproj (77%) rename src/modules/previewpane/{UnitTestProject1 => PreviewPaneUnitTests}/Properties/AssemblyInfo.cs (72%) delete mode 100644 src/modules/previewpane/UnitTestProject1/UnitTest1.cs diff --git a/PowerToys.sln b/PowerToys.sln index a60d626925ee..95f78b2e9ad4 100644 --- a/PowerToys.sln +++ b/PowerToys.sln @@ -88,11 +88,11 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PowerRenameUWPUI", "src\mod EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "previewpane", "previewpane", "{2F305555-C296-497E-AC20-5FA1B237996A}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Common", "src\modules\previewpane\common\Common.csproj", "{AF2349B8-E5B6-4004-9502-687C1C7730B1}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Common", "src\modules\previewpane\Common\Common.csproj", "{AF2349B8-E5B6-4004-9502-687C1C7730B1}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MarkDownPreviewHandler", "src\modules\previewpane\MarkDownPreviewHandler\MarkDownPreviewHandler.csproj", "{6A71162E-FC4C-4A2C-B90F-3CF94F59A9BB}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PreviewPaneUnitTests", "src\modules\previewpane\UnitTestProject1\PreviewPaneUnitTests.csproj", "{E8FF927E-8E4D-4899-B439-615A9895D6A9}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PreviewPaneUnitTests", "src\modules\previewpane\PreviewPaneUnitTests\PreviewPaneUnitTests.csproj", "{A2B51B8B-8F90-424E-BC97-F9AB7D76CA1A}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -176,10 +176,10 @@ Global {6A71162E-FC4C-4A2C-B90F-3CF94F59A9BB}.Debug|x64.Build.0 = Debug|x64 {6A71162E-FC4C-4A2C-B90F-3CF94F59A9BB}.Release|x64.ActiveCfg = Release|x64 {6A71162E-FC4C-4A2C-B90F-3CF94F59A9BB}.Release|x64.Build.0 = Release|x64 - {E8FF927E-8E4D-4899-B439-615A9895D6A9}.Debug|x64.ActiveCfg = Debug|Any CPU - {E8FF927E-8E4D-4899-B439-615A9895D6A9}.Debug|x64.Build.0 = Debug|Any CPU - {E8FF927E-8E4D-4899-B439-615A9895D6A9}.Release|x64.ActiveCfg = Release|Any CPU - {E8FF927E-8E4D-4899-B439-615A9895D6A9}.Release|x64.Build.0 = Release|Any CPU + {A2B51B8B-8F90-424E-BC97-F9AB7D76CA1A}.Debug|x64.ActiveCfg = Debug|x64 + {A2B51B8B-8F90-424E-BC97-F9AB7D76CA1A}.Debug|x64.Build.0 = Debug|x64 + {A2B51B8B-8F90-424E-BC97-F9AB7D76CA1A}.Release|x64.ActiveCfg = Release|x64 + {A2B51B8B-8F90-424E-BC97-F9AB7D76CA1A}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -206,7 +206,7 @@ Global {2F305555-C296-497E-AC20-5FA1B237996A} = {4574FDD0-F61D-4376-98BF-E5A1262C11EC} {AF2349B8-E5B6-4004-9502-687C1C7730B1} = {2F305555-C296-497E-AC20-5FA1B237996A} {6A71162E-FC4C-4A2C-B90F-3CF94F59A9BB} = {2F305555-C296-497E-AC20-5FA1B237996A} - {E8FF927E-8E4D-4899-B439-615A9895D6A9} = {2F305555-C296-497E-AC20-5FA1B237996A} + {A2B51B8B-8F90-424E-BC97-F9AB7D76CA1A} = {2F305555-C296-497E-AC20-5FA1B237996A} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {C3A2F9D1-7930-4EF4-A6FC-7EE0A99821D0} diff --git a/src/modules/previewpane/MarkDownPreviewHandler/BootstrapExtension.cs b/src/modules/previewpane/MarkDownPreviewHandler/BootstrapExtension.cs deleted file mode 100644 index dcca64391989..000000000000 --- a/src/modules/previewpane/MarkDownPreviewHandler/BootstrapExtension.cs +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright (c) Alexandre Mutel. All rights reserved. -// This file is licensed under the BSD-Clause 2 license. -// See the license.txt file in the project root for more information. - -using System; -using System.IO; -using Markdig; -using Markdig.Extensions.Figures; -using Markdig.Extensions.Tables; -using Markdig.Renderers; -using Markdig.Renderers.Html; -using Markdig.Syntax; -using Markdig.Syntax.Inlines; - -namespace MarkDownPreviewHandler -{ - /// - /// Extension for tagging some HTML elements with bootstrap classes. - /// - /// - public class BootstrapExtension : IMarkdownExtension - { - public static string BaseUrl; - - public void Setup(MarkdownPipelineBuilder pipeline) - { - // Make sure we don't have a delegate twice - pipeline.DocumentProcessed -= PipelineOnDocumentProcessed; - pipeline.DocumentProcessed += PipelineOnDocumentProcessed; - } - - public void Setup(MarkdownPipeline pipeline, IMarkdownRenderer renderer) - { - } - - private static void PipelineOnDocumentProcessed(MarkdownDocument document) - { - foreach (var node in document.Descendants()) - { - if (node is HtmlBlock) - { - var content = node as HtmlBlock; - Console.WriteLine(content.Type); - - } - if (node is Block) - { - if (node is Table) - { - node.GetAttributes().AddClass("table table-striped table-bordered"); - } - else if (node is QuoteBlock) - { - node.GetAttributes().AddClass("blockquote"); - } - else if (node is Figure) - { - node.GetAttributes().AddClass("figure"); - } - else if (node is FigureCaption) - { - node.GetAttributes().AddClass("figure-caption"); - } - } - else if (node is Inline) - { - var link = node as LinkInline; - - if (link != null && link.IsImage) - { - if (!Uri.TryCreate(link.Url, UriKind.Absolute, out Uri uriLink)) - { - link.Url = link.Url.TrimStart('/'); - BaseUrl = BaseUrl.TrimEnd('/'); - uriLink = new Uri(Path.Combine(BaseUrl, link.Url)); - //link.GetAttributes().AddClass("img-fluid"); - link.Url = uriLink.ToString(); - } - link.GetAttributes().AddClass("img-fluid"); - } - } - } - } - } -} \ No newline at end of file diff --git a/src/modules/previewpane/MarkDownPreviewHandler/Extension.cs b/src/modules/previewpane/MarkDownPreviewHandler/HTMLParsingExtension.cs similarity index 92% rename from src/modules/previewpane/MarkDownPreviewHandler/Extension.cs rename to src/modules/previewpane/MarkDownPreviewHandler/HTMLParsingExtension.cs index be0411dd86aa..edb0989f3bb6 100644 --- a/src/modules/previewpane/MarkDownPreviewHandler/Extension.cs +++ b/src/modules/previewpane/MarkDownPreviewHandler/HTMLParsingExtension.cs @@ -17,7 +17,7 @@ namespace MarkDownPreviewHandler /// /// Markdig Extension to process html nodes in markdown AST. /// - internal class Extension : IMarkdownExtension + internal class HTMLParsingExtension : IMarkdownExtension { /// /// Gets or sets path to directory containing markdown file. @@ -41,7 +41,7 @@ public void Setup(MarkdownPipeline pipeline, IMarkdownRenderer renderer) /// Process nodes in markdown AST. /// /// Markdown Document. - private void PipelineOnDocumentProcessed(MarkdownDocument document) + public void PipelineOnDocumentProcessed(MarkdownDocument document) { foreach (var node in document.Descendants()) { diff --git a/src/modules/previewpane/MarkDownPreviewHandler/MarkDownPreviewHandler.csproj b/src/modules/previewpane/MarkDownPreviewHandler/MarkDownPreviewHandler.csproj index 0d6e84ac585e..9bf61acbf140 100644 --- a/src/modules/previewpane/MarkDownPreviewHandler/MarkDownPreviewHandler.csproj +++ b/src/modules/previewpane/MarkDownPreviewHandler/MarkDownPreviewHandler.csproj @@ -22,7 +22,7 @@ prompt 4 true - bin/Debug/commonDocumentation.xml + bin/Debug/MarkdownPreviewPaneDocumentation.xml x64 @@ -47,7 +47,7 @@ - + @@ -65,5 +65,11 @@ StyleCop.json + + + {af2349b8-e5b6-4004-9502-687c1c7730b1} + Common + + \ No newline at end of file diff --git a/src/modules/previewpane/MarkDownPreviewHandler/Properties/AssemblyInfo.cs b/src/modules/previewpane/MarkDownPreviewHandler/Properties/AssemblyInfo.cs index f4c69d03e632..ce0cc72f073a 100644 --- a/src/modules/previewpane/MarkDownPreviewHandler/Properties/AssemblyInfo.cs +++ b/src/modules/previewpane/MarkDownPreviewHandler/Properties/AssemblyInfo.cs @@ -18,6 +18,9 @@ [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] +// Make assembly visible to UnitTest Project +[assembly: InternalsVisibleTo("PreviewPaneUnitTests")] + // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. diff --git a/src/modules/previewpane/PreviewPaneUnitTests/MarkDownPreviewHandlerHTMLParsingExtensionTest.cs b/src/modules/previewpane/PreviewPaneUnitTests/MarkDownPreviewHandlerHTMLParsingExtensionTest.cs new file mode 100644 index 000000000000..dcec5f6b8078 --- /dev/null +++ b/src/modules/previewpane/PreviewPaneUnitTests/MarkDownPreviewHandlerHTMLParsingExtensionTest.cs @@ -0,0 +1,49 @@ +using System; +using Markdig; +using Markdig.Extensions.Tables; +using Markdig.Syntax; +using MarkDownPreviewHandler; +using Microsoft.VisualStudio.TestTools.UnitTesting; + +namespace PreviewPaneUnitTests +{ + [TestClass] + public class MarkDownPreviewHandlerHTMLParsingExtensionTest + { + public MarkdownPipeline TestBase() + { + MarkdownPipeline pipeline = new MarkdownPipelineBuilder().Build(); + return pipeline; + } + + [TestMethod] + public void PipelineOnDocumentProcessed_UpdatesTablesClass_WhenCalled() + { + // Arrange + String mdString = "Markdown | Less | Pretty\n-- - | --- | ---"; + MarkdownDocument md = Markdown.Parse(mdString); + HTMLParsingExtension hTMLParsingExtension = new HTMLParsingExtension(); + + // Act + hTMLParsingExtension.PipelineOnDocumentProcessed(md); + + // Assert + Assert.IsInstanceOfType(md.LastChild, typeof(Table)); + } + + [TestMethod] + public void PipelineOnDocumentProcessed_UpdatesBlockQuotesClass_WhenCalled() + { + // Arrange + String mdString = "> Blockquotes are very handy in email to emulate reply text."; + MarkdownDocument md = Markdown.Parse(mdString); + HTMLParsingExtension hTMLParsingExtension = new HTMLParsingExtension(); + + // Act + hTMLParsingExtension.PipelineOnDocumentProcessed(md); + + // Assert + Assert.IsInstanceOfType(md.LastChild, typeof(QuoteBlock)); + } + } +} diff --git a/src/modules/previewpane/UnitTestProject1/PreviewPaneUnitTests.csproj b/src/modules/previewpane/PreviewPaneUnitTests/PreviewPaneUnitTests.csproj similarity index 77% rename from src/modules/previewpane/UnitTestProject1/PreviewPaneUnitTests.csproj rename to src/modules/previewpane/PreviewPaneUnitTests/PreviewPaneUnitTests.csproj index 3e34251c7c02..97adf7a55a8d 100644 --- a/src/modules/previewpane/UnitTestProject1/PreviewPaneUnitTests.csproj +++ b/src/modules/previewpane/PreviewPaneUnitTests/PreviewPaneUnitTests.csproj @@ -4,11 +4,11 @@ Debug AnyCPU - {E8FF927E-8E4D-4899-B439-615A9895D6A9} + {A2B51B8B-8F90-424E-BC97-F9AB7D76CA1A} Library Properties - UnitTestProject1 - UnitTestProject1 + PreviewPaneUnitTests + PreviewPaneUnitTests v4.8 512 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} @@ -20,7 +20,7 @@ - + true full false @@ -28,24 +28,29 @@ DEBUG;TRACE prompt 4 + x64 - + pdbonly true bin\Release\ TRACE prompt 4 + x64 - + + + 0.18.0 + 1.3.2 @@ -53,6 +58,12 @@ 1.3.2 + + + {6a71162e-fc4c-4a2c-b90f-3cf94f59a9bb} + MarkDownPreviewHandler + + \ No newline at end of file diff --git a/src/modules/previewpane/UnitTestProject1/Properties/AssemblyInfo.cs b/src/modules/previewpane/PreviewPaneUnitTests/Properties/AssemblyInfo.cs similarity index 72% rename from src/modules/previewpane/UnitTestProject1/Properties/AssemblyInfo.cs rename to src/modules/previewpane/PreviewPaneUnitTests/Properties/AssemblyInfo.cs index d56e0e8651ea..aef1d7b1d8e4 100644 --- a/src/modules/previewpane/UnitTestProject1/Properties/AssemblyInfo.cs +++ b/src/modules/previewpane/PreviewPaneUnitTests/Properties/AssemblyInfo.cs @@ -2,18 +2,18 @@ using System.Runtime.CompilerServices; using System.Runtime.InteropServices; -[assembly: AssemblyTitle("UnitTestProject1")] +[assembly: AssemblyTitle("PreviewPaneUnitTests")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("UnitTestProject1")] +[assembly: AssemblyProduct("PreviewPaneUnitTests")] [assembly: AssemblyCopyright("Copyright © 2020")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] -[assembly: Guid("e8ff927e-8e4d-4899-b439-615a9895d6a9")] +[assembly: Guid("a2b51b8b-8f90-424e-bc97-f9ab7d76ca1a")] // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] diff --git a/src/modules/previewpane/UnitTestProject1/UnitTest1.cs b/src/modules/previewpane/UnitTestProject1/UnitTest1.cs deleted file mode 100644 index 20dbba744b4a..000000000000 --- a/src/modules/previewpane/UnitTestProject1/UnitTest1.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; -using Microsoft.VisualStudio.TestTools.UnitTesting; - -namespace UnitTestProject1 -{ - [TestClass] - public class UnitTest1 - { - [TestMethod] - public void TestMethod1() - { - } - } -} diff --git a/src/modules/previewpane/common/Properties/AssemblyInfo.cs b/src/modules/previewpane/common/Properties/AssemblyInfo.cs index 23f260cae0ae..0afe1c322bbb 100644 --- a/src/modules/previewpane/common/Properties/AssemblyInfo.cs +++ b/src/modules/previewpane/common/Properties/AssemblyInfo.cs @@ -9,11 +9,11 @@ // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. -[assembly: AssemblyTitle("common")] +[assembly: AssemblyTitle("Common")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("common")] +[assembly: AssemblyProduct("Common")] [assembly: AssemblyCopyright("Copyright © 2020")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] diff --git a/src/modules/previewpane/common/common.csproj b/src/modules/previewpane/common/common.csproj index 57c7b2fbbbec..c1a85e1b4fe1 100644 --- a/src/modules/previewpane/common/common.csproj +++ b/src/modules/previewpane/common/common.csproj @@ -7,8 +7,8 @@ {AF2349B8-E5B6-4004-9502-687C1C7730B1} Library Properties - common - common + Common + Common v4.8 512 true From 8845702e37e03a4ea209931706cb7f646730fb02 Mon Sep 17 00:00:00 2001 From: Divyansh Date: Thu, 16 Jan 2020 22:13:14 -0800 Subject: [PATCH 4/6] Added Tests for extension --- .../HTMLParsingExtension.cs | 10 +++- ...nPreviewHandlerHTMLParsingExtensionTest.cs | 51 ++++++++++++------- 2 files changed, 42 insertions(+), 19 deletions(-) diff --git a/src/modules/previewpane/MarkDownPreviewHandler/HTMLParsingExtension.cs b/src/modules/previewpane/MarkDownPreviewHandler/HTMLParsingExtension.cs index edb0989f3bb6..4a48aa9b18ac 100644 --- a/src/modules/previewpane/MarkDownPreviewHandler/HTMLParsingExtension.cs +++ b/src/modules/previewpane/MarkDownPreviewHandler/HTMLParsingExtension.cs @@ -19,10 +19,18 @@ namespace MarkDownPreviewHandler /// internal class HTMLParsingExtension : IMarkdownExtension { + /// + /// Initializes a new instance of the class. + /// + public HTMLParsingExtension(string baseUrl = "") + { + this.BaseUrl = baseUrl; + } + /// /// Gets or sets path to directory containing markdown file. /// - private string BaseUrl { get; set; } + public string BaseUrl { get; set; } /// public void Setup(MarkdownPipelineBuilder pipeline) diff --git a/src/modules/previewpane/PreviewPaneUnitTests/MarkDownPreviewHandlerHTMLParsingExtensionTest.cs b/src/modules/previewpane/PreviewPaneUnitTests/MarkDownPreviewHandlerHTMLParsingExtensionTest.cs index dcec5f6b8078..6f7802d5fe47 100644 --- a/src/modules/previewpane/PreviewPaneUnitTests/MarkDownPreviewHandlerHTMLParsingExtensionTest.cs +++ b/src/modules/previewpane/PreviewPaneUnitTests/MarkDownPreviewHandlerHTMLParsingExtensionTest.cs @@ -1,7 +1,5 @@ using System; using Markdig; -using Markdig.Extensions.Tables; -using Markdig.Syntax; using MarkDownPreviewHandler; using Microsoft.VisualStudio.TestTools.UnitTesting; @@ -9,41 +7,58 @@ namespace PreviewPaneUnitTests { [TestClass] public class MarkDownPreviewHandlerHTMLParsingExtensionTest - { - public MarkdownPipeline TestBase() + { + public MarkdownPipeline TestBase(IMarkdownExtension extension) { - MarkdownPipeline pipeline = new MarkdownPipelineBuilder().Build(); - return pipeline; + MarkdownPipelineBuilder pipelineBuilder = new MarkdownPipelineBuilder().UseAdvancedExtensions(); + pipelineBuilder.Extensions.Add(extension); + return pipelineBuilder.Build(); } [TestMethod] - public void PipelineOnDocumentProcessed_UpdatesTablesClass_WhenCalled() + public void Extension_UpdatesTablesClass_WhenUsed() { // Arrange - String mdString = "Markdown | Less | Pretty\n-- - | --- | ---"; - MarkdownDocument md = Markdown.Parse(mdString); - HTMLParsingExtension hTMLParsingExtension = new HTMLParsingExtension(); + String mdString = "| A | B |\n| -- | -- | "; + HTMLParsingExtension htmlParsingExtension = new HTMLParsingExtension(); + MarkdownPipeline markdownPipeline = TestBase(htmlParsingExtension); // Act - hTMLParsingExtension.PipelineOnDocumentProcessed(md); + String html = Markdown.ToHtml(mdString, markdownPipeline); // Assert - Assert.IsInstanceOfType(md.LastChild, typeof(Table)); + Assert.AreEqual(html, "\n\n\n\n\n\n\n
AB
\n"); } + [TestMethod] - public void PipelineOnDocumentProcessed_UpdatesBlockQuotesClass_WhenCalled() + public void Extension_UpdatesBlockQuotesClass_WhenUsed() { // Arrange - String mdString = "> Blockquotes are very handy in email to emulate reply text."; - MarkdownDocument md = Markdown.Parse(mdString); - HTMLParsingExtension hTMLParsingExtension = new HTMLParsingExtension(); + String mdString = "> Blockquotes."; + HTMLParsingExtension htmlParsingExtension = new HTMLParsingExtension(); + MarkdownPipeline markdownPipeline = TestBase(htmlParsingExtension); + + // Act + String html = Markdown.ToHtml(mdString, markdownPipeline); + + // Assert + Assert.AreEqual(html, "
\n

Blockquotes.

\n
\n"); + } + + [TestMethod] + public void extension_updatesFigureClassAndRelativeUrltoAbsolute_whenused() + { + // arrange + String mdString = "![text](a.jpg \"Figure\")"; + HTMLParsingExtension htmlParsingExtension = new HTMLParsingExtension("C:\\Users\\"); + MarkdownPipeline markdownPipeline = TestBase(htmlParsingExtension); // Act - hTMLParsingExtension.PipelineOnDocumentProcessed(md); + String html = Markdown.ToHtml(mdString, markdownPipeline); // Assert - Assert.IsInstanceOfType(md.LastChild, typeof(QuoteBlock)); + Assert.AreEqual(html, "

\"text\"

\n"); } } } From a8a7869cc59b909948566472c1c8894f1b6b5eca Mon Sep 17 00:00:00 2001 From: Divyansh Date: Tue, 21 Jan 2020 12:30:03 -0800 Subject: [PATCH 5/6] Added tests for url slashes --- .../HTMLParsingExtension.cs | 4 +- ...nPreviewHandlerHTMLParsingExtensionTest.cs | 40 ++++++++++++++++--- 2 files changed, 37 insertions(+), 7 deletions(-) diff --git a/src/modules/previewpane/MarkDownPreviewHandler/HTMLParsingExtension.cs b/src/modules/previewpane/MarkDownPreviewHandler/HTMLParsingExtension.cs index 4a48aa9b18ac..bfa792525dd5 100644 --- a/src/modules/previewpane/MarkDownPreviewHandler/HTMLParsingExtension.cs +++ b/src/modules/previewpane/MarkDownPreviewHandler/HTMLParsingExtension.cs @@ -78,8 +78,8 @@ public void PipelineOnDocumentProcessed(MarkdownDocument document) { if (!Uri.TryCreate(link.Url, UriKind.Absolute, out Uri uriLink)) { - link.Url = link.Url.TrimStart('/'); - this.BaseUrl = this.BaseUrl.TrimEnd('/'); + link.Url = link.Url.TrimStart('/', '\\'); + this.BaseUrl = this.BaseUrl.TrimEnd('/', '\\'); uriLink = new Uri(Path.Combine(this.BaseUrl, link.Url)); link.Url = uriLink.ToString(); } diff --git a/src/modules/previewpane/PreviewPaneUnitTests/MarkDownPreviewHandlerHTMLParsingExtensionTest.cs b/src/modules/previewpane/PreviewPaneUnitTests/MarkDownPreviewHandlerHTMLParsingExtensionTest.cs index 6f7802d5fe47..77342bdd56df 100644 --- a/src/modules/previewpane/PreviewPaneUnitTests/MarkDownPreviewHandlerHTMLParsingExtensionTest.cs +++ b/src/modules/previewpane/PreviewPaneUnitTests/MarkDownPreviewHandlerHTMLParsingExtensionTest.cs @@ -8,7 +8,7 @@ namespace PreviewPaneUnitTests [TestClass] public class MarkDownPreviewHandlerHTMLParsingExtensionTest { - public MarkdownPipeline TestBase(IMarkdownExtension extension) + public MarkdownPipeline BuidPipeline(IMarkdownExtension extension) { MarkdownPipelineBuilder pipelineBuilder = new MarkdownPipelineBuilder().UseAdvancedExtensions(); pipelineBuilder.Extensions.Add(extension); @@ -21,7 +21,7 @@ public void Extension_UpdatesTablesClass_WhenUsed() // Arrange String mdString = "| A | B |\n| -- | -- | "; HTMLParsingExtension htmlParsingExtension = new HTMLParsingExtension(); - MarkdownPipeline markdownPipeline = TestBase(htmlParsingExtension); + MarkdownPipeline markdownPipeline = BuidPipeline(htmlParsingExtension); // Act String html = Markdown.ToHtml(mdString, markdownPipeline); @@ -37,7 +37,7 @@ public void Extension_UpdatesBlockQuotesClass_WhenUsed() // Arrange String mdString = "> Blockquotes."; HTMLParsingExtension htmlParsingExtension = new HTMLParsingExtension(); - MarkdownPipeline markdownPipeline = TestBase(htmlParsingExtension); + MarkdownPipeline markdownPipeline = BuidPipeline(htmlParsingExtension); // Act String html = Markdown.ToHtml(mdString, markdownPipeline); @@ -47,12 +47,12 @@ public void Extension_UpdatesBlockQuotesClass_WhenUsed() } [TestMethod] - public void extension_updatesFigureClassAndRelativeUrltoAbsolute_whenused() + public void Extension_UpdatesFigureClassAndRelativeUrltoAbsolute_Whenused() { // arrange String mdString = "![text](a.jpg \"Figure\")"; HTMLParsingExtension htmlParsingExtension = new HTMLParsingExtension("C:\\Users\\"); - MarkdownPipeline markdownPipeline = TestBase(htmlParsingExtension); + MarkdownPipeline markdownPipeline = BuidPipeline(htmlParsingExtension); // Act String html = Markdown.ToHtml(mdString, markdownPipeline); @@ -60,5 +60,35 @@ public void extension_updatesFigureClassAndRelativeUrltoAbsolute_whenused() // Assert Assert.AreEqual(html, "

\"text\"

\n"); } + + [TestMethod] + public void Extension_CreatesCorrectAbsoluteLinkByTrimmingForwardSlash_Whenused() + { + // arrange + String mdString = "![text](\\document\\a.jpg \"Figure\")"; + HTMLParsingExtension htmlParsingExtension = new HTMLParsingExtension("C:\\Users\\"); + MarkdownPipeline markdownPipeline = BuidPipeline(htmlParsingExtension); + + // Act + String html = Markdown.ToHtml(mdString, markdownPipeline); + + // Assert + Assert.AreEqual(html, "

\"text\"

\n"); + } + + [TestMethod] + public void Extension_CreatesCorrectAbsoluteLinkByTrimmingBackwardSlash_Whenused() + { + // arrange + String mdString = "![text](/document/a.jpg \"Figure\")"; + HTMLParsingExtension htmlParsingExtension = new HTMLParsingExtension("C:/Users/"); + MarkdownPipeline markdownPipeline = BuidPipeline(htmlParsingExtension); + + // Act + String html = Markdown.ToHtml(mdString, markdownPipeline); + + // Assert + Assert.AreEqual(html, "

\"text\"

\n"); + } } } From 0cd5ed4ebfce36e1c3d47d25f25125aa2dcc69b7 Mon Sep 17 00:00:00 2001 From: Divyansh Date: Tue, 21 Jan 2020 13:36:55 -0800 Subject: [PATCH 6/6] Added tests for url and figure caption --- ...nPreviewHandlerHTMLParsingExtensionTest.cs | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/modules/previewpane/PreviewPaneUnitTests/MarkDownPreviewHandlerHTMLParsingExtensionTest.cs b/src/modules/previewpane/PreviewPaneUnitTests/MarkDownPreviewHandlerHTMLParsingExtensionTest.cs index 77342bdd56df..6cd979373ae6 100644 --- a/src/modules/previewpane/PreviewPaneUnitTests/MarkDownPreviewHandlerHTMLParsingExtensionTest.cs +++ b/src/modules/previewpane/PreviewPaneUnitTests/MarkDownPreviewHandlerHTMLParsingExtensionTest.cs @@ -7,7 +7,7 @@ namespace PreviewPaneUnitTests { [TestClass] public class MarkDownPreviewHandlerHTMLParsingExtensionTest - { + { public MarkdownPipeline BuidPipeline(IMarkdownExtension extension) { MarkdownPipelineBuilder pipelineBuilder = new MarkdownPipelineBuilder().UseAdvancedExtensions(); @@ -47,7 +47,7 @@ public void Extension_UpdatesBlockQuotesClass_WhenUsed() } [TestMethod] - public void Extension_UpdatesFigureClassAndRelativeUrltoAbsolute_Whenused() + public void Extension_UpdatesFigureClassAndRelativeUrltoAbsolute_WhenUsed() { // arrange String mdString = "![text](a.jpg \"Figure\")"; @@ -62,7 +62,7 @@ public void Extension_UpdatesFigureClassAndRelativeUrltoAbsolute_Whenused() } [TestMethod] - public void Extension_CreatesCorrectAbsoluteLinkByTrimmingForwardSlash_Whenused() + public void Extension_CreatesCorrectAbsoluteLinkByTrimmingForwardSlash_WhenUsed() { // arrange String mdString = "![text](\\document\\a.jpg \"Figure\")"; @@ -77,7 +77,7 @@ public void Extension_CreatesCorrectAbsoluteLinkByTrimmingForwardSlash_Whenused( } [TestMethod] - public void Extension_CreatesCorrectAbsoluteLinkByTrimmingBackwardSlash_Whenused() + public void Extension_CreatesCorrectAbsoluteLinkByTrimmingBackwardSlash_WhenUsed() { // arrange String mdString = "![text](/document/a.jpg \"Figure\")"; @@ -90,5 +90,20 @@ public void Extension_CreatesCorrectAbsoluteLinkByTrimmingBackwardSlash_Whenused // Assert Assert.AreEqual(html, "

\"text\"

\n"); } + + [TestMethod] + public void Extension_AddsClassToFigureCaption_WhenUsed() + { + // arrange + String mdString = "^^^ This is a caption"; + HTMLParsingExtension htmlParsingExtension = new HTMLParsingExtension("C:/Users/"); + MarkdownPipeline markdownPipeline = BuidPipeline(htmlParsingExtension); + + // Act + String html = Markdown.ToHtml(mdString, markdownPipeline); + + // Assert + Assert.AreEqual(html, "
\n
This is a caption
\n
\n"); + } } }