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

// See https://github.com/dart-lang/sdk/issues/25559

import "dart:async";
import "dart:isolate";

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

main() {
  asyncStart();
  var port;
  port = new RawReceivePort((message) {
    var expando1 = message[0] as Expando;
    var expando2 = message[1] as Expando;
    var expando3 = message[2] as Expando;
    var key1 = message[3];

    var key2 = expando1[key1!];
    Expect.isNotNull(key2);
    var key3 = expando2[key2!];
    Expect.isNotNull(key3);
    var value = expando3[key3!];
    Expect.equals(value, "value");

    port.close();
    asyncEnd();
  });


  var key1 = new Object();
  var key2 = new Object();
  var key3 = new Object();
  var expando1 = new Expando();
  var expando2 = new Expando();
  var expando3 = new Expando();
  expando1[key1] = key2;
  expando2[key2] = key3;
  expando3[key3] = "value";

  // key1 is placed after expando1 so that its reachability is uncertain when
  // expando1 is first encountered.
  var message = <dynamic>[expando1, expando2, expando3, key1];
  port.sendPort.send(message);
}
