blob: da7ff146ceeca729f3235c2ee5fa6f6eb2d53d19 [file] [log] [blame]
// 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 Dart supports two levels of privacy: public and private.
* A declaration is private iff its name is private, otherwise it is public.
* A name q is private iff any one of the identifiers that comprise q is
* private, otherwise it is public.
* An identifier is private iff it begins with an underscore (the _ character)
* otherwise it is public.
* A declaration m is accessible to library L if m is declared in L or if m is
* public.
* @description Checks that various private class members are perfectly
* accessible inside the library where the class is declared even when
* accessed via a subclass instance.
* @author iefremov
*/
import "../../../Utils/expect.dart";
abstract class _A {
var _var = 54;
static var _staticvar = "abyrvalg";
final _finalvar = "final!";
_fun() {return 42;}
static _staticfun() {return 54;}
_abstractfun();
_A() {}
_A.named() {}
factory _A.fctry() {throw 2;}
get _getter {return 100500;}
void set _setter(x) {throw 1;}
}
abstract class B extends _A {}
class C extends B {
_abstractfun() {}
}
main() {
C a = new C();
Expect.equals(54, a._var);
Expect.equals("abyrvalg", _A._staticvar);
Expect.equals("final!", a._finalvar);
Expect.equals(42, a._fun());
Expect.equals(54, _A._staticfun());
a._abstractfun();
Expect.equals(100500, a._getter);
try {
a._setter = 1;
} on int catch (ok) {}
try {
new _A.fctry();
} on int catch (ok) {}
}