|  | // Copyright (c) 2015, 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:convert'; | 
|  | import 'dart:io'; | 
|  |  | 
|  | import 'package:analyzer/error/error.dart'; | 
|  | import 'package:analyzer/src/generated/engine.dart'; | 
|  | import 'package:analyzer/src/generated/source.dart'; | 
|  | import 'package:analyzer/src/lint/linter.dart'; | 
|  |  | 
|  | class CollectingSink extends MockIOSink { | 
|  | final StringBuffer buffer = StringBuffer(); | 
|  |  | 
|  | @override | 
|  | String toString() => buffer.toString(); | 
|  |  | 
|  | String trim() => toString().trim(); | 
|  |  | 
|  | @override | 
|  | void write(obj) { | 
|  | buffer.write(obj); | 
|  | } | 
|  |  | 
|  | @override | 
|  | void writeln([Object? obj = '']) { | 
|  | buffer.writeln(obj); | 
|  | } | 
|  | } | 
|  |  | 
|  | class MockErrorType implements ErrorType { | 
|  | @override | 
|  | late String displayName; | 
|  |  | 
|  | @override | 
|  | late String name; | 
|  |  | 
|  | @override | 
|  | late int ordinal; | 
|  |  | 
|  | @override | 
|  | late ErrorSeverity severity; | 
|  |  | 
|  | @override | 
|  | int compareTo(ErrorType other) => 0; | 
|  |  | 
|  | @override | 
|  | String toString() => 'MockErrorType'; | 
|  | } | 
|  |  | 
|  | class MockIOSink implements IOSink { | 
|  | @override | 
|  | late Encoding encoding; | 
|  |  | 
|  | @override | 
|  | Future get done => Future.value(); | 
|  |  | 
|  | @override | 
|  | void add(List<int> data) {} | 
|  |  | 
|  | @override | 
|  | void addError(Object error, [StackTrace? stackTrace]) {} | 
|  |  | 
|  | @override | 
|  | Future addStream(Stream<List<int>> stream) => Future.value(); | 
|  |  | 
|  | @override | 
|  | Future close() => Future.value(); | 
|  |  | 
|  | @override | 
|  | Future flush() => Future.value(); | 
|  |  | 
|  | @override | 
|  | void write(Object? obj) {} | 
|  |  | 
|  | @override | 
|  | void writeAll(Iterable objects, [String separator = '']) {} | 
|  |  | 
|  | @override | 
|  | void writeCharCode(int charCode) {} | 
|  |  | 
|  | @override | 
|  | void writeln([Object? obj = '']) {} | 
|  | } | 
|  |  | 
|  | class MockReporter extends Reporter { | 
|  | List<LinterException> exceptions = <LinterException>[]; | 
|  |  | 
|  | List<String> warnings = <String>[]; | 
|  |  | 
|  | MockReporter(); | 
|  |  | 
|  | @override | 
|  | void exception(LinterException exception) { | 
|  | exceptions.add(exception); | 
|  | } | 
|  |  | 
|  | @override | 
|  | void warn(String message) { | 
|  | warnings.add(message); | 
|  | } | 
|  | } | 
|  |  | 
|  | class MockSource extends BasicSource { | 
|  | @override | 
|  | final String fullName; | 
|  |  | 
|  | MockSource(this.fullName) : super(Uri.file(fullName)); | 
|  |  | 
|  | @override | 
|  | TimestampedData<String> get contents => TimestampedData<String>(0, ''); | 
|  |  | 
|  | @override | 
|  | bool exists() => false; | 
|  |  | 
|  | @override | 
|  | dynamic noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); | 
|  | } | 
|  |  | 
|  | class TestErrorCode extends ErrorCode { | 
|  | @override | 
|  | late ErrorSeverity errorSeverity; | 
|  |  | 
|  | @override | 
|  | late ErrorType type; | 
|  |  | 
|  | TestErrorCode(String name, String message) | 
|  | : super( | 
|  | problemMessage: message, | 
|  | name: name, | 
|  | uniqueName: 'TestErrorCode.$name', | 
|  | ); | 
|  | } |