// 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<List<RawSocketEvent>> toList ()
/// Collects all elements of this stream in a List.
///
/// Creates a List<T> and adds all elements of the stream to the list in the
/// order they arrive. When the stream ends, the returned future is completed
/// with that list.
///
/// @description Checks that method [toList] collects all elements of this stream
/// in a List and returns future completed with that list when the stream ends.
/// @author ngl@unipro.ru

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

check(dataExpected, [bool no_write_events = false]) {
  asyncStart();
  var address = InternetAddress.loopbackIPv4;
  RawDatagramSocket.bind(address, 0).then((producer) {
    RawDatagramSocket.bind(address, 0).then((receiver) {
      if (no_write_events) {
        receiver.writeEventsEnabled = false;
      }
      int sent = 0;
      producer.send([sent++], address, receiver.port);
      producer.send([sent++], address, receiver.port);
      producer.close();
      receiver.close();

      Future fList = receiver.toList();
      fList.then((list) {
        Expect.listEquals(dataExpected, list);
      }).whenComplete(() {
        asyncEnd();
      });
    });
  });
}

main() {
  check([RawSocketEvent.closed]);
  check([RawSocketEvent.closed], true);
}
