Index: test/codegen/expect/language/asyncstar_yieldstar_test.js |
diff --git a/test/codegen/expect/language/asyncstar_yieldstar_test.js b/test/codegen/expect/language/asyncstar_yieldstar_test.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..46ea4b82337436e8f4ac22a43be1e60466433359 |
--- /dev/null |
+++ b/test/codegen/expect/language/asyncstar_yieldstar_test.js |
@@ -0,0 +1,120 @@ |
+dart_library.library('language/asyncstar_yieldstar_test', null, /* Imports */[ |
+ 'dart_sdk', |
+ 'expect', |
+ 'async_helper' |
+], function load__asyncstar_yieldstar_test(exports, dart_sdk, expect, async_helper) { |
+ 'use strict'; |
+ const core = dart_sdk.core; |
+ const async = dart_sdk.async; |
+ const _interceptors = dart_sdk._interceptors; |
+ const dart = dart_sdk.dart; |
+ const dartx = dart_sdk.dartx; |
+ const expect$ = expect.expect; |
+ const async_helper$ = async_helper.async_helper; |
+ const asyncstar_yieldstar_test = Object.create(null); |
+ let StreamOfint = () => (StreamOfint = dart.constFn(async.Stream$(core.int)))(); |
+ let CompleterOfbool = () => (CompleterOfbool = dart.constFn(async.Completer$(core.bool)))(); |
+ let JSArrayOfint = () => (JSArrayOfint = dart.constFn(_interceptors.JSArray$(core.int)))(); |
+ let JSArrayOfObject = () => (JSArrayOfObject = dart.constFn(_interceptors.JSArray$(core.Object)))(); |
+ let dynamicToStreamOfint = () => (dynamicToStreamOfint = dart.constFn(dart.definiteFunctionType(StreamOfint(), [dart.dynamic])))(); |
+ let CompleterOfboolToStream = () => (CompleterOfboolToStream = dart.constFn(dart.definiteFunctionType(async.Stream, [CompleterOfbool()])))(); |
+ let StreamTodynamic = () => (StreamTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [async.Stream])))(); |
+ let VoidTodynamic = () => (VoidTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [])))(); |
+ let VoidTovoid = () => (VoidTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [])))(); |
+ let dynamicTodynamic = () => (dynamicTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [dart.dynamic])))(); |
+ asyncstar_yieldstar_test.subStream = function(p) { |
+ return dart.asyncStar(function*(stream, p) { |
+ if (stream.add(core.int._check(p))) return; |
+ yield; |
+ if (stream.add(core.int._check(dart.dsend(p, '+', 1)))) return; |
+ yield; |
+ }, core.int, p); |
+ }; |
+ dart.fn(asyncstar_yieldstar_test.subStream, dynamicToStreamOfint()); |
+ asyncstar_yieldstar_test.foo = function(finalized) { |
+ return dart.asyncStar(function*(stream, finalized) { |
+ let i = 0; |
+ try { |
+ while (true) { |
+ if (stream.add("outer")) return; |
+ yield; |
+ if (stream.addStream(asyncstar_yieldstar_test.subStream(i))) return; |
+ yield; |
+ i++; |
+ } |
+ } finally { |
+ expect$.Expect.isTrue(i < 10); |
+ finalized.complete(true); |
+ } |
+ }, dart.dynamic, finalized); |
+ }; |
+ dart.fn(asyncstar_yieldstar_test.foo, CompleterOfboolToStream()); |
+ asyncstar_yieldstar_test.foo2 = function(subStream) { |
+ return dart.asyncStar(function*(stream, subStream) { |
+ if (stream.addStream(subStream)) return; |
+ yield; |
+ }, dart.dynamic, subStream); |
+ }; |
+ dart.fn(asyncstar_yieldstar_test.foo2, StreamTodynamic()); |
+ asyncstar_yieldstar_test.test = function() { |
+ return dart.async(function*() { |
+ expect$.Expect.listEquals(JSArrayOfint().of([0, 1]), yield asyncstar_yieldstar_test.subStream(0).toList()); |
+ let finalized = CompleterOfbool().new(); |
+ expect$.Expect.listEquals(JSArrayOfObject().of(["outer", 0, 1, "outer", 1, 2, "outer", 2]), yield asyncstar_yieldstar_test.foo(finalized).take(8).toList()); |
+ expect$.Expect.isTrue(yield finalized.future); |
+ finalized = CompleterOfbool().new(); |
+ expect$.Expect.listEquals(JSArrayOfObject().of(["outer", 0, 1, "outer", 1, 2, "outer"]), yield asyncstar_yieldstar_test.foo(finalized).take(7).toList()); |
+ expect$.Expect.isTrue(yield finalized.future); |
+ finalized = CompleterOfbool().new(); |
+ let pausedCompleter = CompleterOfbool().new(); |
+ let resumedCompleter = CompleterOfbool().new(); |
+ let canceledCompleter = CompleterOfbool().new(); |
+ let controller = null; |
+ let i = 0; |
+ function addNext() { |
+ if (i >= 10) return; |
+ controller.add(i); |
+ i++; |
+ if (!dart.test(controller.isPaused)) { |
+ async.scheduleMicrotask(addNext); |
+ } |
+ } |
+ dart.fn(addNext, VoidTodynamic()); |
+ controller = async.StreamController.new({onListen: dart.fn(() => { |
+ async.scheduleMicrotask(addNext); |
+ }, VoidTovoid()), onPause: dart.fn(() => { |
+ pausedCompleter.complete(true); |
+ }, VoidTovoid()), onResume: dart.fn(() => { |
+ resumedCompleter.complete(true); |
+ async.scheduleMicrotask(addNext); |
+ }, VoidTovoid()), onCancel: dart.fn(() => { |
+ canceledCompleter.complete(true); |
+ }, VoidTodynamic())}); |
+ let subscription = null; |
+ subscription = async.StreamSubscription._check(dart.dsend(asyncstar_yieldstar_test.foo2(controller.stream), 'listen', dart.fn(event => { |
+ if (dart.equals(event, 2)) { |
+ subscription.pause(); |
+ async.scheduleMicrotask(dart.fn(() => { |
+ subscription.resume(); |
+ }, VoidTovoid())); |
+ } |
+ if (dart.equals(event, 5)) { |
+ subscription.cancel(); |
+ } |
+ }, dynamicTodynamic()))); |
+ expect$.Expect.isTrue(yield pausedCompleter.future); |
+ expect$.Expect.isTrue(yield resumedCompleter.future); |
+ expect$.Expect.isTrue(yield canceledCompleter.future); |
+ }, dart.dynamic); |
+ }; |
+ dart.fn(asyncstar_yieldstar_test.test, VoidTodynamic()); |
+ asyncstar_yieldstar_test.main = function() { |
+ async_helper$.asyncStart(); |
+ dart.dsend(asyncstar_yieldstar_test.test(), 'then', dart.fn(_ => { |
+ async_helper$.asyncEnd(); |
+ }, dynamicTodynamic())); |
+ }; |
+ dart.fn(asyncstar_yieldstar_test.main, VoidTodynamic()); |
+ // Exports: |
+ exports.asyncstar_yieldstar_test = asyncstar_yieldstar_test; |
+}); |