blob: 281fc970450fd140cddf3a325bc1e34837740870 [file] [log] [blame]
// 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);
}