public void GivenRegistry_WhenObserverIsInserted_ItShouldDetectPriorAndAfterRegistrations()
        {
            // pre-arrange
            int countPreRegisteredCalled = 0;
            int countPostRegisteredCalled = 0;

            // arrange
            var semanticBuilder = new SemanticBuilder();

            var observer1 = new TestRegistryObserver(package =>
            {
                countPreRegisteredCalled++;
                return null;
            });
            var observer2 = new TestRegistryObserver(package =>
            {
                countPostRegisteredCalled++;
                return null;
            });

            // act
            semanticBuilder.RegisterObserver(observer1);
            semanticBuilder.InstallPipe<TestClassA, TestClassB>((a, innerBroker) => (TestClassB)null);
            semanticBuilder.RegisterObserver(observer2);

            // assert
            Assert.GreaterOrEqual(countPreRegisteredCalled, 1);
            Assert.GreaterOrEqual(countPostRegisteredCalled, 1);
        }
        public void GivenRegistry_WhenObserverIsInserted_ItShouldDetectPriorAndAfterRegistrations()
        {
            // pre-arrange
            int countPreRegisteredCalled  = 0;
            int countPostRegisteredCalled = 0;

            // arrange
            var semanticBuilder = new SemanticBuilder();

            var observer1 = new TestRegistryObserver(package =>
            {
                countPreRegisteredCalled++;
                return(null);
            });
            var observer2 = new TestRegistryObserver(package =>
            {
                countPostRegisteredCalled++;
                return(null);
            });

            // act
            semanticBuilder.RegisterObserver(observer1);
            semanticBuilder.InstallPipe <TestClassA, TestClassB>((a, innerBroker) => (TestClassB)null);
            semanticBuilder.RegisterObserver(observer2);

            // assert
            Assert.GreaterOrEqual(countPreRegisteredCalled, 1);
            Assert.GreaterOrEqual(countPostRegisteredCalled, 1);
        }
        public void GivenRegistry_WhenPipesAreRegistered_ItShouldNotifyObservers()
        {
            // pre-arrange
            bool wasEventCalled = false;

            // arrange
            var semanticBuilder = new SemanticBuilder();
            var observer = new TestRegistryObserver(package =>
            {
                wasEventCalled = true;
                return null;
            });
            semanticBuilder.RegisterObserver(observer);

            // act
            semanticBuilder.InstallPipe<TestClassA, TestClassB>((a, innerBroker) => (TestClassB)null);

            // assert
            Assert.IsTrue(wasEventCalled);
        }
        public void GivenPopulatedRegistry_WhenObserverEnrollsLater_ItShouldBeNotifiedOfPreviousRegistrations()
        {
            // pre-arrange
            bool wasEventCalled = false;

            // arrange
            var semanticBuilder = new SemanticBuilder();
            semanticBuilder.InstallPipe<TestClassA, TestClassB>((a, innerBroker) => (TestClassB)null);

            // act
            var observer = new TestRegistryObserver(package =>
            {
                wasEventCalled = true;
                return null;
            });
            semanticBuilder.RegisterObserver(observer);

            // assert
            Assert.IsTrue(wasEventCalled);
        }
        public void GivenRegistry_WhenPipesAreRegistered_ItShouldNotifyObservers()
        {
            // pre-arrange
            bool wasEventCalled = false;

            // arrange
            var semanticBuilder = new SemanticBuilder();
            var observer        = new TestRegistryObserver(package =>
            {
                wasEventCalled = true;
                return(null);
            });

            semanticBuilder.RegisterObserver(observer);

            // act
            semanticBuilder.InstallPipe <TestClassA, TestClassB>((a, innerBroker) => (TestClassB)null);

            // assert
            Assert.IsTrue(wasEventCalled);
        }
        public void GivenPopulatedRegistry_WhenObserverEnrollsLater_ItShouldBeNotifiedOfPreviousRegistrations()
        {
            // pre-arrange
            bool wasEventCalled = false;

            // arrange
            var semanticBuilder = new SemanticBuilder();

            semanticBuilder.InstallPipe <TestClassA, TestClassB>((a, innerBroker) => (TestClassB)null);

            // act
            var observer = new TestRegistryObserver(package =>
            {
                wasEventCalled = true;
                return(null);
            });

            semanticBuilder.RegisterObserver(observer);

            // assert
            Assert.IsTrue(wasEventCalled);
        }