PageRenderTime 6092ms CodeModel.GetById 29ms RepoModel.GetById 2ms app.codeStats 0ms

/tests/observable/groupjoin.js

https://github.com/arcseldon/RxJS
JavaScript | 503 lines | 467 code | 36 blank | 0 comment | 8 complexity | 134fc5e6110181c90e9b833054e61489 MD5 | raw file
Possible License(s): Apache-2.0
  1. QUnit.module('GroupJoin');
  2. var TestScheduler = Rx.TestScheduler,
  3. Observable = Rx.Observable,
  4. onNext = Rx.ReactiveTest.onNext,
  5. onError = Rx.ReactiveTest.onError,
  6. onCompleted = Rx.ReactiveTest.onCompleted,
  7. subscribe = Rx.ReactiveTest.subscribe;
  8. var TimeSpan = {
  9. fromTicks: function (value) {
  10. return value;
  11. }
  12. };
  13. var TimeInterval = (function () {
  14. function TimeInterval(value, interval) {
  15. this.value = value;
  16. this.interval = interval;
  17. }
  18. TimeInterval.prototype.toString = function () {
  19. return this.value + '@' + this.interval;
  20. };
  21. TimeInterval.prototype.Equals = function (other) {
  22. return this.toString() === other.toString();
  23. };
  24. TimeInterval.prototype.getHashCode = function () {
  25. return this.value.getHashCode() ^ this.interval.getHashCode();
  26. };
  27. return TimeInterval;
  28. })();
  29. function newTimer(l, t, scheduler) {
  30. var timer = scheduler.createColdObservable(onNext(t, 0), onCompleted(t));
  31. l.push(timer);
  32. return timer;
  33. }
  34. test('GroupJoinOp_Normal_I', function () {
  35. var scheduler = new TestScheduler();
  36. var xs = scheduler.createHotObservable(
  37. onNext(210, new TimeInterval(0, 10)),
  38. onNext(219, new TimeInterval(1, 5)),
  39. onNext(240, new TimeInterval(2, 10)),
  40. onNext(300, new TimeInterval(3, 100)),
  41. onNext(310, new TimeInterval(4, 80)),
  42. onNext(500, new TimeInterval(5, 90)),
  43. onNext(700, new TimeInterval(6, 25)),
  44. onNext(710, new TimeInterval(7, 280)),
  45. onNext(720, new TimeInterval(8, 100)),
  46. onNext(830, new TimeInterval(9, 10)),
  47. onCompleted(900)
  48. );
  49. var ys = scheduler.createHotObservable(
  50. onNext(215, new TimeInterval("hat", 20)),
  51. onNext(217, new TimeInterval("bat", 1)),
  52. onNext(290, new TimeInterval("wag", 200)),
  53. onNext(300, new TimeInterval("pig", 10)),
  54. onNext(305, new TimeInterval("cup", 50)),
  55. onNext(600, new TimeInterval("yak", 90)),
  56. onNext(702, new TimeInterval("tin", 20)),
  57. onNext(712, new TimeInterval("man", 10)),
  58. onNext(722, new TimeInterval("rat", 200)),
  59. onNext(732, new TimeInterval("wig", 5)),
  60. onCompleted(800)
  61. );
  62. var xsd = [];
  63. var ysd = [];
  64. var res = scheduler.startWithCreate(function (){
  65. return xs.groupJoin(
  66. ys,
  67. function (x) { return newTimer(xsd, x.interval, scheduler); },
  68. function (y) { return newTimer(ysd, y.interval, scheduler); },
  69. function (x, yy) { return yy.select(function (y) { return x.value + y.value; })})
  70. .mergeObservable();
  71. });
  72. res.messages.assertEqual(
  73. onNext(215, "0hat"),
  74. onNext(217, "0bat"),
  75. onNext(219, "1hat"),
  76. onNext(300, "3wag"),
  77. onNext(300, "3pig"),
  78. onNext(305, "3cup"),
  79. onNext(310, "4wag"),
  80. onNext(310, "4pig"),
  81. onNext(310, "4cup"),
  82. onNext(702, "6tin"),
  83. onNext(710, "7tin"),
  84. onNext(712, "7man"),
  85. onNext(712, "6man"),
  86. onNext(720, "8tin"),
  87. onNext(720, "8man"),
  88. onNext(722, "7rat"),
  89. onNext(722, "6rat"),
  90. onNext(722, "8rat"),
  91. onNext(732, "7wig"),
  92. onNext(732, "8wig"),
  93. onNext(830, "9rat"),
  94. onCompleted(990)
  95. );
  96. xs.subscriptions.assertEqual(
  97. subscribe(200, 990)
  98. );
  99. ys.subscriptions.assertEqual(
  100. subscribe(200, 990)
  101. );
  102. });
  103. test('GroupJoinOp_Normal_II', function () {
  104. var scheduler = new TestScheduler();
  105. var xs = scheduler.createHotObservable(
  106. onNext(210, new TimeInterval(0, 10)),
  107. onNext(219, new TimeInterval(1, 5)),
  108. onNext(240, new TimeInterval(2, 10)),
  109. onNext(300, new TimeInterval(3, 100)),
  110. onNext(310, new TimeInterval(4, 80)),
  111. onNext(500, new TimeInterval(5, 90)),
  112. onNext(700, new TimeInterval(6, 25)),
  113. onNext(710, new TimeInterval(7, 200)),
  114. onNext(720, new TimeInterval(8, 100)),
  115. onCompleted(721)
  116. );
  117. var ys = scheduler.createHotObservable(
  118. onNext(215, new TimeInterval("hat", (20))),
  119. onNext(217, new TimeInterval("bat", (1))),
  120. onNext(290, new TimeInterval("wag", (200))),
  121. onNext(300, new TimeInterval("pig", (10))),
  122. onNext(305, new TimeInterval("cup", (50))),
  123. onNext(600, new TimeInterval("yak", (90))),
  124. onNext(702, new TimeInterval("tin", (20))),
  125. onNext(712, new TimeInterval("man", (10))),
  126. onNext(722, new TimeInterval("rat", (200))),
  127. onNext(732, new TimeInterval("wig", (5))),
  128. onCompleted(990)
  129. );
  130. var xsd = [];
  131. var ysd = [];
  132. var res = scheduler.startWithCreate(function (){
  133. return xs.groupJoin(
  134. ys,
  135. function (x) { return newTimer(xsd, x.interval, scheduler); },
  136. function (y) { return newTimer(ysd, y.interval, scheduler); },
  137. function (x, yy) { return yy.select(function (y) { return x.value + y.value; })})
  138. .mergeObservable();
  139. });
  140. res.messages.assertEqual(
  141. onNext(215, "0hat"),
  142. onNext(217, "0bat"),
  143. onNext(219, "1hat"),
  144. onNext(300, "3wag"),
  145. onNext(300, "3pig"),
  146. onNext(305, "3cup"),
  147. onNext(310, "4wag"),
  148. onNext(310, "4pig"),
  149. onNext(310, "4cup"),
  150. onNext(702, "6tin"),
  151. onNext(710, "7tin"),
  152. onNext(712, "7man"),
  153. onNext(712, "6man"),
  154. onNext(720, "8tin"),
  155. onNext(720, "8man"),
  156. onNext(722, "7rat"),
  157. onNext(722, "6rat"),
  158. onNext(722, "8rat"),
  159. onNext(732, "7wig"),
  160. onNext(732, "8wig"),
  161. onCompleted(910)
  162. );
  163. xs.subscriptions.assertEqual(
  164. subscribe(200, 910)
  165. );
  166. ys.subscriptions.assertEqual(
  167. subscribe(200, 910)
  168. );
  169. });
  170. test('GroupJoinOp_Normal_III', function () {
  171. var results, scheduler, xs, ys;
  172. scheduler = new TestScheduler();
  173. xs = scheduler.createHotObservable(onNext(210, new TimeInterval(0, 10)), onNext(219, new TimeInterval(1, 5)), onNext(240, new TimeInterval(2, 10)), onNext(300, new TimeInterval(3, 100)), onNext(310, new TimeInterval(4, 80)), onNext(500, new TimeInterval(5, 90)), onNext(700, new TimeInterval(6, 25)), onNext(710, new TimeInterval(7, 280)), onNext(720, new TimeInterval(8, 100)), onNext(830, new TimeInterval(9, 10)), onCompleted(900));
  174. ys = scheduler.createHotObservable(onNext(215, new TimeInterval("hat", 20)), onNext(217, new TimeInterval("bat", 1)), onNext(290, new TimeInterval("wag", 200)), onNext(300, new TimeInterval("pig", 10)), onNext(305, new TimeInterval("cup", 50)), onNext(600, new TimeInterval("yak", 90)), onNext(702, new TimeInterval("tin", 20)), onNext(712, new TimeInterval("man", 10)), onNext(722, new TimeInterval("rat", 200)), onNext(732, new TimeInterval("wig", 5)), onCompleted(800));
  175. results = scheduler.startWithCreate(function () {
  176. return xs.groupJoin(ys, function (x) {
  177. return Observable.timer(x.interval, undefined, scheduler).where(function () {
  178. return false;
  179. });
  180. }, function (y) {
  181. return Observable.timer(y.interval, undefined, scheduler).where(function () {
  182. return false;
  183. });
  184. }, function (x, yy) {
  185. return yy.select(function (y) {
  186. return x.value + y.value;
  187. });
  188. }).mergeObservable();
  189. });
  190. results.messages.assertEqual(onNext(215, "0hat"), onNext(217, "0bat"), onNext(219, "1hat"), onNext(300, "3wag"), onNext(300, "3pig"), onNext(305, "3cup"), onNext(310, "4wag"), onNext(310, "4pig"), onNext(310, "4cup"), onNext(702, "6tin"), onNext(710, "7tin"), onNext(712, "7man"), onNext(712, "6man"), onNext(720, "8tin"), onNext(720, "8man"), onNext(722, "7rat"), onNext(722, "6rat"), onNext(722, "8rat"), onNext(732, "7wig"), onNext(732, "8wig"), onNext(830, "9rat"), onCompleted(990));
  191. });
  192. test('GroupJoinOp_Normal_IV', function () {
  193. var results, scheduler, xs, ys;
  194. scheduler = new TestScheduler();
  195. xs = scheduler.createHotObservable(onNext(210, new TimeInterval(0, TimeSpan.fromTicks(10))), onNext(219, new TimeInterval(1, TimeSpan.fromTicks(5))), onNext(240, new TimeInterval(2, TimeSpan.fromTicks(10))), onNext(300, new TimeInterval(3, TimeSpan.fromTicks(100))), onNext(310, new TimeInterval(4, TimeSpan.fromTicks(80))), onNext(500, new TimeInterval(5, TimeSpan.fromTicks(90))), onNext(700, new TimeInterval(6, TimeSpan.fromTicks(25))), onNext(710, new TimeInterval(7, TimeSpan.fromTicks(200))), onNext(720, new TimeInterval(8, TimeSpan.fromTicks(100))), onCompleted(990));
  196. ys = scheduler.createHotObservable(onNext(215, new TimeInterval("hat", TimeSpan.fromTicks(20))), onNext(217, new TimeInterval("bat", TimeSpan.fromTicks(1))), onNext(290, new TimeInterval("wag", TimeSpan.fromTicks(200))), onNext(300, new TimeInterval("pig", TimeSpan.fromTicks(10))), onNext(305, new TimeInterval("cup", TimeSpan.fromTicks(50))), onNext(600, new TimeInterval("yak", TimeSpan.fromTicks(90))), onNext(702, new TimeInterval("tin", TimeSpan.fromTicks(20))), onNext(712, new TimeInterval("man", TimeSpan.fromTicks(10))), onNext(722, new TimeInterval("rat", TimeSpan.fromTicks(200))), onNext(732, new TimeInterval("wig", TimeSpan.fromTicks(5))), onCompleted(980));
  197. results = scheduler.startWithCreate(function () {
  198. return xs.groupJoin(ys, function (x) {
  199. return Observable.timer(x.interval, undefined, scheduler);
  200. }, function (y) {
  201. return Observable.timer(y.interval, undefined, scheduler);
  202. }, function (x, yy) {
  203. return yy.select(function (y) {
  204. return x.value + y.value;
  205. });
  206. }).mergeObservable();
  207. });
  208. results.messages.assertEqual(onNext(215, "0hat"), onNext(217, "0bat"), onNext(219, "1hat"), onNext(300, "3wag"), onNext(300, "3pig"), onNext(305, "3cup"), onNext(310, "4wag"), onNext(310, "4pig"), onNext(310, "4cup"), onNext(702, "6tin"), onNext(710, "7tin"), onNext(712, "7man"), onNext(712, "6man"), onNext(720, "8tin"), onNext(720, "8man"), onNext(722, "7rat"), onNext(722, "6rat"), onNext(722, "8rat"), onNext(732, "7wig"), onNext(732, "8wig"), onCompleted(990));
  209. });
  210. test('GroupJoinOp_Normal_V', function () {
  211. var results, scheduler, xs, ys;
  212. scheduler = new TestScheduler();
  213. xs = scheduler.createHotObservable(onNext(210, new TimeInterval(0, TimeSpan.fromTicks(10))), onNext(219, new TimeInterval(1, TimeSpan.fromTicks(5))), onNext(240, new TimeInterval(2, TimeSpan.fromTicks(10))), onNext(300, new TimeInterval(3, TimeSpan.fromTicks(100))), onNext(310, new TimeInterval(4, TimeSpan.fromTicks(80))), onNext(500, new TimeInterval(5, TimeSpan.fromTicks(90))), onNext(700, new TimeInterval(6, TimeSpan.fromTicks(25))), onNext(710, new TimeInterval(7, TimeSpan.fromTicks(200))), onNext(720, new TimeInterval(8, TimeSpan.fromTicks(100))), onCompleted(990));
  214. ys = scheduler.createHotObservable(onNext(215, new TimeInterval("hat", TimeSpan.fromTicks(20))), onNext(217, new TimeInterval("bat", TimeSpan.fromTicks(1))), onNext(290, new TimeInterval("wag", TimeSpan.fromTicks(200))), onNext(300, new TimeInterval("pig", TimeSpan.fromTicks(10))), onNext(305, new TimeInterval("cup", TimeSpan.fromTicks(50))), onNext(600, new TimeInterval("yak", TimeSpan.fromTicks(90))), onNext(702, new TimeInterval("tin", TimeSpan.fromTicks(20))), onNext(712, new TimeInterval("man", TimeSpan.fromTicks(10))), onNext(722, new TimeInterval("rat", TimeSpan.fromTicks(200))), onNext(732, new TimeInterval("wig", TimeSpan.fromTicks(5))), onCompleted(900));
  215. results = scheduler.startWithCreate(function () {
  216. return xs.groupJoin(ys, function (x) {
  217. return Observable.timer(x.interval, undefined, scheduler);
  218. }, function (y) {
  219. return Observable.timer(y.interval, undefined, scheduler);
  220. }, function (x, yy) {
  221. return yy.select(function (y) {
  222. return x.value + y.value;
  223. });
  224. }).mergeObservable();
  225. });
  226. results.messages.assertEqual(onNext(215, "0hat"), onNext(217, "0bat"), onNext(219, "1hat"), onNext(300, "3wag"), onNext(300, "3pig"), onNext(305, "3cup"), onNext(310, "4wag"), onNext(310, "4pig"), onNext(310, "4cup"), onNext(702, "6tin"), onNext(710, "7tin"), onNext(712, "7man"), onNext(712, "6man"), onNext(720, "8tin"), onNext(720, "8man"), onNext(722, "7rat"), onNext(722, "6rat"), onNext(722, "8rat"), onNext(732, "7wig"), onNext(732, "8wig"), onCompleted(990));
  227. });
  228. test('GroupJoinOp_Normal_VI', function () {
  229. var results, scheduler, xs, ys;
  230. scheduler = new TestScheduler();
  231. xs = scheduler.createHotObservable(onNext(210, new TimeInterval(0, TimeSpan.fromTicks(10))), onNext(219, new TimeInterval(1, TimeSpan.fromTicks(5))), onNext(240, new TimeInterval(2, TimeSpan.fromTicks(10))), onNext(300, new TimeInterval(3, TimeSpan.fromTicks(100))), onNext(310, new TimeInterval(4, TimeSpan.fromTicks(80))), onNext(500, new TimeInterval(5, TimeSpan.fromTicks(90))), onNext(700, new TimeInterval(6, TimeSpan.fromTicks(25))), onNext(710, new TimeInterval(7, TimeSpan.fromTicks(30))), onNext(720, new TimeInterval(8, TimeSpan.fromTicks(200))), onNext(830, new TimeInterval(9, TimeSpan.fromTicks(10))), onCompleted(850));
  232. ys = scheduler.createHotObservable(onNext(215, new TimeInterval("hat", TimeSpan.fromTicks(20))), onNext(217, new TimeInterval("bat", TimeSpan.fromTicks(1))), onNext(290, new TimeInterval("wag", TimeSpan.fromTicks(200))), onNext(300, new TimeInterval("pig", TimeSpan.fromTicks(10))), onNext(305, new TimeInterval("cup", TimeSpan.fromTicks(50))), onNext(600, new TimeInterval("yak", TimeSpan.fromTicks(90))), onNext(702, new TimeInterval("tin", TimeSpan.fromTicks(20))), onNext(712, new TimeInterval("man", TimeSpan.fromTicks(10))), onNext(722, new TimeInterval("rat", TimeSpan.fromTicks(20))), onNext(732, new TimeInterval("wig", TimeSpan.fromTicks(5))), onCompleted(900));
  233. results = scheduler.startWithCreate(function () {
  234. return xs.groupJoin(ys, function (x) {
  235. return Observable.timer(x.interval, undefined, scheduler);
  236. }, function (y) {
  237. return Observable.timer(y.interval, undefined, scheduler);
  238. }, function (x, yy) {
  239. return yy.select(function (y) {
  240. return x.value + y.value;
  241. });
  242. }).mergeObservable();
  243. });
  244. results.messages.assertEqual(onNext(215, "0hat"), onNext(217, "0bat"), onNext(219, "1hat"), onNext(300, "3wag"), onNext(300, "3pig"), onNext(305, "3cup"), onNext(310, "4wag"), onNext(310, "4pig"), onNext(310, "4cup"), onNext(702, "6tin"), onNext(710, "7tin"), onNext(712, "7man"), onNext(712, "6man"), onNext(720, "8tin"), onNext(720, "8man"), onNext(722, "7rat"), onNext(722, "6rat"), onNext(722, "8rat"), onNext(732, "7wig"), onNext(732, "8wig"), onCompleted(920));
  245. });
  246. test('GroupJoinOp_Normal_VII', function () {
  247. var results, scheduler, xs, ys;
  248. scheduler = new TestScheduler();
  249. xs = scheduler.createHotObservable(onCompleted(210));
  250. ys = scheduler.createHotObservable(onNext(215, new TimeInterval("hat", TimeSpan.fromTicks(20))), onNext(217, new TimeInterval("bat", TimeSpan.fromTicks(1))), onNext(290, new TimeInterval("wag", TimeSpan.fromTicks(200))), onNext(300, new TimeInterval("pig", TimeSpan.fromTicks(10))), onNext(305, new TimeInterval("cup", TimeSpan.fromTicks(50))), onNext(600, new TimeInterval("yak", TimeSpan.fromTicks(90))), onNext(702, new TimeInterval("tin", TimeSpan.fromTicks(20))), onNext(712, new TimeInterval("man", TimeSpan.fromTicks(10))), onNext(722, new TimeInterval("rat", TimeSpan.fromTicks(20))), onNext(732, new TimeInterval("wig", TimeSpan.fromTicks(5))), onCompleted(900));
  251. results = scheduler.startWithCreate(function () {
  252. return xs.groupJoin(ys, function (x) {
  253. return Observable.timer(x.interval, undefined, scheduler);
  254. }, function (y) {
  255. return Observable.timer(y.interval, undefined, scheduler);
  256. }, function (x, yy) {
  257. return yy.select(function (y) {
  258. return x.value + y.value;
  259. });
  260. }).mergeObservable();
  261. });
  262. results.messages.assertEqual(onCompleted(210));
  263. });
  264. test('GroupJoinOp_Normal_VIII', function () {
  265. var results, scheduler, xs, ys;
  266. scheduler = new TestScheduler();
  267. xs = scheduler.createHotObservable(onNext(210, new TimeInterval(0, TimeSpan.fromTicks(200))));
  268. ys = scheduler.createHotObservable(onNext(220, new TimeInterval("hat", TimeSpan.fromTicks(100))), onCompleted(230));
  269. results = scheduler.startWithCreate(function () {
  270. return xs.groupJoin(ys, function (x) {
  271. return Observable.timer(x.interval, undefined, scheduler);
  272. }, function (y) {
  273. return Observable.timer(y.interval, undefined, scheduler);
  274. }, function (x, yy) {
  275. return yy.select(function (y) {
  276. return x.value + y.value;
  277. });
  278. }).mergeObservable();
  279. });
  280. results.messages.assertEqual(onNext(220, "0hat"));
  281. });
  282. test('GroupJoinOp_Normal_IX', function () {
  283. var results, scheduler, xs, ys;
  284. scheduler = new TestScheduler();
  285. xs = scheduler.createHotObservable(onNext(210, new TimeInterval(0, TimeSpan.fromTicks(10))), onNext(219, new TimeInterval(1, TimeSpan.fromTicks(5))), onNext(240, new TimeInterval(2, TimeSpan.fromTicks(10))), onNext(300, new TimeInterval(3, TimeSpan.fromTicks(100))), onNext(310, new TimeInterval(4, TimeSpan.fromTicks(80))), onNext(500, new TimeInterval(5, TimeSpan.fromTicks(90))), onNext(700, new TimeInterval(6, TimeSpan.fromTicks(25))), onNext(710, new TimeInterval(7, TimeSpan.fromTicks(300))), onNext(720, new TimeInterval(8, TimeSpan.fromTicks(100))), onNext(830, new TimeInterval(9, TimeSpan.fromTicks(10))), onCompleted(900));
  286. ys = scheduler.createHotObservable(onNext(215, new TimeInterval("hat", TimeSpan.fromTicks(20))), onNext(217, new TimeInterval("bat", TimeSpan.fromTicks(1))), onNext(290, new TimeInterval("wag", TimeSpan.fromTicks(200))), onNext(300, new TimeInterval("pig", TimeSpan.fromTicks(10))), onNext(305, new TimeInterval("cup", TimeSpan.fromTicks(50))), onNext(600, new TimeInterval("yak", TimeSpan.fromTicks(90))), onNext(702, new TimeInterval("tin", TimeSpan.fromTicks(20))), onNext(712, new TimeInterval("man", TimeSpan.fromTicks(10))), onNext(722, new TimeInterval("rat", TimeSpan.fromTicks(200))), onNext(732, new TimeInterval("wig", TimeSpan.fromTicks(5))), onCompleted(800));
  287. results = scheduler.startWithDispose(function () {
  288. return xs.groupJoin(ys, function (x) {
  289. return Observable.timer(x.interval, undefined, scheduler);
  290. }, function (y) {
  291. return Observable.timer(y.interval, undefined, scheduler);
  292. }, function (x, yy) {
  293. return yy.select(function (y) {
  294. return x.value + y.value;
  295. });
  296. }).mergeObservable();
  297. }, 713);
  298. results.messages.assertEqual(onNext(215, "0hat"), onNext(217, "0bat"), onNext(219, "1hat"), onNext(300, "3wag"), onNext(300, "3pig"), onNext(305, "3cup"), onNext(310, "4wag"), onNext(310, "4pig"), onNext(310, "4cup"), onNext(702, "6tin"), onNext(710, "7tin"), onNext(712, "7man"), onNext(712, "6man"));
  299. });
  300. test('GroupJoinOp_Error_I', function () {
  301. var ex, results, scheduler, xs, ys;
  302. ex = 'ex';
  303. scheduler = new TestScheduler();
  304. xs = scheduler.createHotObservable(onNext(210, new TimeInterval(0, TimeSpan.fromTicks(10))), onNext(219, new TimeInterval(1, TimeSpan.fromTicks(5))), onNext(240, new TimeInterval(2, TimeSpan.fromTicks(10))), onNext(300, new TimeInterval(3, TimeSpan.fromTicks(100))), onError(310, ex));
  305. ys = scheduler.createHotObservable(onNext(215, new TimeInterval("hat", TimeSpan.fromTicks(20))), onNext(217, new TimeInterval("bat", TimeSpan.fromTicks(1))), onNext(290, new TimeInterval("wag", TimeSpan.fromTicks(200))), onNext(300, new TimeInterval("pig", TimeSpan.fromTicks(10))), onNext(305, new TimeInterval("cup", TimeSpan.fromTicks(50))), onNext(600, new TimeInterval("yak", TimeSpan.fromTicks(90))), onNext(702, new TimeInterval("tin", TimeSpan.fromTicks(20))), onNext(712, new TimeInterval("man", TimeSpan.fromTicks(10))), onNext(722, new TimeInterval("rat", TimeSpan.fromTicks(200))), onNext(732, new TimeInterval("wig", TimeSpan.fromTicks(5))), onCompleted(800));
  306. results = scheduler.startWithCreate(function () {
  307. return xs.groupJoin(ys, function (x) {
  308. return Observable.timer(x.interval, undefined, scheduler);
  309. }, function (y) {
  310. return Observable.timer(y.interval, undefined, scheduler);
  311. }, function (x, yy) {
  312. return yy.select(function (y) {
  313. return x.value + y.value;
  314. });
  315. }).mergeObservable();
  316. });
  317. results.messages.assertEqual(onNext(215, "0hat"), onNext(217, "0bat"), onNext(219, "1hat"), onNext(300, "3wag"), onNext(300, "3pig"), onNext(305, "3cup"), onError(310, ex));
  318. });
  319. test('GroupJoinOp_Error_II', function () {
  320. var ex, results, scheduler, xs, ys;
  321. ex = 'ex';
  322. scheduler = new TestScheduler();
  323. xs = scheduler.createHotObservable(onNext(210, new TimeInterval(0, TimeSpan.fromTicks(10))), onNext(219, new TimeInterval(1, TimeSpan.fromTicks(5))), onNext(240, new TimeInterval(2, TimeSpan.fromTicks(10))), onNext(300, new TimeInterval(3, TimeSpan.fromTicks(100))), onNext(310, new TimeInterval(4, TimeSpan.fromTicks(80))), onNext(500, new TimeInterval(5, TimeSpan.fromTicks(90))), onNext(700, new TimeInterval(6, TimeSpan.fromTicks(25))), onNext(710, new TimeInterval(7, TimeSpan.fromTicks(300))), onNext(720, new TimeInterval(8, TimeSpan.fromTicks(100))), onNext(830, new TimeInterval(9, TimeSpan.fromTicks(10))), onCompleted(900));
  324. ys = scheduler.createHotObservable(onNext(215, new TimeInterval("hat", TimeSpan.fromTicks(20))), onNext(217, new TimeInterval("bat", TimeSpan.fromTicks(1))), onNext(290, new TimeInterval("wag", TimeSpan.fromTicks(200))), onNext(300, new TimeInterval("pig", TimeSpan.fromTicks(10))), onNext(305, new TimeInterval("cup", TimeSpan.fromTicks(50))), onNext(600, new TimeInterval("yak", TimeSpan.fromTicks(90))), onNext(702, new TimeInterval("tin", TimeSpan.fromTicks(20))), onNext(712, new TimeInterval("man", TimeSpan.fromTicks(10))), onError(722, ex));
  325. results = scheduler.startWithCreate(function () {
  326. return xs.groupJoin(ys, function (x) {
  327. return Observable.timer(x.interval, undefined, scheduler);
  328. }, function (y) {
  329. return Observable.timer(y.interval, undefined, scheduler);
  330. }, function (x, yy) {
  331. return yy.select(function (y) {
  332. return x.value + y.value;
  333. });
  334. }).mergeObservable();
  335. });
  336. results.messages.assertEqual(onNext(215, "0hat"), onNext(217, "0bat"), onNext(219, "1hat"), onNext(300, "3wag"), onNext(300, "3pig"), onNext(305, "3cup"), onNext(310, "4wag"), onNext(310, "4pig"), onNext(310, "4cup"), onNext(702, "6tin"), onNext(710, "7tin"), onNext(712, "7man"), onNext(712, "6man"), onNext(720, "8tin"), onNext(720, "8man"), onError(722, ex));
  337. });
  338. test('GroupJoinOp_Error_III', function () {
  339. var ex, results, scheduler, xs, ys;
  340. ex = 'ex';
  341. scheduler = new TestScheduler();
  342. xs = scheduler.createHotObservable(onNext(210, new TimeInterval(0, TimeSpan.fromTicks(10))), onNext(219, new TimeInterval(1, TimeSpan.fromTicks(5))), onNext(240, new TimeInterval(2, TimeSpan.fromTicks(10))), onNext(300, new TimeInterval(3, TimeSpan.fromTicks(100))), onNext(310, new TimeInterval(4, TimeSpan.fromTicks(80))), onNext(500, new TimeInterval(5, TimeSpan.fromTicks(90))), onNext(700, new TimeInterval(6, TimeSpan.fromTicks(25))), onNext(710, new TimeInterval(7, TimeSpan.fromTicks(300))), onNext(720, new TimeInterval(8, TimeSpan.fromTicks(100))), onNext(830, new TimeInterval(9, TimeSpan.fromTicks(10))), onCompleted(900));
  343. ys = scheduler.createHotObservable(onNext(215, new TimeInterval("hat", TimeSpan.fromTicks(20))), onNext(217, new TimeInterval("bat", TimeSpan.fromTicks(1))), onNext(290, new TimeInterval("wag", TimeSpan.fromTicks(200))), onNext(300, new TimeInterval("pig", TimeSpan.fromTicks(10))), onNext(305, new TimeInterval("cup", TimeSpan.fromTicks(50))), onNext(600, new TimeInterval("yak", TimeSpan.fromTicks(90))), onNext(702, new TimeInterval("tin", TimeSpan.fromTicks(20))), onNext(712, new TimeInterval("man", TimeSpan.fromTicks(10))), onNext(722, new TimeInterval("rat", TimeSpan.fromTicks(200))), onNext(732, new TimeInterval("wig", TimeSpan.fromTicks(5))), onCompleted(800));
  344. results = scheduler.startWithCreate(function () {
  345. return xs.groupJoin(ys, function (x) {
  346. return Observable.timer(x.interval, undefined, scheduler).selectMany(x.value === 6 ? Observable.throwException(ex) : Observable.empty());
  347. }, function (y) {
  348. return Observable.timer(y.interval, undefined, scheduler);
  349. }, function (x, yy) {
  350. return yy.select(function (y) {
  351. return x.value + y.value;
  352. });
  353. }).mergeObservable();
  354. });
  355. results.messages.assertEqual(onNext(215, "0hat"), onNext(217, "0bat"), onNext(219, "1hat"), onNext(300, "3wag"), onNext(300, "3pig"), onNext(305, "3cup"), onNext(310, "4wag"), onNext(310, "4pig"), onNext(310, "4cup"), onNext(702, "6tin"), onNext(710, "7tin"), onNext(712, "7man"), onNext(712, "6man"), onNext(720, "8tin"), onNext(720, "8man"), onNext(722, "7rat"), onNext(722, "6rat"), onNext(722, "8rat"), onError(725, ex));
  356. });
  357. test('GroupJoinOp_Error_IV', function () {
  358. var ex, results, scheduler, xs, ys;
  359. ex = 'ex';
  360. scheduler = new TestScheduler();
  361. xs = scheduler.createHotObservable(onNext(210, new TimeInterval(0, TimeSpan.fromTicks(10))), onNext(219, new TimeInterval(1, TimeSpan.fromTicks(5))), onNext(240, new TimeInterval(2, TimeSpan.fromTicks(10))), onNext(300, new TimeInterval(3, TimeSpan.fromTicks(100))), onNext(310, new TimeInterval(4, TimeSpan.fromTicks(80))), onNext(500, new TimeInterval(5, TimeSpan.fromTicks(90))), onNext(700, new TimeInterval(6, TimeSpan.fromTicks(25))), onNext(710, new TimeInterval(7, TimeSpan.fromTicks(300))), onNext(720, new TimeInterval(8, TimeSpan.fromTicks(100))), onNext(830, new TimeInterval(9, TimeSpan.fromTicks(10))), onCompleted(900));
  362. ys = scheduler.createHotObservable(onNext(215, new TimeInterval("hat", TimeSpan.fromTicks(20))), onNext(217, new TimeInterval("bat", TimeSpan.fromTicks(1))), onNext(290, new TimeInterval("wag", TimeSpan.fromTicks(200))), onNext(300, new TimeInterval("pig", TimeSpan.fromTicks(10))), onNext(305, new TimeInterval("cup", TimeSpan.fromTicks(50))), onNext(600, new TimeInterval("yak", TimeSpan.fromTicks(90))), onNext(702, new TimeInterval("tin", TimeSpan.fromTicks(19))), onNext(712, new TimeInterval("man", TimeSpan.fromTicks(10))), onNext(722, new TimeInterval("rat", TimeSpan.fromTicks(200))), onNext(732, new TimeInterval("wig", TimeSpan.fromTicks(5))), onCompleted(800));
  363. results = scheduler.startWithCreate(function () {
  364. return xs.groupJoin(ys, function (x) {
  365. return Observable.timer(x.interval, undefined, scheduler);
  366. }, function (y) {
  367. return Observable.timer(y.interval, undefined, scheduler).selectMany(y.value === "tin" ? Observable.throwException(ex) : Observable.empty());
  368. }, function (x, yy) {
  369. return yy.select(function (y) {
  370. return x.value + y.value;
  371. });
  372. }).mergeObservable();
  373. });
  374. results.messages.assertEqual(onNext(215, "0hat"), onNext(217, "0bat"), onNext(219, "1hat"), onNext(300, "3wag"), onNext(300, "3pig"), onNext(305, "3cup"), onNext(310, "4wag"), onNext(310, "4pig"), onNext(310, "4cup"), onNext(702, "6tin"), onNext(710, "7tin"), onNext(712, "7man"), onNext(712, "6man"), onNext(720, "8tin"), onNext(720, "8man"), onError(721, ex));
  375. });
  376. test('GroupJoinOp_Error_V', function () {
  377. var ex, results, scheduler, xs, ys;
  378. ex = 'ex';
  379. scheduler = new TestScheduler();
  380. xs = scheduler.createHotObservable(onNext(210, new TimeInterval(0, TimeSpan.fromTicks(10))), onNext(219, new TimeInterval(1, TimeSpan.fromTicks(5))), onNext(240, new TimeInterval(2, TimeSpan.fromTicks(10))), onNext(300, new TimeInterval(3, TimeSpan.fromTicks(100))), onNext(310, new TimeInterval(4, TimeSpan.fromTicks(80))), onNext(500, new TimeInterval(5, TimeSpan.fromTicks(90))), onNext(700, new TimeInterval(6, TimeSpan.fromTicks(25))), onNext(710, new TimeInterval(7, TimeSpan.fromTicks(300))), onNext(720, new TimeInterval(8, TimeSpan.fromTicks(100))), onNext(830, new TimeInterval(9, TimeSpan.fromTicks(10))), onCompleted(900));
  381. ys = scheduler.createHotObservable(onNext(215, new TimeInterval("hat", TimeSpan.fromTicks(20))), onNext(217, new TimeInterval("bat", TimeSpan.fromTicks(1))), onNext(290, new TimeInterval("wag", TimeSpan.fromTicks(200))), onNext(300, new TimeInterval("pig", TimeSpan.fromTicks(10))), onNext(305, new TimeInterval("cup", TimeSpan.fromTicks(50))), onNext(600, new TimeInterval("yak", TimeSpan.fromTicks(90))), onNext(702, new TimeInterval("tin", TimeSpan.fromTicks(20))), onNext(712, new TimeInterval("man", TimeSpan.fromTicks(10))), onNext(722, new TimeInterval("rat", TimeSpan.fromTicks(200))), onNext(732, new TimeInterval("wig", TimeSpan.fromTicks(5))), onCompleted(800));
  382. results = scheduler.startWithCreate(function () {
  383. return xs.groupJoin(ys, function (x) {
  384. if (x.value >= 0) {
  385. throw ex;
  386. } else {
  387. return Observable.empty();
  388. }
  389. }, function (y) {
  390. return Observable.timer(y.interval, undefined, scheduler);
  391. }, function (x, yy) {
  392. return yy.select(function (y) {
  393. return x.value + y.value;
  394. });
  395. }).mergeObservable();
  396. });
  397. results.messages.assertEqual(onError(210, ex));
  398. });
  399. test('GroupJoinOp_Error_VI', function () {
  400. var ex, results, scheduler, xs, ys;
  401. ex = 'ex';
  402. scheduler = new TestScheduler();
  403. xs = scheduler.createHotObservable(onNext(210, new TimeInterval(0, TimeSpan.fromTicks(10))), onNext(219, new TimeInterval(1, TimeSpan.fromTicks(5))), onNext(240, new TimeInterval(2, TimeSpan.fromTicks(10))), onNext(300, new TimeInterval(3, TimeSpan.fromTicks(100))), onNext(310, new TimeInterval(4, TimeSpan.fromTicks(80))), onNext(500, new TimeInterval(5, TimeSpan.fromTicks(90))), onNext(700, new TimeInterval(6, TimeSpan.fromTicks(25))), onNext(710, new TimeInterval(7, TimeSpan.fromTicks(300))), onNext(720, new TimeInterval(8, TimeSpan.fromTicks(100))), onNext(830, new TimeInterval(9, TimeSpan.fromTicks(10))), onCompleted(900));
  404. ys = scheduler.createHotObservable(onNext(215, new TimeInterval("hat", TimeSpan.fromTicks(20))), onNext(217, new TimeInterval("bat", TimeSpan.fromTicks(1))), onNext(290, new TimeInterval("wag", TimeSpan.fromTicks(200))), onNext(300, new TimeInterval("pig", TimeSpan.fromTicks(10))), onNext(305, new TimeInterval("cup", TimeSpan.fromTicks(50))), onNext(600, new TimeInterval("yak", TimeSpan.fromTicks(90))), onNext(702, new TimeInterval("tin", TimeSpan.fromTicks(20))), onNext(712, new TimeInterval("man", TimeSpan.fromTicks(10))), onNext(722, new TimeInterval("rat", TimeSpan.fromTicks(200))), onNext(732, new TimeInterval("wig", TimeSpan.fromTicks(5))), onCompleted(800));
  405. results = scheduler.startWithCreate(function () {
  406. return xs.groupJoin(ys, function (x) {
  407. return Observable.timer(x.interval, undefined, scheduler);
  408. }, function (y) {
  409. if (y.value.length >= 0) {
  410. throw ex;
  411. } else {
  412. return Observable.empty();
  413. }
  414. }, function (x, yy) {
  415. return yy.select(function (y) {
  416. return x.value + y.value;
  417. });
  418. }).mergeObservable();
  419. });
  420. results.messages.assertEqual(onError(215, ex));
  421. });
  422. test('GroupJoinOp_Error_VII', function () {
  423. var ex, results, scheduler, xs, ys;
  424. ex = 'ex';
  425. scheduler = new TestScheduler();
  426. xs = scheduler.createHotObservable(onNext(215, new TimeInterval(0, TimeSpan.fromTicks(10))), onNext(219, new TimeInterval(1, TimeSpan.fromTicks(5))), onNext(240, new TimeInterval(2, TimeSpan.fromTicks(10))), onNext(300, new TimeInterval(3, TimeSpan.fromTicks(100))), onNext(310, new TimeInterval(4, TimeSpan.fromTicks(80))), onNext(500, new TimeInterval(5, TimeSpan.fromTicks(90))), onNext(700, new TimeInterval(6, TimeSpan.fromTicks(25))), onNext(710, new TimeInterval(7, TimeSpan.fromTicks(300))), onNext(720, new TimeInterval(8, TimeSpan.fromTicks(100))), onNext(830, new TimeInterval(9, TimeSpan.fromTicks(10))), onCompleted(900));
  427. ys = scheduler.createHotObservable(onNext(210, new TimeInterval("hat", TimeSpan.fromTicks(20))), onNext(217, new TimeInterval("bat", TimeSpan.fromTicks(1))), onNext(290, new TimeInterval("wag", TimeSpan.fromTicks(200))), onNext(300, new TimeInterval("pig", TimeSpan.fromTicks(10))), onNext(305, new TimeInterval("cup", TimeSpan.fromTicks(50))), onNext(600, new TimeInterval("yak", TimeSpan.fromTicks(90))), onNext(702, new TimeInterval("tin", TimeSpan.fromTicks(20))), onNext(712, new TimeInterval("man", TimeSpan.fromTicks(10))), onNext(722, new TimeInterval("rat", TimeSpan.fromTicks(200))), onNext(732, new TimeInterval("wig", TimeSpan.fromTicks(5))), onCompleted(800));
  428. results = scheduler.startWithCreate(function () {
  429. return xs.groupJoin(ys, function (x) {
  430. return Observable.timer(x.interval, undefined, scheduler);
  431. }, function (y) {
  432. return Observable.timer(y.interval, undefined, scheduler);
  433. }, function (x, yy) {
  434. if (x.value >= 0) {
  435. throw ex;
  436. } else {
  437. return yy.select(function (y) {
  438. return x.value + y.value;
  439. });
  440. }
  441. }).mergeObservable();
  442. });
  443. results.messages.assertEqual(onError(215, ex));
  444. });
  445. test('GroupJoinOp_Error_VIII', function () {
  446. var ex, results, scheduler, xs, ys;
  447. ex = 'ex';
  448. scheduler = new TestScheduler();
  449. xs = scheduler.createHotObservable(onNext(210, new TimeInterval(0, TimeSpan.fromTicks(10))), onNext(219, new TimeInterval(1, TimeSpan.fromTicks(5))), onNext(240, new TimeInterval(2, TimeSpan.fromTicks(10))), onNext(300, new TimeInterval(3, TimeSpan.fromTicks(100))), onNext(310, new TimeInterval(4, TimeSpan.fromTicks(80))), onNext(500, new TimeInterval(5, TimeSpan.fromTicks(90))), onNext(700, new TimeInterval(6, TimeSpan.fromTicks(25))), onNext(710, new TimeInterval(7, TimeSpan.fromTicks(300))), onNext(720, new TimeInterval(8, TimeSpan.fromTicks(100))), onNext(830, new TimeInterval(9, TimeSpan.fromTicks(10))), onCompleted(900));
  450. ys = scheduler.createHotObservable(onNext(215, new TimeInterval("hat", TimeSpan.fromTicks(20))), onNext(217, new TimeInterval("bat", TimeSpan.fromTicks(1))), onNext(290, new TimeInterval("wag", TimeSpan.fromTicks(200))), onNext(300, new TimeInterval("pig", TimeSpan.fromTicks(10))), onNext(305, new TimeInterval("cup", TimeSpan.fromTicks(50))), onNext(600, new TimeInterval("yak", TimeSpan.fromTicks(90))), onNext(702, new TimeInterval("tin", TimeSpan.fromTicks(20))), onNext(712, new TimeInterval("man", TimeSpan.fromTicks(10))), onNext(722, new TimeInterval("rat", TimeSpan.fromTicks(200))), onNext(732, new TimeInterval("wig", TimeSpan.fromTicks(5))), onCompleted(800));
  451. results = scheduler.startWithCreate(function () {
  452. return xs.groupJoin(ys, function (x) {
  453. return Observable.timer(x.interval, undefined, scheduler);
  454. }, function (y) {
  455. return Observable.timer(y.interval, undefined, scheduler);
  456. }, function (x, yy) {
  457. if (x.value >= 0) {
  458. throw ex;
  459. } else {
  460. return yy.select(function (y) {
  461. return x.value + y.value;
  462. });
  463. }
  464. }).mergeObservable();
  465. });
  466. results.messages.assertEqual(onError(210, ex));
  467. });