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

library lib;

import 'dart:mirrors';
import 'dart:isolate';
import 'package:expect/expect.dart';

child(SendPort port) {
  LibraryMirror root = currentMirrorSystem().isolate.rootLibrary;
  Expect.isNotNull(root);
  port.send(root.uri.toString());
}

main() {
  final port = new RawReceivePort();
  port.handler = (String childRootUri) {
    LibraryMirror root = currentMirrorSystem().isolate.rootLibrary;
    Expect.isNotNull(root);
    Expect.equals(root.uri.toString(), childRootUri);
    port.close();
  };

  Isolate.spawn(child, port.sendPort);
}
