ProgressTest.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. namespace MeloongCore.Tests;
  2. public class ProgressTest : TestBase {
  3. [Test]
  4. public async Task ProgressChanged_主进度实际改变时触发() {
  5. var progress = new ProgressProvider();
  6. int changedCount = 0;
  7. progress.ProgressChanged += () => changedCount++;
  8. progress.Set(0.2);
  9. progress.Set(0.2);
  10. progress.Add(0.1);
  11. progress.Add(0);
  12. progress.Set(0.5, skiped: true);
  13. await Assert.That(changedCount).IsEqualTo(3);
  14. }
  15. [Test]
  16. public async Task ProgressChanged_子进度改变时向父级传播() {
  17. var progress = new ProgressProvider();
  18. int changedCount = 0;
  19. progress.ProgressChanged += () => changedCount++;
  20. var sub = progress.SplitBy(0.5).Single();
  21. sub.Set(0.5);
  22. sub.Set(0.5);
  23. await Assert.That(changedCount).IsEqualTo(2);
  24. }
  25. [Test]
  26. public async Task ProgressChanged_不会触发Observe() {
  27. var progress = new ProgressProvider();
  28. int changedCount = 0;
  29. progress.ProgressChanged += () => changedCount++;
  30. progress.Set(0.5);
  31. progress.Set(0.75, skiped: true);
  32. await Assert.That(changedCount).IsEqualTo(2);
  33. await Assert.That(Math.Abs(progress.Observe() - 2.0 / 3) < 0.000001).IsTrue();
  34. }
  35. [Test]
  36. public async Task ProgressObserver_监听进度变化并更新UI() {
  37. var progress = new ProgressProvider();
  38. int updateCount = 0;
  39. double updatedProgress = 0;
  40. using (var observer = new ProgressObserver(progress, value => {
  41. updateCount++;
  42. updatedProgress = value;
  43. }, TimeSpan.FromHours(1))) {
  44. progress.Set(0.25);
  45. await Assert.That(updateCount).IsEqualTo(1);
  46. await Assert.That(updatedProgress).IsEqualTo(0.25);
  47. }
  48. progress.Set(0.5);
  49. await Task.Delay(50);
  50. await Assert.That(updateCount).IsEqualTo(1);
  51. }
  52. }