From b3bf80395a7a8b4f5e5b82c683082a6f766c06be Mon Sep 17 00:00:00 2001 From: Marek Dzikiewicz Date: Thu, 19 Nov 2015 23:01:50 +0100 Subject: [PATCH] Fix TextTokens - Format and TrimEnd This fixes the Format and TrimEnd tokens and adds unit tests for all TextTokens. --- .../Orchard.Tokens/Providers/TextTokens.cs | 4 +- .../Tests/Orchard.Tokens.Tests.csproj | 1 + .../Orchard.Tokens/Tests/TextTokenTests.cs | 121 ++++++++++++++++++ 3 files changed, 124 insertions(+), 2 deletions(-) create mode 100644 src/Orchard.Web/Modules/Orchard.Tokens/Tests/TextTokenTests.cs diff --git a/src/Orchard.Web/Modules/Orchard.Tokens/Providers/TextTokens.cs b/src/Orchard.Web/Modules/Orchard.Tokens/Providers/TextTokens.cs index 255cee809..a2ed223d6 100644 --- a/src/Orchard.Web/Modules/Orchard.Tokens/Providers/TextTokens.cs +++ b/src/Orchard.Web/Modules/Orchard.Tokens/Providers/TextTokens.cs @@ -35,7 +35,7 @@ namespace Orchard.Tokens.Providers { // {Text.Format:} .Token( token => FilterTokenParam("Format:", token), - (token, d) => String.Format(d, token)) + (token, d) => String.Format(token, d)) // {Text.TrimEnd:} .Token(token => FilterTokenParam("TrimEnd:", token), TrimEnd) .Token("UrlEncode", HttpUtility.UrlEncode) @@ -54,7 +54,7 @@ namespace Orchard.Tokens.Providers { return token.StartsWith(tokenName, StringComparison.OrdinalIgnoreCase) ? token.Substring(tokenName.Length) : null; } - private static string TrimEnd(string token, string param) { + private static string TrimEnd(string param, string token) { if (String.IsNullOrEmpty(param)) { return token; } diff --git a/src/Orchard.Web/Modules/Orchard.Tokens/Tests/Orchard.Tokens.Tests.csproj b/src/Orchard.Web/Modules/Orchard.Tokens/Tests/Orchard.Tokens.Tests.csproj index cb0d795ae..73b279d67 100644 --- a/src/Orchard.Web/Modules/Orchard.Tokens/Tests/Orchard.Tokens.Tests.csproj +++ b/src/Orchard.Web/Modules/Orchard.Tokens/Tests/Orchard.Tokens.Tests.csproj @@ -56,6 +56,7 @@ + diff --git a/src/Orchard.Web/Modules/Orchard.Tokens/Tests/TextTokenTests.cs b/src/Orchard.Web/Modules/Orchard.Tokens/Tests/TextTokenTests.cs new file mode 100644 index 000000000..5643bb856 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Tokens/Tests/TextTokenTests.cs @@ -0,0 +1,121 @@ +using System.Web; +using Autofac; +using NUnit.Framework; +using Orchard.Tokens.Implementation; +using Orchard.Tokens.Providers; + +namespace Orchard.Tokens.Tests { + [TestFixture] + public class TextTokenTests { + private IContainer _container; + private ITokenizer _tokenizer; + + [SetUp] + public void Init() { + var builder = new ContainerBuilder(); + builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterType().As(); + _container = builder.Build(); + _tokenizer = _container.Resolve(); + } + + [Test] + public void TestLimitWhenStringShorterThanLimit() { + var str = "foo bar baz"; + var result = _tokenizer.Replace("{Text.Limit:" + (str.Length + 1) + "}", new { Text = str }); + Assert.That(result, Is.EqualTo("foo bar baz")); + } + + [Test] + public void TestLimitWhenStringLengthEqualsLimit() { + var str = "foo bar baz"; + var result = _tokenizer.Replace("{Text.Limit:" + str.Length + "}", new { Text = str }); + Assert.That(result, Is.EqualTo("foo bar baz")); + } + + [Test] + public void TestLimitWhenStringLongerThanLimit() { + var str = "foo bar baz"; + var result = _tokenizer.Replace("{Text.Limit:" + (str.Length - 1) + "}", new { Text = str }); + Assert.That(result, Is.EqualTo("foo bar ba")); + } + + [Test] + public void TestLimitWhenStringEmpty() { + var str = ""; + var result = _tokenizer.Replace("{Text.Limit:" + (str.Length - 1) + "}", new { Text = str }); + Assert.That(result, Is.EqualTo("")); + } + + [Test] + public void TestLimitWhenEllipsisSpecifed() { + var str = "foo bar baz"; + var result = _tokenizer.Replace("{Text.Limit:" + (str.Length - 1) + ",...}", new { Text = str }); + Assert.That(result, Is.EqualTo("foo bar ba...")); + } + + [Test] + public void TestFormat() { + var str = "bar"; + var result = _tokenizer.Replace("{Text.Format:foo {0} baz}", new { Text = str }); + Assert.That(result, Is.EqualTo("foo bar baz")); + } + + [Test] + public void TestTrimEnd() { + var str = "foo "; + var result = _tokenizer.Replace("{Text.TrimEnd: }", new { Text = str }); + Assert.That(result, Is.EqualTo("foo")); + } + + [Test] + public void TestTrimEndNumber() { + var str = "foobarbaz"; + var result = _tokenizer.Replace("{Text.TrimEnd:3}", new { Text = str }); + Assert.That(result, Is.EqualTo("foobar")); + } + + [Test] + public void TestTrimEndWhenEmptyArg() { + var str = "foobarbaz"; + var result = _tokenizer.Replace("{Text.TrimEnd:}", new { Text = str }); + Assert.That(result, Is.EqualTo("foobarbaz")); + } + + [TestCase("foobar", "foo%3ebar")] + [TestCase("foo'bar", "foo%27bar")] + [TestCase("foo\"bar", "foo%22bar")] + [TestCase("foo bar", "foo+bar")] + public void TestUrlEncode(string str, string expected) { + var result = _tokenizer.Replace("{Text.UrlEncode}", new { Text = str }); + Assert.That(result, Is.EqualTo(expected)); + } + + [TestCase("foobar", "foo>bar")] + [TestCase("foo&bar", "foo&bar")] + [TestCase("foo\"bar", "foo"bar")] + [TestCase("foo'bar", "foo'bar")] + public void TestHtmlEncode(string str, string expected) { + var result = _tokenizer.Replace("{Text.HtmlEncode}", new { Text = str }, new ReplaceOptions { Encoding = ReplaceOptions.NoEncode }); + Assert.That(result, Is.EqualTo(expected)); + } + + [Test] + public void TestJavaScriptEncode() { + var str = "f\"ooba'z"; + var result = _tokenizer.Replace("{Text.JavaScriptEncode}", new { Text = str }, new ReplaceOptions { Encoding = ReplaceOptions.NoEncode }); + Assert.That(result, Is.EqualTo(HttpUtility.JavaScriptStringEncode(str))); + } + + [Test] + public void TestLineEncode() { + var str = "foo" + System.Environment.NewLine + "bar" + System.Environment.NewLine + "baz"; + var result = _tokenizer.Replace("{Text.LineEncode}", new { Text = str }, new ReplaceOptions { Encoding = ReplaceOptions.NoEncode }); + Assert.That(result, Is.EqualTo("foo
bar
baz")); + } + } +} \ No newline at end of file