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

// 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");
}
