Files
Umbraco-CMS/tests/Umbraco.Tests.UnitTests/Umbraco.Core/CoreThings/ObjectExtensionsTests.cs

300 lines
9.6 KiB
C#
Raw Normal View History

// Copyright (c) Umbraco.
// See LICENSE for more details.
using System;
2016-11-07 19:12:09 +01:00
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Threading;
using NUnit.Framework;
using Umbraco.Cms.Core;
using Umbraco.Cms.Core.PropertyEditors;
using Umbraco.Cms.Tests.Common.TestHelpers;
using Umbraco.Extensions;
2016-11-07 19:12:09 +01:00
namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.CoreThings
2016-11-07 19:12:09 +01:00
{
2017-07-20 11:21:28 +02:00
[TestFixture]
public class ObjectExtensionsTests
{
2016-11-07 19:12:09 +01:00
private CultureInfo _savedCulture;
[SetUp]
public void TestSetup()
{
_savedCulture = Thread.CurrentThread.CurrentCulture;
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-GB"); // make sure the dates parse correctly
2016-11-07 19:12:09 +01:00
}
[TearDown]
public void TestTearDown() => Thread.CurrentThread.CurrentCulture = _savedCulture;
2016-11-07 19:12:09 +01:00
2017-07-20 11:21:28 +02:00
[Test]
public void Can_Convert_List_To_Enumerable()
{
var list = new List<string> { "hello", "world", "awesome" };
Attempt<IEnumerable<string>> result = list.TryConvertTo<IEnumerable<string>>();
2017-07-20 11:21:28 +02:00
Assert.IsTrue(result.Success);
2016-11-07 19:12:09 +01:00
Assert.AreEqual(3, result.Result.Count());
2017-07-20 11:21:28 +02:00
}
[Test]
public void ObjectExtensions_Object_To_Dictionary()
{
// Arrange
2017-07-20 11:21:28 +02:00
var obj = new { Key1 = "value1", Key2 = "value2", Key3 = "value3" };
// Act
IDictionary<string, string> d = obj.ToDictionary<string>();
2017-07-20 11:21:28 +02:00
// Assert
2017-07-20 11:21:28 +02:00
Assert.IsTrue(d.Keys.Contains("Key1"));
Assert.IsTrue(d.Keys.Contains("Key2"));
Assert.IsTrue(d.Keys.Contains("Key3"));
Assert.AreEqual(d["Key1"], "value1");
Assert.AreEqual(d["Key2"], "value2");
Assert.AreEqual(d["Key3"], "value3");
}
[Test]
public void CanConvertIntToNullableInt()
{
int i = 1;
Attempt<int?> result = i.TryConvertTo<int?>();
2017-07-20 11:21:28 +02:00
Assert.That(result.Success, Is.True);
}
[Test]
public void CanConvertNullableIntToInt()
{
int? i = 1;
Attempt<int> result = i.TryConvertTo<int>();
2017-07-20 11:21:28 +02:00
Assert.That(result.Success, Is.True);
}
[Test]
public virtual void CanConvertStringToBool()
{
var testCases = new Dictionary<string, bool>
{
{ "TRUE", true },
{ "True", true },
{ "true", true },
{ "1", true },
{ "FALSE", false },
{ "False", false },
{ "false", false },
{ "0", false },
{ string.Empty, false }
2017-07-20 11:21:28 +02:00
};
foreach (KeyValuePair<string, bool> testCase in testCases)
2017-07-20 11:21:28 +02:00
{
Attempt<bool> result = testCase.Key.TryConvertTo<bool>();
2017-07-20 11:21:28 +02:00
Assert.IsTrue(result.Success, testCase.Key);
Assert.AreEqual(testCase.Value, result.Result, testCase.Key);
}
}
2016-11-07 19:12:09 +01:00
[TestCase("2012-11-10", true)]
[TestCase("2012/11/10", true)]
[TestCase("10/11/2012", true)]// assuming your culture uses DD/MM/YYYY
[TestCase("11/10/2012", false)]// assuming your culture uses DD/MM/YYYY
[TestCase("Sat 10, Nov 2012", true)]
[TestCase("Saturday 10, Nov 2012", true)]
[TestCase("Sat 10, November 2012", true)]
[TestCase("Saturday 10, November 2012", true)]
[TestCase("2012-11-10 13:14:15", true)]
[TestCase("2012-11-10T13:14:15Z", true)]
2017-07-20 11:21:28 +02:00
public virtual void CanConvertStringToDateTime(string date, bool outcome)
{
var dateTime = new DateTime(2012, 11, 10, 13, 14, 15);
2016-11-07 19:12:09 +01:00
Attempt<DateTime> result = date.TryConvertTo<DateTime>();
2016-11-07 19:12:09 +01:00
Assert.IsTrue(result.Success, date);
Assert.AreEqual(DateTime.Equals(dateTime.Date, result.Result.Date), outcome, date);
2017-07-20 11:21:28 +02:00
}
2016-11-07 19:12:09 +01:00
[Test]
public virtual void CanConvertBlankStringToNullDateTime()
{
Attempt<DateTime?> result = string.Empty.TryConvertTo<DateTime?>();
2016-11-07 19:12:09 +01:00
Assert.IsTrue(result.Success);
Assert.IsNull(result.Result);
}
[Test]
public virtual void CanConvertBlankStringToNullBool()
{
Attempt<bool?> result = string.Empty.TryConvertTo<bool?>();
2016-11-07 19:12:09 +01:00
Assert.IsTrue(result.Success);
Assert.IsNull(result.Result);
}
2017-07-20 11:21:28 +02:00
[Test]
public virtual void CanConvertBlankStringToDateTime()
{
Attempt<DateTime> result = string.Empty.TryConvertTo<DateTime>();
2017-07-20 11:21:28 +02:00
Assert.IsTrue(result.Success);
Assert.AreEqual(DateTime.MinValue, result.Result);
}
2016-11-07 19:12:09 +01:00
2017-07-20 11:21:28 +02:00
[Test]
public virtual void CanConvertObjectToString_Using_ToString_Overload()
{
Attempt<string> result = new MyTestObject().TryConvertTo<string>();
2016-11-07 19:12:09 +01:00
2017-07-20 11:21:28 +02:00
Assert.IsTrue(result.Success);
Assert.AreEqual("Hello world", result.Result);
}
2016-11-07 19:12:09 +01:00
2018-03-27 17:59:53 +02:00
[Test]
2016-11-07 19:12:09 +01:00
public virtual void CanConvertObjectToSameObject()
{
var obj = new MyTestObject();
Attempt<object> result = obj.TryConvertTo<object>();
2016-11-07 19:12:09 +01:00
2017-07-20 11:21:28 +02:00
Assert.AreEqual(obj, result.Result);
2016-11-07 19:12:09 +01:00
}
2017-07-20 11:21:28 +02:00
2018-03-27 17:59:53 +02:00
[Test]
public void ConvertToIntegerTest()
{
Attempt<int> conv = "100".TryConvertTo<int>();
2018-03-27 17:59:53 +02:00
Assert.IsTrue(conv);
Assert.AreEqual(100, conv.Result);
conv = "100.000".TryConvertTo<int>();
Assert.IsTrue(conv);
Assert.AreEqual(100, conv.Result);
conv = "100,000".TryConvertTo<int>();
Assert.IsTrue(conv);
Assert.AreEqual(100, conv.Result);
// oops
conv = "100.001".TryConvertTo<int>();
Assert.IsTrue(conv);
Assert.AreEqual(100, conv.Result);
conv = 100m.TryConvertTo<int>();
Assert.IsTrue(conv);
Assert.AreEqual(100, conv.Result);
conv = 100.000m.TryConvertTo<int>();
Assert.IsTrue(conv);
Assert.AreEqual(100, conv.Result);
// oops
conv = 100.001m.TryConvertTo<int>();
Assert.IsTrue(conv);
Assert.AreEqual(100, conv.Result);
}
[Test]
public void ConvertToDecimalTest()
{
Attempt<decimal> conv = "100".TryConvertTo<decimal>();
2018-03-27 17:59:53 +02:00
Assert.IsTrue(conv);
Assert.AreEqual(100m, conv.Result);
conv = "100.000".TryConvertTo<decimal>();
Assert.IsTrue(conv);
Assert.AreEqual(100m, conv.Result);
conv = "100,000".TryConvertTo<decimal>();
Assert.IsTrue(conv);
Assert.AreEqual(100m, conv.Result);
conv = "100.001".TryConvertTo<decimal>();
Assert.IsTrue(conv);
Assert.AreEqual(100.001m, conv.Result);
conv = 100m.TryConvertTo<decimal>();
Assert.IsTrue(conv);
Assert.AreEqual(100m, conv.Result);
conv = 100.000m.TryConvertTo<decimal>();
Assert.IsTrue(conv);
Assert.AreEqual(100m, conv.Result);
conv = 100.001m.TryConvertTo<decimal>();
Assert.IsTrue(conv);
Assert.AreEqual(100.001m, conv.Result);
conv = 100.TryConvertTo<decimal>();
Assert.IsTrue(conv);
Assert.AreEqual(100m, conv.Result);
}
[Test]
public void ConvertToNullableDecimalTest()
{
Attempt<decimal?> conv = "100".TryConvertTo<decimal?>();
2018-03-27 17:59:53 +02:00
Assert.IsTrue(conv);
Assert.AreEqual(100m, conv.Result);
conv = "100.000".TryConvertTo<decimal?>();
Assert.IsTrue(conv);
Assert.AreEqual(100m, conv.Result);
conv = "100,000".TryConvertTo<decimal?>();
Assert.IsTrue(conv);
Assert.AreEqual(100m, conv.Result);
conv = "100.001".TryConvertTo<decimal?>();
Assert.IsTrue(conv);
Assert.AreEqual(100.001m, conv.Result);
conv = 100m.TryConvertTo<decimal?>();
Assert.IsTrue(conv);
Assert.AreEqual(100m, conv.Result);
conv = 100.000m.TryConvertTo<decimal?>();
Assert.IsTrue(conv);
Assert.AreEqual(100m, conv.Result);
conv = 100.001m.TryConvertTo<decimal?>();
Assert.IsTrue(conv);
Assert.AreEqual(100.001m, conv.Result);
conv = 100.TryConvertTo<decimal?>();
Assert.IsTrue(conv);
Assert.AreEqual(100m, conv.Result);
}
[Test]
public void ConvertToDateTimeTest()
{
Attempt<DateTime> conv = "2016-06-07".TryConvertTo<DateTime>();
2018-03-27 17:59:53 +02:00
Assert.IsTrue(conv);
Assert.AreEqual(new DateTime(2016, 6, 7), conv.Result);
}
[Test]
public void ConvertToNullableDateTimeTest()
{
Attempt<DateTime?> conv = "2016-06-07".TryConvertTo<DateTime?>();
2018-03-27 17:59:53 +02:00
Assert.IsTrue(conv);
Assert.AreEqual(new DateTime(2016, 6, 7), conv.Result);
}
[Test]
public void Value_Editor_Can_Convert_Decimal_To_Decimal_Clr_Type()
{
DataValueEditor valueEditor = MockedValueEditors.CreateDataValueEditor(ValueTypes.Decimal);
2018-03-27 17:59:53 +02:00
Attempt<object> result = valueEditor.TryConvertValueToCrlType(12.34d);
2018-03-27 17:59:53 +02:00
Assert.IsTrue(result.Success);
Assert.AreEqual(12.34d, result.Result);
}
2016-11-07 19:12:09 +01:00
private class MyTestObject
{
public override string ToString() => "Hello world";
2016-11-07 19:12:09 +01:00
}
2017-07-20 11:21:28 +02:00
}
}