// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// @dart = 2.9

/// @assertion Future<bool> any(bool test(T element))
/// Checks whether test accepts any element provided by this stream.
/// . . .
/// If the stream ends without finding an element that test accepts, the returned
/// future is completed with false.
///
/// @description Checks that method any returns false when RawSocketEvent.write
/// is searched and writeEventsEnabled is false. In this case the listening to
/// the stream is stopped after the last received event.
/// @issue 31881
/// @author ngl@unipro.ru

//import "dart:async";
import "dart:io";
import "../http_utils.dart";
import "../../../Utils/expect.dart";

var localhost = InternetAddress.loopbackIPv4;

main() async {
  RawDatagramSocket producer = await RawDatagramSocket.bind(localhost, 0);
  RawDatagramSocket receiver = await RawDatagramSocket.bind(localhost, 0);
  List<List<int>> toSend = [[0, 1, 2, 3], [1, 2, 3], [2, 3], [4]];
  receiver.writeEventsEnabled = false;

  bool wasSent =
      await sendDatagram(producer, toSend, localhost, receiver.port);
  Expect.isTrue(wasSent, "No datagram was sent");

  List<RawSocketEvent> tested =
      await anyElement(receiver, RawSocketEvent.write, false);
  Expect.isTrue(tested.length > 0);
}
