dart-sdk/tests/language/void/void_type_override_test.dart
Lasse Reichstein Holst Nielsen c10e96ba2f Migrate void tests to Null Safety.
Change-Id: I9daeebde586a00169bdaf069c7dc2fdc5d3d97f2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/147160
Commit-Queue: Lasse R.H. Nielsen <lrn@google.com>
Reviewed-by: Bob Nystrom <rnystrom@google.com>
2020-06-03 13:22:10 +00:00

123 lines
2.1 KiB
Dart

// Copyright (c) 2017, 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 type checks involving the void type and overriding.
import 'package:expect/expect.dart';
use<T>(T x) {}
class A<T> {
T x;
A(this.x);
Object? y;
int z = 0;
T foo() => x;
void bar() {}
void gee(T x) {}
f(A<Object?> a) {}
g(A<void> a) {}
h(A<T> a) {}
}
class B implements A<Object?> {
void //# 00: ok
/* //# 00: continued
var
*/ //# 00: continued
x;
void //# 00b: ok
/* //# 00b: continued
var
*/ //# 00b: continued
y;
void //# 00c: compile-time error
/* //# 00c: continued
int
*/ //# 00c: continued
z = 0;
void //# 01: ok
foo() {}
int bar() => 499;
void gee(void x) {}
f(A<void> a) {}
g(A<void> a) {}
h(A<void> a) {}
}
class C implements A<void> {
void x;
Object? y;
int z = 0;
void foo() {}
void bar() {}
void gee(void x) {
use(x);
}
f(covariant C c) {}
g(covariant C c) {}
h(covariant C c) {}
}
class D implements A<void> {
Object? x; // Setter will become a voidness preservation violation.
Object? y;
int z = 0;
Object? foo() => null;
void bar() {}
void gee(
Object? // Will become a voidness preservation violation.
x) {}
f(A<Object?> a) {}
g(
A<Object?> // Will become a voidness preservation violation.
a) {}
h(
A<Object?> // Will become a voidness preservation violation.
a) {}
}
void instantiateClasses() {
var a = new A<void>(null);
var b = new B();
var c = new C();
var d = new D();
a.foo();
b.foo();
c.foo();
d.foo();
a.bar();
b.bar();
c.bar();
d.bar();
a.gee(499);
b.gee(499);
c.gee(499);
d.gee(499);
}
void testAssignments() {
A<void> a1 = new A<Object?>(null);
A<Object?> a2 = new A<void>(null);
A a3 = new A<void>(null);
A<dynamic> a4 = new A<void>(null);
dynamic a5 = new A<void>(null);
}
main() {
instantiateClasses();
testAssignments();
}