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

/// @assertion final bool isSetter
/// Whether the invocation was a setter call.
/// If so, arguments has exactly one positonal argument, and namedArguments is
/// empty.
/// @description Checks that isSetter returns false for getters and instance
/// methods invocations.
/// @author ilya

import "../../../Utils/expect.dart";

class D {
  method(x, y, z) {}
  get getOnly {}
  set setOnly (x) {}
  noSuchMethod(Invocation i) {
    Expect.isFalse(i.isSetter);
  }
}

@proxy
class C extends D {
  noSuchMethod(Invocation i) {
    Expect.isFalse(i.isSetter);
  }
  var d;
  C() : d = new D();
}

test(dynamic x) {
  var y = new C();
  x + y;
  - x;
  x.foo();
  x.method();
  x.foo;
  x.setOnly;
  x.d();
}

main() {
  test(new C());
}
