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

import 'dart:mirrors';

import 'package:expect/expect.dart';

class A {
  toString() => "A";
}

class B {
  int x = 99;
  toString() => "B";
}

void main() {
  var a = new A();
  var am = reflect(a);
  for (int i = 0; i < 10; i++) {
    // Adds a probe function on the symbol.
    am.getField(#toString);
  }
  var b = new B();
  var bm = reflect(b);
  for (int i = 0; i < 10; i++) {
    // Adds a field-cache on the mirror.
    bm.getField(#x);
  }
  // There is a cache now, but the cache should not contain 'toString' from
  // JavaScript's Object.prototype.
  var toString = bm.getField(#toString).reflectee;
  Expect.equals("B", toString());
}
