|
|
@@ -2,13 +2,44 @@
|
|
|
// Licensed under the MIT license. See licence.md file in the project root for full license information.
|
|
|
|
|
|
using System;
|
|
|
+using System.Collections.Generic;
|
|
|
+using System.Reactive;
|
|
|
using System.Reactive.Linq;
|
|
|
+using Microsoft.Reactive.Testing;
|
|
|
using Xunit;
|
|
|
|
|
|
namespace Perspex.Styling.UnitTests
|
|
|
{
|
|
|
- public class StyleActivatorTests
|
|
|
+ public class StyleActivatorTests : ReactiveTest
|
|
|
{
|
|
|
+ [Fact]
|
|
|
+ public void Activator_Should_Subscribe_To_Inputs_On_First_Subscription()
|
|
|
+ {
|
|
|
+ var scheduler = new TestScheduler();
|
|
|
+ var source = scheduler.CreateColdObservable<bool>();
|
|
|
+ var target = new StyleActivator(new[] { source }, ActivatorMode.And);
|
|
|
+
|
|
|
+ Assert.Equal(0, source.Subscriptions.Count);
|
|
|
+ target.Subscribe(_ => { });
|
|
|
+ Assert.Equal(1, source.Subscriptions.Count);
|
|
|
+ }
|
|
|
+
|
|
|
+ [Fact]
|
|
|
+ public void Activator_Should_Unsubscribe_From_Inputs_After_Last_Subscriber_Completes()
|
|
|
+ {
|
|
|
+ var scheduler = new TestScheduler();
|
|
|
+ var source = scheduler.CreateColdObservable<bool>();
|
|
|
+ var target = new StyleActivator(new[] { source }, ActivatorMode.And);
|
|
|
+
|
|
|
+ var dispose = target.Subscribe(_ => { });
|
|
|
+ Assert.Equal(1, source.Subscriptions.Count);
|
|
|
+ Assert.Equal(Subscription.Infinite, source.Subscriptions[0].Unsubscribe);
|
|
|
+
|
|
|
+ dispose.Dispose();
|
|
|
+ Assert.Equal(1, source.Subscriptions.Count);
|
|
|
+ Assert.Equal(0, source.Subscriptions[0].Unsubscribe);
|
|
|
+ }
|
|
|
+
|
|
|
[Fact]
|
|
|
public void Activator_And_Should_Follow_Single_Input()
|
|
|
{
|
|
|
@@ -53,32 +84,6 @@ namespace Perspex.Styling.UnitTests
|
|
|
Assert.Equal(1, inputs[2].SubscriberCount);
|
|
|
}
|
|
|
|
|
|
- [Fact]
|
|
|
- public void Activator_And_Should_Unsubscribe_All_When_Input_Completes_On_False()
|
|
|
- {
|
|
|
- var inputs = new[]
|
|
|
- {
|
|
|
- new TestSubject<bool>(false),
|
|
|
- new TestSubject<bool>(false),
|
|
|
- new TestSubject<bool>(true),
|
|
|
- };
|
|
|
- var target = new StyleActivator(inputs, ActivatorMode.And);
|
|
|
- var result = new TestObserver<bool>();
|
|
|
-
|
|
|
- target.Subscribe(result);
|
|
|
- Assert.False(result.GetValue());
|
|
|
- inputs[0].OnNext(true);
|
|
|
- inputs[1].OnNext(true);
|
|
|
- Assert.True(result.GetValue());
|
|
|
- inputs[0].OnNext(false);
|
|
|
- Assert.False(result.GetValue());
|
|
|
- inputs[0].OnCompleted();
|
|
|
-
|
|
|
- Assert.Equal(0, inputs[0].SubscriberCount);
|
|
|
- Assert.Equal(0, inputs[1].SubscriberCount);
|
|
|
- Assert.Equal(0, inputs[2].SubscriberCount);
|
|
|
- }
|
|
|
-
|
|
|
[Fact]
|
|
|
public void Activator_And_Should_Not_Unsubscribe_All_When_Input_Completes_On_True()
|
|
|
{
|
|
|
@@ -96,7 +101,7 @@ namespace Perspex.Styling.UnitTests
|
|
|
inputs[0].OnNext(true);
|
|
|
inputs[0].OnCompleted();
|
|
|
|
|
|
- Assert.Equal(1, inputs[0].SubscriberCount);
|
|
|
+ Assert.Equal(0, inputs[0].SubscriberCount);
|
|
|
Assert.Equal(1, inputs[1].SubscriberCount);
|
|
|
Assert.Equal(1, inputs[2].SubscriberCount);
|
|
|
}
|
|
|
@@ -144,31 +149,6 @@ namespace Perspex.Styling.UnitTests
|
|
|
Assert.Equal(1, inputs[2].SubscriberCount);
|
|
|
}
|
|
|
|
|
|
- [Fact]
|
|
|
- public void Activator_Or_Should_Unsubscribe_All_When_Input_Completes_On_True()
|
|
|
- {
|
|
|
- var inputs = new[]
|
|
|
- {
|
|
|
- new TestSubject<bool>(false),
|
|
|
- new TestSubject<bool>(false),
|
|
|
- new TestSubject<bool>(true),
|
|
|
- };
|
|
|
- var target = new StyleActivator(inputs, ActivatorMode.Or);
|
|
|
- var result = new TestObserver<bool>();
|
|
|
-
|
|
|
- target.Subscribe(result);
|
|
|
- Assert.True(result.GetValue());
|
|
|
- inputs[2].OnNext(false);
|
|
|
- Assert.False(result.GetValue());
|
|
|
- inputs[0].OnNext(true);
|
|
|
- Assert.True(result.GetValue());
|
|
|
- inputs[0].OnCompleted();
|
|
|
-
|
|
|
- Assert.Equal(0, inputs[0].SubscriberCount);
|
|
|
- Assert.Equal(0, inputs[1].SubscriberCount);
|
|
|
- Assert.Equal(0, inputs[2].SubscriberCount);
|
|
|
- }
|
|
|
-
|
|
|
[Fact]
|
|
|
public void Activator_Or_Should_Not_Unsubscribe_All_When_Input_Completes_On_False()
|
|
|
{
|
|
|
@@ -189,7 +169,7 @@ namespace Perspex.Styling.UnitTests
|
|
|
|
|
|
Assert.Equal(1, inputs[0].SubscriberCount);
|
|
|
Assert.Equal(1, inputs[1].SubscriberCount);
|
|
|
- Assert.Equal(1, inputs[2].SubscriberCount);
|
|
|
+ Assert.Equal(0, inputs[2].SubscriberCount);
|
|
|
}
|
|
|
|
|
|
[Fact]
|
|
|
@@ -207,5 +187,18 @@ namespace Perspex.Styling.UnitTests
|
|
|
|
|
|
Assert.True(completed);
|
|
|
}
|
|
|
+
|
|
|
+ private Recorded<Notification<bool>>[] OnNextValues(params bool[] values)
|
|
|
+ {
|
|
|
+ var result = new List<Recorded<Notification<bool>>>();
|
|
|
+ var time = 1;
|
|
|
+
|
|
|
+ foreach (var value in values)
|
|
|
+ {
|
|
|
+ result.Add(new Recorded<Notification<bool>>(time, Notification.CreateOnNext<bool>(value)));
|
|
|
+ }
|
|
|
+
|
|
|
+ return result.ToArray();
|
|
|
+ }
|
|
|
}
|
|
|
}
|