public void VarConstruction() { object s = ""; ValuePointer var = new ValuePointer(() => s, (o) => s = o, null, false); var.Setter(1); Assert.AreEqual(1, s); Assert.IsNull(var.DeclaredType); Assert.IsFalse(var.IsDynamic); var.UpdateToCurrentType(); Assert.IsNotNull(var.DeclaredType); try { var.Setter("Var.Setter"); Assert.Fail(); } catch { } }
public void DynamicConstruction() { object s = ""; ValuePointer dynamic = new ValuePointer(() => s, (o) => s = o, null, true); Assert.IsTrue(dynamic.IsDynamic); Assert.IsNull(dynamic.DeclaredType); dynamic.Setter("dynamic.Setter"); Assert.IsTrue(dynamic.IsDynamic); Assert.IsNull(dynamic.DeclaredType); dynamic.UpdateToCurrentType(); Assert.IsTrue(dynamic.IsDynamic); try { dynamic.Setter(123); } catch { Assert.Fail(); } }
public void IncompatibleDynamicConstruction() { object s = ""; ValuePointer incompatibleDynamic = new ValuePointer(() => s, (o) => s = o, typeof(int), true); Assert.IsTrue(incompatibleDynamic.IsDynamic); Assert.AreEqual(typeof(int), incompatibleDynamic.DeclaredType); incompatibleDynamic.Setter("dynamic.Setter"); Assert.IsTrue(incompatibleDynamic.IsDynamic); incompatibleDynamic.UpdateToCurrentType(); Assert.AreEqual(typeof(string), incompatibleDynamic.DeclaredType); Assert.IsTrue(incompatibleDynamic.IsDynamic); try { incompatibleDynamic.Setter(123); Assert.Fail(); } catch { } }