using System.Drawing; using NUnit.Framework; namespace Sacs.UnitTests.Net.Standard.Base.Generic { [TestFixture] public class ObjectReferences_Tester { // --- Tests --- [Test] public void ObjectReferences_ChangeValuesOnReferencedObject () { // size2 starts as a reference to size1. Size size1 = new Size(10, 20); Size size2 = size1; Size size3 = new Size(10, 20); Assert.That(size2, Is.EqualTo(size1)); Assert.That(size3, Is.EqualTo(size1)); Assert.That(size3, Is.EqualTo(size2)); // Change size1 values - doesn't change size2. size1.Width = 100; size1.Height = 200; Assert.That(size2, Is.Not.EqualTo(size1)); Assert.That(size3, Is.Not.EqualTo(size1)); Assert.That(size3, Is.EqualTo(size2)); } [Test] public void ObjectReferences_ChangeValuesOnObjectReference () { // size2 starts as a reference to size1. Size size1 = new Size(10, 20); Size size2 = size1; Size size3 = new Size(10, 20); Assert.That(size2, Is.EqualTo(size1)); Assert.That(size3, Is.EqualTo(size1)); Assert.That(size3, Is.EqualTo(size2)); // Change size2 values - doesn't change size1. size2.Width = 100; size2.Height = 200; Assert.That(size2, Is.Not.EqualTo(size1)); Assert.That(size3, Is.EqualTo(size1)); Assert.That(size3, Is.Not.EqualTo(size2)); } // Modify class value. class TestData { public int a = 0; public int B { get; set; } public Size size1 = new Size(10,20); public Size Size2 { get; set; } = new Size(30, 40); } [Test] public void ObjectReferences_ChangeClassValues () { TestData td1 = new TestData(); TestData td2 = td1; Assert.That(td2, Is.EqualTo(td1)); td1.a++; // td2 is still a reference to td1 with the same values. Assert.That(td2, Is.EqualTo(td1)); Assert.That(td2.a, Is.EqualTo(td1.a)); Assert.That(td2.B, Is.EqualTo(td1.B)); Assert.That(td2.size1, Is.EqualTo(td1.size1)); Assert.That(td2.Size2, Is.EqualTo(td1.Size2)); td1.B++; // td2 is still a reference to td1 with the same values. Assert.That(td2, Is.EqualTo(td1)); Assert.That(td2.a, Is.EqualTo(td1.a)); Assert.That(td2.B, Is.EqualTo(td1.B)); Assert.That(td2.size1, Is.EqualTo(td1.size1)); Assert.That(td2.Size2, Is.EqualTo(td1.Size2)); td1.size1.Width += 10; // td2 is still a reference to td1 with the same values. Assert.That(td2, Is.EqualTo(td1)); Assert.That(td2.a, Is.EqualTo(td1.a)); Assert.That(td2.B, Is.EqualTo(td1.B)); Assert.That(td2.size1, Is.EqualTo(td1.size1)); Assert.That(td2.Size2, Is.EqualTo(td1.Size2)); td1.Size2 = new Size(td1.Size2.Width, td1.Size2.Height + 10); // td2 is still a reference to td1 with the same values. Assert.That(td2, Is.EqualTo(td1)); Assert.That(td2.a, Is.EqualTo(td1.a)); Assert.That(td2.B, Is.EqualTo(td1.B)); Assert.That(td2.size1, Is.EqualTo(td1.size1)); Assert.That(td2.Size2, Is.EqualTo(td1.Size2)); } // --- The End --- } }