| // 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 RequestAnimationFrameTest; |
| |
| import 'dart:async'; |
| import 'dart:html'; |
| |
| import 'package:expect/minitest.dart'; |
| |
| Future testOneShot() async { |
| final done = new Completer(); |
| window.requestAnimationFrame(done.complete); |
| await done.future; |
| } |
| |
| Future testTwoShot() async { |
| final done = new Completer(); |
| window.requestAnimationFrame((timestamp1) { |
| window.requestAnimationFrame((timestamp2) { |
| // Not monotonic on Safari and IE. |
| // expect(timestamp2, greaterThan(timestamp1), |
| // reason: 'timestamps ordered'); |
| done.complete(); |
| }); |
| }); |
| await done.future; |
| } |
| |
| // How do we test that a callback is never called? We can't wrap the uncalled |
| // callback with 'expectAsync'. Will request several frames and try |
| // cancelling the one that is not the last. |
| Future testCancel1() async { |
| final done = new Completer(); |
| var frame1 = window.requestAnimationFrame((timestamp1) { |
| fail('Should have been cancelled'); |
| }); |
| var frame2 = window.requestAnimationFrame(done.complete); |
| window.cancelAnimationFrame(frame1); |
| await done.future; |
| } |
| |
| Future testCancel2() async { |
| final done1 = new Completer(); |
| final done2 = new Completer(); |
| var frame1 = window.requestAnimationFrame(done1.complete); |
| var frame2 = window.requestAnimationFrame((timestamp2) { |
| fail('Should have been cancelled'); |
| }); |
| var frame3 = window.requestAnimationFrame(done2.complete); |
| window.cancelAnimationFrame(frame2); |
| await Future.wait([done1.future, done2.future]); |
| } |
| |
| main() async { |
| await testOneShot(); |
| await testTwoShot(); |
| await testCancel1(); |
| await testCancel2(); |
| } |