46 lines
1.4 KiB
Dart
46 lines
1.4 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 'dart:convert';
|
|
import 'dart:ui' as ui;
|
|
import 'package:flutter/foundation.dart';
|
|
import 'package:flutter/scheduler.dart';
|
|
import 'package:flutter/services.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
|
|
class TestChannelBuffersFlutterBinding extends BindingBase with SchedulerBinding, ServicesBinding {}
|
|
|
|
void main() {
|
|
ByteData makeByteData(String str) {
|
|
return ByteData.sublistView(utf8.encode(str));
|
|
}
|
|
|
|
String getString(ByteData data) {
|
|
return utf8.decode(Uint8List.sublistView(data));
|
|
}
|
|
|
|
test('does drain channel buffers', () async {
|
|
const channel = 'foo';
|
|
final binding = TestChannelBuffersFlutterBinding();
|
|
expect(binding.defaultBinaryMessenger, isNotNull);
|
|
var didCallCallback = false;
|
|
void callback(ByteData? responseData) {
|
|
didCallCallback = true;
|
|
}
|
|
|
|
const payload = 'bar';
|
|
final ByteData data = makeByteData(payload);
|
|
ui.channelBuffers.push(channel, data, callback);
|
|
var didDrainData = false;
|
|
binding.defaultBinaryMessenger.setMessageHandler(channel, (ByteData? message) async {
|
|
expect(getString(message!), payload);
|
|
didDrainData = true;
|
|
return null;
|
|
});
|
|
// Flush the event queue.
|
|
await Future<void>(() {});
|
|
expect(didDrainData, isTrue);
|
|
expect(didCallCallback, isTrue);
|
|
});
|
|
}
|