public void OutgoingValueWithoutValueBindNotAnalyzed()
        {
            var bindingRepo     = Mock.Of <IBindingRepository>();
            var bindingRepoMock = Mock.Get(bindingRepo);

            var bindingContext = new BindingContext <object>(ObjectBindingDirection.Out, context => { });
            var binder         = new OutgoingValueBinder <object>(context => { }, bindingRepo);

            binder.Bind(bindingContext);

            bindingRepoMock.Verify(_ => _.AddBinding(It.IsAny <object>(), It.IsAny <AnalyzeOptions>()), Times.Never);
        }
        public void NextCalled()
        {
            var bindingRepo = Mock.Of <IBindingRepository>();

            var called         = false;
            var bindingContext = new BindingContext <object>(ObjectBindingDirection.In, context => { });
            var binder         = new OutgoingValueBinder <object>(context => { called = ReferenceEquals(context, bindingContext); }, bindingRepo);

            binder.Bind(bindingContext);

            Assert.True(called);
        }
        public void NullObjectValueSkipped()
        {
            var bindingRepo     = Mock.Of <IBindingRepository>();
            var bindingRepoMock = Mock.Get(bindingRepo);

            var called         = false;
            var bindingContext = new BindingContext <object>(ObjectBindingDirection.Out, context => { })
            {
                BindValue   = new BindValueAttribute(),
                ObjectValue = null
            };
            var binder = new OutgoingValueBinder <object>(context => { called = ReferenceEquals(context, bindingContext); }, bindingRepo);

            binder.Bind(bindingContext);

            bindingRepoMock.Verify(_ => _.AddBinding(It.IsAny <object>(), It.IsAny <AnalyzeOptions>()), Times.Never);
        }
        public void OutgoingValueWithValueBindAnalyzed()
        {
            var bindingRepo     = Mock.Of <IBindingRepository>();
            var bindingRepoMock = Mock.Get(bindingRepo);

            var objectValue    = new object();
            var bindingContext = new BindingContext <object>(ObjectBindingDirection.Out, context => { })
            {
                BindValue   = new BindValueAttribute(),
                ObjectValue = objectValue
            };
            var binder = new OutgoingValueBinder <object>(context => { }, bindingRepo);

            binder.Bind(bindingContext);

            bindingRepoMock.Verify(_ => _.AddBinding(objectValue, It.Is <AnalyzeOptions>(__ => __.AnalyzeProperties == false)), Times.Once);
        }
        public void PropertyValuesExtractedIfSet()
        {
            var bindingRepo     = Mock.Of <IBindingRepository>();
            var bindingRepoMock = Mock.Get(bindingRepo);

            var objectValue    = new object();
            var bindingContext = new BindingContext <object>(ObjectBindingDirection.Out, context => { })
            {
                BindValue = new BindValueAttribute
                {
                    ExtractPropertyValues = true
                },
                ObjectValue = objectValue
            };
            var binder = new OutgoingValueBinder <object>(context => { }, bindingRepo);

            binder.Bind(bindingContext);

            bindingRepoMock.Verify(_ => _.AddBinding(objectValue, It.Is <AnalyzeOptions>(__ => __.AnalyzeProperties && __.ExtractPropertyValues)), Times.Once);
        }