Future checkEvery()

in LibTest/io/RawDatagramSocket/every_A02_t03.dart [22:76]


Future<dynamic> checkEvery(int nCall) 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]];
  List<RawSocketEvent> received = [];
  Completer<dynamic> completer = new Completer<dynamic>();
  Future<dynamic> f = completer.future;
  Duration delay = const Duration(seconds: 2);
  int nTestCall = 0;
  bool notCompleted = true;

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

  bool test(e) {
    nTestCall++;
    if (nTestCall < nCall && notCompleted) {
      return true;
    } else {
      throw nCall;
    }
  }

  Stream bcs = receiver.asBroadcastStream();
  Future eValue = bcs.every(test);

  eValue.then((value) {
    if (!completer.isCompleted) {
      completer.complete(value);
      notCompleted = false;
      receiver.close();
    }
    return value;
  }).catchError((e) {
    if (!completer.isCompleted) {
      completer.complete(e);
      receiver.close();
      notCompleted = false;
    }
    return e;
  });

  bcs.listen((event) {
    received.add(event);
    receiver.receive();
  });

  new Future.delayed(delay, () {
    if (!completer.isCompleted) {
      receiver.close();
      notCompleted = false;
    }
  });
  return f;
}