mockcontrol_test.js 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. // Copyright 2010 The Closure Library Authors. All Rights Reserved.
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS-IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. goog.provide('goog.testing.async.MockControlTest');
  15. goog.setTestOnly('goog.testing.async.MockControlTest');
  16. goog.require('goog.async.Deferred');
  17. goog.require('goog.testing.MockControl');
  18. goog.require('goog.testing.TestCase');
  19. goog.require('goog.testing.asserts');
  20. goog.require('goog.testing.async.MockControl');
  21. goog.require('goog.testing.jsunit');
  22. var mockControl;
  23. var asyncMockControl;
  24. var mockControl2;
  25. var asyncMockControl2;
  26. function setUp() {
  27. // TODO(b/25875505): Fix unreported assertions (go/failonunreportedasserts).
  28. goog.testing.TestCase.getActiveTestCase().failOnUnreportedAsserts = false;
  29. mockControl = new goog.testing.MockControl();
  30. asyncMockControl = new goog.testing.async.MockControl(mockControl);
  31. // We need two of these for the tests where we need to verify our meta-test
  32. // assertions without verifying our tested assertions.
  33. mockControl2 = new goog.testing.MockControl();
  34. asyncMockControl2 = new goog.testing.async.MockControl(mockControl2);
  35. }
  36. function assertVerifyFails() {
  37. assertThrowsJsUnitException(function() { mockControl.$verifyAll(); });
  38. }
  39. function testCreateCallbackMockFailure() {
  40. asyncMockControl.createCallbackMock('failingCallbackMock', function() {});
  41. assertVerifyFails();
  42. }
  43. function testCreateCallbackMockSuccess() {
  44. var callback = asyncMockControl.createCallbackMock(
  45. 'succeedingCallbackMock', function() {});
  46. callback();
  47. mockControl.$verifyAll();
  48. }
  49. function testCreateCallbackMockSuccessWithArg() {
  50. var callback = asyncMockControl.createCallbackMock(
  51. 'succeedingCallbackMockWithArg',
  52. asyncMockControl.createCallbackMock(
  53. 'metaCallbackMock', function(val) { assertEquals(10, val); }));
  54. callback(10);
  55. mockControl.$verifyAll();
  56. }
  57. function testCreateCallbackMockSuccessWithArgs() {
  58. var callback = asyncMockControl.createCallbackMock(
  59. 'succeedingCallbackMockWithArgs',
  60. asyncMockControl.createCallbackMock(
  61. 'metaCallbackMock', function(val1, val2, val3) {
  62. assertEquals(10, val1);
  63. assertEquals('foo', val2);
  64. assertObjectEquals({foo: 'bar'}, val3);
  65. }));
  66. callback(10, 'foo', {foo: 'bar'});
  67. mockControl.$verifyAll();
  68. }
  69. function testAsyncAssertEqualsFailureNeverCalled() {
  70. asyncMockControl.asyncAssertEquals('never called', 12);
  71. assertVerifyFails();
  72. }
  73. function testAsyncAssertEqualsFailureNumberOfArgs() {
  74. assertThrowsJsUnitException(function() {
  75. asyncMockControl.asyncAssertEquals('wrong number of args', 12)();
  76. });
  77. }
  78. function testAsyncAssertEqualsFailureOneArg() {
  79. assertThrowsJsUnitException(function() {
  80. asyncMockControl.asyncAssertEquals('wrong arg value', 12)(13);
  81. });
  82. }
  83. function testAsyncAssertEqualsFailureThreeArgs() {
  84. assertThrowsJsUnitException(function() {
  85. asyncMockControl.asyncAssertEquals('wrong arg values', 1, 2, 15)(2, 2, 15);
  86. });
  87. }
  88. function testAsyncAssertEqualsSuccessNoArgs() {
  89. asyncMockControl.asyncAssertEquals('should be called')();
  90. mockControl.$verifyAll();
  91. }
  92. function testAsyncAssertEqualsSuccessThreeArgs() {
  93. asyncMockControl.asyncAssertEquals('should have args', 1, 2, 3)(1, 2, 3);
  94. mockControl.$verifyAll();
  95. }
  96. function testAssertDeferredErrorFailureNoError() {
  97. var deferred = new goog.async.Deferred();
  98. asyncMockControl.assertDeferredError(deferred, function() {});
  99. assertVerifyFails();
  100. }
  101. function testAssertDeferredErrorSuccess() {
  102. var deferred = new goog.async.Deferred();
  103. asyncMockControl.assertDeferredError(
  104. deferred, function() { deferred.errback(new Error('FAIL')); });
  105. mockControl.$verifyAll();
  106. }
  107. function testAssertDeferredEqualsFailureActualDeferredNeverResolves() {
  108. var actual = new goog.async.Deferred();
  109. asyncMockControl.assertDeferredEquals('doesn\'t resolve', 12, actual);
  110. assertVerifyFails();
  111. }
  112. function testAssertDeferredEqualsFailureActualDeferredNeverResolvesBoth() {
  113. var actualDeferred = new goog.async.Deferred();
  114. var expectedDeferred = new goog.async.Deferred();
  115. expectedDeferred.callback(12);
  116. asyncMockControl.assertDeferredEquals(
  117. 'doesn\'t resolve', expectedDeferred, actualDeferred);
  118. assertVerifyFails();
  119. }
  120. function testAssertDeferredEqualsFailureExpectedDeferredNeverResolves() {
  121. var expected = new goog.async.Deferred();
  122. asyncMockControl.assertDeferredEquals('doesn\'t resolve', expected, 12);
  123. assertVerifyFails();
  124. }
  125. function testAssertDeferredEqualsFailureExpectedDeferredNeverResolvesBoth() {
  126. var actualDeferred = new goog.async.Deferred();
  127. var expectedDeferred = new goog.async.Deferred();
  128. actualDeferred.callback(12);
  129. asyncMockControl.assertDeferredEquals(
  130. 'doesn\'t resolve', expectedDeferred, actualDeferred);
  131. assertVerifyFails();
  132. }
  133. function testAssertDeferredEqualsFailureWrongValueActualDeferred() {
  134. var actual = new goog.async.Deferred();
  135. asyncMockControl.assertDeferredEquals('doesn\'t resolve', 12, actual);
  136. asyncMockControl2.assertDeferredError(
  137. actual, function() { actual.callback(13); });
  138. mockControl2.$verifyAll();
  139. }
  140. function testAssertDeferredEqualsFailureWrongValueExpectedDeferred() {
  141. var expected = new goog.async.Deferred();
  142. asyncMockControl.assertDeferredEquals('doesn\'t resolve', expected, 12);
  143. asyncMockControl2.assertDeferredError(
  144. expected, function() { expected.callback(13); });
  145. mockControl2.$verifyAll();
  146. }
  147. function testAssertDeferredEqualsFailureWongValueBothDeferred() {
  148. var actualDeferred = new goog.async.Deferred();
  149. var expectedDeferred = new goog.async.Deferred();
  150. asyncMockControl.assertDeferredEquals(
  151. 'different values', expectedDeferred, actualDeferred);
  152. expectedDeferred.callback(12);
  153. asyncMockControl2.assertDeferredError(
  154. actualDeferred, function() { actualDeferred.callback(13); });
  155. assertVerifyFails();
  156. mockControl2.$verifyAll();
  157. }
  158. function testAssertDeferredEqualsFailureNeitherDeferredEverResolves() {
  159. var actualDeferred = new goog.async.Deferred();
  160. var expectedDeferred = new goog.async.Deferred();
  161. asyncMockControl.assertDeferredEquals(
  162. 'doesn\'t resolve', expectedDeferred, actualDeferred);
  163. assertVerifyFails();
  164. }
  165. function testAssertDeferredEqualsSuccessActualDeferred() {
  166. var actual = new goog.async.Deferred();
  167. asyncMockControl.assertDeferredEquals('should succeed', 12, actual);
  168. actual.callback(12);
  169. mockControl.$verifyAll();
  170. }
  171. function testAssertDeferredEqualsSuccessExpectedDeferred() {
  172. var expected = new goog.async.Deferred();
  173. asyncMockControl.assertDeferredEquals('should succeed', expected, 12);
  174. expected.callback(12);
  175. mockControl.$verifyAll();
  176. }
  177. function testAssertDeferredEqualsSuccessBothDeferred() {
  178. var actualDeferred = new goog.async.Deferred();
  179. var expectedDeferred = new goog.async.Deferred();
  180. asyncMockControl.assertDeferredEquals(
  181. 'should succeed', expectedDeferred, actualDeferred);
  182. expectedDeferred.callback(12);
  183. actualDeferred.callback(12);
  184. mockControl.$verifyAll();
  185. }