blob: 8438dce1ff78c0a25d7f7f4fb7b8cb978354c8e4 [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.
// @dart = 2.9
@JS()
library js_typed_interop_anonymous_test;
import 'dart:html';
import 'dart:js' as js;
import 'package:js/js.dart';
import 'package:js/js_util.dart' as js_util;
import 'package:expect/minitest.dart';
@JS()
@anonymous
class Literal {
external factory Literal({int x, String y, num z, Function foo});
external int get x;
external String get y;
external num get z;
external Function get foo;
}
@JS()
@anonymous
class FunctionWithExpando {
external int call();
external String get myExpando;
}
main() {
test('object', () {
dynamic l = new Literal(x: 3, y: 'foo', foo: allowInterop((x) => x * 2));
expect(l.x, equals(3));
expect(l.y, equals('foo'));
expect(l.z, isNull);
expect(l.foo(4), equals(8));
});
test('function', () {
// Get a JS function.
dynamic f = js_util.getProperty(window, 'addEventListener');
js_util.setProperty(f, 'myExpando', 'foo');
expect(f.myExpando, equals('foo'));
});
test('dart object', () {
dynamic o = new Object();
js_util.setProperty(o, 'x', 3);
expect(() => o.x, throwsNoSuchMethodError);
expect(() => o.foo(), throwsNoSuchMethodError);
});
}