anchor.diff:  }
   
   class TestFailureException implements Exception {}
  +
  +/// Prints the name of the test, but suppresses all other test output.
  +///
  +/// This is useful to prevent pollution of logs by tests that are expected to
  +/// fail.
  +class NameOnlyReporter implements hack.Reporter {
  +  NameOnlyReporter(hack.Engine testEngine) {
  +    testEngine.onTestStarted.listen(_printTestName);
  +  }
  +
  +  void _printTestName(hack.LiveTest test) {
  +    print('Running ${test.groups.map((hack.Group group) => group.name).join(' ')} ${test.individualName}');
  +  }
  +
  +  @override
  +  void pause() {}
  +
  +  @override
  +  void resume() {}
  +}
  
positive.code: import 'package:meta/meta.dart';
  import 'package:path/path.dart' as path;
  import 'package:pool/pool.dart';
  import 'package:test_core/src/runner/hack_register_platform.dart'
      as hack;
  import 'package:test_api/src/backend/runtime.dart';
  import 'package:test_core/src/executable.dart'
  
negative.code:       ...<String>['-r', 'compact'],
        '--concurrency=$concurrency',
        if (isDebug) '--pause-after-load',
        // Don't pollute logs with output from tests that are expected to fail.
        if (expectFailure)
          '--reporter=name-only',
        '--platform=${SupportedBrowsers.instance.supportedBrowserToPlatform[browser]}',
        '--precompiled=${environment.webUiRootDir.path}/build',
        SupportedBrowsers.instance.browserToConfiguration[browser],
        '--',
        ...testFiles.map((f) => f.relativeToWebUi).toList(),
      ];
  
      if (expectFailure) {
        hack.registerReporter(
          'name-only',
          hack.ReporterDetails(
          'Prints the name of the test, but suppresses all other test output.',
          (_, hack.Engine engine, __) => NameOnlyReporter(engine)),
        );
      }
  
      hack.registerPlatformPlugin(<Runtime>[
        SupportedBrowsers.instance.supportedBrowsersToRuntimes[browser]
  