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

import "dart:io";

import "package:expect/expect.dart";

main(args) async {
  if (args.contains("--child")) {
    var leak = [];
    while (true) {
      leak = [leak];
    }
  } else {
    var exec = Platform.resolvedExecutable;
    var args = <String>[];
    args.addAll(Platform.executableArguments);
    args.add("--old_gen_heap_size=20");
    args.add(Platform.script.toFilePath());
    args.add("--child");

    // Should report an unhandled out of memory exception without crashing.
    print("+ $exec " + args.join(" "));
    var result = await Process.run(exec, args);

    print("exit: ${result.exitCode}");
    print("stdout:");
    print(result.stdout);
    print("stderr:");
    print(result.stderr);

    Expect.equals(255, result.exitCode, "Unhandled exception, not crash");
    Expect.isTrue(result.stderr.contains("Out of Memory"));
  }
}
