public async Task GivenPipeOnSuperClass_WhenResolvingToInterface_ItShouldReturnSuperType()
        {
            // pre-arrange
            var instanceClassA      = new TestClassA();
            var instanceSuperClassB = new TestSuperClassB();

            // arrange
            var builder = new SemanticBuilder();

            builder.InstallPipe <TestClassA, IEnumerable <TestSuperClassB> >(
                (@as, broker) =>
            {
                Assert.AreSame(instanceClassA, @as);
                return(new[] { instanceSuperClassB });
            });

            var semanticBroker = builder.CreateBroker();

            // act
            var returnedInstance = await semanticBroker.On(instanceClassA).Output <IEnumerable <ITestInterface> >();

            // assert
            var result = returnedInstance.Single();

            Assert.AreSame(instanceSuperClassB, result);
        }
        public async Task GivenPipeOnSuperClass_WhenResolvingToInterface_ItShouldReturnSuperType()
        {
            // pre-arrange
            var instanceClassA = new TestClassA();
            var instanceSuperClassB = new TestSuperClassB();

            // arrange
            var builder = new SemanticBuilder();

            builder.InstallPipe<TestClassA, IEnumerable<TestSuperClassB>>(
                (@as, broker) =>
                {
                    Assert.AreSame(instanceClassA, @as);
                    return new[] { instanceSuperClassB };
                });

            var semanticBroker = builder.CreateBroker();

            // act
            var returnedInstance = await semanticBroker.On(instanceClassA).Output<IEnumerable<ITestInterface>>();

            // assert
            var result = returnedInstance.Single();
            Assert.AreSame(instanceSuperClassB, result);
        }