ActivatedValueTests.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. // Copyright (c) The Avalonia Project. All rights reserved.
  2. // Licensed under the MIT license. See licence.md file in the project root for full license information.
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Reactive.Linq;
  6. using System.Reactive.Subjects;
  7. using Microsoft.Reactive.Testing;
  8. using Xunit;
  9. namespace Avalonia.Styling.UnitTests
  10. {
  11. public class ActivatedValueTests
  12. {
  13. [Fact]
  14. public void Should_Produce_Correct_Values()
  15. {
  16. var activator = new BehaviorSubject<bool>(false);
  17. var target = new ActivatedValue(activator, 1, string.Empty);
  18. var result = new List<object>();
  19. target.Subscribe(x => result.Add(x));
  20. activator.OnNext(true);
  21. activator.OnNext(false);
  22. Assert.Equal(new[] { AvaloniaProperty.UnsetValue, 1, AvaloniaProperty.UnsetValue }, result);
  23. }
  24. [Fact]
  25. public void Should_Complete_When_Activator_Completes()
  26. {
  27. var activator = new BehaviorSubject<bool>(false);
  28. var target = new ActivatedValue(activator, 1, string.Empty);
  29. var completed = false;
  30. target.Subscribe(_ => { }, () => completed = true);
  31. activator.OnCompleted();
  32. Assert.True(completed);
  33. }
  34. [Fact]
  35. public void Should_Error_When_Activator_Errors()
  36. {
  37. var activator = new BehaviorSubject<bool>(false);
  38. var target = new ActivatedValue(activator, 1, string.Empty);
  39. var error = new Exception();
  40. var completed = false;
  41. target.Subscribe(_ => { }, x => completed = true);
  42. activator.OnError(error);
  43. Assert.True(completed);
  44. }
  45. [Fact]
  46. public void Should_Unsubscribe_From_Activator_When_All_Subscriptions_Disposed()
  47. {
  48. var scheduler = new TestScheduler();
  49. var activator1 = scheduler.CreateColdObservable<bool>();
  50. var activator2 = scheduler.CreateColdObservable<bool>();
  51. var activator = StyleActivator.And(new[] { activator1, activator2 });
  52. var target = new ActivatedValue(activator, 1, string.Empty);
  53. var subscription = target.Subscribe(_ => { });
  54. Assert.Equal(1, activator1.Subscriptions.Count);
  55. Assert.Equal(Subscription.Infinite, activator1.Subscriptions[0].Unsubscribe);
  56. subscription.Dispose();
  57. Assert.Equal(1, activator1.Subscriptions.Count);
  58. Assert.Equal(0, activator1.Subscriptions[0].Unsubscribe);
  59. }
  60. }
  61. }