public void RelayedEventAttribute_MultipleGoverningClassTest()
        {
            var receivedEvents = new ObservableIndexer<string, int>(_ => 0);
            var governing1 = new GoverningClass1();
            var governing2 = new GoverningClass2();
            var relaying = new RelayingClass(governing1, governing2);

            relaying.PropertyChanged += (sender, e) => receivedEvents[e.PropertyName] += 1;

            governing1.Value = 5;

            Assert.AreEqual(5, relaying.Value);
            Assert.AreEqual(0, relaying.MyOtherValue);
            Assert.AreEqual(1, receivedEvents.Count);
            Assert.AreEqual(1, receivedEvents["Value"]);

            governing1.Value = 7;

            Assert.AreEqual(7, relaying.Value);
            Assert.AreEqual(0, relaying.MyOtherValue);
            Assert.AreEqual(1, receivedEvents.Count);
            Assert.AreEqual(2, receivedEvents["Value"]);

            // Governing2.Value is not relayed, changes should not generate relayed events
            governing2.Value = 8;

            Assert.AreEqual(7, relaying.Value);
            Assert.AreEqual(0, relaying.MyOtherValue);
            Assert.AreEqual(1, receivedEvents.Count);
            Assert.AreEqual(2, receivedEvents["Value"]);

            governing2.OtherValue = 8;

            Assert.AreEqual(7, relaying.Value);
            Assert.AreEqual(8, relaying.MyOtherValue);
            Assert.AreEqual(2, receivedEvents.Count);
            Assert.AreEqual(2, receivedEvents["Value"]);
            Assert.AreEqual(1, receivedEvents["MyOtherValue"]);
        }
        public void RelayedEventAttribute_SingleGoverningClassTest()
        {
            var receivedEvents = new ObservableIndexer<string, int>(_ => 0);
            var governing = new GoverningClass1();
            var relaying = new RelayingClass(governing);

            relaying.PropertyChanged += (sender, e) => receivedEvents[e.PropertyName] += 1;

            governing.Value = 5;

            Assert.AreEqual(5, relaying.Value);
            Assert.AreEqual(1, receivedEvents.Count);
            Assert.AreEqual(1, receivedEvents["Value"]);

            governing.Value = 7;

            Assert.AreEqual(7, relaying.Value);
            Assert.AreEqual(1, receivedEvents.Count);
            Assert.AreEqual(2, receivedEvents["Value"]);
        }