Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -18,34 +18,21 @@ public class DataRowAttribute : Attribute, ITestDataSource
/// <summary>
/// Initializes a new instance of the <see cref="DataRowAttribute"/> class.
/// </summary>
public DataRowAttribute()
{
Data = Array.Empty<object>();
}

/// <summary>
/// Initializes a new instance of the <see cref="DataRowAttribute"/> class.
/// </summary>
/// <param name="data1"> The data object. </param>
public DataRowAttribute(object data1)
/// <param name="data"> The data object. </param>
public DataRowAttribute(object data)
{
// Need to have this constructor explicitly to fix a CLS compliance error.
Data = new object[] { data1 };
Data = new object[] { data };
}

/// <summary>
/// Initializes a new instance of the <see cref="DataRowAttribute"/> class which takes in an array of arguments.
/// </summary>
/// <param name="data1"> A data object. </param>
/// <param name="moreData"> More data. </param>
public DataRowAttribute(object data1, params object[] moreData)
/// <param name="data"> More data. </param>
public DataRowAttribute(params object[] data)
Comment thread
Evangelink marked this conversation as resolved.
{
// This actually means that the user wants to pass in a 'null' value to the test method.
moreData ??= new object[] { null };

Data = new object[moreData.Length + 1];
Data[0] = data1;
Array.Copy(moreData, 0, Data, 1, moreData.Length);
Data = data ?? new object[] { null };
}

/// <summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,6 @@ Microsoft.VisualStudio.TestTools.UnitTesting.DataAccessMethod.Random = 1 -> Micr
Microsoft.VisualStudio.TestTools.UnitTesting.DataAccessMethod.Sequential = 0 -> Microsoft.VisualStudio.TestTools.UnitTesting.DataAccessMethod
Microsoft.VisualStudio.TestTools.UnitTesting.DataRowAttribute
Microsoft.VisualStudio.TestTools.UnitTesting.DataRowAttribute.Data.get -> object[]
Microsoft.VisualStudio.TestTools.UnitTesting.DataRowAttribute.DataRowAttribute() -> void
Microsoft.VisualStudio.TestTools.UnitTesting.DataRowAttribute.DataRowAttribute(object data1) -> void
Microsoft.VisualStudio.TestTools.UnitTesting.DataRowAttribute.DataRowAttribute(object data1, params object[] moreData) -> void
Microsoft.VisualStudio.TestTools.UnitTesting.DataRowAttribute.DisplayName.get -> string
Microsoft.VisualStudio.TestTools.UnitTesting.DataRowAttribute.DisplayName.set -> void
Microsoft.VisualStudio.TestTools.UnitTesting.DataRowAttribute.GetData(System.Reflection.MethodInfo methodInfo) -> System.Collections.Generic.IEnumerable<object[]>
Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@

Microsoft.VisualStudio.TestTools.UnitTesting.DataRowAttribute.DataRowAttribute(object data) -> void
Microsoft.VisualStudio.TestTools.UnitTesting.DataRowAttribute.DataRowAttribute(params object[] data) -> void
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,15 @@
using System.Linq;
using System.Reflection;

using global::TestFramework.ForTestingMSTest;

using Microsoft.VisualStudio.TestTools.UnitTesting;

using Moq;

using TestFramework.ForTestingMSTest;

namespace Microsoft.VisualStudio.TestPlatform.TestFramework.UnitTests.Attributes;
public class DataRowAttributeTests : TestContainer
{
private DummyTestClass _dummyTestClass;
private MethodInfo _testMethodInfo;

public void DefaultConstructorSetsEmptyArrayPassed()
{
var dataRow = new DataRowAttribute();
Expand All @@ -28,6 +27,13 @@ public void ConstructorShouldSetDataPassed()
Verify(new object[] { "mercury" }.SequenceEqual(dataRow.Data));
}

public void ConstructorShouldSetNullDataPassed()
{
var dataRow = new DataRowAttribute(null);

Verify(new object[] { null }.SequenceEqual(dataRow.Data));
}

public void ConstructorShouldSetMultipleDataValuesPassed()
{
var dataRow = new DataRowAttribute("mercury", "venus", "earth");
Expand All @@ -49,31 +55,41 @@ public void ConstructorShouldSetANullDataValuePassedInAsADataArg()
Verify(new object[] { null, "logos" }.SequenceEqual(dataRow.Data));
}

public void ConstructorShouldSetMultipleDataArrays()
{
// Fixes https://github.com/microsoft/testfx/issues/1180
var dataRow = new DataRowAttribute(new[] { "a" }, new[] { "b" });

Verify(dataRow.Data.Length == 2);
Verify(dataRow.Data[0] is string[] array1 && array1.SequenceEqual(new[] { "a" }));
Verify(dataRow.Data[1] is string[] array2 && array2.SequenceEqual(new[] { "b" }));
}

public void GetDataShouldReturnDataPassed()
{
var dataRow = new DataRowAttribute("mercury");

Verify(new object[] { "mercury" }.SequenceEqual(dataRow.GetData(null).FirstOrDefault()));
Verify(new object[] { "mercury" }.SequenceEqual(dataRow.GetData(null).Single()));
}

public void GetDisplayNameShouldReturnAppropriateName()
{
var dataRowAttribute = new DataRowAttribute(null);

_dummyTestClass = new DummyTestClass();
_testMethodInfo = _dummyTestClass.GetType().GetTypeInfo().GetDeclaredMethod("DataRowTestMethod");
var dummyTestClass = new DummyTestClass();
var testMethodInfo = dummyTestClass.GetType().GetTypeInfo().GetDeclaredMethod("DataRowTestMethod");

var data = new string[] { "First", "Second", null };
var data1 = new string[] { null, "First", "Second" };
var data2 = new string[] { "First", null, "Second" };

var displayName = dataRowAttribute.GetDisplayName(_testMethodInfo, data);
var displayName = dataRowAttribute.GetDisplayName(testMethodInfo, data);
Verify(displayName == "DataRowTestMethod (First,Second,)");

displayName = dataRowAttribute.GetDisplayName(_testMethodInfo, data1);
displayName = dataRowAttribute.GetDisplayName(testMethodInfo, data1);
Verify(displayName == "DataRowTestMethod (,First,Second)");

displayName = dataRowAttribute.GetDisplayName(_testMethodInfo, data2);
displayName = dataRowAttribute.GetDisplayName(testMethodInfo, data2);
Verify(displayName == "DataRowTestMethod (First,,Second)");
}

Expand All @@ -84,12 +100,68 @@ public void GetDisplayNameShouldReturnSpecifiedDisplayName()
DisplayName = "DataRowTestWithDisplayName",
};

_dummyTestClass = new DummyTestClass();
_testMethodInfo = _dummyTestClass.GetType().GetTypeInfo().GetDeclaredMethod("DataRowTestMethod");
var dummyTestClass = new DummyTestClass();
var testMethodInfo = dummyTestClass.GetType().GetTypeInfo().GetDeclaredMethod("DataRowTestMethod");

var data = new string[] { "First", "Second", null };

var displayName = dataRowAttribute.GetDisplayName(_testMethodInfo, data);
var displayName = dataRowAttribute.GetDisplayName(testMethodInfo, data);
Verify(displayName == "DataRowTestWithDisplayName");
}

public void GetDisplayNameForArrayOfOneItem()
{
// Arrange
var dataRow = new DataRowAttribute(new[] { "a" });
var methodInfoMock = new Mock<MethodInfo>();
methodInfoMock.SetupGet(x => x.Name).Returns("MyMethod");

// Act
var displayName = dataRow.GetDisplayName(methodInfoMock.Object, dataRow.Data);

// Assert
Verify(displayName == "MyMethod (a)");
}

public void GetDisplayNameForArrayOfMultipleItems()
{
// Arrange
var dataRow = new DataRowAttribute(new[] { "a", "b", "c" });
var methodInfoMock = new Mock<MethodInfo>();
methodInfoMock.SetupGet(x => x.Name).Returns("MyMethod");

// Act
var displayName = dataRow.GetDisplayName(methodInfoMock.Object, dataRow.Data);

// Assert
Verify(displayName == "MyMethod (a,b,c)");
}

public void GetDisplayNameForMultipleArraysOfOneItem()
{
// Arrange
var dataRow = new DataRowAttribute(new[] { "a" }, new[] { "1" });
var methodInfoMock = new Mock<MethodInfo>();
methodInfoMock.SetupGet(x => x.Name).Returns("MyMethod");

// Act
var displayName = dataRow.GetDisplayName(methodInfoMock.Object, dataRow.Data);

// Assert
Verify(displayName == "MyMethod (System.String[],System.String[])");
Comment thread
engyebrahim marked this conversation as resolved.
}

public void GetDisplayNameForMultipleArraysOfMultipleItems()
{
// Arrange
var dataRow = new DataRowAttribute(new[] { "a", "b", "c" }, new[] { "1", "2", "3" });
var methodInfoMock = new Mock<MethodInfo>();
methodInfoMock.SetupGet(x => x.Name).Returns("MyMethod");

// Act
var displayName = dataRow.GetDisplayName(methodInfoMock.Object, dataRow.Data);

// Assert
Verify(displayName == "MyMethod (System.String[],System.String[])");
}
}