blob: 1e3a89dfbc42601cbb702f1153ba0a89428d10fb [file] [log] [blame]
// 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/services.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
TestWidgetsFlutterBinding.ensureInitialized();
group('Undo Interactions', () {
test('UndoManagerClient handleUndo', () async {
// Assemble an UndoManagerClient so we can verify its change in state.
final _FakeUndoManagerClient client = _FakeUndoManagerClient();
UndoManager.client = client;
expect(client.latestMethodCall, isEmpty);
// Send handleUndo message with "undo" as the direction.
ByteData? messageBytes = const JSONMessageCodec().encodeMessage(<String, dynamic>{
'args': <dynamic>['undo'],
'method': 'UndoManagerClient.handleUndo',
});
await ServicesBinding.instance.defaultBinaryMessenger.handlePlatformMessage(
'flutter/undomanager',
messageBytes,
null,
);
expect(client.latestMethodCall, 'handlePlatformUndo(${UndoDirection.undo})');
// Send handleUndo message with "undo" as the direction.
messageBytes = const JSONMessageCodec().encodeMessage(<String, dynamic>{
'args': <dynamic>['redo'],
'method': 'UndoManagerClient.handleUndo',
});
await ServicesBinding.instance.defaultBinaryMessenger.handlePlatformMessage(
'flutter/undomanager',
messageBytes,
(ByteData? _) {},
);
expect(client.latestMethodCall, 'handlePlatformUndo(${UndoDirection.redo})');
});
});
}
class _FakeUndoManagerClient with UndoManagerClient {
String latestMethodCall = '';
@override
void undo() {}
@override
void redo() {}
@override
bool get canUndo => false;
@override
bool get canRedo => false;
@override
void handlePlatformUndo(UndoDirection direction) {
latestMethodCall = 'handlePlatformUndo($direction)';
}
}