// Copyright 2014 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 'package:flutter/scheduler.dart'; import 'package:flutter/widgets.dart'; import 'package:flutter_test/flutter_test.dart'; void main() { WidgetsFlutterBinding.ensureInitialized(); test('scheduleForcedFrame sets up frame callbacks', () async { SchedulerBinding.instance.scheduleForcedFrame(); expect(SchedulerBinding.instance.platformDispatcher.onBeginFrame, isNotNull); }); test('debugAssertNoTimeDilation does not throw if time dilate already reset', () async { timeDilation = 2.0; timeDilation = 1.0; SchedulerBinding.instance.debugAssertNoTimeDilation('reason'); // no error }); test('debugAssertNoTimeDilation throw if time dilate not reset', () async { timeDilation = 3.0; expect( () => SchedulerBinding.instance.debugAssertNoTimeDilation('reason'), throwsA(isA<FlutterError>().having((FlutterError e) => e.message, 'message', 'reason')), ); timeDilation = 1.0; }); test('Adding a persistent frame callback during a persistent frame callback', () { bool calledBack = false; SchedulerBinding.instance.addPersistentFrameCallback((Duration timeStamp) { if (!calledBack) { SchedulerBinding.instance.addPersistentFrameCallback((Duration timeStamp) { calledBack = true; }); } }); SchedulerBinding.instance.handleBeginFrame(null); SchedulerBinding.instance.handleDrawFrame(); expect(calledBack, false); SchedulerBinding.instance.handleBeginFrame(null); SchedulerBinding.instance.handleDrawFrame(); expect(calledBack, true); }); }