blob: ed9b29b4547b2ff965e7b55baeb415d9bcc9cd60 [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 'dart:async';
import 'package:flutter_driver/driver_extension.dart';
typedef DriverHandler = Future<String> Function();
/// Wraps a flutter driver [DataHandler] with one that waits until a delegate is set.
///
/// This allows the driver test to call [FlutterDriver.requestData] before the handler was
/// set by the app in which case the requestData call will only complete once the app is ready
/// for it.
class FutureDataHandler {
final Map<String, Completer<DriverHandler>> _handlers = <String, Completer<DriverHandler>>{};
/// Registers a lazy handler that will be invoked on the next message from the driver.
Completer<DriverHandler> registerHandler(String key) {
_handlers[key] = Completer<DriverHandler>();
return _handlers[key];
}
Future<String> handleMessage(String message) async {
if (_handlers[message] == null) {
return 'Unsupported driver message: $message.\n'
'Supported messages are: ${_handlers.keys}.';
}
final DriverHandler handler = await _handlers[message].future;
return handler();
}
}
FutureDataHandler driverDataHandler = FutureDataHandler();