Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public sealed class ReactiveStubObserver : IStubObserver
- {
- readonly ISubject<Tuple<Type, Delegate>> _subject1;
- readonly ISubject<Tuple<Type, Delegate, object>> _subject2;
- readonly ISubject<Tuple<Type, Delegate, object, object>> _subject3;
- readonly ISubject<Tuple<Type, Delegate, object, object, object>> _subject4;
- readonly ISubject<Tuple<Type, Delegate, object[]>> _subject5;
- public ReactiveStubObserver(IObserver<Tuple<Type, Delegate, object[]>> observer) : this(CreateSubject(observer))
- {
- }
- public ReactiveStubObserver(ISubject<Tuple<Type, Delegate, object[]>> subject) : this(ToSubject1(subject), ToSubject2(subject), ToSubject3(subject), ToSubject4(subject), subject)
- {
- }
- public ReactiveStubObserver(ISubject<Tuple<Type, Delegate>> subject1, ISubject<Tuple<Type, Delegate, object>> subject2, ISubject<Tuple<Type, Delegate, object, object>> subject3, ISubject<Tuple<Type, Delegate, object, object, object>> subject4, ISubject<Tuple<Type, Delegate, object[]>> subject5)
- {
- _subject1 = subject1;
- _subject2 = subject2;
- _subject3 = subject3;
- _subject4 = subject4;
- _subject5 = subject5;
- }
- public void Enter(Type stubbedType, Delegate stubCall)
- {
- _subject1.OnNext(new Tuple<Type, Delegate>(stubbedType, stubCall));
- }
- public void Enter(Type stubbedType, Delegate stubCall, object arg1)
- {
- _subject2.OnNext(new Tuple<Type, Delegate, object>(stubbedType, stubCall, arg1));
- }
- public void Enter(Type stubbedType, Delegate stubCall, object arg1, object arg2)
- {
- _subject3.OnNext(new Tuple<Type, Delegate, object, object>(stubbedType, stubCall, arg1, arg2));
- }
- public void Enter(Type stubbedType, Delegate stubCall, object arg1, object arg2, object arg3)
- {
- _subject4.OnNext(new Tuple<Type, Delegate, object, object, object>(stubbedType, stubCall, arg1, arg2, arg3));
- }
- public void Enter(Type stubbedType, Delegate stubCall, params object[] args)
- {
- _subject5.OnNext(new Tuple<Type, Delegate, object[]>(stubbedType, stubCall, args));
- }
- static ISubject<Tuple<Type, Delegate, object[]>> CreateSubject(IObserver<Tuple<Type, Delegate, object[]>> observer)
- {
- var subject = new Subject<Tuple<Type, Delegate, object[]>>();
- subject.Subscribe(observer);
- return subject;
- }
- static ISubject<Tuple<Type, Delegate>> ToSubject1(ISubject<Tuple<Type, Delegate, object[]>> subject)
- {
- var observer = Observer.Create<Tuple<Type, Delegate>>(value => subject.OnNext(new Tuple<Type, Delegate, object[]>(value.Item1, value.Item2, new object[0])));
- var observable = subject.Select(value => new Tuple<Type, Delegate>(value.Item1, value.Item2));
- return Subject.Create<Tuple<Type, Delegate>>(observer, observable);
- }
- static ISubject<Tuple<Type, Delegate, object>> ToSubject2(ISubject<Tuple<Type, Delegate, object[]>> subject)
- {
- var observer = Observer.Create<Tuple<Type, Delegate, object>>(value => subject.OnNext(new Tuple<Type, Delegate, object[]>(value.Item1, value.Item2, new[] { value.Item3 })));
- var observable = subject.Select(value => new Tuple<Type, Delegate, object>(value.Item1, value.Item2, value.Item3.FirstOrDefault()));
- return Subject.Create<Tuple<Type, Delegate, object>>(observer, observable);
- }
- static ISubject<Tuple<Type, Delegate, object, object>> ToSubject3(ISubject<Tuple<Type, Delegate, object[]>> subject)
- {
- var observer = Observer.Create<Tuple<Type, Delegate, object, object>>(value => subject.OnNext(new Tuple<Type, Delegate, object[]>(value.Item1, value.Item2, new[] { value.Item3, value.Item4 })));
- var observable = subject.Select(value => new Tuple<Type, Delegate, object, object>(value.Item1, value.Item2, value.Item3.FirstOrDefault(), value.Item3.Skip(1).FirstOrDefault()));
- return Subject.Create<Tuple<Type, Delegate, object, object>>(observer, observable);
- }
- static ISubject<Tuple<Type, Delegate, object, object, object>> ToSubject4(ISubject<Tuple<Type, Delegate, object[]>> subject)
- {
- var observer = Observer.Create<Tuple<Type, Delegate, object, object, object>>(value => subject.OnNext(new Tuple<Type, Delegate, object[]>(value.Item1, value.Item2, new[] { value.Item3, value.Item4, value.Item5 })));
- var observable = subject.Select(value => new Tuple<Type, Delegate, object, object, object>(value.Item1, value.Item2, value.Item3.FirstOrDefault(), value.Item3.Skip(1).FirstOrDefault(), value.Item3.Skip(2).FirstOrDefault()));
- return Subject.Create<Tuple<Type, Delegate, object, object, object>>(observer, observable);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement