mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00
92 lines
3.1 KiB
Dart
92 lines
3.1 KiB
Dart
// 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/foundation.dart';
|
|
import 'package:flutter/services.dart';
|
|
|
|
/// The [RestorationManager] used for tests.
|
|
///
|
|
/// Unlike the real [RestorationManager], this one just keeps the restoration
|
|
/// data in memory and does not make it available to the engine.
|
|
class TestRestorationManager extends RestorationManager {
|
|
/// Creates a [TestRestorationManager].
|
|
TestRestorationManager() {
|
|
// Ensures that [rootBucket] always returns a synchronous future to avoid
|
|
// extra pumps in tests.
|
|
restoreFrom(TestRestorationData.empty);
|
|
}
|
|
|
|
@override
|
|
Future<RestorationBucket?> get rootBucket {
|
|
_debugRootBucketAccessed = true;
|
|
return super.rootBucket;
|
|
}
|
|
|
|
/// The current restoration data from which the current state can be restored.
|
|
///
|
|
/// To restore the state to the one described by this data, pass the
|
|
/// [TestRestorationData] obtained from this getter back to [restoreFrom].
|
|
///
|
|
/// See also:
|
|
///
|
|
/// * [WidgetTester.getRestorationData], which makes this data available
|
|
/// in a widget test.
|
|
TestRestorationData get restorationData => _restorationData;
|
|
late TestRestorationData _restorationData;
|
|
|
|
/// Whether the [rootBucket] has been obtained.
|
|
bool get debugRootBucketAccessed => _debugRootBucketAccessed;
|
|
bool _debugRootBucketAccessed = false;
|
|
|
|
/// Restores the state from the provided [TestRestorationData].
|
|
///
|
|
/// The restoration data obtained form [restorationData] can be passed into
|
|
/// this method to restore the state to what it was when the restoration data
|
|
/// was originally retrieved.
|
|
///
|
|
/// See also:
|
|
///
|
|
/// * [WidgetTester.restoreFrom], which exposes this method to a widget test.
|
|
void restoreFrom(TestRestorationData data) {
|
|
_restorationData = data;
|
|
handleRestorationUpdateFromEngine(enabled: true, data: data.binary);
|
|
}
|
|
|
|
/// Disabled state restoration.
|
|
///
|
|
/// To turn restoration back on call [restoreFrom].
|
|
void disableRestoration() {
|
|
_restorationData = TestRestorationData.empty;
|
|
handleRestorationUpdateFromEngine(enabled: false, data: null);
|
|
}
|
|
|
|
@override
|
|
Future<void> sendToEngine(Uint8List encodedData) async {
|
|
_restorationData = TestRestorationData._(encodedData);
|
|
}
|
|
}
|
|
|
|
/// Restoration data that can be used to restore the state to the one described
|
|
/// by this data.
|
|
///
|
|
/// See also:
|
|
///
|
|
/// * [WidgetTester.getRestorationData], which retrieves the restoration data
|
|
/// from the widget under test.
|
|
/// * [WidgetTester.restoreFrom], which takes a [TestRestorationData] to
|
|
/// restore the state of the widget under test from the provided data.
|
|
class TestRestorationData {
|
|
const TestRestorationData._(this.binary);
|
|
|
|
/// Empty restoration data indicating that no data is available to restore
|
|
/// state from.
|
|
static const TestRestorationData empty = TestRestorationData._(null);
|
|
|
|
/// The serialized representation of the restoration data.
|
|
///
|
|
/// Should only be accessed by the test framework.
|
|
@protected
|
|
final Uint8List? binary;
|
|
}
|