Files
sdk/pkg/front_end/test/test_utils.dart
T
Johnni Winther 29d7be011e [cfe] Omit line/column from sdk constant coverage
This is done to avoid unnecessary dependency on sdk sources.

Change-Id: I5a72df4bb3a808a5a6398ae45ca587b43734314d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/251264
Reviewed-by: Jens Johansen <jensj@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
2022-07-13 06:52:14 +00:00

48 lines
1.8 KiB
Dart

// Copyright (c) 2022, 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.md file.
import 'package:kernel/ast.dart';
/// Writes constant coverage for [component] into [buffer}.
///
/// Libraries for whose import uri [skipImportUri] returns `true` are skipped.
void addConstantCoverageToExpectation(Component component, StringBuffer buffer,
{required bool Function(Uri?) skipImportUri}) {
bool printedConstantCoverageHeader = false;
for (Source source in component.uriToSource.values) {
if (skipImportUri(source.importUri)) continue;
if (source.constantCoverageConstructors != null &&
source.constantCoverageConstructors!.isNotEmpty) {
if (!printedConstantCoverageHeader) {
buffer.writeln("");
buffer.writeln("");
buffer.writeln("Constructor coverage from constants:");
printedConstantCoverageHeader = true;
}
buffer.writeln("${source.fileUri}:");
for (Reference reference in source.constantCoverageConstructors!) {
buffer.writeln(
"- ${reference.node} (from ${locationToString(reference)})");
}
buffer.writeln("");
}
}
}
/// Computes a string representation of the location of the node from
/// [reference].
///
/// References to sdk nodes only include the file uri to avoid unnecessary
/// dependency on sdk library sources.
String locationToString(Reference reference) {
Location? location = reference.node?.location;
if (location != null && location.file.isScheme('org-dartlang-sdk')) {
// Don't include line/column numbers for sdk libraries to avoid unnecessary
// dependency on sdk library sources.
return '${location.file}';
}
return '$location';
}