Files

170 lines
5.5 KiB
C#
Raw Permalink Normal View History

// Copyright (c) Umbraco.
// See LICENSE for more details.
using System.Collections.Generic;
2016-11-07 19:12:09 +01:00
using System.Linq;
using NUnit.Framework;
using Umbraco.Extensions;
2016-11-07 19:12:09 +01:00
namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core;
[TestFixture]
public class EnumerableExtensionsTests
2016-11-07 19:12:09 +01:00
{
[Test]
public void Unsorted_Sequence_Equal()
2016-11-07 19:12:09 +01:00
{
var list1 = new[] { 1, 2, 3, 4, 5, 6 };
var list2 = new[] { 6, 5, 3, 2, 1, 4 };
var list3 = new[] { 6, 5, 4, 3, 2, 2 };
2016-11-07 19:12:09 +01:00
Assert.IsTrue(list1.UnsortedSequenceEqual(list2));
Assert.IsTrue(list2.UnsortedSequenceEqual(list1));
Assert.IsFalse(list1.UnsortedSequenceEqual(list3));
2016-11-07 19:12:09 +01:00
Assert.IsTrue(((IEnumerable<object>)null).UnsortedSequenceEqual(null));
Assert.IsFalse(((IEnumerable<int>)null).UnsortedSequenceEqual(list1));
Assert.IsFalse(list1.UnsortedSequenceEqual(null));
}
2016-11-07 19:12:09 +01:00
[Test]
public void Contains_All()
{
var list1 = new[] { 1, 2, 3, 4, 5, 6 };
var list2 = new[] { 6, 5, 3, 2, 1, 4 };
var list3 = new[] { 6, 5, 4, 3 };
Assert.IsTrue(list1.ContainsAll(list2));
Assert.IsTrue(list2.ContainsAll(list1));
Assert.IsTrue(list1.ContainsAll(list3));
Assert.IsFalse(list3.ContainsAll(list1));
}
2016-11-07 19:12:09 +01:00
[Test]
public void SelectRecursive_2()
{
var hierarchy = new TestItem("1") { Children = new List<TestItem> { new("1.1"), new("1.2"), new("1.3") } };
2016-11-07 19:12:09 +01:00
var selectRecursive = hierarchy.Children.SelectRecursive(x => x.Children);
2016-11-07 19:12:09 +01:00
Assert.AreEqual(3, selectRecursive.Count());
}
2016-11-07 19:12:09 +01:00
[Test]
public void SelectRecursive()
{
var hierarchy = new TestItem("1")
2016-11-07 19:12:09 +01:00
{
Children = new List<TestItem>
2016-11-07 19:12:09 +01:00
{
new("1.1")
2016-11-07 19:12:09 +01:00
{
Children = new List<TestItem>
2017-07-20 11:21:28 +02:00
{
new("1.1.1")
2017-07-20 11:21:28 +02:00
{
Children = new List<TestItem>
2017-07-20 11:21:28 +02:00
{
new("1.1.1.1")
2017-07-20 11:21:28 +02:00
{
Children = new List<TestItem>
2017-07-20 11:21:28 +02:00
{
new("1.1.1.1.1"), new("1.1.1.1.2"),
},
},
},
},
2017-07-20 11:21:28 +02:00
},
},
new("1.2")
{
Children = new List<TestItem>
2017-07-20 11:21:28 +02:00
{
new("1.2.1")
2017-07-20 11:21:28 +02:00
{
Children = new List<TestItem>
2017-07-20 11:21:28 +02:00
{
new("1.2.1.1") { Children = new List<TestItem>() },
2017-07-20 11:21:28 +02:00
},
},
new("1.2.2")
{
Children = new List<TestItem>
2017-07-20 11:21:28 +02:00
{
new("1.2.2.1") { Children = new List<TestItem>() },
},
},
},
},
},
};
2016-11-07 19:12:09 +01:00
var selectRecursive = hierarchy.Children.SelectRecursive(x => x.Children);
Assert.AreEqual(10, selectRecursive.Count());
}
private class TestItem
{
public TestItem(string name)
2016-11-07 19:12:09 +01:00
{
Children = Enumerable.Empty<TestItem>();
Name = name;
}
public string Name { get; }
public IEnumerable<TestItem> Children { get; set; }
}
2016-11-07 19:12:09 +01:00
[Test]
public void InGroupsOf_ReturnsAllElements()
{
var integers = new[] { 0, 1, 2, 3, 4, 5, 6, 7, 8 };
2016-11-07 19:12:09 +01:00
var groupsOfTwo = integers.InGroupsOf(2).ToArray();
2016-11-07 19:12:09 +01:00
var flattened = groupsOfTwo.SelectMany(x => x).ToArray();
2016-11-07 19:12:09 +01:00
Assert.That(groupsOfTwo.Length, Is.EqualTo(5));
Assert.That(flattened.Length, Is.EqualTo(integers.Length));
CollectionAssert.AreEquivalent(integers, flattened);
2016-11-07 19:12:09 +01:00
var groupsOfMassive = integers.InGroupsOf(100).ToArray();
Assert.That(groupsOfMassive.Length, Is.EqualTo(1));
flattened = groupsOfMassive.SelectMany(x => x).ToArray();
Assert.That(flattened.Length, Is.EqualTo(integers.Length));
CollectionAssert.AreEquivalent(integers, flattened);
}
2016-11-07 19:12:09 +01:00
[Test]
public void InGroupsOf_CanRepeat()
{
var integers = new[] { 0, 1, 2, 3, 4, 5, 6, 7, 8 };
var inGroupsOf = integers.InGroupsOf(2);
Assert.AreEqual(5, inGroupsOf.Count());
Assert.AreEqual(5, inGroupsOf.Count()); // again
}
2016-11-07 19:12:09 +01:00
[TestCase]
public void DistinctBy_ReturnsDistinctElements_AndResetsIteratorCorrectly()
{
// Arrange
var tuple1 = new Tuple<string, string>("fruit", "apple");
var tuple2 = new Tuple<string, string>("fruit", "orange");
var tuple3 = new Tuple<string, string>("fruit", "banana");
var tuple4 = new Tuple<string, string>("fruit", "banana"); // Should be filtered out
var list = new List<Tuple<string, string>> { tuple1, tuple2, tuple3, tuple4 };
// Act
var iteratorSource = list.DistinctBy(x => x.Item2).ToArray();
// Assert
// First check distinction
Assert.AreEqual(3, iteratorSource.Count());
// Check for iterator block mistakes - reset to original query first
iteratorSource = list.DistinctBy(x => x.Item2).ToArray();
Assert.AreEqual(iteratorSource.Length, iteratorSource.ToList().Count);
2016-11-07 19:12:09 +01:00
}
2017-07-20 11:21:28 +02:00
}