Adds UdiParserTests

This commit is contained in:
Shannon
2019-10-22 15:07:01 +11:00
parent bb2a3a5e3d
commit 6bb8a15a87
6 changed files with 69 additions and 19 deletions

View File

@@ -13,8 +13,9 @@ using System;
using System.Linq;
using Umbraco.Core.Models;
namespace Umbraco.Tests.Web
namespace Umbraco.Tests.Templates
{
[TestFixture]
public class MediaParserTests
{
@@ -46,7 +47,7 @@ namespace Umbraco.Tests.Web
public void Ensure_Image_Sources()
{
//setup a mock url provider which we'll use for testing
var mediaType = new PublishedContentType(777, "image", PublishedItemType.Media, Enumerable.Empty<string>(), Enumerable.Empty<PublishedPropertyType>(), ContentVariation.Nothing);
var media = new Mock<IPublishedContent>();
media.Setup(x => x.ContentType).Returns(mediaType);
@@ -91,7 +92,7 @@ namespace Umbraco.Tests.Web
}
}
}
}

View File

@@ -0,0 +1,28 @@
using NUnit.Framework;
using Umbraco.Web.Templates;
using System.Linq;
using Umbraco.Core;
namespace Umbraco.Tests.Templates
{
[TestFixture]
public class UdiParserTests
{
[Test]
public void Returns_Udi_From_Data_Udi_Html_Attributes()
{
var input = @"<p>
<div>
<img src='/media/12312.jpg' data-udi='umb://media/D4B18427A1544721B09AC7692F35C264' />
</div>
</p><p><img src='/media/234234.jpg' data-udi=""umb://media-type/B726D735E4C446D58F703F3FBCFC97A5"" /></p>";
var parser = new UdiParser();
var result = parser.ParseUdisFromDataAttributes(input).ToList();
Assert.AreEqual(2, result.Count);
Assert.AreEqual(Udi.Parse("umb://media/D4B18427A1544721B09AC7692F35C264"), result[0]);
Assert.AreEqual(Udi.Parse("umb://media-type/B726D735E4C446D58F703F3FBCFC97A5"), result[1]);
}
}
}

View File

@@ -159,6 +159,7 @@
<Compile Include="Services\MemberGroupServiceTests.cs" />
<Compile Include="Services\MediaTypeServiceTests.cs" />
<Compile Include="Services\PropertyValidationServiceTests.cs" />
<Compile Include="Templates\UdiParserTests.cs" />
<Compile Include="TestHelpers\RandomIdRamDirectory.cs" />
<Compile Include="Testing\Objects\TestDataSource.cs" />
<Compile Include="Published\PublishedSnapshotTestObjects.cs" />
@@ -255,7 +256,7 @@
<Compile Include="Web\HealthChecks\HealthCheckResultsTests.cs" />
<Compile Include="Web\HttpCookieExtensionsTests.cs" />
<Compile Include="Web\InternalLinkParserTests.cs" />
<Compile Include="Web\MediaParserTests.cs" />
<Compile Include="Templates\MediaParserTests.cs" />
<Compile Include="Web\Mvc\HtmlStringUtilitiesTests.cs" />
<Compile Include="Web\ModelStateExtensionsTests.cs" />
<Compile Include="Web\Mvc\RenderIndexActionSelectorAttributeTests.cs" />

View File

@@ -13,21 +13,6 @@ using Umbraco.Web.Routing;
namespace Umbraco.Web.Templates
{
/// <summary>
/// Parses out UDIs in strings
/// </summary>
public sealed class UdiParser
{
/// <summary>
/// Parses out UDIs from an html string based on 'data-udi' html attributes
/// </summary>
/// <param name="text"></param>
/// <returns></returns>
public IEnumerable<Udi> ParseUdisFromDataAttributes(string text)
{
}
}
public sealed class MediaParser
{

View File

@@ -0,0 +1,34 @@
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using Umbraco.Core;
namespace Umbraco.Web.Templates
{
/// <summary>
/// Parses out UDIs in strings
/// </summary>
public sealed class UdiParser
{
private static readonly Regex DataUdiAttributeRegex = new Regex(@"data-udi=\\?(?:""|')(?<udi>umb://[A-z0-9\-]+/[A-z0-9]+)\\?(?:""|')",
RegexOptions.Compiled | RegexOptions.CultureInvariant | RegexOptions.IgnoreCase);
/// <summary>
/// Parses out UDIs from an html string based on 'data-udi' html attributes
/// </summary>
/// <param name="text"></param>
/// <returns></returns>
public IEnumerable<Udi> ParseUdisFromDataAttributes(string text)
{
var matches = DataUdiAttributeRegex.Matches(text);
if (matches.Count == 0)
yield break;
foreach (Match match in matches)
{
if (match.Groups.Count == 2 && Udi.TryParse(match.Groups[1].Value, out var udi))
yield return udi;
}
}
}
}

View File

@@ -249,6 +249,7 @@
<Compile Include="Models\TemplateQuery\OperatorFactory.cs" />
<Compile Include="Templates\InternalLinkParser.cs" />
<Compile Include="Templates\MediaParser.cs" />
<Compile Include="Templates\UdiParser.cs" />
<Compile Include="Templates\UrlParser.cs" />
<Compile Include="UmbracoContextFactory.cs" />
<Compile Include="UmbracoContextReference.cs" />