// Copyright (c) 2012, 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

// VMOptions=--enable-isolate-groups
// VMOptions=--no-enable-isolate-groups

library illegal_msg_function_test;

import "dart:isolate";

import "package:expect/expect.dart";
import "package:async_helper/async_helper.dart";

echo(sendPort) {
  var port = new ReceivePort();
  sendPort.send(port.sendPort);
  port.listen((msg) {
    sendPort.send("echoing ${msg(1)}}");
  });
}

void main() {
  asyncStart();

  final port = new ReceivePort();

  // Ignore returned Future.
  Isolate.spawn(echo, port.sendPort);

  port.first.then((_snd) {
    SendPort snd = _snd;
    int function(x) => x + 2;
    try {
      snd.send(function);
    } catch (e) {
      // Expected behavior.
      port.close();
      asyncEnd();
      return;
    }
    Expect.fail("Should not be reached. Message sending didn't throw.");
  });
}
