// 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 for testing super setters and getters.

import "package:expect/expect.dart";

class Base {
  Base() {}
  String value_;

  String get value { return value_; }
  String //# 01: compile-time error
  set value(String newValue) {
    value_ = 'Base:$newValue';
  }
}


class Derived extends Base {
  Derived() : super() {}

  String //# 02: compile-time error
  set value(String newValue) {
    super.value = 'Derived:$newValue';
  }
  String get value { return super.value; }
}


class SuperSetterTest {
  static void testMain() {
    final b = new Derived();
    b.value = "foo";
    Expect.equals("Base:Derived:foo", b.value);
  }
}

main() {
  SuperSetterTest.testMain();
}
