// 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.9

library test.instance_members_unimplemented_interface;

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

class I {
  implementMe() {}
}

abstract class C implements I {}

selectKeys<K, V>(Map<K, V> map, bool predicate(V)) {
  return map.keys.where((key) => predicate(map[key]));
}

main() {
  ClassMirror cm = reflectClass(C);

  // N.B.: Does not include #implementMe.
  Expect.setEquals([#hashCode, #runtimeType, #==, #noSuchMethod, #toString],
      selectKeys(cm.instanceMembers, (dm) => !dm.isPrivate));
  // Filter out private to avoid implementation-specific members of Object.
}
