// 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
/// Stream<S> transform <S>(
///     StreamTransformer<RawSocketEvent, S> streamTransformer
/// )
/// . . .
/// The streamTransformer can return any stream. Whether the returned stream is
/// a broadcast stream or not, and which elements it will contain, is entirely
/// up to the transformation.
///
/// @description Checks that the returned stream is a broadcast, if this is.
/// @author ngl@unipro.ru

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

StreamTransformer<RawSocketEvent, int> transformer =
    new StreamTransformer.fromHandlers(handleData: (x, sink) {
  sink.add(x == RawSocketEvent.write ? 1 : x == RawSocketEvent.read ? 2 : 3);
});

main() {
  var address = InternetAddress.loopbackIPv4;
  RawDatagramSocket.bind(address, 0).then((socket) {
    Stream s1 = socket.transform(transformer);
    Expect.isFalse(s1.isBroadcast);
    Stream bcs = socket.asBroadcastStream();
    Stream s2 = bcs.transform(transformer);
    Expect.isTrue(s2.isBroadcast);
  });
}
