blob: ade7b47f08f9d837aa03d2f0f6ee91800a6e96a3 [file] [log] [blame]
// 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';
}