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); }
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); }
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); }
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()); }