blob: e1e6e322853cd0793962ba2b2cd2737680f97282 [file] [log] [blame]
// Copyright (c) 2021, 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 = 2.9
import "package:expect/expect.dart";
void main() {
var executor = new Executor();
new Command1().execute(executor);
executor.execute<Command1>(new Command1());
}
class Command1 extends CommandBase<Command1> {}
abstract class Command {}
abstract class CommandBase<TSelf extends CommandBase<TSelf>> extends Command {
void execute(Executor e) {
TSelf self = this as TSelf;
e.execute<TSelf>(self);
}
}
abstract class CommandHandler<T extends Command> {
void handle(T command);
}
class Executor {
void execute<T extends Command>(T action) {
testTypeEquality<CommandHandler<T>, CommandHandler<Command1>>();
}
}
void testTypeEquality<T1, T2>() {
Expect.equals(T1.hashCode, T2.hashCode);
Expect.equals(T1, T2);
Expect.identical(T1, T2);
}