public RelayingClass(GoverningClass1 governingClass1, GoverningClass2 governingClass2)
            {
                _governingClass1 = governingClass1;
                _governingClass2 = governingClass2;

                RelayEventsOf(governingClass1);
                RelayEventsOf(governingClass2);
            }
 public RelayingClass(GoverningClass1 governingClass)
 {
     _governingClass1 = governingClass;
     RelayEventsOf(governingClass);
 }
 public void RelayedEventAttribute_CallingRelayEventsOfWithInvalidRelayedEventAttributeTest()
 {
     var governing = new GoverningClass1();
     var relaying = new BadRelayingClass2(governing);
 }
        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"]);
        }
 public BadRelayingClass1(GoverningClass1 governingClass)
 {
     _governingClass = governingClass;
     // Invalid initialization, class has no property with a RelayedEventAttribute for GoverningClass1
     RelayEventsOf(governingClass);
 }