Files
sdk/tests/language/primary_constructors/syntax/header_syntax_test.dart
T
Kallen Tu 222947daa2 [tests] Primary constructors: Optional parameters, constructor body, extension type optional parameters.
Tests the following:
- Optional/named parameters for extension type primary constructors.
- We should still produce an error when there's a body on a const constructor.
- Inferring `Object?` as the representation type when the type isn't specified.
-  We can omit the type of an optional parameter with a default value,
in which case, the type is inferred from the default value.

Bug: https://github.com/dart-lang/sdk/issues/61687
Change-Id: Id10fb3f3a14cf683601f52b0b3182a10d0730927
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/465801
Commit-Queue: Kallen Tu <kallentu@google.com>
Reviewed-by: Erik Ernst <eernst@google.com>
2025-12-09 12:31:06 -08:00

88 lines
2.2 KiB
Dart

// Copyright (c) 2025, 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.
// A basic declaring header constructor.
// SharedOptions=--enable-experiment=primary-constructors
import 'package:expect/expect.dart';
class Point(var int x, var int y);
class PointFinal(final int x, final int y);
// Constant constructors.
class const CConst(final int x);
extension type const ExtConst(final int x);
enum const EnumConst(final int x) {
e(1);
}
// Initializing parameters.
class CInitParameters(this.y) {
late int y;
}
// Super parameters.
class C1(final int y);
class CSuperParameters(final int x, super.y) extends C1;
// Named parameters (regular and required).
class CNamedParameters({final int x = 1, required var int y});
enum EnumNamedParameters({final int x = 1, required var int y}) {
e(x: 2, y: 3), f(y: 3);
}
// Optional parameters.
class COptionalParameters([final int x = 1, var int y = 2]);
enum EnumOptionalParameters([final int x = 1, var int y = 2]) {
e(3, 4), f(3), g();
}
void main() {
var p1 = Point(1, 2);
Expect.equals(1, p1.x);
Expect.equals(2, p1.y);
p1.x = 3;
Expect.equals(3, p1.x);
var p2 = PointFinal(3, 4);
Expect.equals(3, p2.x);
Expect.equals(4, p2.y);
Expect.equals(1, const CConst(1).x);
Expect.equals(1, const ExtConst(1).x);
Expect.equals(1, EnumConst.e.x);
Expect.equals(1, CInitParameters(1).y);
Expect.equals(1, CSuperParameters(1, 2).x);
Expect.equals(2, CSuperParameters(1, 2).y);
Expect.equals(1, CNamedParameters(y: 2).x);
Expect.equals(2, CNamedParameters(y: 2).y);
Expect.equals(2, EnumNamedParameters.e.x);
Expect.equals(3, EnumNamedParameters.e.y);
Expect.equals(1, EnumNamedParameters.f.x);
Expect.equals(3, EnumNamedParameters.f.y);
Expect.equals(1, COptionalParameters().x);
Expect.equals(2, COptionalParameters().y);
Expect.equals(3, EnumOptionalParameters.e.x);
Expect.equals(4, EnumOptionalParameters.e.y);
Expect.equals(3, EnumOptionalParameters.f.x);
Expect.equals(2, EnumOptionalParameters.f.y);
Expect.equals(1, EnumOptionalParameters.g.x);
Expect.equals(2, EnumOptionalParameters.g.y);
}