blob: b29c418eba67ca430b2c07e6b33648639b2c99ad [file]
// Copyright (c) 2019, 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 'package:analyzer/src/dart/analysis/session.dart';
import 'package:analyzer/src/dart/element/element.dart';
import 'package:analyzer/src/generated/engine.dart' as engine;
import 'package:analyzer/src/summary2/reference.dart';
import 'package:analyzer/src/test_utilities/test_library_builder.dart';
const _sdkSpec = {
'dart:core': LibrarySpec(
uri: 'dart:core',
classes: [
ClassSpec(
'class bool extends Object',
constructors: [
ConstructorSpec(
'const factory fromEnvironment(String name, {bool defaultValue})',
),
],
),
ClassSpec('class double extends num'),
ClassSpec(
'class int extends num',
constructors: [
ConstructorSpec(
'const factory fromEnvironment(String name, {int defaultValue})',
),
],
),
ClassSpec('class num extends Object implements Comparable<num>'),
ClassSpec('abstract class Comparable<T>'),
ClassSpec('abstract class Function extends Object'),
ClassSpec('abstract class Iterable<E> extends Object'),
ClassSpec('abstract class Iterator<E> extends Object'),
ClassSpec('abstract class List<E> extends Object implements Iterable<E>'),
ClassSpec('abstract class Map<K, V> extends Object'),
ClassSpec('class Null extends Object'),
ClassSpec(
'class Object',
methods: [
MethodSpec('String toString()'),
MethodSpec('bool operator ==(Object other)'),
],
),
ClassSpec('abstract class Record extends Object'),
ClassSpec('abstract class Set<E> extends Object implements Iterable<E>'),
ClassSpec(
'class String extends Object',
constructors: [
ConstructorSpec(
'const factory fromEnvironment(String name, {String defaultValue})',
),
],
methods: [
MethodSpec('String toLowerCase()'),
MethodSpec('String operator +(String other)'),
],
),
ClassSpec(
'abstract class Symbol extends Object',
constructors: [ConstructorSpec('const factory new(String name)')],
),
ClassSpec('abstract class Type extends Object'),
],
),
'dart:async': LibrarySpec(
uri: 'dart:async',
imports: ['dart:core'],
classes: [
ClassSpec('abstract class Future<T> extends Object'),
ClassSpec('class FutureOr<T> extends Object'),
],
),
};
class MockSdkElements {
final LibraryElementImpl coreLibrary;
final LibraryElementImpl asyncLibrary;
factory MockSdkElements(
engine.AnalysisContext analysisContext,
RootReference rootReference,
AnalysisSessionImpl analysisSession,
) {
var libraries = buildLibrariesFromSpec(
analysisContext: analysisContext,
rootReference: rootReference,
analysisSession: analysisSession,
specs: _sdkSpec,
);
return MockSdkElements._(
coreLibrary: libraries['dart:core']!,
asyncLibrary: libraries['dart:async']!,
);
}
MockSdkElements._({required this.coreLibrary, required this.asyncLibrary});
}