| // Copyright (c) 2019, 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. | 
 |  | 
 | // @dart = 2.6 | 
 |  | 
 | import 'package:expect/expect.dart'; | 
 | import 'dart:async'; | 
 | import 'dart:_runtime' as dart; | 
 |  | 
 | void main() async { | 
 |   await timeoutTest(); | 
 |   await periodicTest(); | 
 | } | 
 |  | 
 | void timeoutTest() async { | 
 |   bool beforeRestart = true; | 
 |   bool calledBeforeRestart = false; | 
 |   bool calledAfterRestart = false; | 
 |   void callback() { | 
 |     if (beforeRestart) { | 
 |       calledBeforeRestart = true; | 
 |     } else { | 
 |       calledAfterRestart = true; | 
 |     } | 
 |   } | 
 |  | 
 |   Timer(Duration(milliseconds: 500), callback); | 
 |   dart.hotRestart(); | 
 |   beforeRestart = false; | 
 |   await new Future.delayed(Duration(milliseconds: 600)); | 
 |   Expect.isFalse(calledBeforeRestart); | 
 |   Expect.isFalse(calledAfterRestart); | 
 | } | 
 |  | 
 | void periodicTest() async { | 
 |   bool beforeRestart = true; | 
 |   bool calledBeforeRestart = false; | 
 |   bool calledAfterRestart = false; | 
 |   void callback(_) { | 
 |     if (beforeRestart) { | 
 |       calledBeforeRestart = true; | 
 |     } else { | 
 |       calledAfterRestart = true; | 
 |     } | 
 |   } | 
 |  | 
 |   Timer.periodic(Duration(milliseconds: 10), callback); | 
 |   await new Future.delayed(Duration(milliseconds: 100)); | 
 |   dart.hotRestart(); | 
 |   beforeRestart = false; | 
 |   await new Future.delayed(Duration(milliseconds: 100)); | 
 |   Expect.isTrue(calledBeforeRestart); | 
 |   Expect.isFalse(calledAfterRestart); | 
 | } |