• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright (C) 2024 The Android Open Source Project
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//      http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15import {AsyncGuard} from './async_guard';
16import {defer} from './deferred';
17
18test('AsyncGuard', async () => {
19  const guard = new AsyncGuard<number>();
20  let counter = 0;
21
22  for (let i = 1; i <= 3; i++) {
23    const barrier = defer<void>();
24    const asyncTask = async () => {
25      await barrier;
26      return ++counter;
27    };
28    const promises = [
29      guard.run(asyncTask),
30      guard.run(asyncTask),
31      guard.run(asyncTask),
32    ];
33    setTimeout(() => barrier.resolve(), 0);
34    await barrier;
35    expect(await Promise.all(promises)).toEqual([i, i, i]);
36  }
37});
38