blob: 485f8123375fcf77e1a839547bd5b9c3905b6b57 [file] [log] [blame]
// Copyright (c) 2015, 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.
@JS()
library js_typed_interop_anonymous_test;
import 'package:js/js.dart';
import 'package:expect/minitest.dart';
@JS()
@anonymous
class Literal {
external factory Literal({int? x, String? y, num? z});
external set x(int? v);
external int? get x;
external String? get y;
external num? get z;
}
class MockLiteral implements Literal {
int? _v = 0;
set x(int? v) {
_v = v;
}
int? get x => _v;
String? get y => "";
num? get z => 1;
}
main() {
test('simple', () {
var l = new Literal(x: 3, y: "foo");
expect(l.x, equals(3));
expect(l.y, equals("foo"));
expect(l.z, isNull);
});
test('mock', () {
Literal l = new MockLiteral();
expect(l.x, equals(0));
l.x = 3;
expect(l.x, equals(3));
expect(l.y, equals(""));
expect(l.z, equals(1));
});
// Test that instance checks behave appropriately.
test('Instance checks: implements', () {
Object l = new Literal(x: 3, y: "foo");
Object m = new MockLiteral();
expect(m is Literal, isTrue);
expect(m is MockLiteral, isTrue);
expect(l is Literal, isTrue);
expect(l is MockLiteral, isFalse);
});
// Test that casts behave appropriately.
test('Casts: implements', () {
Object l = new Literal(x: 3, y: "foo");
Object m = new MockLiteral();
expect(m as Literal, equals(m));
expect(m as MockLiteral, equals(m));
expect(l as Literal, equals(l));
expect(() => l as MockLiteral, throws);
});
}