| // Copyright (c) 2021, 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. |
| |
| final bool inSoundMode = <int?>[] is! List<int>; |
| |
| main() { |
| print('inSoundMode: $inSoundMode'); |
| testDefaultValues(); |
| } |
| |
| class Class1 { |
| final int field; |
| |
| Class1._([this.field = 42]); |
| factory Class1([int field]) = Class1._; |
| } |
| |
| class Class2 { |
| final int field; |
| |
| Class2._({this.field: 42}); |
| factory Class2({int field}) = Class2._; |
| } |
| |
| void testDefaultValues() { |
| var f1a = Class1.new; |
| var c1a = f1a(); |
| expect(42, c1a.field); |
| var c1b = f1a(87); |
| expect(87, c1b.field); |
| () { |
| f1a(42, 87); // error |
| }; |
| |
| dynamic f1b = Class1.new; |
| var c1c = f1b(); |
| expect(42, c1c.field); |
| var c1d = f1b(87); |
| expect(87, c1d.field); |
| throws(() => f1b(42, 87)); |
| |
| var f2a = Class2.new; |
| var c2a = f2a(); |
| expect(42, c2a.field); |
| var c2b = f2a(field: 87); |
| expect(87, c2b.field); |
| () { |
| f2a(87); // error |
| }; |
| |
| dynamic f2b = Class2.new; |
| var c2c = f2b(); |
| expect(42, c2c.field); |
| var c2d = f2b(field: 87); |
| expect(87, c2d.field); |
| throws(() => f2b(87)); |
| } |
| |
| expect(expected, actual) { |
| if (expected != actual) throw 'Expected $expected, actual $actual'; |
| } |
| |
| throws(Function() f, {bool inSoundModeOnly: false}) { |
| try { |
| f(); |
| } catch (e) { |
| print('Thrown: $e'); |
| return; |
| } |
| if (!inSoundMode && inSoundModeOnly) { |
| return; |
| } |
| throw 'Expected exception'; |
| } |