| // Copyright (c) 2020, 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. | |
| // Checks that external variable declarations are allowed. | |
| // No implementation at run-time, so it throws. | |
| import 'package:expect/expect.dart'; | |
| // External variables cannot be abstract, const, late or have an initializer. | |
| external var top1; | |
| external final top2; | |
| external int top3; | |
| external final bool top4; | |
| /// Class C is not abstract. | |
| class C { | |
| external static var static1; | |
| external static final static2; | |
| external static int static3; | |
| external static final bool static4; | |
| external var instance1; | |
| external final instance2; | |
| external int instance3; | |
| external final bool instance4; | |
| external covariant var instance5; | |
| external covariant num instance6; | |
| } | |
| class D extends C { | |
| // Valid override. Inherits covariance. | |
| external int instance6; | |
| } | |
| void shouldThrow(Function() f) => Expect.throwsNoSuchMethodError(f); | |
| void main() { | |
| shouldThrow(() => top1); | |
| shouldThrow(() => top1 = 0); | |
| shouldThrow(() => top2); | |
| shouldThrow(() => top3); | |
| shouldThrow(() => top3 = 0); | |
| shouldThrow(() => top4); | |
| shouldThrow(() => C.static1); | |
| shouldThrow(() => C.static1 = 0); | |
| shouldThrow(() => C.static2); | |
| shouldThrow(() => C.static3); | |
| shouldThrow(() => C.static3 = 0); | |
| shouldThrow(() => C.static4); | |
| C c = C(); | |
| shouldThrow(() => c.instance1); | |
| shouldThrow(() => c.instance1 = 0); | |
| shouldThrow(() => c.instance2); | |
| shouldThrow(() => c.instance3); | |
| shouldThrow(() => c.instance3 = 0); | |
| shouldThrow(() => c.instance4); | |
| shouldThrow(() => c.instance5); | |
| shouldThrow(() => c.instance5 = 0); | |
| shouldThrow(() => c.instance6); | |
| shouldThrow(() => c.instance6 = 0); | |
| } |