blob: 3d4f2addc39ee5e257bcf8898142416eddcd327f [file] [log] [blame]
// Copyright (c) 2017, 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 'dart:collection';
import 'dart:io';
import '../../util/io.dart';
import '../configuration.dart';
import '../engine.dart';
import '../reporter.dart';
import '../reporter/compact.dart';
import '../reporter/expanded.dart';
import '../reporter/json.dart';
/// Constructs a reporter for the provided engine with the provided
/// configuration.
typedef ReporterFactory = Reporter Function(Configuration, Engine, StringSink);
/// Container for a reporter description and corresponding factory.
class ReporterDetails {
final String description;
final ReporterFactory factory;
ReporterDetails(this.description, this.factory);
}
/// All reporters and their corresponding details.
final UnmodifiableMapView<String, ReporterDetails> allReporters =
UnmodifiableMapView<String, ReporterDetails>(_allReporters);
final _allReporters = <String, ReporterDetails>{
'expanded': ReporterDetails(
'A separate line for each update.',
(config, engine, sink) => ExpandedReporter.watch(engine, sink,
color: config.color,
printPath: config.paths.length > 1 ||
Directory(config.paths.single).existsSync(),
printPlatform: config.suiteDefaults.runtimes.length > 1)),
'compact': ReporterDetails(
'A single line, updated continuously.',
(config, engine, sink) => CompactReporter.watch(engine, sink,
color: config.color,
printPath: config.paths.length > 1 ||
Directory(config.paths.single).existsSync(),
printPlatform: config.suiteDefaults.runtimes.length > 1)),
'json': ReporterDetails(
'A machine-readable format (see '
'https://dart.dev/go/test-docs/json_reporter.md).',
(_, engine, sink) => JsonReporter.watch(engine, sink)),
};
final defaultReporter = inTestTests
? 'expanded'
: canUseSpecialChars
? 'compact'
: 'expanded';
/// **Do not call this function without express permission from the test package
/// authors**.
///
/// This globally registers a reporter.
void registerReporter(String name, ReporterDetails reporterDetails) {
_allReporters[name] = reporterDetails;
}