dart-sdk/tests/lib_2/js/operator_test.dart
Srujan Gaddam f8933dda8d [pkg:js] Disallow all operators in JS classes
Closes https://github.com/dart-lang/sdk/issues/48515

Expands existing checks for index operations to all operators. This
only affects instance members and not extension members.

Change-Id: I8cbb5b12a49539ea502e4396e1b469ffb0e17d5e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/235980
Reviewed-by: Riley Porter <rileyporter@google.com>
Reviewed-by: Sigmund Cherem <sigmund@google.com>
Commit-Queue: Srujan Gaddam <srujzs@google.com>
2022-03-09 01:48:24 +00:00

171 lines
6.1 KiB
Dart

// Copyright (c) 2022, 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 operator_test;
import 'package:js/js.dart';
@JS()
class JSClass {
// https://dart.dev/guides/language/language-tour#_operators for the list of
// operators allowed by the language.
external void operator <(_);
// ^
// [web] JS interop classes do not support operator methods.
external void operator >(_);
// ^
// [web] JS interop classes do not support operator methods.
external void operator <=(_);
// ^
// [web] JS interop classes do not support operator methods.
external void operator >=(_);
// ^
// [web] JS interop classes do not support operator methods.
external void operator -(_);
// ^
// [web] JS interop classes do not support operator methods.
external void operator +(_);
// ^
// [web] JS interop classes do not support operator methods.
external void operator /(_);
// ^
// [web] JS interop classes do not support operator methods.
external void operator ~/(_);
// ^
// [web] JS interop classes do not support operator methods.
external void operator *(_);
// ^
// [web] JS interop classes do not support operator methods.
external void operator %(_);
// ^
// [web] JS interop classes do not support operator methods.
external void operator |(_);
// ^
// [web] JS interop classes do not support operator methods.
external void operator ^(_);
// ^
// [web] JS interop classes do not support operator methods.
external void operator &(_);
// ^
// [web] JS interop classes do not support operator methods.
external void operator <<(_);
// ^
// [web] JS interop classes do not support operator methods.
external void operator >>(_);
// ^
// [web] JS interop classes do not support operator methods.
external void operator >>>(_);
// ^
// [web] JS interop classes do not support operator methods.
external void operator [](_);
// ^
// [web] JS interop classes do not support operator methods.
external void operator []=(_, __);
// ^
// [web] JS interop classes do not support operator methods.
external void operator ~();
// ^
// [web] JS interop classes do not support operator methods.
external bool operator ==(_);
// ^
// [web] JS interop classes do not support operator methods.
}
@JS()
@anonymous
class AnonymousClass {
external void operator <(_);
// ^
// [web] JS interop classes do not support operator methods.
external void operator >(_);
// ^
// [web] JS interop classes do not support operator methods.
external void operator <=(_);
// ^
// [web] JS interop classes do not support operator methods.
external void operator >=(_);
// ^
// [web] JS interop classes do not support operator methods.
external void operator -(_);
// ^
// [web] JS interop classes do not support operator methods.
external void operator +(_);
// ^
// [web] JS interop classes do not support operator methods.
external void operator /(_);
// ^
// [web] JS interop classes do not support operator methods.
external void operator ~/(_);
// ^
// [web] JS interop classes do not support operator methods.
external void operator *(_);
// ^
// [web] JS interop classes do not support operator methods.
external void operator %(_);
// ^
// [web] JS interop classes do not support operator methods.
external void operator |(_);
// ^
// [web] JS interop classes do not support operator methods.
external void operator ^(_);
// ^
// [web] JS interop classes do not support operator methods.
external void operator &(_);
// ^
// [web] JS interop classes do not support operator methods.
external void operator <<(_);
// ^
// [web] JS interop classes do not support operator methods.
external void operator >>(_);
// ^
// [web] JS interop classes do not support operator methods.
external void operator >>>(_);
// ^
// [web] JS interop classes do not support operator methods.
external void operator [](_);
// ^
// [web] JS interop classes do not support operator methods.
external void operator []=(_, __);
// ^
// [web] JS interop classes do not support operator methods.
external void operator ~();
// ^
// [web] JS interop classes do not support operator methods.
external bool operator ==(_);
// ^
// [web] JS interop classes do not support operator methods.
}
@JS()
class JSClassExtensions {}
extension _ on JSClassExtensions {
// External operators in extensions are allowed for now, but don't work as
// intended. Specific operators will need to be allowlisted in the future.
// TODO(srujzs): Remove this test once we do that.
external void operator <(_);
external void operator >(_);
external void operator <=(_);
external void operator >=(_);
external void operator -(_);
external void operator +(_);
external void operator /(_);
external void operator ~/(_);
external void operator *(_);
external void operator %(_);
external void operator |(_);
external void operator ^(_);
external void operator &(_);
external void operator <<(_);
external void operator >>(_);
external void operator >>>(_);
external void operator [](_);
external void operator []=(_, __);
external void operator ~();
// No `==` as it's an `Object` method.
}
void main() {}