combine_test.js 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. // Copyright 2012 The Closure Library Authors. All Rights Reserved.
  2. // Use of this source code is governed by the Apache License, Version 2.0.
  3. goog.provide('goog.result.combineTest');
  4. goog.setTestOnly('goog.result.combineTest');
  5. goog.require('goog.Timer');
  6. goog.require('goog.array');
  7. goog.require('goog.result');
  8. goog.require('goog.testing.MockClock');
  9. goog.require('goog.testing.jsunit');
  10. goog.require('goog.testing.recordFunction');
  11. var result1, result2, result3, result4, resultCallback;
  12. var combinedResult, successCombinedResult, mockClock;
  13. function setUpPage() {
  14. mockClock = new goog.testing.MockClock();
  15. mockClock.install();
  16. }
  17. function tearDownPage() {
  18. goog.dispose(mockClock);
  19. }
  20. function setUp() {
  21. mockClock.reset();
  22. result1 = new goog.result.SimpleResult();
  23. result2 = new goog.result.SimpleResult();
  24. result3 = new goog.result.SimpleResult();
  25. result4 = new goog.result.SimpleResult();
  26. combinedResult = goog.result.combine(result1, result2, result3, result4);
  27. successCombinedResult =
  28. goog.result.combineOnSuccess(result1, result2, result3, result4);
  29. resultCallback = goog.testing.recordFunction();
  30. }
  31. function tearDown() {
  32. result1 = result2 = result3 = result4 = resultCallback = null;
  33. combinedResult = successCombinedResult = null;
  34. }
  35. function testSynchronousCombine() {
  36. resolveAllGivenResultsToSuccess();
  37. var newCombinedResult =
  38. goog.result.combine(result1, result2, result3, result4);
  39. goog.result.wait(newCombinedResult, resultCallback);
  40. assertSuccessCall(newCombinedResult, resultCallback);
  41. }
  42. function testCombineWhenAllResultsSuccess() {
  43. goog.result.wait(combinedResult, resultCallback);
  44. resolveAllGivenResultsToSuccess();
  45. assertSuccessCall(combinedResult, resultCallback);
  46. }
  47. function testAsyncCombineWhenAllResultsSuccess() {
  48. goog.result.wait(combinedResult, resultCallback);
  49. goog.Timer.callOnce(function() { resolveAllGivenResultsToSuccess(); });
  50. mockClock.tick();
  51. assertSuccessCall(combinedResult, resultCallback);
  52. }
  53. function testCombineWhenAllResultsFail() {
  54. goog.result.wait(combinedResult, resultCallback);
  55. resolveAllGivenResultsToError();
  56. assertSuccessCall(combinedResult, resultCallback);
  57. }
  58. function testAsyncCombineWhenAllResultsFail() {
  59. goog.result.wait(combinedResult, resultCallback);
  60. goog.Timer.callOnce(function() { resolveAllGivenResultsToError(); });
  61. mockClock.tick();
  62. assertSuccessCall(combinedResult, resultCallback);
  63. }
  64. function testCombineWhenSomeResultsSuccess() {
  65. goog.result.wait(combinedResult, resultCallback);
  66. resolveSomeGivenResultsToSuccess();
  67. assertSuccessCall(combinedResult, resultCallback);
  68. }
  69. function testAsyncCombineWhenSomeResultsSuccess() {
  70. goog.result.wait(combinedResult, resultCallback);
  71. goog.Timer.callOnce(function() { resolveSomeGivenResultsToSuccess(); });
  72. mockClock.tick();
  73. assertSuccessCall(combinedResult, resultCallback);
  74. }
  75. function testCombineOnSuccessWhenAllResultsSuccess() {
  76. goog.result.wait(successCombinedResult, resultCallback);
  77. resolveAllGivenResultsToSuccess();
  78. assertSuccessCall(successCombinedResult, resultCallback);
  79. }
  80. function testAsyncCombineOnSuccessWhenAllResultsSuccess() {
  81. goog.result.wait(successCombinedResult, resultCallback);
  82. goog.Timer.callOnce(function() { resolveAllGivenResultsToSuccess(); });
  83. mockClock.tick();
  84. assertSuccessCall(successCombinedResult, resultCallback);
  85. }
  86. function testCombineOnSuccessWhenAllResultsFail() {
  87. goog.result.wait(successCombinedResult, resultCallback);
  88. resolveAllGivenResultsToError();
  89. assertErrorCall(successCombinedResult, resultCallback);
  90. }
  91. function testAsyncCombineOnSuccessWhenAllResultsFail() {
  92. goog.result.wait(successCombinedResult, resultCallback);
  93. goog.Timer.callOnce(function() { resolveAllGivenResultsToError(); });
  94. mockClock.tick();
  95. assertErrorCall(successCombinedResult, resultCallback);
  96. }
  97. function testCombineOnSuccessWhenSomeResultsSuccess() {
  98. goog.result.wait(successCombinedResult, resultCallback);
  99. resolveSomeGivenResultsToSuccess();
  100. assertErrorCall(successCombinedResult, resultCallback);
  101. }
  102. function testAsyncCombineOnSuccessWhenSomeResultsSuccess() {
  103. goog.result.wait(successCombinedResult, resultCallback);
  104. goog.Timer.callOnce(function() { resolveSomeGivenResultsToSuccess(); });
  105. mockClock.tick();
  106. assertErrorCall(successCombinedResult, resultCallback);
  107. }
  108. function testCancelParentResults() {
  109. goog.result.wait(combinedResult, resultCallback);
  110. goog.result.cancelParentResults(combinedResult);
  111. assertArgumentContainsGivenResults(combinedResult.getValue())
  112. goog.array.forEach([result1, result2, result3, result4],
  113. function(result) {
  114. assertTrue(result.isCanceled());
  115. });
  116. }
  117. function assertSuccessCall(combinedResult, resultCallback) {
  118. assertEquals(goog.result.Result.State.SUCCESS, combinedResult.getState());
  119. assertEquals(1, resultCallback.getCallCount());
  120. var result = resultCallback.popLastCall().getArgument(0);
  121. assertEquals(combinedResult, result);
  122. assertArgumentContainsGivenResults(result.getValue());
  123. }
  124. function assertErrorCall(combinedResult, resultCallback) {
  125. assertEquals(goog.result.Result.State.ERROR,
  126. combinedResult.getState());
  127. assertEquals(1, resultCallback.getCallCount());
  128. var result = resultCallback.popLastCall().getArgument(0);
  129. assertEquals(combinedResult, result);
  130. assertArgumentContainsGivenResults(combinedResult.getError());
  131. }
  132. function assertArgumentContainsGivenResults(resultsArray) {
  133. assertEquals(4, resultsArray.length);
  134. goog.array.forEach([result1, result2, result3, result4], function(res) {
  135. assertTrue(goog.array.contains(resultsArray, res));
  136. });
  137. }
  138. function resolveAllGivenResultsToSuccess() {
  139. goog.array.forEach([result1, result2, result3, result4], function(res) {
  140. res.setValue(1);
  141. });
  142. }
  143. function resolveAllGivenResultsToError() {
  144. goog.array.forEach([result1, result2, result3, result4], function(res) {
  145. res.setError();
  146. });
  147. }
  148. function resolveSomeGivenResultsToSuccess() {
  149. goog.array.forEach([result2, result3, result4], function(res) {
  150. res.setValue(1);
  151. });
  152. result1.setError();
  153. }