// 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 'dart:ui' as ui; import 'package:flutter/foundation.dart'; import 'package:flutter/painting.dart'; import 'package:flutter/scheduler.dart'; import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; void main() { test('PaintingBinding with memory pressure before initInstances', () { // Observed in devicelab: the device sends a memory pressure event to us // after PaintingBinding has been created but before initInstances called, // meaning the imageCache member is still null. final PaintingBinding binding = TestPaintingBinding(); expect(binding.imageCache, null); binding.handleMemoryPressure(); expect(binding.imageCache, null); binding.initInstances(); expect(binding.imageCache, isNotNull); expect(binding.imageCache!.currentSize, 0); }); } class TestBindingBase implements BindingBase { @override void initInstances() {} @override void initServiceExtensions() {} @override Future<void> lockEvents(Future<void> Function() callback) async {} @override bool get locked => throw UnimplementedError(); @override Future<void> performReassemble() { throw UnimplementedError(); } @override void postEvent(String eventKind, Map<String, dynamic> eventData) {} @override Future<void> reassembleApplication() { throw UnimplementedError(); } @override void registerBoolServiceExtension({required String name, required AsyncValueGetter<bool> getter, required AsyncValueSetter<bool> setter}) {} @override void registerNumericServiceExtension({required String name, required AsyncValueGetter<double> getter, required AsyncValueSetter<double> setter}) {} @override void registerServiceExtension({required String name, required ServiceExtensionCallback callback}) {} @override void registerSignalServiceExtension({required String name, required AsyncCallback callback}) {} @override void registerStringServiceExtension({required String name, required AsyncValueGetter<String> getter, required AsyncValueSetter<String> setter}) {} @override void unlocked() {} @override ui.SingletonFlutterWindow get window => TestWindow(window: ui.window); @override ui.PlatformDispatcher get platformDispatcher => TestWindow(window: ui.window).platformDispatcher; } class TestPaintingBinding extends TestBindingBase with SchedulerBinding, ServicesBinding, PaintingBinding {}