blob: ca7e8f0fe29be413a18ce022d1f84c81a3a53857 [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.
// Tests classes implementing other interfaces with JS interop. Only tests
// getters and assumes other instance members work similarly to avoid bloated
// tests.
@JS()
library implements_static_test;
import 'package:js/js.dart';
// Normal and abstract classes for Dart, JS, and anonymous classes.
class DartClass {
int get dartGetter => 0;
}
abstract class AbstractDartClass {
int get abstractDartGetter;
}
@JS()
class JSClass {
external int get jsGetter;
}
@JS()
abstract class AbstractJSClass {
external int get abstractJsGetter;
}
@JS()
@anonymous
class AnonymousClass {
external int get anonymousGetter;
}
@JS()
@anonymous
abstract class AbstractAnonymousClass {
external int get abstractAnonymousGetter;
}
// Dart classes that implement all the other JS type interfaces.
class DartClassImplementsJSClass implements JSClass {
int get jsGetter => 0;
}
class DartClassImplementsAbstractJSClass implements AbstractJSClass {
int get abstractJsGetter => 0;
}
class DartClassImplementsAnonymousClass implements AnonymousClass {
int get anonymousGetter => 0;
}
class DartClassImplementsAbstractAnonymousClass
implements AbstractAnonymousClass {
int get abstractAnonymousGetter => 0;
}
// JS classes that implement all the other interfaces.
@JS()
class JSClassImplementsDartClass implements DartClass {
external int get dartGetter;
}
@JS()
class JSClassImplementsAbstractDartClass implements AbstractDartClass {
external int get abstractDartGetter;
}
@JS()
class JSClassImplementsJSClass implements JSClass {
external int get jsGetter;
}
@JS()
class JSClassImplementsAbstractJSClass implements AbstractJSClass {
external int get abstractJsGetter;
}
@JS()
class JSClassImplementsAnonymousClass implements AnonymousClass {
external int get anonymousGetter;
}
@JS()
class JSClassImplementsAbstractAnonymousClass
implements AbstractAnonymousClass {
external int get abstractAnonymousGetter;
}
// Anonymous classes that implement all the other interfaces.
@JS()
@anonymous
class AnonymousClassImplementsDartClass implements DartClass {
external int get dartGetter;
}
@JS()
@anonymous
class AnonymousClassImplementsAbstractDartClass implements AbstractDartClass {
external int get abstractDartGetter;
}
@JS()
@anonymous
class AnonymousClassImplementsJSClass implements JSClass {
external int get jsGetter;
}
@JS()
@anonymous
class AnonymousClassImplementsAbstractJSClass implements AbstractJSClass {
external int get abstractJsGetter;
}
@JS()
@anonymous
class AnonymousClassImplementsAnonymousClass implements AnonymousClass {
external int get anonymousGetter;
}
@JS()
@anonymous
class AnonymousClassImplementsAbstractAnonymousClass
implements AbstractAnonymousClass {
external int get abstractAnonymousGetter;
}
// Dart, JS, and anonymous classes implementing multiple interfaces.
class DartClassImplementsMultipleInterfaces
implements DartClass, AbstractJSClass, AnonymousClass {
int get dartGetter => 0;
int get abstractJsGetter => 0;
int get anonymousGetter => 0;
}
@JS()
class JSClassImplementsMultipleInterfaces
implements AbstractDartClass, JSClass, AbstractAnonymousClass {
external int get abstractDartGetter;
external int get jsGetter;
external int get abstractAnonymousGetter;
}
@JS()
@anonymous
class AnonymousClassImplementsMultipleInterfaces
implements DartClass, JSClass, AbstractAnonymousClass {
external int get dartGetter;
external int get jsGetter;
external int get abstractAnonymousGetter;
}
void main() {}