76548a7ab9
In dart2wasm applications are by default deployed in `-O2` mode which implies `--minify`. Given this is the default configuration for customers, we want good testing of this configuration and not large numbers of approved failures. => Rewrite various tests to not depend on `<obj>.runtimeType.toString()` Change-Id: I1108b28c63b8bec6ad94df0d7b878b3339776df9 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/436281 Reviewed-by: Lasse Nielsen <lrn@google.com> Commit-Queue: Martin Kustermann <kustermann@google.com>
84 lines
2.4 KiB
Dart
84 lines
2.4 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.
|
|
|
|
import "package:expect/expect.dart";
|
|
|
|
// Test that noSuchMethod calls behave as expected for dynamic object invocations.
|
|
class BaseClass {
|
|
final dynamic finalField = "final!";
|
|
|
|
baz() => "baz!!";
|
|
get bla => (() => "bla!!");
|
|
}
|
|
|
|
class ReturnInvocationName extends BaseClass {
|
|
var _bar;
|
|
|
|
ReturnInvocationName(this._bar);
|
|
|
|
noSuchMethod(Invocation invocation) {
|
|
return invocation.memberName;
|
|
}
|
|
|
|
bar() {
|
|
return _bar;
|
|
}
|
|
}
|
|
|
|
class Foo {}
|
|
|
|
main() {
|
|
dynamic x = new ReturnInvocationName(42);
|
|
Expect.equals('final!', x.finalField);
|
|
Expect.equals('final!', x.finalField, 'field was not set');
|
|
|
|
Expect.equals(#_prototype, x._prototype);
|
|
Expect.equals(#_prototype, x._prototype());
|
|
|
|
Expect.equals(#prototype, x.prototype);
|
|
Expect.equals(#prototype, x.prototype());
|
|
|
|
Expect.equals(#constructor, x.constructor);
|
|
Expect.equals(#constructor, x.constructor());
|
|
|
|
Expect.equals(#__proto__, x.__proto__);
|
|
Expect.equals(#__proto__, x.__proto__);
|
|
|
|
Expect.equals(42, x.bar());
|
|
Expect.equals(42, (x.bar)());
|
|
|
|
Expect.equals(Symbol.unaryMinus, -x);
|
|
Expect.equals(#+, x + 42);
|
|
Expect.equals(#[], x[4]);
|
|
|
|
dynamic b = new BaseClass();
|
|
Expect.equals('final!', b.finalField);
|
|
Expect.throwsNoSuchMethodError(() => b.finalField = "foo");
|
|
Expect.equals('final!', b.finalField, 'field was not set');
|
|
|
|
// Verify that noSuchMethod errors are triggered even when the JS object
|
|
// happens to have a matching member name.
|
|
dynamic f = new Foo();
|
|
Expect.throwsNoSuchMethodError(() => f.prototype);
|
|
Expect.throwsNoSuchMethodError(() => f.prototype());
|
|
Expect.throwsNoSuchMethodError(() => f.prototype = 42);
|
|
|
|
Expect.throwsNoSuchMethodError(() => f.constructor);
|
|
Expect.throwsNoSuchMethodError(() => f.constructor());
|
|
Expect.throwsNoSuchMethodError(() => f.constructor = 42);
|
|
|
|
Expect.throwsNoSuchMethodError(() => f.__proto__);
|
|
|
|
// These are valid JS properties but not Dart methods.
|
|
Expect.throwsNoSuchMethodError(() => f.toLocaleString);
|
|
|
|
Expect.throwsNoSuchMethodError(() => f.hasOwnProperty);
|
|
|
|
f = (int x) {};
|
|
// Calls with the wrong number of arguments should be NoSuchMethodErrors.
|
|
Expect.throwsNoSuchMethodError(() => f());
|
|
Expect.throwsNoSuchMethodError(() => f('hi', '!'));
|
|
Expect.throwsNoSuchMethodError(() => f(x: 42));
|
|
}
|