blob: 1310b49701fd5aa9f714174d97f7d5051946bab6 [file] [log] [blame]
// Copyright (c) 2024, 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.
// Regression test for https://dartbug.com/53376.
import 'common/service_test_common.dart';
import 'common/test_helper.dart';
const String shortFile =
'breakpoints_ignore_late_initialization_error_instructions_test.dart';
// AUTOGENERATED START
//
// Update these constants by running:
//
// dart pkg/vm_service/test/update_line_numbers.dart <test.dart>
//
const LINE_A = 33;
const LINE_B = 42;
const LINE_C = 51;
// AUTOGENERATED END
int getThree() => 3;
void testeeMain() {
// ignore: prefer_final_locals
late int x = 1;
// When a late variable is read, the VM performs checks to ensure that the
// variable has been initialized. When a breakpoint is set on the following
// line, it should resolve to the [toDouble] call instruction, not to an
// instruction part of the late variable initialization checks.
final double xd = x.toDouble(); // LINE_A
print(xd);
late final int y = 2;
// When a late final variable is read, the VM performs checks to ensure that
// the variable has been assigned a value exactly once. When a breakpoint is
// set on the following line, it should resolve to the [toDouble] call
// instruction, not to an instruction part of the late variable assignment
// checks.
final double yd = y.toDouble(); // LINE_B
print(yd);
late final int z;
// When a late final variable is assigned a value, the VM performs checks to
// ensure that the variable has not already been initialized. When a
// breakpoint is set on the following line, it should resolve to the
// [getThree] call instruction, not to an instruction part of the late
// variable initialization checks.
z = getThree(); // LINE_C
print(z);
}
List<String> stops = [];
const List<String> expected = [
'$shortFile:$LINE_A:23', // on 'toDouble'
'$shortFile:$LINE_B:23', // on 'toDouble'
'$shortFile:$LINE_C:7', // on 'getThree'
];
final tests = <IsolateTest>[
hasPausedAtStart,
setBreakpointAtLine(LINE_A),
setBreakpointAtLine(LINE_B),
setBreakpointAtLine(LINE_C),
resumeProgramRecordingStops(stops, false),
checkRecordedStops(stops, expected),
];
Future<void> main([args = const <String>[]]) => runIsolateTests(
args,
tests,
shortFile,
testeeConcurrent: testeeMain,
pauseOnStart: true,
pauseOnExit: true,
);