// 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.

// VMOptions=--no-enable-fast-object-copy
// VMOptions=--enable-fast-object-copy

import "dart:async";
import "dart:developer" show UserTag;
import "dart:isolate" show Isolate, ReceivePort;
import "dart:typed_data" show ByteData;
import "package:expect/expect.dart";

const large = 2 * 1024 * 1024;

void child(replyPort) {
  print("Child start");

  Expect.throws(
    () {
      replyPort.send([
        new ByteData(large),
        new UserTag("User tags are not allowed in isolate messages"),
        new ByteData(large),
      ]);
      replyPort.send("Not reached");
    },
    (e) {
      return e.toString().contains("Illegal argument in isolate message");
    },
  );

  replyPort.send("Done");

  print("Child done");
}

Future<void> main(List<String> args) async {
  print("Parent start");

  ReceivePort port = new ReceivePort();
  Isolate.spawn(child, port.sendPort);

  Expect.equals("Done", await port.first);

  print("Parent done");
}
