|
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using Xunit;
namespace Microsoft.DotNet.XUnitExtensions
{
public static class TheoryExtensions
{
/// <summary>
/// Converts an IEnumerable<typeparamref name="T"/> into an Xunit theory compatible enumerable.
/// </summary>
public static TheoryData ToTheoryData<T>(this IEnumerable<T> data)
{
// Returning TheoryData rather than IEnumerable<object> directly should
// encourage discover and usage of TheoryData<T1, ..> classes for more
// complicated theories. Slightly easier to type as well.
return new TheoryDataAdapter(data.Select(d => new object[] { d }));
}
private class TheoryDataAdapter : TheoryData, IEnumerable<object[]>
{
private IEnumerable<object[]> _data;
public TheoryDataAdapter(IEnumerable<object[]> data)
{
_data = data;
}
public new IEnumerator<object[]> GetEnumerator() => _data.GetEnumerator();
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
}
}
}
|