// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'dart:async';

import 'package:litetest/litetest.dart';

void main() {
  test('Message loop flushes microtasks between iterations', () async {
    final List<int> tasks = <int>[];

    tasks.add(1);

    // Flush 0 microtasks.
    await Future<void>.delayed(Duration.zero);

    scheduleMicrotask(() {
      tasks.add(3);
    });
    scheduleMicrotask(() {
      tasks.add(4);
    });

    tasks.add(2);

    // Flush 2 microtasks.
    await Future<void>.delayed(Duration.zero);

    scheduleMicrotask(() {
      tasks.add(6);
    });
    scheduleMicrotask(() {
      tasks.add(7);
    });
    scheduleMicrotask(() {
      tasks.add(8);
    });

    tasks.add(5);

    // Flush 3 microtasks.
    await Future<void>.delayed(Duration.zero);

    tasks.add(9);

    expect(tasks, <int>[1, 2, 3, 4, 5, 6, 7, 8, 9]);
  });
}
