// 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.
// Dart test program for testing setting/getting of fields when
// only getter/setter methods are specified.

import "package:expect/expect.dart";

class First {
  First(int val) : a_ = val {}
  int a_;
}

class Second extends First {
  static int c = -1;

  Second(int val) : super(val) {}

  static void testStaticMethod() {
    int i;
    Second.static_a = 20;
    i = Second.c;
  }

  void set instance_a(int value) {
    a_ = a_ + value;
  }

  int get instance_a {
    return a_;
  }

  static void set static_a(int value) {
    Second.c = value;
  }

  static int get static_d {
    return Second.c;
  }
}

class Setter0Test {
  static testMain() {
    Second obj = new Second(10);
    Expect.equals(10, obj.instance_a);
    obj.instance_a = 20;
    Expect.equals(30, obj.instance_a);

    Second.testStaticMethod();
    Expect.equals(20, Second.c);
    Expect.equals(20, Second.static_d);
  }
}

main() {
  Setter0Test.testMain();
}
