ProgressTest.cs 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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. (double actual, double skiped) changedProgress = default;
  20. progress.ProgressChanged += value => {
  21. changedCount++;
  22. changedProgress = value;
  23. };
  24. var sub = progress.SplitBy(0.5).Single();
  25. sub.Set(0.5);
  26. sub.Set(0.5);
  27. await Assert.That(changedCount).IsEqualTo(1);
  28. await Assert.That(changedProgress.actual).IsEqualTo(0.25);
  29. await Assert.That(changedProgress.skiped).IsEqualTo(0);
  30. }
  31. [Test]
  32. public async Task ProgressChanged_不会触发Observe() {
  33. var progress = new ProgressProvider();
  34. int changedCount = 0;
  35. progress.ProgressChanged += _ => changedCount++;
  36. progress.Set(0.5);
  37. progress.Set(0.75, skiped: true);
  38. await Assert.That(changedCount).IsEqualTo(2);
  39. await Assert.That(Math.Abs(progress.GetIncreasing() - 2.0 / 3) < 0.000001).IsTrue();
  40. }
  41. [Test]
  42. public async Task ProgressObserver_监听进度变化并更新UI() {
  43. var progress = new ProgressProvider();
  44. int updateCount = 0;
  45. double updatedProgress = 0;
  46. using (var observer = new ProgressObserver(progress, value => {
  47. updateCount++;
  48. updatedProgress = value;
  49. }, TimeSpan.FromHours(1).TotalMilliseconds)) {
  50. progress.Set(0.25);
  51. await Assert.That(updateCount).IsEqualTo(1);
  52. await Assert.That(updatedProgress).IsEqualTo(0.25);
  53. }
  54. progress.Set(0.5);
  55. await Task.Delay(50);
  56. await Assert.That(updateCount).IsEqualTo(1);
  57. }
  58. }