FromAsyncPatternTest.cs 56 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192
  1. // Licensed to the .NET Foundation under one or more agreements.
  2. // The .NET Foundation licenses this file to you under the Apache 2.0 License.
  3. // See the LICENSE file in the project root for more information.
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Reactive;
  10. using System.Reactive.Concurrency;
  11. using System.Reactive.Linq;
  12. using Microsoft.Reactive.Testing;
  13. using Xunit;
  14. using ReactiveTests.Dummies;
  15. using System.Reflection;
  16. namespace ReactiveTests.Tests
  17. {
  18. public class FromAsyncPatternTest : ReactiveTest
  19. {
  20. private Task<int> doneTask;
  21. public FromAsyncPatternTest()
  22. {
  23. var tcs = new TaskCompletionSource<int>();
  24. tcs.SetResult(42);
  25. doneTask = tcs.Task;
  26. }
  27. [Fact]
  28. public void FromAsyncPattern_ArgumentChecking()
  29. {
  30. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern(null, iar => { }));
  31. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int>(null, iar => 0));
  32. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int>(null, iar => { }));
  33. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int>(null, iar => 0));
  34. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int>(null, iar => { }));
  35. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int>(null, iar => 0));
  36. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int>(null, iar => { }));
  37. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int>(null, iar => 0));
  38. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int>(null, iar => { }));
  39. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int>(null, iar => 0));
  40. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int>(null, iar => { }));
  41. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int>(null, iar => 0));
  42. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int>(null, iar => { }));
  43. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int>(null, iar => 0));
  44. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int>(null, iar => { }));
  45. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int>(null, iar => 0));
  46. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int>(null, iar => { }));
  47. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int>(null, iar => 0));
  48. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int>(null, iar => { }));
  49. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int>(null, iar => 0));
  50. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int>(null, iar => { }));
  51. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int, int>(null, iar => 0));
  52. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int, int>(null, iar => { }));
  53. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int, int, int>(null, iar => 0));
  54. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int, int, int>(null, iar => { }));
  55. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int, int, int, int>(null, iar => 0));
  56. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int, int, int, int>(null, iar => { }));
  57. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int, int, int, int, int>(null, iar => 0));
  58. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int, int, int, int, int>(null, iar => { }));
  59. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>(null, iar => 0));
  60. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern((cb, o) => null, default(Action<IAsyncResult>)));
  61. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int>((cb, o) => null, default(Func<IAsyncResult, int>)));
  62. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int>((a, cb, o) => null, default(Action<IAsyncResult>)));
  63. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int>((a, cb, o) => null, default(Func<IAsyncResult, int>)));
  64. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int>((a, b, cb, o) => null, default(Action<IAsyncResult>)));
  65. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int>((a, b, cb, o) => null, default(Func<IAsyncResult, int>)));
  66. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int>((a, b, c, cb, o) => null, default(Action<IAsyncResult>)));
  67. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int>((a, b, c, cb, o) => null, default(Func<IAsyncResult, int>)));
  68. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int>((a, b, c, d, cb, o) => null, default(Action<IAsyncResult>)));
  69. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int>((a, b, c, d, cb, o) => null, default(Func<IAsyncResult, int>)));
  70. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int>((a, b, c, d, e, cb, o) => null, default(Action<IAsyncResult>)));
  71. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int>((a, b, c, d, e, cb, o) => null, default(Func<IAsyncResult, int>)));
  72. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int>((a, b, c, d, e, f, cb, o) => null, default(Action<IAsyncResult>)));
  73. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int>((a, b, c, d, e, f, cb, o) => null, default(Func<IAsyncResult, int>)));
  74. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int>((a, b, c, d, e, f, g, cb, o) => null, default(Action<IAsyncResult>)));
  75. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, cb, o) => null, default(Func<IAsyncResult, int>)));
  76. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, cb, o) => null, default(Action<IAsyncResult>)));
  77. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, cb, o) => null, default(Func<IAsyncResult, int>)));
  78. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, cb, o) => null, default(Action<IAsyncResult>)));
  79. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, cb, o) => null, default(Func<IAsyncResult, int>)));
  80. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, cb, o) => null, default(Action<IAsyncResult>)));
  81. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, cb, o) => null, default(Func<IAsyncResult, int>)));
  82. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, cb, o) => null, default(Action<IAsyncResult>)));
  83. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, cb, o) => null, default(Func<IAsyncResult, int>)));
  84. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l, cb, o) => null, default(Action<IAsyncResult>)));
  85. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l, cb, o) => null, default(Func<IAsyncResult, int>)));
  86. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l, m, cb, o) => null, default(Action<IAsyncResult>)));
  87. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l, m, cb, o) => null, default(Func<IAsyncResult, int>)));
  88. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l, m, n, cb, o) => null, default(Action<IAsyncResult>)));
  89. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l, m, n, cb, o) => null, default(Func<IAsyncResult, int>)));
  90. }
  91. [Fact]
  92. public void FromAsyncPattern0()
  93. {
  94. var x = new Result();
  95. Func<AsyncCallback, object, IAsyncResult> begin = (cb, _) => { cb(x); return x; };
  96. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 1; };
  97. var res = Observable.FromAsyncPattern(begin, end)().Materialize().ToEnumerable().ToArray();
  98. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  99. }
  100. [Fact]
  101. public void FromAsyncPatternAction0()
  102. {
  103. var x = new Result();
  104. Func<AsyncCallback, object, IAsyncResult> begin = (cb, _) => { cb(x); return x; };
  105. Action<IAsyncResult> end = iar => { Assert.Same(x, iar); };
  106. var res = Observable.FromAsyncPattern(begin, end)().ToEnumerable().ToArray();
  107. Assert.True(res.SequenceEqual(new[] { new Unit() }));
  108. }
  109. [Fact]
  110. public void FromAsyncPattern0_Error()
  111. {
  112. var x = new Result();
  113. var ex = new Exception();
  114. Func<AsyncCallback, object, IAsyncResult> begin = (cb, _) => { cb(x); return x; };
  115. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); throw ex; };
  116. var res = Observable.FromAsyncPattern(begin, end)().Materialize().ToEnumerable().ToArray();
  117. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  118. }
  119. [Fact]
  120. public void FromAsyncPattern0_ErrorBegin()
  121. {
  122. var x = new Result();
  123. var ex = new Exception();
  124. Func<AsyncCallback, object, IAsyncResult> begin = (cb, _) => { cb(x); throw ex; };
  125. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 0; };
  126. var res = Observable.FromAsyncPattern(begin, end)().Materialize().ToEnumerable().ToArray();
  127. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  128. }
  129. [Fact]
  130. public void FromAsyncPattern1()
  131. {
  132. var x = new Result();
  133. Func<int, AsyncCallback, object, IAsyncResult> begin = (a, cb, _) =>
  134. {
  135. Assert.Equal(a, 2);
  136. cb(x);
  137. return x;
  138. };
  139. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 1; };
  140. var res = Observable.FromAsyncPattern(begin, end)(2).Materialize().ToEnumerable().ToArray();
  141. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  142. }
  143. [Fact]
  144. public void FromAsyncPatternAction1()
  145. {
  146. var x = new Result();
  147. Func<int, AsyncCallback, object, IAsyncResult> begin = (a, cb, _) =>
  148. {
  149. Assert.Equal(a, 2);
  150. cb(x);
  151. return x;
  152. };
  153. Action<IAsyncResult> end = iar => { Assert.Same(x, iar); };
  154. var res = Observable.FromAsyncPattern(begin, end)(2).ToEnumerable().ToArray();
  155. Assert.True(res.SequenceEqual(new[] { new Unit() }));
  156. }
  157. [Fact]
  158. public void FromAsyncPattern1_Error()
  159. {
  160. var x = new Result();
  161. var ex = new Exception();
  162. Func<int, AsyncCallback, object, IAsyncResult> begin = (a, cb, o) => { cb(x); return x; };
  163. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); throw ex; };
  164. var res = Observable.FromAsyncPattern(begin, end)(2).Materialize().ToEnumerable().ToArray();
  165. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  166. }
  167. [Fact]
  168. public void FromAsyncPattern1_ErrorBegin()
  169. {
  170. var x = new Result();
  171. var ex = new Exception();
  172. Func<int, AsyncCallback, object, IAsyncResult> begin = (a, cb, o) => { cb(x); throw ex; };
  173. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 0; };
  174. var res = Observable.FromAsyncPattern(begin, end)(2).Materialize().ToEnumerable().ToArray();
  175. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  176. }
  177. [Fact]
  178. public void FromAsyncPattern2()
  179. {
  180. var x = new Result();
  181. Func<int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, cb, _) =>
  182. {
  183. Assert.Equal(a, 2);
  184. Assert.Equal(b, 3);
  185. cb(x);
  186. return x;
  187. };
  188. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 1; };
  189. var res = Observable.FromAsyncPattern(begin, end)(2, 3).Materialize().ToEnumerable().ToArray();
  190. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  191. }
  192. [Fact]
  193. public void FromAsyncPatternAction2()
  194. {
  195. var x = new Result();
  196. Func<int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, cb, _) =>
  197. {
  198. Assert.Equal(a, 2);
  199. Assert.Equal(b, 3);
  200. cb(x);
  201. return x;
  202. };
  203. Action<IAsyncResult> end = iar => { Assert.Same(x, iar); };
  204. var res = Observable.FromAsyncPattern(begin, end)(2, 3).ToEnumerable().ToArray();
  205. Assert.True(res.SequenceEqual(new[] { new Unit() }));
  206. }
  207. [Fact]
  208. public void FromAsyncPattern2_Error()
  209. {
  210. var x = new Result();
  211. var ex = new Exception();
  212. Func<int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, cb, o) => { cb(x); return x; };
  213. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); throw ex; };
  214. var res = Observable.FromAsyncPattern(begin, end)(2, 3).Materialize().ToEnumerable().ToArray();
  215. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  216. }
  217. [Fact]
  218. public void FromAsyncPattern2_ErrorBegin()
  219. {
  220. var x = new Result();
  221. var ex = new Exception();
  222. Func<int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, cb, o) => { cb(x); throw ex; };
  223. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 0; };
  224. var res = Observable.FromAsyncPattern(begin, end)(2, 3).Materialize().ToEnumerable().ToArray();
  225. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  226. }
  227. [Fact]
  228. public void FromAsyncPattern3()
  229. {
  230. var x = new Result();
  231. Func<int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, cb, _) =>
  232. {
  233. Assert.Equal(a, 2);
  234. Assert.Equal(b, 3);
  235. Assert.Equal(c, 4);
  236. cb(x);
  237. return x;
  238. };
  239. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 1; };
  240. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4).Materialize().ToEnumerable().ToArray();
  241. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  242. }
  243. [Fact]
  244. public void FromAsyncPatternAction3()
  245. {
  246. var x = new Result();
  247. Func<int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, cb, _) =>
  248. {
  249. Assert.Equal(a, 2);
  250. Assert.Equal(b, 3);
  251. Assert.Equal(c, 4);
  252. cb(x);
  253. return x;
  254. };
  255. Action<IAsyncResult> end = iar => { Assert.Same(x, iar); };
  256. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4).ToEnumerable().ToArray();
  257. Assert.True(res.SequenceEqual(new[] { new Unit() }));
  258. }
  259. [Fact]
  260. public void FromAsyncPattern3_Error()
  261. {
  262. var x = new Result();
  263. var ex = new Exception();
  264. Func<int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, cb, o) => { cb(x); return x; };
  265. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); throw ex; };
  266. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4).Materialize().ToEnumerable().ToArray();
  267. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  268. }
  269. [Fact]
  270. public void FromAsyncPattern3_ErrorBegin()
  271. {
  272. var x = new Result();
  273. var ex = new Exception();
  274. Func<int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, cb, o) => { cb(x); throw ex; };
  275. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 0; };
  276. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4).Materialize().ToEnumerable().ToArray();
  277. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  278. }
  279. [Fact]
  280. public void FromAsyncPattern4()
  281. {
  282. var x = new Result();
  283. Func<int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, cb, _) =>
  284. {
  285. Assert.Equal(a, 2);
  286. Assert.Equal(b, 3);
  287. Assert.Equal(c, 4);
  288. Assert.Equal(d, 5);
  289. cb(x);
  290. return x;
  291. };
  292. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 1; };
  293. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5).Materialize().ToEnumerable().ToArray();
  294. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  295. }
  296. [Fact]
  297. public void FromAsyncPatternAction4()
  298. {
  299. var x = new Result();
  300. Func<int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, cb, _) =>
  301. {
  302. Assert.Equal(a, 2);
  303. Assert.Equal(b, 3);
  304. Assert.Equal(c, 4);
  305. Assert.Equal(d, 5);
  306. cb(x);
  307. return x;
  308. };
  309. Action<IAsyncResult> end = iar => { Assert.Same(x, iar); };
  310. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5).ToEnumerable().ToArray();
  311. Assert.True(res.SequenceEqual(new[] { new Unit() }));
  312. }
  313. [Fact]
  314. public void FromAsyncPattern4_Error()
  315. {
  316. var x = new Result();
  317. var ex = new Exception();
  318. Func<int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, cb, o) => { cb(x); return x; };
  319. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); throw ex; };
  320. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5).Materialize().ToEnumerable().ToArray();
  321. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  322. }
  323. [Fact]
  324. public void FromAsyncPattern4_ErrorBegin()
  325. {
  326. var x = new Result();
  327. var ex = new Exception();
  328. Func<int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, cb, o) => { cb(x); throw ex; };
  329. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 0; };
  330. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5).Materialize().ToEnumerable().ToArray();
  331. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  332. }
  333. [Fact]
  334. public void FromAsyncPattern5()
  335. {
  336. var x = new Result();
  337. Func<int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, cb, _) =>
  338. {
  339. Assert.Equal(a, 2);
  340. Assert.Equal(b, 3);
  341. Assert.Equal(c, 4);
  342. Assert.Equal(d, 5);
  343. Assert.Equal(e, 6);
  344. cb(x);
  345. return x;
  346. };
  347. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 1; };
  348. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6).Materialize().ToEnumerable().ToArray();
  349. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  350. }
  351. [Fact]
  352. public void FromAsyncPatternAction5()
  353. {
  354. var x = new Result();
  355. Func<int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, cb, _) =>
  356. {
  357. Assert.Equal(a, 2);
  358. Assert.Equal(b, 3);
  359. Assert.Equal(c, 4);
  360. Assert.Equal(d, 5);
  361. Assert.Equal(e, 6);
  362. cb(x);
  363. return x;
  364. };
  365. Action<IAsyncResult> end = iar => { Assert.Same(x, iar); };
  366. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6).ToEnumerable().ToArray();
  367. Assert.True(res.SequenceEqual(new[] { new Unit() }));
  368. }
  369. [Fact]
  370. public void FromAsyncPattern5_Error()
  371. {
  372. var x = new Result();
  373. var ex = new Exception();
  374. Func<int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, cb, o) => { cb(x); return x; };
  375. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); throw ex; };
  376. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6).Materialize().ToEnumerable().ToArray();
  377. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  378. }
  379. [Fact]
  380. public void FromAsyncPattern5_ErrorBegin()
  381. {
  382. var x = new Result();
  383. var ex = new Exception();
  384. Func<int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, cb, o) => { cb(x); throw ex; };
  385. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 0; };
  386. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6).Materialize().ToEnumerable().ToArray();
  387. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  388. }
  389. [Fact]
  390. public void FromAsyncPattern6()
  391. {
  392. var x = new Result();
  393. Func<int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, cb, _) =>
  394. {
  395. Assert.Equal(a, 2);
  396. Assert.Equal(b, 3);
  397. Assert.Equal(c, 4);
  398. Assert.Equal(d, 5);
  399. Assert.Equal(e, 6);
  400. Assert.Equal(f, 7);
  401. cb(x);
  402. return x;
  403. };
  404. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 1; };
  405. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7).Materialize().ToEnumerable().ToArray();
  406. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  407. }
  408. [Fact]
  409. public void FromAsyncPatternAction6()
  410. {
  411. var x = new Result();
  412. Func<int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, cb, _) =>
  413. {
  414. Assert.Equal(a, 2);
  415. Assert.Equal(b, 3);
  416. Assert.Equal(c, 4);
  417. Assert.Equal(d, 5);
  418. Assert.Equal(e, 6);
  419. Assert.Equal(f, 7);
  420. cb(x);
  421. return x;
  422. };
  423. Action<IAsyncResult> end = iar => { Assert.Same(x, iar); };
  424. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7).ToEnumerable().ToArray();
  425. Assert.True(res.SequenceEqual(new[] { new Unit() }));
  426. }
  427. [Fact]
  428. public void FromAsyncPattern6_Error()
  429. {
  430. var x = new Result();
  431. var ex = new Exception();
  432. Func<int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, cb, o) => { cb(x); return x; };
  433. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); throw ex; };
  434. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7).Materialize().ToEnumerable().ToArray();
  435. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  436. }
  437. [Fact]
  438. public void FromAsyncPattern6_ErrorBegin()
  439. {
  440. var x = new Result();
  441. var ex = new Exception();
  442. Func<int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, cb, o) => { cb(x); throw ex; };
  443. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 0; };
  444. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7).Materialize().ToEnumerable().ToArray();
  445. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  446. }
  447. [Fact]
  448. public void FromAsyncPattern7()
  449. {
  450. var x = new Result();
  451. Func<int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, cb, _) =>
  452. {
  453. Assert.Equal(a, 2);
  454. Assert.Equal(b, 3);
  455. Assert.Equal(c, 4);
  456. Assert.Equal(d, 5);
  457. Assert.Equal(e, 6);
  458. Assert.Equal(f, 7);
  459. Assert.Equal(g, 8);
  460. cb(x);
  461. return x;
  462. };
  463. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 1; };
  464. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8).Materialize().ToEnumerable().ToArray();
  465. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  466. }
  467. [Fact]
  468. public void FromAsyncPatternAction7()
  469. {
  470. var x = new Result();
  471. Func<int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, cb, _) =>
  472. {
  473. Assert.Equal(a, 2);
  474. Assert.Equal(b, 3);
  475. Assert.Equal(c, 4);
  476. Assert.Equal(d, 5);
  477. Assert.Equal(e, 6);
  478. Assert.Equal(f, 7);
  479. Assert.Equal(g, 8);
  480. cb(x);
  481. return x;
  482. };
  483. Action<IAsyncResult> end = iar => { Assert.Same(x, iar); };
  484. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8).ToEnumerable().ToArray();
  485. Assert.True(res.SequenceEqual(new[] { new Unit() }));
  486. }
  487. [Fact]
  488. public void FromAsyncPattern7_Error()
  489. {
  490. var x = new Result();
  491. var ex = new Exception();
  492. Func<int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, cb, o) => { cb(x); return x; };
  493. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); throw ex; };
  494. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8).Materialize().ToEnumerable().ToArray();
  495. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  496. }
  497. [Fact]
  498. public void FromAsyncPattern7_ErrorBegin()
  499. {
  500. var x = new Result();
  501. var ex = new Exception();
  502. Func<int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, cb, o) => { cb(x); throw ex; };
  503. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 0; };
  504. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8).Materialize().ToEnumerable().ToArray();
  505. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  506. }
  507. [Fact]
  508. public void FromAsyncPattern8()
  509. {
  510. var x = new Result();
  511. Func<int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, cb, _) =>
  512. {
  513. Assert.Equal(a, 2);
  514. Assert.Equal(b, 3);
  515. Assert.Equal(c, 4);
  516. Assert.Equal(d, 5);
  517. Assert.Equal(e, 6);
  518. Assert.Equal(f, 7);
  519. Assert.Equal(g, 8);
  520. Assert.Equal(h, 9);
  521. cb(x);
  522. return x;
  523. };
  524. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 1; };
  525. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9).Materialize().ToEnumerable().ToArray();
  526. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  527. }
  528. [Fact]
  529. public void FromAsyncPatternAction8()
  530. {
  531. var x = new Result();
  532. Func<int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, cb, _) =>
  533. {
  534. Assert.Equal(a, 2);
  535. Assert.Equal(b, 3);
  536. Assert.Equal(c, 4);
  537. Assert.Equal(d, 5);
  538. Assert.Equal(e, 6);
  539. Assert.Equal(f, 7);
  540. Assert.Equal(g, 8);
  541. Assert.Equal(h, 9);
  542. cb(x);
  543. return x;
  544. };
  545. Action<IAsyncResult> end = iar => { Assert.Same(x, iar); };
  546. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9).ToEnumerable().ToArray();
  547. Assert.True(res.SequenceEqual(new[] { new Unit() }));
  548. }
  549. [Fact]
  550. public void FromAsyncPattern8_Error()
  551. {
  552. var x = new Result();
  553. var ex = new Exception();
  554. Func<int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, cb, o) => { cb(x); return x; };
  555. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); throw ex; };
  556. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9).Materialize().ToEnumerable().ToArray();
  557. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  558. }
  559. [Fact]
  560. public void FromAsyncPattern8_ErrorBegin()
  561. {
  562. var x = new Result();
  563. var ex = new Exception();
  564. Func<int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, cb, o) => { cb(x); throw ex; };
  565. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 0; };
  566. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9).Materialize().ToEnumerable().ToArray();
  567. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  568. }
  569. [Fact]
  570. public void FromAsyncPattern9()
  571. {
  572. var x = new Result();
  573. Func<int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, cb, _) =>
  574. {
  575. Assert.Equal(a, 2);
  576. Assert.Equal(b, 3);
  577. Assert.Equal(c, 4);
  578. Assert.Equal(d, 5);
  579. Assert.Equal(e, 6);
  580. Assert.Equal(f, 7);
  581. Assert.Equal(g, 8);
  582. Assert.Equal(h, 9);
  583. Assert.Equal(i, 10);
  584. cb(x);
  585. return x;
  586. };
  587. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 1; };
  588. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10).Materialize().ToEnumerable().ToArray();
  589. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  590. }
  591. [Fact]
  592. public void FromAsyncPatternAction9()
  593. {
  594. var x = new Result();
  595. Func<int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, cb, _) =>
  596. {
  597. Assert.Equal(a, 2);
  598. Assert.Equal(b, 3);
  599. Assert.Equal(c, 4);
  600. Assert.Equal(d, 5);
  601. Assert.Equal(e, 6);
  602. Assert.Equal(f, 7);
  603. Assert.Equal(g, 8);
  604. Assert.Equal(h, 9);
  605. Assert.Equal(i, 10);
  606. cb(x);
  607. return x;
  608. };
  609. Action<IAsyncResult> end = iar => { Assert.Same(x, iar); };
  610. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10).ToEnumerable().ToArray();
  611. Assert.True(res.SequenceEqual(new[] { new Unit() }));
  612. }
  613. [Fact]
  614. public void FromAsyncPattern9_Error()
  615. {
  616. var x = new Result();
  617. var ex = new Exception();
  618. Func<int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, cb, o) => { cb(x); return x; };
  619. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); throw ex; };
  620. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10).Materialize().ToEnumerable().ToArray();
  621. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  622. }
  623. [Fact]
  624. public void FromAsyncPattern9_ErrorBegin()
  625. {
  626. var x = new Result();
  627. var ex = new Exception();
  628. Func<int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, cb, o) => { cb(x); throw ex; };
  629. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 0; };
  630. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10).Materialize().ToEnumerable().ToArray();
  631. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  632. }
  633. [Fact]
  634. public void FromAsyncPattern10()
  635. {
  636. var x = new Result();
  637. Func<int, int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, j, cb, _) =>
  638. {
  639. Assert.Equal(a, 2);
  640. Assert.Equal(b, 3);
  641. Assert.Equal(c, 4);
  642. Assert.Equal(d, 5);
  643. Assert.Equal(e, 6);
  644. Assert.Equal(f, 7);
  645. Assert.Equal(g, 8);
  646. Assert.Equal(h, 9);
  647. Assert.Equal(i, 10);
  648. Assert.Equal(j, 11);
  649. cb(x);
  650. return x;
  651. };
  652. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 1; };
  653. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11).Materialize().ToEnumerable().ToArray();
  654. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  655. }
  656. [Fact]
  657. public void FromAsyncPatternAction10()
  658. {
  659. var x = new Result();
  660. Func<int, int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, j, cb, _) =>
  661. {
  662. Assert.Equal(a, 2);
  663. Assert.Equal(b, 3);
  664. Assert.Equal(c, 4);
  665. Assert.Equal(d, 5);
  666. Assert.Equal(e, 6);
  667. Assert.Equal(f, 7);
  668. Assert.Equal(g, 8);
  669. Assert.Equal(h, 9);
  670. Assert.Equal(i, 10);
  671. Assert.Equal(j, 11);
  672. cb(x);
  673. return x;
  674. };
  675. Action<IAsyncResult> end = iar => { Assert.Same(x, iar); };
  676. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11).ToEnumerable().ToArray();
  677. Assert.True(res.SequenceEqual(new[] { new Unit() }));
  678. }
  679. [Fact]
  680. public void FromAsyncPattern10_Error()
  681. {
  682. var x = new Result();
  683. var ex = new Exception();
  684. Func<int, int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, j, cb, o) => { cb(x); return x; };
  685. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); throw ex; };
  686. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11).Materialize().ToEnumerable().ToArray();
  687. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  688. }
  689. [Fact]
  690. public void FromAsyncPattern10_ErrorBegin()
  691. {
  692. var x = new Result();
  693. var ex = new Exception();
  694. Func<int, int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, j, cb, o) => { cb(x); throw ex; };
  695. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 0; };
  696. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11).Materialize().ToEnumerable().ToArray();
  697. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  698. }
  699. [Fact]
  700. public void FromAsyncPattern11()
  701. {
  702. var x = new Result();
  703. Func<int, int, int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, j, k, cb, _) =>
  704. {
  705. Assert.Equal(a, 2);
  706. Assert.Equal(b, 3);
  707. Assert.Equal(c, 4);
  708. Assert.Equal(d, 5);
  709. Assert.Equal(e, 6);
  710. Assert.Equal(f, 7);
  711. Assert.Equal(g, 8);
  712. Assert.Equal(h, 9);
  713. Assert.Equal(i, 10);
  714. Assert.Equal(j, 11);
  715. Assert.Equal(k, 12);
  716. cb(x);
  717. return x;
  718. };
  719. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 1; };
  720. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12).Materialize().ToEnumerable().ToArray();
  721. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  722. }
  723. [Fact]
  724. public void FromAsyncPatternAction11()
  725. {
  726. var x = new Result();
  727. Func<int, int, int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, j, k, cb, _) =>
  728. {
  729. Assert.Equal(a, 2);
  730. Assert.Equal(b, 3);
  731. Assert.Equal(c, 4);
  732. Assert.Equal(d, 5);
  733. Assert.Equal(e, 6);
  734. Assert.Equal(f, 7);
  735. Assert.Equal(g, 8);
  736. Assert.Equal(h, 9);
  737. Assert.Equal(i, 10);
  738. Assert.Equal(j, 11);
  739. Assert.Equal(k, 12);
  740. cb(x);
  741. return x;
  742. };
  743. Action<IAsyncResult> end = iar => { Assert.Same(x, iar); };
  744. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12).ToEnumerable().ToArray();
  745. Assert.True(res.SequenceEqual(new[] { new Unit() }));
  746. }
  747. [Fact]
  748. public void FromAsyncPattern11_Error()
  749. {
  750. var x = new Result();
  751. var ex = new Exception();
  752. Func<int, int, int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, j, k, cb, o) => { cb(x); return x; };
  753. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); throw ex; };
  754. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12).Materialize().ToEnumerable().ToArray();
  755. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  756. }
  757. [Fact]
  758. public void FromAsyncPattern11_ErrorBegin()
  759. {
  760. var x = new Result();
  761. var ex = new Exception();
  762. Func<int, int, int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, j, k, cb, o) => { cb(x); throw ex; };
  763. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 0; };
  764. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12).Materialize().ToEnumerable().ToArray();
  765. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  766. }
  767. [Fact]
  768. public void FromAsyncPattern12()
  769. {
  770. var x = new Result();
  771. Func<int, int, int, int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, j, k, l, cb, _) =>
  772. {
  773. Assert.Equal(a, 2);
  774. Assert.Equal(b, 3);
  775. Assert.Equal(c, 4);
  776. Assert.Equal(d, 5);
  777. Assert.Equal(e, 6);
  778. Assert.Equal(f, 7);
  779. Assert.Equal(g, 8);
  780. Assert.Equal(h, 9);
  781. Assert.Equal(i, 10);
  782. Assert.Equal(j, 11);
  783. Assert.Equal(k, 12);
  784. Assert.Equal(l, 13);
  785. cb(x);
  786. return x;
  787. };
  788. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 1; };
  789. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13).Materialize().ToEnumerable().ToArray();
  790. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  791. }
  792. [Fact]
  793. public void FromAsyncPatternAction12()
  794. {
  795. var x = new Result();
  796. Func<int, int, int, int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, j, k, l, cb, _) =>
  797. {
  798. Assert.Equal(a, 2);
  799. Assert.Equal(b, 3);
  800. Assert.Equal(c, 4);
  801. Assert.Equal(d, 5);
  802. Assert.Equal(e, 6);
  803. Assert.Equal(f, 7);
  804. Assert.Equal(g, 8);
  805. Assert.Equal(h, 9);
  806. Assert.Equal(i, 10);
  807. Assert.Equal(j, 11);
  808. Assert.Equal(k, 12);
  809. Assert.Equal(l, 13);
  810. cb(x);
  811. return x;
  812. };
  813. Action<IAsyncResult> end = iar => { Assert.Same(x, iar); };
  814. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13).ToEnumerable().ToArray();
  815. Assert.True(res.SequenceEqual(new[] { new Unit() }));
  816. }
  817. [Fact]
  818. public void FromAsyncPattern12_Error()
  819. {
  820. var x = new Result();
  821. var ex = new Exception();
  822. Func<int, int, int, int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, j, k, l, cb, o) => { cb(x); return x; };
  823. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); throw ex; };
  824. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13).Materialize().ToEnumerable().ToArray();
  825. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  826. }
  827. [Fact]
  828. public void FromAsyncPattern12_ErrorBegin()
  829. {
  830. var x = new Result();
  831. var ex = new Exception();
  832. Func<int, int, int, int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, j, k, l, cb, o) => { cb(x); throw ex; };
  833. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 0; };
  834. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13).Materialize().ToEnumerable().ToArray();
  835. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  836. }
  837. [Fact]
  838. public void FromAsyncPattern13()
  839. {
  840. var x = new Result();
  841. Func<int, int, int, int, int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, j, k, l, m, cb, _) =>
  842. {
  843. Assert.Equal(a, 2);
  844. Assert.Equal(b, 3);
  845. Assert.Equal(c, 4);
  846. Assert.Equal(d, 5);
  847. Assert.Equal(e, 6);
  848. Assert.Equal(f, 7);
  849. Assert.Equal(g, 8);
  850. Assert.Equal(h, 9);
  851. Assert.Equal(i, 10);
  852. Assert.Equal(j, 11);
  853. Assert.Equal(k, 12);
  854. Assert.Equal(l, 13);
  855. Assert.Equal(m, 14);
  856. cb(x);
  857. return x;
  858. };
  859. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 1; };
  860. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14).Materialize().ToEnumerable().ToArray();
  861. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  862. }
  863. [Fact]
  864. public void FromAsyncPatternAction13()
  865. {
  866. var x = new Result();
  867. Func<int, int, int, int, int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, j, k, l, m, cb, _) =>
  868. {
  869. Assert.Equal(a, 2);
  870. Assert.Equal(b, 3);
  871. Assert.Equal(c, 4);
  872. Assert.Equal(d, 5);
  873. Assert.Equal(e, 6);
  874. Assert.Equal(f, 7);
  875. Assert.Equal(g, 8);
  876. Assert.Equal(h, 9);
  877. Assert.Equal(i, 10);
  878. Assert.Equal(j, 11);
  879. Assert.Equal(k, 12);
  880. Assert.Equal(l, 13);
  881. Assert.Equal(m, 14);
  882. cb(x);
  883. return x;
  884. };
  885. Action<IAsyncResult> end = iar => { Assert.Same(x, iar); };
  886. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14).ToEnumerable().ToArray();
  887. Assert.True(res.SequenceEqual(new[] { new Unit() }));
  888. }
  889. [Fact]
  890. public void FromAsyncPattern13_Error()
  891. {
  892. var x = new Result();
  893. var ex = new Exception();
  894. Func<int, int, int, int, int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, j, k, l, m, cb, o) => { cb(x); return x; };
  895. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); throw ex; };
  896. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14).Materialize().ToEnumerable().ToArray();
  897. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  898. }
  899. [Fact]
  900. public void FromAsyncPattern13_ErrorBegin()
  901. {
  902. var x = new Result();
  903. var ex = new Exception();
  904. Func<int, int, int, int, int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, j, k, l, m, cb, o) => { cb(x); throw ex; };
  905. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 0; };
  906. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14).Materialize().ToEnumerable().ToArray();
  907. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  908. }
  909. [Fact]
  910. public void FromAsyncPattern14()
  911. {
  912. var x = new Result();
  913. Func<int, int, int, int, int, int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, j, k, l, m, n, cb, _) =>
  914. {
  915. Assert.Equal(a, 2);
  916. Assert.Equal(b, 3);
  917. Assert.Equal(c, 4);
  918. Assert.Equal(d, 5);
  919. Assert.Equal(e, 6);
  920. Assert.Equal(f, 7);
  921. Assert.Equal(g, 8);
  922. Assert.Equal(h, 9);
  923. Assert.Equal(i, 10);
  924. Assert.Equal(j, 11);
  925. Assert.Equal(k, 12);
  926. Assert.Equal(l, 13);
  927. Assert.Equal(m, 14);
  928. Assert.Equal(n, 15);
  929. cb(x);
  930. return x;
  931. };
  932. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 1; };
  933. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15).Materialize().ToEnumerable().ToArray();
  934. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  935. }
  936. [Fact]
  937. public void FromAsyncPatternAction14()
  938. {
  939. var x = new Result();
  940. Func<int, int, int, int, int, int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, j, k, l, m, n, cb, _) =>
  941. {
  942. Assert.Equal(a, 2);
  943. Assert.Equal(b, 3);
  944. Assert.Equal(c, 4);
  945. Assert.Equal(d, 5);
  946. Assert.Equal(e, 6);
  947. Assert.Equal(f, 7);
  948. Assert.Equal(g, 8);
  949. Assert.Equal(h, 9);
  950. Assert.Equal(i, 10);
  951. Assert.Equal(j, 11);
  952. Assert.Equal(k, 12);
  953. Assert.Equal(l, 13);
  954. Assert.Equal(m, 14);
  955. Assert.Equal(n, 15);
  956. cb(x);
  957. return x;
  958. };
  959. Action<IAsyncResult> end = iar => { Assert.Same(x, iar); };
  960. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15).ToEnumerable().ToArray();
  961. Assert.True(res.SequenceEqual(new[] { new Unit() }));
  962. }
  963. [Fact]
  964. public void FromAsyncPattern14_Error()
  965. {
  966. var x = new Result();
  967. var ex = new Exception();
  968. Func<int, int, int, int, int, int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, j, k, l, m, n, cb, o) => { cb(x); return x; };
  969. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); throw ex; };
  970. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15).Materialize().ToEnumerable().ToArray();
  971. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  972. }
  973. [Fact]
  974. public void FromAsyncPattern14_ErrorBegin()
  975. {
  976. var x = new Result();
  977. var ex = new Exception();
  978. Func<int, int, int, int, int, int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, j, k, l, m, n, cb, o) => { cb(x); throw ex; };
  979. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 0; };
  980. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15).Materialize().ToEnumerable().ToArray();
  981. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  982. }
  983. class Result : IAsyncResult
  984. {
  985. public object AsyncState
  986. {
  987. get { throw new NotImplementedException(); }
  988. }
  989. public System.Threading.WaitHandle AsyncWaitHandle
  990. {
  991. get { throw new NotImplementedException(); }
  992. }
  993. public bool CompletedSynchronously
  994. {
  995. get { throw new NotImplementedException(); }
  996. }
  997. public bool IsCompleted
  998. {
  999. get { throw new NotImplementedException(); }
  1000. }
  1001. }
  1002. }
  1003. }