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

// Test that a closure call on a native field is recognized by the
// type inferrer.

import 'native_testing.dart';

@Native("Node")
class Node {
  get parentNode native;
}

makeNode(parent) native;

void setup() {
  JS('', r"""
(function(){
// This code is all inside 'setup' and so not accessible from the global scope.
function Node(parent){ this.parentNode = parent; }
self.makeNode = function(p){return new Node(p);};

self.nativeConstructor(Node);
})()""");
  applyTestExtensions(['Node']);
}

main() {
  nativeTesting();
  setup();
  var node = makeNode(null);
  if (node.parentNode != null) {
    node = node.parentNode();
  }
}
