public void TestReadOnlyCloneable() { var cloneable = new GoodCloneableObject(); Assert.AreNotSame(cloneable, cloneable.Clone()); cloneable.IsReadOnly = true; Assert.AreSame(cloneable, cloneable.Clone()); var mutableClone = (GoodCloneableObject)cloneable.MutableClone(); Assert.AreNotSame(cloneable, mutableClone); Assert.DoesNotThrow(() => { mutableClone.SomeProperty = 7; }); cloneable = new GoodCloneableObject(); var readonlyClone = (GoodCloneableObject)cloneable.ImmutableClone(); Assert.AreNotSame(cloneable, readonlyClone); cloneable.IsReadOnly = true; readonlyClone = (GoodCloneableObject)cloneable.ImmutableClone(); Assert.AreSame(cloneable, readonlyClone); Assert.Throws<InvalidOperationException>(() => { readonlyClone.SomeProperty = 7; }); }
public void TestGoodCloneable() { var goodguy = new GoodCloneableObject(); var goodGuy2 = (GoodCloneableObject)goodguy.Clone(); Assert.AreEqual(goodguy.SomeProperty, goodGuy2.SomeProperty); }
public void TestReadOnlyMutationCloneable() { var cloneable = new GoodCloneableObject {IsReadOnly = true}; Assert.Throws<InvalidOperationException>(() => { cloneable.IsReadOnly = false; }); // deja-vu... // This behavior is defined within the test, it's a simple reminder that this behavior // must be implemented on all Cloneables. Assert.Throws<InvalidOperationException>(() => { cloneable.SomeProperty = 1; }); }