// 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.


@TestOn('!chrome') // missing web infrastructure for plugins.

import 'dart:typed_data';

import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
  test('Mock binary message handler control test', () async {
    // Initialize all bindings because defaultBinaryMessenger.send() needs a window.
    TestWidgetsFlutterBinding.ensureInitialized();

    final List<ByteData?> log = <ByteData>[];

    ServicesBinding.instance!.defaultBinaryMessenger.setMockMessageHandler('test1', (ByteData? message) async {
      log.add(message);
      return null;
    });

    final ByteData message = ByteData(2)..setUint16(0, 0xABCD);
    await ServicesBinding.instance!.defaultBinaryMessenger.send('test1', message);
    expect(log, equals(<ByteData>[message]));
    log.clear();

    ServicesBinding.instance!.defaultBinaryMessenger.setMockMessageHandler('test1', null);
    await ServicesBinding.instance!.defaultBinaryMessenger.send('test1', message);
    expect(log, isEmpty);
  });
}
