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