public void SetReference(ISimpleResource reference) { References.Add(reference); }
public void ReplaceWithProxy() { // Arrange: Create instance and reference var ref1 = new DerivedResource { Id = 9, Foo = 20 }; var ref2 = new SimpleResource { Id = 10, Foo = 30 }; var nonPub = new NonPublicResource { Name = "NonPublic" }; var instance = new ReferenceResource { Id = 8, Reference = ref1, NonPublic = nonPub }; instance.References = new ReferenceCollection <ISimpleResource>(instance, instance.GetType().GetProperty(nameof(ReferenceResource.References)), new List <IResource>()) { ref2 }; // Act: Convert to proxy and access the reference var proxy = (IReferenceResource)_typeController.GetProxy(instance); var reference = proxy.Reference; var methodRef = proxy.GetReference(); var references = proxy.MoreReferences.ToArray(); var references2 = proxy.GetReferences(); var nonPubProxy = proxy.NonPublic; ISimpleResource eventArgs = null; proxy.ReferenceChanged += (sender, resource) => eventArgs = resource; ISimpleResource[] eventArgs2 = null; proxy.SomeChanged += (sender, resources) => eventArgs2 = resources; // Act: Set resource property through proxy proxy.Reference = references[0]; proxy.SetReference(reference); // Make sure all references where replaced with proxies Assert.AreNotEqual(ref1, reference); Assert.AreNotEqual(ref2, references[0]); Assert.AreNotEqual(ref2, references2[0]); Assert.AreNotEqual(nonPub, nonPubProxy); Assert.AreEqual(20, reference.Foo); Assert.AreEqual(reference, methodRef); Assert.AreEqual(30, references[0].Foo); Assert.AreEqual(30, references2[0].Foo); Assert.NotNull(eventArgs); Assert.AreEqual(30, eventArgs.Foo); Assert.NotNull(eventArgs2); Assert.AreEqual(1, eventArgs2.Length); Assert.AreEqual(30, eventArgs2[0].Foo); Assert.AreEqual("NonPublic", nonPubProxy.Name); // Assert modifications of the setters Assert.AreEqual(instance.Reference, ref2); Assert.AreEqual(instance.References.Count(), 2); Assert.AreEqual(instance.References.ElementAt(1), ref1); }