public void Test__Class_ValueChange()
        {
            // Arrange
            var boundType = ObjectBinderBuilder.New <Entity, Common>()
                            .Bind(x => x.Name, x => x.NameC)
                            .Bind(x => x.Alive, x => x.AliveC)
                            .WithAssemblyGenerator(_assemblyGenerator)
                            .Build()
                            .BoundType;

            var source = _fixture.Create <Entity>();
            var proxy  = (Common)Activator.CreateInstance(boundType, source);

            var extraProperty = _fixture.Create <string>();

            var(updatedName, updatedAlive) = (_fixture.Create <string>(), _fixture.Create <bool>());

            // Act
            proxy.NameC         = updatedName;
            proxy.AliveC        = updatedAlive;
            proxy.ExtraProperty = extraProperty;

            // Assert
            Assert.Equal(updatedName, source.Name);
            Assert.Equal(updatedAlive, source.Alive);
            Assert.Equal(source.Name, proxy.NameC);
            Assert.Equal(source.Alive, proxy.AliveC);
            Assert.Equal(extraProperty, proxy.ExtraProperty);
        }
Exemple #2
0
        public void DefaultComponentExists()
        {
            var builder = new ObjectBinderBuilder <object>();
            var binder  = builder.Build();

            Assert.NotNull(binder);
        }
        public void WrongBindMethodThrows()
        {
            var binder = new ObjectBinderBuilder <object>();

            binder.Use(typeof(WrongBindMethodGenericParameter));

            Assert.Throws <InvalidOperationException>(() => binder.Build());
        }
        public void MissingBindMethodThrows()
        {
            var binder = new ObjectBinderBuilder <object>();

            binder.Use(typeof(MissingBindMethod));

            Assert.Throws <InvalidOperationException>(() => binder.Build());
        }
        public void ConstructorArgsPassed()
        {
            var binder = new ObjectBinderBuilder <object>();

            binder.Use(typeof(BinderWithCtrArgs), "str");

            var ctx = new BindingContext <object>(ObjectBindingDirection.In, null);

            binder.Build()(ctx);

            Assert.Equal("str", ctx.ObjectValue as string);
        }
        public void BindCalled()
        {
            var binder = new ObjectBinderBuilder <object>();

            binder.Use(typeof(Binder));

            var ctx = new BindingContext <object>(ObjectBindingDirection.In, null);

            binder.Build()(ctx);

            Assert.Equal("string", ctx.ObjectValue as string);
        }
Exemple #7
0
        public RpcBindingHost(IConnection <TMarshal> connection, IPlatformBinder <TMarshal> parameterBinder, IScheduler baseScheduler)
        {
            this.connection   = connection;
            bindingRepository = new BindingRepository(new IntIdGenerator());

            if (baseScheduler is IDisposable disposable)
            {
                disposables.Add(disposable);
            }

            // ReSharper disable once InvokeAsExtensionMethod
            var baseMessages = Observable.ObserveOn(connection, baseScheduler);

            callbackExecutor = new CallbackExecutor <TMarshal>(new IntIdGenerator(),
                                                               connection,
                                                               baseMessages.Select(m => m.CallbackResult)
                                                               .Where(m => m != null));
            var callbackFactory = new CallbackFactory <TMarshal>(callbackExecutor);
            var binder          = new ObjectBinderBuilder <TMarshal>().Use(typeof(CallbackBinder <TMarshal>), callbackFactory)
                                  .Use(typeof(OutgoingValueBinder <TMarshal>), bindingRepository)
                                  .Use(typeof(PlatformBinder <TMarshal>), parameterBinder).Build();

            methodExecutor   = new MethodExecutor <TMarshal>(bindingRepository.Objects, binder);
            propertyExecutor = new PropertyExecutor <TMarshal>(bindingRepository.Objects, binder);

            disposables.Add(Observable.ObserveOn((callbackExecutor as IObservable <DeleteCallback>), baseScheduler)
                            .Subscribe(OnDeleteCallback));
            disposables.Add(Observable.ObserveOn((callbackExecutor as IObservable <CallbackExecution <TMarshal> >), baseScheduler)
                            .Subscribe(OnCallbackExecution));

            // ReSharper disable once InvokeAsExtensionMethod

            disposables.Add(baseMessages
                            .Select(m => m.MethodExecution)
                            .Where(m => m != null)
                            .Subscribe(OnMethodExecution));
            disposables.Add(baseMessages
                            .Select(m => m.PropertyGet)
                            .Where(m => m != null)
                            .Subscribe(OnPropertyGetExecution));
            disposables.Add(baseMessages
                            .Select(m => m.PropertySet)
                            .Where(m => m != null)
                            .Subscribe(OnPropertySetExecution));
            disposables.Add(baseMessages
                            .Select(m => m.DynamicObjectRequest)
                            .Where(m => m != null)
                            .Subscribe(OnDyanmicObjectRequest));

            disposables.Add(connection);
        }
        public void NextAvailable()
        {
            var binder = new ObjectBinderBuilder <object>();

            binder.Use(typeof(Binder));
            var called = false;

            binder.Use(n => c => { called = true; });

            var ctx = new BindingContext <object>(ObjectBindingDirection.In, null);

            binder.Build()(ctx);

            Assert.True(called);
        }
        public void Test_Class_DefaultValues()
        {
            // Arrange
            var boundType = ObjectBinderBuilder.New <Entity, Common>()
                            .Bind(x => x.Name, x => x.NameC)
                            .Bind(x => x.Alive, x => x.AliveC)
                            .WithAssemblyGenerator(_assemblyGenerator)
                            .Build()
                            .BoundType;

            var source = _fixture.Create <Entity>();
            var proxy  = (Common)Activator.CreateInstance(boundType, source);

            // Act, Assert
            Assert.Equal(source.Name, proxy.NameC);
            Assert.Equal(source.Alive, proxy.AliveC);
        }
Exemple #10
0
        public void ComponentsCalledInOrder()
        {
            var stringBuilder = new StringBuilder();
            var builder       = new ObjectBinderBuilder <object>();

            builder.Use(next => ctx =>
            {
                stringBuilder.Append("1");
                next(ctx);
            });

            builder.Use(next => ctx =>
            {
                stringBuilder.Append("2");
                next(ctx);
            });
            var binder = builder.Build();

            binder(new BindingContext <object>(ObjectBindingDirection.In, null));

            Assert.Equal("12", stringBuilder.ToString());
        }