using System; using System.Collections.Generic; using Developpez.Dotnet.Text; using NUnit.Framework; namespace Developpez.Dotnet.Tests.Text { [TestFixture(Description = "Tests de la classe StringTemplate")] public class StringTemplateTests { [Test(Description = "Vérifie le fonctionnement de la méthode Format")] public void Check_Format() { string name = "Zobi la mouche"; DateTime date = DateTime.Now; string format = "Bonjour {0}. Nous sommes le {1:D}, et il est {1:T}."; string templateFormat = "Bonjour {Name}. Nous sommes le {Date:D}, et il est {Date:T}."; var values1 = new Dictionary { { "Name", "Zobi la mouche"}, { "Date", date } }; var values2 = new { Name = name, Date = date }; string result0 = String.Format(format, name, date); string result1 = StringTemplate.Format(templateFormat, values1); string result2 = StringTemplate.Format(templateFormat, values2); Assert.AreEqual(result0, result1); Assert.AreEqual(result0, result2); } [Test] public void Should_Raise_Exception_When_Called_With_Null_Template() { Assert.Throws( () => StringTemplate.Format(null, "")); } [Test] public void Should_Raise_Exception_When_Called_With_Null_Values() { Assert.Throws( () => StringTemplate.Format("Bonjour {0}.", null)); } [Test] public void Format_Should_Throw_When_No_Matching_Value_Exists() { string format = "Bonjour {Name}"; var values1 = new Dictionary { { "Nam", "numero 6"}, }; Assert.Throws(() => StringTemplate.Format(format, values1)); Assert.AreEqual(StringTemplate.Format(format, values1, false), format); var values2 = new { Nam = "numero 6" }; Assert.Throws(() => StringTemplate.Format(format, values2)); Assert.AreEqual(StringTemplate.Format(format, values2, false), format); } [Test] public void ToString_Should_Return_Template() { StringTemplate testStringTemplate = new StringTemplate("test"); Assert.AreEqual("test", testStringTemplate.ToString()); } [Test] public void Implicit_Operator() { StringTemplate testStringTemplate = "test"; Assert.AreEqual("test", testStringTemplate.ToString()); } [Test] public void Test_BracesAreEscaped() { var values1 = new[] { "World" }; var values2 = new { Name = "World" }; string s = StringTemplate.Format("Hello {{Name}} !", values2); Assert.AreEqual("Hello {Name} !", s); string s1, s2; s1 = String.Format("Hello {{{0}}} !", values1); s2 = StringTemplate.Format("Hello {{{Name}}} !", values2); Assert.AreEqual(s1, s2); s1 = String.Format("Hello {{{0} !", values1); s2 = StringTemplate.Format("Hello {{{Name} !", values2); Assert.AreEqual(s1, s2); s1 = String.Format("Hello {0}}} !", values1); s2 = StringTemplate.Format("Hello {Name}}} !", values2); Assert.AreEqual(s1, s2); Assert.Throws( () => s2 = StringTemplate.Format("Hello {{{Name}} !", values2)); } [Test] public void Test_WithFields() { int x = 42; string text = "Hello world"; string expected = string.Format("{0} {1}", text, x); string actual = StringTemplate.Format("{text} {x}", new FieldValues { x = x, text = text }); Assert.AreEqual(expected, actual); } [Test] public void Test_HiddenMembers() { DerivedValues values = new DerivedValues { X = "hello", Y = 42 }; BaseValues bValues = values; bValues.X = 42; string expected = string.Format("{0} {1}", values.X, values.Y); string actual = StringTemplate.Format("{X} {Y}", values); Assert.AreEqual(expected, actual); } class FieldValues { public int x; public string text; } class BaseValues { public int X { get; set; } public int Y { get; set; } } class DerivedValues : BaseValues { public new string X; #pragma warning disable 169 private new string Y; #pragma warning restore 169 } } }