// Copyright (c) 2017, 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 bool writeEventsEnabled
/// Set or get, if the RawDatagramSocket should listen for RawSocketEvent.write
/// events. Default is true. This is a one-shot listener, and writeEventsEnabled
/// must be set to true again to receive another write event.
///
/// @description Checks that writeEventsEnabled property may be get and set for
/// the RawDatagramSocket instance and that default value is true.
/// @author ngl@unipro.ru

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

check(InternetAddress address) {
  asyncStart();
  RawDatagramSocket.bind(address, 0).then((socket) {
    Expect.equals(true, socket.writeEventsEnabled);
    socket.writeEventsEnabled = false;
    Expect.equals(false, socket.writeEventsEnabled);
    socket.close();
    asyncEnd();
  });
}

main() {
  check(InternetAddress.anyIPv4);
  check(InternetAddress.anyIPv6);
  check(InternetAddress.loopbackIPv4);
  check(InternetAddress.loopbackIPv6);
}
