// |jit-test| skip-if: !getBuildConfiguration("explicit-resource-management"); --enable-explicit-resource-management

load(libdir + "asserts.js");

const disposedInForOf = [];
async function testDisposalsInForOfWithAsyncIter() {
  async function* asyncGenerator() {
    yield {
      value: "a",
      [Symbol.dispose]: () => disposedInForOf.push("disposed a")
    };
    yield {
      value: "b",
      [Symbol.dispose]: () => disposedInForOf.push("disposed b")
    };
    yield {
      value: "c",
      [Symbol.dispose]: () => disposedInForOf.push("disposed c")
    };
  }

  for await (using disposable of asyncGenerator()) {
    disposedInForOf.push(disposable.value);
  }
}

testDisposalsInForOfWithAsyncIter();
drainJobQueue();
assertArrayEq(disposedInForOf, ["a", "disposed a", "b", "disposed b", "c", "disposed c"]);
