blob: 2c4bfe5cc34d3cf60dfcd692e946f3528e79f30f [file] [log] [blame] [edit]
// 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.
import 'abstract_single_unit.dart';
mixin SelectionMixin on AbstractSingleUnitTest {
late int offset;
late int length;
void setPosition(int index) {
if (index < 0 || index >= parsedTestCode.positions.length) {
throw ArgumentError('Index out of bounds for positions.');
}
offset = parsedTestCode.positions[index].offset;
length = 0;
}
void setPositionOrRange(int index) {
if (index < 0) {
throw ArgumentError('Index must be non-negative.');
}
if (parsedTestCode.positions.isNotEmpty) {
setPosition(index);
} else if (parsedTestCode.ranges.isNotEmpty) {
setRange(index);
} else {
throw ArgumentError('Test code must contain a position or range marker.');
}
}
void setRange(int index) {
if (index < 0 || index >= parsedTestCode.ranges.length) {
throw ArgumentError('Index out of bounds for ranges.');
}
var range = parsedTestCode.ranges[index].sourceRange;
offset = range.offset;
length = range.length;
}
}