// Test "RuntimeHelpers.GetObjectValue". public void TestHelpersGetObjectValue() { // Null's value is itself. AssertNull("GetObjectValue (1)", RuntimeHelpers.GetObjectValue(null)); // Object references map to themselves. Object obj = new Object(); AssertSame("GetObjectValue (2)", obj, RuntimeHelpers.GetObjectValue(obj)); // Immutable primitive types map to themselves. obj = (Object)3; AssertSame("GetObjectValue (3)", obj, RuntimeHelpers.GetObjectValue(obj)); obj = (Object)(AttributeTargets.Assembly); AssertSame("GetObjectValue (4)", obj, RuntimeHelpers.GetObjectValue(obj)); // Other value types are cloned. GetObjectValueTest t = new GetObjectValueTest(3); obj = (Object)t; Object clone = RuntimeHelpers.GetObjectValue(obj); AssertNotSame("GetObjectValue (5)", obj, clone); AssertEquals("GetObjectValue (6)", ((GetObjectValueTest)obj).value, ((GetObjectValueTest)clone).value); obj.GetHashCode(); // side-effect value. AssertEquals("GetObjectValue (7)", 4, ((GetObjectValueTest)obj).value); AssertEquals("GetObjectValue (8)", 3, ((GetObjectValueTest)clone).value); }