dart-sdk/tests/lib/js/constructor_parameters_static_test.dart
Srujan Gaddam 383520d6ed [dart:js_interop] Apply param errors to inline classes
Object literal constructors can't have positional parameters and
inline class members can't have named parameters. Adds tests and
rewords existing errors relating to parameters.

Change-Id: I9a25118b26b6b51857c2a455432ac84d96573e14
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/292241
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Joshua Litt <joshualitt@google.com>
2023-05-22 21:50:51 +00:00

60 lines
2.4 KiB
Dart

// 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.
// Checks for static errors related to parameters for constructors and
// factories.
@JS()
library js_constructor_parameters_static_test;
import 'package:js/js.dart';
import 'package:expect/expect.dart';
@JS()
class Foo {
external Foo({int? a});
// ^
// [web] Named parameters for JS interop functions are only allowed in object literal constructors or @anonymous factories.
external factory Foo.fooFactory({int? a});
// ^
// [web] Named parameters for JS interop functions are only allowed in object literal constructors or @anonymous factories.
}
@JS()
@anonymous
class Bar {
external Bar({int? a});
// ^
// [web] Named parameters for JS interop functions are only allowed in object literal constructors or @anonymous factories.
// Factories of an anonymous class can only contain named parameters.
external factory Bar.barFactoryPositional(int? a);
// ^
// [web] @anonymous factories should not contain any positional parameters.
external factory Bar.barFactoryOptional([int? a]);
// ^
// [web] @anonymous factories should not contain any positional parameters.
external factory Bar.barFactoryMixedOptional(int? a, [int? b]);
// ^
// [web] @anonymous factories should not contain any positional parameters.
external factory Bar.barFactoryMixedNamed(int? a, {int? b});
// ^
// [web] @anonymous factories should not contain any positional parameters.
// Named parameters are okay only for factories of an anonymous class.
external factory Bar.barFactoryNamed({int? a});
}
@JS()
abstract class Baz {
external Baz({int? a});
// ^
// [web] Named parameters for JS interop functions are only allowed in object literal constructors or @anonymous factories.
external factory Baz.bazFactory({int? a});
// ^
// [web] Named parameters for JS interop functions are only allowed in object literal constructors or @anonymous factories.
}
main() {}