Skip to content

Commit

Permalink
Default values for multidimensional arrays
Browse files Browse the repository at this point in the history
This commits extends `EmptyDefaultValueProvider` so it can generate
default values for multi-dimensional arrays. Like with vectors, the
default values for those consist of arrays with the proper rank and
all-zero upper and lower bounds.
  • Loading branch information
stakx authored and kzu committed Jun 5, 2017
1 parent 32897e1 commit 731bf10
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 1 deletion.
4 changes: 3 additions & 1 deletion Source/EmptyDefaultValueProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,9 @@ private static object GetReferenceTypeDefault(Type valueType)
{
if (valueType.IsArray)
{
return Activator.CreateInstance(valueType, 0);
var elementType = valueType.GetElementType();
var lengths = new int[valueType.GetArrayRank()];
return Array.CreateInstance(elementType, lengths);
}
else if (valueType == typeof(IEnumerable))
{
Expand Down
54 changes: 54 additions & 0 deletions UnitTests/Regressions/IssueReportsFixture.cs
Original file line number Diff line number Diff line change
Expand Up @@ -303,6 +303,60 @@ public interface IMyInterface

#endregion // #252

#region 311

public sealed class Issue311
{
[Fact]
public void Can_still_provide_default_value_for_vector()
{
var mocked = Mock.Of<ITypeWithVector>();

var vector = mocked.Vector;
Assert.NotNull(vector);
Assert.True(vector.GetType().IsArray);
Assert.Equal(1, vector.GetType().GetArrayRank());
}

[Fact]
public void Can_provide_default_value_for_twodimensional_array_property()
{
var mocked = Mock.Of<ITypeWithTwoDimensionalArray>();

var twoDimensionalArray = mocked.TwoDimensionalArray;
Assert.NotNull(twoDimensionalArray);
Assert.True(twoDimensionalArray.GetType().IsArray);
Assert.Equal(2, twoDimensionalArray.GetType().GetArrayRank());
}

[Fact]
public void Can_provide_default_value_for_threedimensional_arrays()
{
var mocked = Mock.Of<ITypeWithThreeDimensionalArray>();

var threeDimensionalArray = mocked.ThreeDimensionalArray;
Assert.NotNull(threeDimensionalArray);
Assert.True(threeDimensionalArray.GetType().IsArray);
Assert.Equal(3, threeDimensionalArray.GetType().GetArrayRank());
}

public interface ITypeWithVector
{
int[] Vector { get; }
}

public interface ITypeWithTwoDimensionalArray
{
int[,] TwoDimensionalArray { get; }
}

public interface ITypeWithThreeDimensionalArray
{
int[,,] ThreeDimensionalArray { get; }
}
}

#endregion 311

// Old @ Google Code

Expand Down

0 comments on commit 731bf10

Please sign in to comment.