Jo Shields a575963da9 Imported Upstream version 3.6.0
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
2014-08-13 10:39:27 +01:00

217 lines
6.8 KiB
C#

// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
using System.Collections.Generic;
using System.Dynamic;
using System.Linq;
using Moq;
using Xunit;
namespace System.Web.Mvc.Test
{
public class DynamicViewDataDictionaryTest
{
[Fact]
public void Get_OnExistingProperty_ReturnsValue()
{
// Arrange
ViewDataDictionary vd = new ViewDataDictionary()
{
{ "Prop", "Value" }
};
dynamic dynamicVD = new DynamicViewDataDictionary(() => vd);
// Act
object value = dynamicVD.Prop;
// Assert
Assert.IsType<string>(value);
Assert.Equal("Value", value);
}
[Fact]
public void Get_OnNonExistentProperty_ReturnsNull()
{
// Arrange
ViewDataDictionary vd = new ViewDataDictionary();
dynamic dynamicVD = new DynamicViewDataDictionary(() => vd);
// Act
object value = dynamicVD.Prop;
// Assert
Assert.Null(value);
}
[Fact]
public void Set_OnExistingProperty_OverridesValue()
{
// Arrange
ViewDataDictionary vd = new ViewDataDictionary()
{
{ "Prop", "Value" }
};
dynamic dynamicVD = new DynamicViewDataDictionary(() => vd);
// Act
dynamicVD.Prop = "NewValue";
// Assert
Assert.Equal("NewValue", dynamicVD.Prop);
Assert.Equal("NewValue", vd["Prop"]);
}
[Fact]
public void Set_OnNonExistentProperty_SetsValue()
{
// Arrange
ViewDataDictionary vd = new ViewDataDictionary();
dynamic dynamicVD = new DynamicViewDataDictionary(() => vd);
// Act
dynamicVD.Prop = "NewValue";
// Assert
Assert.Equal("NewValue", dynamicVD.Prop);
Assert.Equal("NewValue", vd["Prop"]);
}
[Fact]
public void TryGetMember_OnExistingProperty_ReturnsValueAndSucceeds()
{
// Arrange
object result = null;
ViewDataDictionary vd = new ViewDataDictionary()
{
{ "Prop", "Value" }
};
DynamicViewDataDictionary dynamicVD = new DynamicViewDataDictionary(() => vd);
Mock<GetMemberBinder> binderMock = new Mock<GetMemberBinder>("Prop", /* ignoreCase */ false);
// Act
bool success = dynamicVD.TryGetMember(binderMock.Object, out result);
// Assert
Assert.True(success);
Assert.Equal("Value", result);
}
[Fact]
public void TryGetMember_OnNonExistentProperty_ReturnsNullAndSucceeds()
{
// Arrange
object result = null;
ViewDataDictionary vd = new ViewDataDictionary();
DynamicViewDataDictionary dynamicVD = new DynamicViewDataDictionary(() => vd);
Mock<GetMemberBinder> binderMock = new Mock<GetMemberBinder>("Prop", /* ignoreCase */ false);
// Act
bool success = dynamicVD.TryGetMember(binderMock.Object, out result);
// Assert
Assert.True(success);
Assert.Null(result);
}
[Fact]
public void TrySetMember_OnExistingProperty_OverridesValueAndSucceeds()
{
// Arrange
ViewDataDictionary vd = new ViewDataDictionary()
{
{ "Prop", "Value" }
};
DynamicViewDataDictionary dynamicVD = new DynamicViewDataDictionary(() => vd);
Mock<SetMemberBinder> binderMock = new Mock<SetMemberBinder>("Prop", /* ignoreCase */ false);
// Act
bool success = dynamicVD.TrySetMember(binderMock.Object, "NewValue");
// Assert
Assert.True(success);
Assert.Equal("NewValue", ((dynamic)dynamicVD).Prop);
Assert.Equal("NewValue", vd["Prop"]);
}
[Fact]
public void TrySetMember_OnNonExistentProperty_SetsValueAndSucceeds()
{
// Arrange
ViewDataDictionary vd = new ViewDataDictionary();
DynamicViewDataDictionary dynamicVD = new DynamicViewDataDictionary(() => vd);
Mock<SetMemberBinder> binderMock = new Mock<SetMemberBinder>("Prop", /* ignoreCase */ false);
// Act
bool success = dynamicVD.TrySetMember(binderMock.Object, "NewValue");
// Assert
Assert.True(success);
Assert.Equal("NewValue", ((dynamic)dynamicVD).Prop);
Assert.Equal("NewValue", vd["Prop"]);
}
[Fact]
public void GetDynamicMemberNames_ReturnsEmptyListForEmptyViewDataDictionary()
{
// Arrange
ViewDataDictionary vd = new ViewDataDictionary();
DynamicViewDataDictionary dvd = new DynamicViewDataDictionary(() => vd);
// Act
IEnumerable<string> result = dvd.GetDynamicMemberNames();
// Assert
Assert.Empty(result);
}
[Fact]
public void GetDynamicMemberNames_ReturnsKeyNamesForFilledViewDataDictionary()
{
// Arrange
ViewDataDictionary vd = new ViewDataDictionary()
{
{ "Prop1", 1 },
{ "Prop2", 2 }
};
DynamicViewDataDictionary dvd = new DynamicViewDataDictionary(() => vd);
// Act
var result = dvd.GetDynamicMemberNames();
// Assert
Assert.Equal(new[] { "Prop1", "Prop2" }, result.OrderBy(s => s).ToArray());
}
[Fact]
public void GetDynamicMemberNames_ReflectsChangesToUnderlyingViewDataDictionary()
{
// Arrange
ViewDataDictionary vd = new ViewDataDictionary();
vd["OldProp"] = 123;
DynamicViewDataDictionary dvd = new DynamicViewDataDictionary(() => vd);
vd["NewProp"] = "somevalue";
// Act
var result = dvd.GetDynamicMemberNames();
// Assert
Assert.Equal(new[] { "NewProp", "OldProp" }, result.OrderBy(s => s).ToArray());
}
[Fact]
public void GetDynamicMemberNames_ReflectsChangesToDynamicObject()
{
// Arrange
ViewDataDictionary vd = new ViewDataDictionary();
vd["OldProp"] = 123;
DynamicViewDataDictionary dvd = new DynamicViewDataDictionary(() => vd);
((dynamic)dvd).NewProp = "foo";
// Act
var result = dvd.GetDynamicMemberNames();
// Assert
Assert.Equal(new[] { "NewProp", "OldProp" }, result.OrderBy(s => s).ToArray());
}
}
}