private void Start()
        {
            //BehaviorSubjectは初期値を設定できる
            behaviorSubject = new BehaviorSubject <int>(0);

            /*
             * OnNext → Subscribe と実行し、Subscribeした瞬間に直前の値が発行されることを確認しよう
             */

            // Subscribeボタンが押されたらSubjectをSubscribeしてresultTextに表示する
            subscribeButton.OnClickAsObservable().Subscribe(_ =>
            {
                if (behaviorSubject != null)
                {
                    behaviorSubject.Subscribe(
                        time => resultText.text += time.ToString() + " ", //OnNext
                        () => resultText.text   += "OnCompleted ");       //OnCompleted
                }
            });

            // OnNextボタンが押されたら今が何度目のOnNextであるかを発行する
            onNextButton.OnClickAsObservable().Subscribe(_ =>
            {
                if (behaviorSubject != null)
                {
                    behaviorSubject.OnNext(++onNextCount);
                }
            });

            // OnCompletedボタンが押されたらOnCompletedを発行する
            onCompletedButton.OnClickAsObservable().Subscribe(_ =>
            {
                if (behaviorSubject != null)
                {
                    behaviorSubject.OnCompleted();
                }
            });

            // Resetボタンが押されたら全体を初期化する
            resetButton.OnClickAsObservable().Subscribe(_ =>
            {
                if (behaviorSubject != null)
                {
                    behaviorSubject.OnCompleted();
                }
                behaviorSubject = new BehaviorSubject <int>(0);
                resultText.text = "";
                onNextCount     = 0;
            });
        }
        private void Start()
        {
            //BehaviorSubjectは初期値を設定できる
            behaviorSubject = new BehaviorSubject<int>(0);

            /*
            OnNext → Subscribe と実行し、Subscribeした瞬間に直前の値が発行されることを確認しよう
            */

            // Subscribeボタンが押されたらSubjectをSubscribeしてresultTextに表示する
            subscribeButton.OnClickAsObservable().Subscribe(_ =>
            {
                if (behaviorSubject != null)
                {
                    behaviorSubject.Subscribe(
                        time => resultText.text += time.ToString() + " ", //OnNext
                        () => resultText.text += "OnCompleted "); //OnCompleted
                }
            });

            // OnNextボタンが押されたら今が何度目のOnNextであるかを発行する
            onNextButton.OnClickAsObservable().Subscribe(_ =>
            {
                if (behaviorSubject != null)
                {
                    behaviorSubject.OnNext(++onNextCount);
                }
            });

            // OnCompletedボタンが押されたらOnCompletedを発行する
            onCompletedButton.OnClickAsObservable().Subscribe(_ =>
            {
                if (behaviorSubject != null)
                {
                    behaviorSubject.OnCompleted();
                }
            });

            // Resetボタンが押されたら全体を初期化する
            resetButton.OnClickAsObservable().Subscribe(_ =>
            {
                if (behaviorSubject != null)
                {
                    behaviorSubject.OnCompleted();
                }
                behaviorSubject = new BehaviorSubject<int>(0);
                resultText.text = "";
                onNextCount = 0;
            });
        }
Exemplo n.º 3
0
        static void Main(string[] args)
        {
            //Need to provide a default value.
            var subject = new BehaviorSubject <string>("a");

            subject.Subscribe(Console.WriteLine);

            //'b' is written to the console, but not 'a'.
            var subject1 = new BehaviorSubject <string>("a");

            subject1.OnNext("b");
            subject1.Subscribe(Console.WriteLine);

            // In this example the values 'b', 'c' & 'd' are all written to the console, but again not 'a'


            var subject2 = new BehaviorSubject <string>("a");

            subject2.OnNext("b");
            subject2.Subscribe(Console.WriteLine);
            subject2.OnNext("c");
            subject2.OnNext("d");

            //Finally in this example, no values will be published as the sequence has completed. Nothing is written to the console.


            var subject3 = new BehaviorSubject <string>("a");

            subject3.OnNext("b");
            subject3.OnNext("c");
            subject3.OnCompleted();
            subject3.Subscribe(Console.WriteLine);
            Console.ReadLine();
        }
Exemplo n.º 4
0
        public static void TheLastValueBeforeSubscription()
        {
            var subject = new BehaviorSubject <int>(-1);

            Console.WriteLine("First value");
            subject.OnNext(4);

            var consoleObserver = new ConsoleObserver <int>();

            Console.WriteLine("We're gonna subscribe once");
            var subscription = subject.Subscribe(consoleObserver);

            subject.OnNext(5);
            subject.OnNext(6);

            var consoleObserver2 = new ConsoleObserver <int>();

            Console.WriteLine("We're gonna subscribe a second time");
            var subscription2 = subject.Subscribe(consoleObserver2);

            subject.OnNext(7);
            subject.OnNext(8);

            subject.OnCompleted();

            subscription.Dispose();
            subscription2.Dispose();
        }
Exemplo n.º 5
0
        public void OnCompleted()
        {
            var expectedOnNext = new List <int> {
                7, 1, 10, 100
            };
            var onNext               = new List <int>();
            var exceptions           = new List <Exception>();
            var onCompletedCallCount = 0;
            var subject              = new BehaviorSubject <int>(7);

            subject.Subscribe(x => onNext.Add(x), x => exceptions.Add(x), () => onCompletedCallCount++);

            subject.OnNext(1);
            subject.OnNext(10);
            subject.OnNext(100);
            Assert.That(onNext, Is.EqualTo(expectedOnNext));
            Assert.That(exceptions, Has.Count.EqualTo(0));
            Assert.That(onCompletedCallCount, Is.EqualTo(0));

            subject.OnCompleted();
            Assert.That(onCompletedCallCount, Is.EqualTo(1));

            subject.OnNext(1);
            subject.OnNext(10);
            subject.OnNext(200);
            Assert.That(onNext, Is.EqualTo(expectedOnNext));
            Assert.That(exceptions, Has.Count.EqualTo(0));
        }
        private void Start()
        {
            // BehaviorSubjectの定義には必ず初期値が必要
            BehaviorSubject <int> behaviorSubject = new BehaviorSubject <int>(0);

            //メッセージを発行
            behaviorSubject.OnNext(1);

            //購読開始
            behaviorSubject.Subscribe(
                x => Debug.Log("OnNext:" + x),
                ex => Debug.LogError("OnError:" + ex),
                () => Debug.Log("OnCompleted"));

            //メッセージを発行
            behaviorSubject.OnNext(2);

            //Valueを参照すると最新の値を確認できる
            Debug.Log("Last Value:" + behaviorSubject.Value);

            behaviorSubject.OnNext(3);
            behaviorSubject.OnCompleted();

            //キャッシュを完全に削除
            behaviorSubject.Dispose();
        }
Exemplo n.º 7
0
    // Start is called before the first frame update
    void Start()
    {
        var behaviourSubject = new BehaviorSubject <int>(0);

        behaviourSubject.OnNext(0);
        behaviourSubject.OnNext(1);

        behaviourSubject.Subscribe(
            x => Debug.Log("OnNext: " + x),
            error => Debug.Log("OnError: " + error),
            () => Debug.Log("OnCompleted"));

        Debug.Log("購読後");

        behaviourSubject.OnNext(2);


        behaviourSubject.Subscribe(
            x => Debug.Log("OnNext2: " + x),
            error => Debug.Log("OnError2: " + error),
            () => Debug.Log("OnCompleted2"));

        Debug.Log("現在の値" + behaviourSubject.Value);
        behaviourSubject.OnNext(3);

        Debug.Log("Completedを呼ぶ直前");

        behaviourSubject.OnCompleted();
    }
Exemplo n.º 8
0
        public void live_values_are_sent_through_scheduler()
        {
            ManualScheduler scheduler = new ManualScheduler();

            BehaviorSubject <int> subject = new BehaviorSubject <int>(0, scheduler);

            StatsObserver <int> stats = new StatsObserver <int>();

            subject.Subscribe(stats);

            subject.OnNext(1);
            subject.OnNext(2);
            subject.OnCompleted();

            Assert.IsFalse(stats.NextCalled);

            scheduler.RunNext();
            Assert.AreEqual(1, stats.NextCount);
            Assert.IsTrue(stats.NextValues.SequenceEqual(new int[] { 0 }));
            Assert.IsFalse(stats.CompletedCalled);

            scheduler.RunNext();
            Assert.AreEqual(2, stats.NextCount);
            Assert.IsTrue(stats.NextValues.SequenceEqual(new int[] { 0, 1 }));
            Assert.IsFalse(stats.CompletedCalled);

            scheduler.RunNext();
            Assert.AreEqual(3, stats.NextCount);
            Assert.IsTrue(stats.NextValues.SequenceEqual(new int[] { 0, 1, 2 }));
            Assert.IsFalse(stats.CompletedCalled);

            scheduler.RunNext();
            Assert.IsTrue(stats.CompletedCalled);
        }
Exemplo n.º 9
0
    public Hangman(string word)
    {
        HashSet <char> emptySetOfChars = new HashSet <char>();
        var            stateSubject    = new BehaviorSubject <HangmanState>(new HangmanState(MaskedWord(word, emptySetOfChars), emptySetOfChars.ToImmutableHashSet(), MaxGuessCount));

        StateObservable = stateSubject;

        GuessObserver = Observer.Create <char>(x =>
        {
            HashSet <char> guessedChars = new HashSet <char>(stateSubject.Value.GuessedChars);
            bool isHit = !guessedChars.Contains(x) && word.Contains(x);
            guessedChars.Add(x);
            string maskedWord = MaskedWord(word, guessedChars);
            if (maskedWord == word)
            {
                stateSubject.OnCompleted();
            }
            else if (stateSubject.Value.RemainingGuesses < 1)
            {
                stateSubject.OnError(new TooManyGuessesException());
            }
            else
            {
                stateSubject.OnNext(new HangmanState(maskedWord, guessedChars.ToImmutableHashSet(),
                                                     isHit ? stateSubject.Value.RemainingGuesses : stateSubject.Value.RemainingGuesses - 1));
            }
        });
    }
        public void Completing_LocalValue_Binding_With_Style_Binding_Raises_PropertyChanged()
        {
            var target   = new Class1();
            var source   = new BehaviorSubject <BindingValue <string> >("foo");
            var property = Class1.FooProperty;
            var raised   = 0;

            target.Bind(property, new BehaviorSubject <string>("bar"), BindingPriority.Style);
            target.Bind(property, source);
            Assert.Equal("foo", target.GetValue(property));

            target.PropertyChanged += (s, e) =>
            {
                Assert.Equal(BindingPriority.Style, e.Priority);
                Assert.Equal(property, e.Property);
                Assert.Equal("foo", e.OldValue as string);
                Assert.Equal("bar", e.NewValue as string);
                ++raised;
            };

            source.OnCompleted();

            Assert.Equal("bar", target.GetValue(property));
            Assert.Equal(1, raised);
        }
Exemplo n.º 11
0
        private async Task CompleteAsync()
        {
            Debug.WriteLine("disposing GraphQLHttpWebSocket...");

            _incomingMessagesConnection?.Dispose();

            if (!_internalCancellationTokenSource.IsCancellationRequested)
            {
                _internalCancellationTokenSource.Cancel();
            }

            await CloseAsync();

            _requestSubscription?.Dispose();
            _clientWebSocket?.Dispose();

            _stateSubject?.OnCompleted();
            _stateSubject?.Dispose();

            _exceptionSubject?.OnCompleted();
            _exceptionSubject?.Dispose();
            _internalCancellationTokenSource.Dispose();

            _sendLoopScheduler?.Dispose();
            _receiveLoopScheduler?.Dispose();

            Debug.WriteLine("GraphQLHttpWebSocket disposed");
        }
Exemplo n.º 12
0
    /// <summary>
    /// BehaviorSubject
    /// OnNextで発行された最新の値をキャッシュ
    /// Subscribeでキャッシュされた値を発行
    /// </summary>
    private void ExcuteBehaviorSubject()
    {
        BehaviorSubject <int> subject = new BehaviorSubject <int>(0);

        IDisposable stream1 = subject.Subscribe(x => {
            Debug.Log("ストリーム1 : " + x);
        }, () => {
            Debug.Log("ストリーム1 OnCompleted");
        });

        subject.OnNext(1);
        subject.OnNext(10);

        // 最新の値のみキャッシュされているので、OnNext(10)のみ呼ばれる
        IDisposable stream2 = subject.Subscribe(x => {
            Debug.Log("ストリーム2 : " + x);
        }, () => {
            Debug.Log("ストリーム2 OnCompleted");
        });

        subject.OnCompleted();
        // OnCompleted後なので呼ばれない
        subject.OnNext(100);

        // 最新の値のみキャッシュされているので、OnCompletedのみ呼ばれる
        IDisposable stream3 = subject.Subscribe(x => {
            Debug.Log("ストリーム3 : " + x);
        }, () => {
            Debug.Log("ストリーム3 OnCompleted");
        });
    }
Exemplo n.º 13
0
        public void Value_FrozenAfterOnCompleted()
        {
            var s = new BehaviorSubject <int>(42);

            Assert.Equal(42, s.Value);

            Assert.True(s.TryGetValue(out var x));
            Assert.Equal(42, x);

            s.OnNext(43);
            Assert.Equal(43, s.Value);

            Assert.True(s.TryGetValue(out x));
            Assert.Equal(43, x);

            s.OnNext(44);
            Assert.Equal(44, s.Value);

            Assert.True(s.TryGetValue(out x));
            Assert.Equal(44, x);

            s.OnCompleted();
            Assert.Equal(44, s.Value);

            Assert.True(s.TryGetValue(out x));
            Assert.Equal(44, x);

            s.OnNext(1234);
            Assert.Equal(44, s.Value);

            Assert.True(s.TryGetValue(out x));
            Assert.Equal(44, x);
        }
Exemplo n.º 14
0
    private void OnNextGuess(char guess)
    {
        if (_state.Value.RemainingGuesses == 0)
        {
            _state.OnError(new TooManyGuessesException());
            return;
        }

        var currentState = _state.Value;
        var remaining    = currentState.GuessedChars.Contains(guess) || !_word.Contains(guess)
            ? currentState.RemainingGuesses - 1
            : currentState.RemainingGuesses;

        var guessed = currentState.GuessedChars.Add(guess);
        var masked  = MaskWord(guessed);

        if (masked == _word)
        {
            _state.OnCompleted();
        }
        else
        {
            _state.OnNext(new HangmanState(masked, guessed, remaining));
        }
    }
Exemplo n.º 15
0
        static void WithBehaviourSubject()
        {
            var market = new BehaviorSubject <float>(1);

            market.Inspect("market");
            market.OnNext(2);
            market.OnCompleted();
        }
 public void Dispose()
 {
     if (!_isActiveSubject.IsDisposed)
     {
         _isActiveSubject.OnCompleted();
         _isActiveSubject.Dispose();
     }
 }
Exemplo n.º 17
0
        public static void Main(string[] args)
        {
            var sensorReader = new BehaviorSubject <double>(-1.0);

            sensorReader.Inspect("Sensor");
            sensorReader.OnNext(0.99);
            sensorReader.OnCompleted();
        }
Exemplo n.º 18
0
        public void Stop()
        {
            _isConnected.OnCompleted();
            _disconnected.Dispose();

            _worker.Close();
            _worker.Dispose();
        }
Exemplo n.º 19
0
 public static void BehaviorSubjectCompletedExample()
 {
     var subject = new BehaviorSubject<string>("a");
     subject.OnNext("b");
     subject.OnNext("c");
     subject.OnCompleted();
     subject.Subscribe(Console.WriteLine);
 }
Exemplo n.º 20
0
        public void BehaviorSubjectNothingPublishedTest()
        {
            var subject = new BehaviorSubject <string>("a");

            subject.OnNext("b");
            subject.OnNext("c");
            subject.OnCompleted();
            SubscribeConsole(subject);
        }
        public void BehaviorSubjectCompletedExample()
        {
            var subject = new BehaviorSubject <string>("a");

            subject.OnNext("b");
            subject.OnNext("c");
            subject.OnCompleted();
            subject.Subscribe(Console.WriteLine);
        }
Exemplo n.º 22
0
        private static void BehaviorSubjectCompletedExample()
        {
            var subject = new BehaviorSubject <string>("a");

            subject.OnNext("b");
            subject.OnNext("c");
            subject.OnCompleted();//completed before subscribe was set
            subject.Subscribe(Console.WriteLine);
        }
Exemplo n.º 23
0
 public void Dispose()
 {
     if (0 == Interlocked.Exchange(ref _disposed, 1))
     {
         _asyncAgent.Dispose();
         _stateSubject.OnCompleted();
         _stateSubject.Dispose();
     }
 }
Exemplo n.º 24
0
        public static IObservable <long> CreateCustomBehaviorSubject()
        {
            var res = new BehaviorSubject <long>(42);

            Task.Delay(2000).ContinueWith(t => res.OnNext(100));
            Task.Delay(6000).ContinueWith(t => res.OnNext(200));
            Task.Delay(9000).ContinueWith(t => res.OnCompleted());

            return(res);
        }
        public static void CloseActiveObservables()
        {
            Parallel.ForEach(_observers.Values, x =>
            {
                x.Observer.OnCompleted();
                x.Dispose();
            });

            _connectionCount.OnCompleted();
        }
Exemplo n.º 26
0
        public async Task Stop()
        {
            _isConnected.OnCompleted();
            _disconnected.Dispose();

            _publishMarketUpdates.Close();
            _publishMarketUpdates.Dispose();

            await Cleanup();
        }
Exemplo n.º 27
0
        static void Main(string[] args)
        {
            var subject = new BehaviorSubject <string>("a");

            subject.OnNext("b");
            subject.OnNext("c");
            subject.OnCompleted();
            subject.Subscribe(Console.WriteLine);
            Console.Read();
        }
Exemplo n.º 28
0
        public static void BehaviorSubjectCompletedExample()
        {
            var subject = new BehaviorSubject <string>("a");

            subject.Subscribe(v => Console.WriteLine($"1: {v}"));
            subject.OnNext("b");
            subject.Subscribe(v => Console.WriteLine($"2: {v}"));
            subject.OnNext("c");
            subject.OnCompleted();
        }
Exemplo n.º 29
0
        public void Should_Invoke_OnCompleted_On_Activator_Completed()
        {
            var activator = new BehaviorSubject <bool>(false);
            var source    = new TestSubject();
            var target    = new ActivatedSubject(activator, source, string.Empty);

            activator.OnCompleted();

            Assert.True(source.Completed);
        }
Exemplo n.º 30
0
        static void Main(string[] args)
        {
            var sensorReading = new BehaviorSubject <double>(-1.0);

            //到这一步的时候,就是默认值-1
            sensorReading.Inspect("sensor");

            sensorReading.OnNext(0.99);
            sensorReading.OnCompleted();
        }
        public void Should_Complete_When_Source_Observable_Completes()
        {
            var source = new BehaviorSubject<object>(1);
            var target = new ExpressionObserver(source, "Foo");
            var completed = false;

            target.Subscribe(_ => { }, () => completed = true);
            source.OnCompleted();

            Assert.True(completed);
        }
Exemplo n.º 32
0
        public void Should_Complete_When_Activator_Completes()
        {
            var activator = new BehaviorSubject<bool>(false);
            var target = new ActivatedValue(activator, 1, string.Empty);
            var completed = false;

            target.Subscribe(_ => { }, () => completed = true);
            activator.OnCompleted();

            Assert.True(completed);
        }
Exemplo n.º 33
0
        /// <summary>
        /// BehaviorSubject 可以设置初始值,并且每次都会发射并缓存最新值
        /// BehaviorSubject.Value 可以获取到初始值或者最新值
        /// 适合用于一些状态变化的场景
        /// </summary>
        public static void PreserveLastStateWithBehaviorSubject()
        {
            var sbj = new BehaviorSubject <int>(2);

            Console.WriteLine($"BehaviorSubject.Value:{sbj.Value}");
            sbj.SubscribeConsole("first");
            sbj.OnNext(3);
            sbj.SubscribeConsole("second");
            sbj.OnCompleted();
            Console.WriteLine($"BehaviorSubject.Value:{sbj.Value}");
        }
Exemplo n.º 34
0
        public void Should_Complete_When_Activator_Completes()
        {
            var activator = new BehaviorSubject <bool>(false);
            var target    = new ActivatedValue(activator, 1, string.Empty);
            var completed = false;

            target.Subscribe(_ => { }, () => completed = true);
            activator.OnCompleted();

            Assert.True(completed);
        }
        public void Should_Complete_When_Source_Completes()
        {
            var activator = new BehaviorSubject<bool>(false);
            var source = new BehaviorSubject<object>(1);
            var target = new ActivatedObservable(activator, source, string.Empty);
            var completed = false;

            target.Subscribe(_ => { }, () => completed = true);
            source.OnCompleted();

            Assert.True(completed);
        }
Exemplo n.º 36
0
        static void Main(string[] args)
        {
            var serviceClient = new JsonRestClientAsync("http://g-un--:1337/");
            var responseSubject = new BehaviorSubject<Unit>(Unit.Default);

            responseSubject.Subscribe(_ =>
                {
                    serviceClient.PostAsync<ResourceResponse>(
                        "/async",
                        new ResourceRequest()
                        {
                            ResourceKey = Guid.NewGuid().ToString()
                        },
                        response =>
                        {
                            Console.WriteLine("Data received");
                            Console.WriteLine(response.ResourceData);
                            responseSubject.OnNext(Unit.Default);
                        },
                        (response, ex) =>
                        {
                            Console.WriteLine("Exception on calling service post method");
                            Console.WriteLine(ex);
                            responseSubject.OnCompleted();
                        });
                });

            Observable.Interval(TimeSpan.FromSeconds(1))
                .Subscribe(_ =>
                    {
                        var newClient = new JsonRestClientAsync("http://g-un--:1337/");
                        newClient.PutAsync<object>(
                            "/async",
                            new ResourceRequest() { ResourceKey = Guid.NewGuid().ToString() },
                            response =>
                            {
                                Console.WriteLine("Put was sent!");
                            },
                            (response, exception) =>
                            {
                                Console.WriteLine(exception);
                            });
                    });

            Console.ReadLine();
        }
Exemplo n.º 37
0
        public void complete_is_sent_through_scheduler()
        {
            ManualScheduler scheduler = new ManualScheduler();

            BehaviorSubject<int> subject = new BehaviorSubject<int>(0, scheduler);

            StatsObserver<int> stats = new StatsObserver<int>();

            subject.OnCompleted();

            subject.Subscribe(stats);

            Assert.IsFalse(stats.NextCalled);

            scheduler.RunNext();
            Assert.AreEqual(0, stats.NextCount);
            Assert.IsTrue(stats.CompletedCalled);
        }
        public async Task Observable_Current_completes_on_source_completion()
        {
            var subject = new BehaviorSubject<int>(1);
            var asyncEnumerable = subject.Current();

            using (var asyncEnumerator = asyncEnumerable.GetEnumerator())
            {
                subject.OnNext(1);
                subject.OnNext(2);
                subject.OnNext(3);

                subject.OnCompleted();

                Assert.False(await asyncEnumerator.MoveNext(CancellationToken.None));
            }
        }
Exemplo n.º 39
0
        public void Value_FrozenAfterOnCompleted()
        {
            var s = new BehaviorSubject<int>(42);
            Assert.AreEqual(42, s.Value);

            var x = default(int);
            Assert.IsTrue(s.TryGetValue(out x));
            Assert.AreEqual(42, x);

            s.OnNext(43);
            Assert.AreEqual(43, s.Value);

            Assert.IsTrue(s.TryGetValue(out x));
            Assert.AreEqual(43, x);

            s.OnNext(44);
            Assert.AreEqual(44, s.Value);

            Assert.IsTrue(s.TryGetValue(out x));
            Assert.AreEqual(44, x);

            s.OnCompleted();
            Assert.AreEqual(44, s.Value);

            Assert.IsTrue(s.TryGetValue(out x));
            Assert.AreEqual(44, x);

            s.OnNext(1234);
            Assert.AreEqual(44, s.Value);

            Assert.IsTrue(s.TryGetValue(out x));
            Assert.AreEqual(44, x);
        }
Exemplo n.º 40
0
        public void BehaviorSubject()
        {
            // OnCompletedPattern
            {
                var subject = new BehaviorSubject<int>(3333);

                var onNext = new List<int>();
                var exception = new List<Exception>();
                int onCompletedCallCount = 0;
                var _ = subject.Subscribe(x => onNext.Add(x), x => exception.Add(x), () => onCompletedCallCount++);

                onNext.IsCollection(3333);

                subject.OnNext(1);
                subject.OnNext(10);
                subject.OnNext(100);
                subject.OnNext(1000);

                onNext.IsCollection(3333, 1, 10, 100, 1000);

                // re subscription
                onNext.Clear();
                _.Dispose();
                subject.Subscribe(x => onNext.Add(x), x => exception.Add(x), () => onCompletedCallCount++);
                onNext.IsCollection(1000);

                subject.OnCompleted();
                onCompletedCallCount.Is(1);

                subject.OnNext(1);
                subject.OnNext(10);
                subject.OnNext(100);
                onNext.Count.Is(1);

                subject.OnCompleted();
                subject.OnError(new Exception());
                exception.Count.Is(0);
                onCompletedCallCount.Is(1);

                // ++subscription
                onNext.Clear();
                onCompletedCallCount = 0;
                subject.Subscribe(x => onNext.Add(x), x => exception.Add(x), () => onCompletedCallCount++);
                onNext.Count.Is(0);
                exception.Count.Is(0);
                onCompletedCallCount.Is(1);
            }

            // OnErrorPattern
            {
                var subject = new BehaviorSubject<int>(3333);

                var onNext = new List<int>();
                var exception = new List<Exception>();
                int onCompletedCallCount = 0;
                subject.Subscribe(x => onNext.Add(x), x => exception.Add(x), () => onCompletedCallCount++);

                subject.OnNext(1);
                subject.OnNext(10);
                subject.OnNext(100);
                subject.OnNext(1000);
                onNext.IsCollection(3333, 1, 10, 100, 1000);

                subject.OnError(new Exception());
                exception.Count.Is(1);

                subject.OnNext(1);
                subject.OnNext(10);
                subject.OnNext(100);
                onNext.Count.Is(5);

                subject.OnCompleted();
                subject.OnError(new Exception());
                exception.Count.Is(1);
                onCompletedCallCount.Is(0);

                // ++subscription
                onNext.Clear();
                exception.Clear();
                onCompletedCallCount = 0;
                subject.Subscribe(x => onNext.Add(x), x => exception.Add(x), () => onCompletedCallCount++);
                onNext.Count.Is(0);
                exception.Count.Is(1);
                onCompletedCallCount.Is(0);
            }
        }
Exemplo n.º 41
0
        public void Value_FrozenAfterOnCompleted()
        {
            var s = new BehaviorSubject<int>(42);
            Assert.AreEqual(42, s.Value);

            s.OnNext(43);
            Assert.AreEqual(43, s.Value);

            s.OnNext(44);
            Assert.AreEqual(44, s.Value);

            s.OnCompleted();
            Assert.AreEqual(44, s.Value);

            s.OnNext(1234);
            Assert.AreEqual(44, s.Value);
        }
Exemplo n.º 42
0
        public void HasObservers_OnCompleted()
        {
            var s = new BehaviorSubject<int>(42);
            Assert.IsFalse(s.HasObservers);

            var d = s.Subscribe(_ => { });
            Assert.IsTrue(s.HasObservers);

            s.OnNext(42);
            Assert.IsTrue(s.HasObservers);

            s.OnCompleted();
            Assert.IsFalse(s.HasObservers);
        }
Exemplo n.º 43
0
        public void replays_empty_sequence()
        {
            BehaviorSubject<int> subject = new BehaviorSubject<int>(0);

            StatsObserver<int> stats = new StatsObserver<int>();

            subject.OnCompleted();

            subject.Subscribe(stats);

            Assert.AreEqual(0, stats.NextCount);
            Assert.IsTrue(stats.CompletedCalled);
        }
Exemplo n.º 44
0
        public void live_values_are_sent_through_scheduler()
        {
            ManualScheduler scheduler = new ManualScheduler();

            BehaviorSubject<int> subject = new BehaviorSubject<int>(0, scheduler);

            StatsObserver<int> stats = new StatsObserver<int>();

            subject.Subscribe(stats);

            subject.OnNext(1);
            subject.OnNext(2);
            subject.OnCompleted();

            Assert.IsFalse(stats.NextCalled);

            scheduler.RunNext();
            Assert.AreEqual(1, stats.NextCount);
            Assert.IsTrue(stats.NextValues.SequenceEqual(new int[] { 0 }));
            Assert.IsFalse(stats.CompletedCalled);

            scheduler.RunNext();
            Assert.AreEqual(2, stats.NextCount);
            Assert.IsTrue(stats.NextValues.SequenceEqual(new int[] { 0, 1 }));
            Assert.IsFalse(stats.CompletedCalled);

            scheduler.RunNext();
            Assert.AreEqual(3, stats.NextCount);
            Assert.IsTrue(stats.NextValues.SequenceEqual(new int[] { 0, 1, 2 }));
            Assert.IsFalse(stats.CompletedCalled);

            scheduler.RunNext();
            Assert.IsTrue(stats.CompletedCalled);
        }
Exemplo n.º 45
0
        public void replays_no_values_when_complete()
        {
            BehaviorSubject<int> subject = new BehaviorSubject<int>(0);

            StatsObserver<int> stats = new StatsObserver<int>();

            subject.OnNext(1);
            subject.OnNext(2);
            subject.OnNext(3);
            subject.OnCompleted();

            subject.Subscribe(stats);

            Assert.AreEqual(0, stats.NextCount);
            Assert.IsTrue(stats.CompletedCalled);
        }
Exemplo n.º 46
0
        public void sends_live_values_after_replay()
        {
            BehaviorSubject<int> subject = new BehaviorSubject<int>(0);

            StatsObserver<int> stats = new StatsObserver<int>();

            subject.OnNext(1);
            subject.OnNext(2);

            subject.Subscribe(stats);

            subject.OnNext(3);
            subject.OnCompleted();

            Assert.AreEqual(2, stats.NextCount);
            Assert.IsTrue(stats.NextValues.SequenceEqual(new int[] { 2, 3 }));
            Assert.IsTrue(stats.CompletedCalled);
        }