| // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file | 
 | // for details. All rights reserved. Use of this source code is governed by a | 
 | // BSD-style license that can be found in the LICENSE file. | 
 |  | 
 | library multiple_timer_test; | 
 |  | 
 | import 'dart:async'; | 
 | import 'package:async_helper/async_helper.dart'; | 
 | import 'package:expect/expect.dart'; | 
 |  | 
 | const Duration TIMEOUT1 = const Duration(seconds: 1); | 
 | const Duration TIMEOUT2 = const Duration(seconds: 2); | 
 | const Duration TIMEOUT3 = const Duration(milliseconds: 500); | 
 | const Duration TIMEOUT4 = const Duration(milliseconds: 1500); | 
 |  | 
 | // The stopwatch is more precise than the Timer. | 
 | // Some browsers (Firefox and IE so far) can trigger too early. So we add more | 
 | // margin. We use identical(1, 1.0) as an easy way to know if the test is | 
 | // running on the web. | 
 | int get safetyMargin => identical(1, 1.0) ? 100 : 0; | 
 |  | 
 | main() { | 
 |   Stopwatch _stopwatch1 = new Stopwatch(); | 
 |   Stopwatch _stopwatch2 = new Stopwatch(); | 
 |   Stopwatch _stopwatch3 = new Stopwatch(); | 
 |   Stopwatch _stopwatch4 = new Stopwatch(); | 
 |   late List<int> _order; | 
 |   late int _message; | 
 |  | 
 |   void timeoutHandler1() { | 
 |     Expect.isTrue((_stopwatch1.elapsedMilliseconds + safetyMargin) >= | 
 |         TIMEOUT1.inMilliseconds); | 
 |     Expect.equals(_order[_message], 0); | 
 |     _message++; | 
 |     asyncEnd(); | 
 |   } | 
 |  | 
 |   void timeoutHandler2() { | 
 |     Expect.isTrue((_stopwatch2.elapsedMilliseconds + safetyMargin) >= | 
 |         TIMEOUT2.inMilliseconds); | 
 |     Expect.equals(_order[_message], 1); | 
 |     _message++; | 
 |     asyncEnd(); | 
 |   } | 
 |  | 
 |   void timeoutHandler3() { | 
 |     Expect.isTrue((_stopwatch3.elapsedMilliseconds + safetyMargin) >= | 
 |         TIMEOUT3.inMilliseconds); | 
 |     Expect.equals(_order[_message], 2); | 
 |     _message++; | 
 |     asyncEnd(); | 
 |   } | 
 |  | 
 |   void timeoutHandler4() { | 
 |     Expect.isTrue((_stopwatch4.elapsedMilliseconds + safetyMargin) >= | 
 |         TIMEOUT4.inMilliseconds); | 
 |     Expect.equals(_order[_message], 3); | 
 |     _message++; | 
 |     asyncEnd(); | 
 |   } | 
 |  | 
 |   _order = [2, 0, 3, 1]; | 
 |   _message = 0; | 
 |  | 
 |   asyncStart(); | 
 |   _stopwatch1.start(); | 
 |   new Timer(TIMEOUT1, timeoutHandler1); | 
 |   asyncStart(); | 
 |   _stopwatch2.start(); | 
 |   new Timer(TIMEOUT2, timeoutHandler2); | 
 |   asyncStart(); | 
 |   _stopwatch3.start(); | 
 |   new Timer(TIMEOUT3, timeoutHandler3); | 
 |   asyncStart(); | 
 |   _stopwatch4.start(); | 
 |   new Timer(TIMEOUT4, timeoutHandler4); | 
 | } |