scheduler_test.dart 2.82 KB
Newer Older
1 2 3 4
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

Ian Hickson's avatar
Ian Hickson committed
5 6
// This test is disabled because it triggers https://github.com/dart-lang/sdk/issues/25246

7
import 'package:flutter/scheduler.dart';
Ian Hickson's avatar
Ian Hickson committed
8
import 'package:flutter/services.dart';
9 10
import 'package:test/test.dart';

Ian Hickson's avatar
Ian Hickson committed
11 12
class TestSchedulerBinding extends BindingBase with Scheduler { }

13 14 15
class TestStrategy implements SchedulingStrategy {
  int allowedPriority = 10000;

Ian Hickson's avatar
Ian Hickson committed
16
  bool shouldRunTaskWithPriority({ int priority, Scheduler scheduler }) {
17 18 19 20 21 22
    return priority >= allowedPriority;
  }
}

void main() {
  test("Tasks are executed in the right order", () {
Ian Hickson's avatar
Ian Hickson committed
23 24
    Scheduler scheduler = new TestSchedulerBinding();
    TestStrategy strategy = new TestStrategy();
25
    scheduler.schedulingStrategy = strategy;
Ian Hickson's avatar
Ian Hickson committed
26 27
    List<int> input = <int>[2, 23, 23, 11, 0, 80, 3];
    List<int> executedTasks = <int>[];
28 29

    void scheduleAddingTask(int x) {
30
      scheduler.scheduleTask(() { executedTasks.add(x); }, Priority.idle + x);
31 32
    }

Ian Hickson's avatar
Ian Hickson committed
33
    for (int x in input)
34
      scheduleAddingTask(x);
Ian Hickson's avatar
Ian Hickson committed
35

36
    strategy.allowedPriority = 100;
Ian Hickson's avatar
Ian Hickson committed
37 38
    for (int i = 0; i < 3; i += 1)
      scheduler.handleEventLoopCallback();
39 40 41
    expect(executedTasks.isEmpty, isTrue);

    strategy.allowedPriority = 50;
Ian Hickson's avatar
Ian Hickson committed
42 43
    for (int i = 0; i < 3; i += 1)
      scheduler.handleEventLoopCallback();
44 45 46 47 48
    expect(executedTasks.length, equals(1));
    expect(executedTasks.single, equals(80));
    executedTasks.clear();

    strategy.allowedPriority = 20;
Ian Hickson's avatar
Ian Hickson committed
49 50
    for (int i = 0; i < 3; i += 1)
      scheduler.handleEventLoopCallback();
51 52 53 54 55 56 57 58 59
    expect(executedTasks.length, equals(2));
    expect(executedTasks[0], equals(23));
    expect(executedTasks[1], equals(23));
    executedTasks.clear();

    scheduleAddingTask(99);
    scheduleAddingTask(19);
    scheduleAddingTask(5);
    scheduleAddingTask(97);
Ian Hickson's avatar
Ian Hickson committed
60 61
    for (int i = 0; i < 3; i += 1)
      scheduler.handleEventLoopCallback();
62 63 64 65 66 67
    expect(executedTasks.length, equals(2));
    expect(executedTasks[0], equals(99));
    expect(executedTasks[1], equals(97));
    executedTasks.clear();

    strategy.allowedPriority = 10;
Ian Hickson's avatar
Ian Hickson committed
68 69
    for (int i = 0; i < 3; i += 1)
      scheduler.handleEventLoopCallback();
70 71 72 73 74 75
    expect(executedTasks.length, equals(2));
    expect(executedTasks[0], equals(19));
    expect(executedTasks[1], equals(11));
    executedTasks.clear();

    strategy.allowedPriority = 1;
Ian Hickson's avatar
Ian Hickson committed
76 77
    for (int i = 0; i < 4; i += 1)
      scheduler.handleEventLoopCallback();
78 79 80 81 82 83 84
    expect(executedTasks.length, equals(3));
    expect(executedTasks[0], equals(5));
    expect(executedTasks[1], equals(3));
    expect(executedTasks[2], equals(2));
    executedTasks.clear();

    strategy.allowedPriority = 0;
85
    scheduler.handleEventLoopCallback();
86 87 88 89
    expect(executedTasks.length, equals(1));
    expect(executedTasks[0], equals(0));
  });
}