Remove AbsolutePathContext and use package:path instead.

I see however that linter/test/rule_test.dart uses it, but as far as I
can see, that's it. All other usages are from analyzer and
analysis_server.

R=brianwilkerson@google.com

Change-Id: I2b82870a4a4ec6f155326d8ee6dc1c1028f84793
Reviewed-on: https://dart-review.googlesource.com/52265
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
This commit is contained in:
Konstantin Shcheglov 2018-04-20 21:01:06 +00:00 committed by commit-bot@chromium.org
parent 74a69a03c4
commit 818c4b5bfd
10 changed files with 34 additions and 390 deletions

View file

@ -774,7 +774,8 @@ class AnalysisServer {
* This means that it is absolute and normalized.
*/
bool isValidFilePath(String path) {
return resourceProvider.absolutePathContext.isValid(path);
return resourceProvider.pathContext.isAbsolute(path) &&
resourceProvider.pathContext.normalize(path) == path;
}
/**

View file

@ -31,7 +31,6 @@ import 'package:analyzer/src/source/path_filter.dart';
import 'package:analyzer/src/source/pub_package_map_provider.dart';
import 'package:analyzer/src/source/sdk_ext.dart';
import 'package:analyzer/src/task/options.dart';
import 'package:analyzer/src/util/absolute_path.dart';
import 'package:analyzer/src/util/glob.dart';
import 'package:analyzer/src/util/yaml.dart';
import 'package:analyzer_plugin/protocol/protocol_common.dart' as protocol;
@ -440,13 +439,6 @@ class ContextManagerImpl implements ContextManager {
*/
final DartSdkManager sdkManager;
/**
* The context used to work with absolute file system paths.
*
* TODO(scheglov) remove [pathContext].
*/
AbsolutePathContext absolutePathContext;
/**
* The context used to work with file system paths.
*/
@ -532,7 +524,6 @@ class ContextManagerImpl implements ContextManager {
this.analyzedFilesGlobs,
this._instrumentationService,
this.defaultContextOptions) {
absolutePathContext = resourceProvider.absolutePathContext;
pathContext = resourceProvider.pathContext;
}
@ -953,7 +944,7 @@ class ContextManagerImpl implements ContextManager {
String path, ContextInfo info, Folder folder) {
// Check to see if this is the .packages file for this context and if so,
// update the context's source factory.
if (absolutePathContext.basename(path) == PACKAGE_SPEC_NAME) {
if (pathContext.basename(path) == PACKAGE_SPEC_NAME) {
String contextRoot = info.folder.path;
ContextBuilder builder =
callbacks.createContextBuilder(info.folder, defaultContextOptions);
@ -1052,8 +1043,7 @@ class ContextManagerImpl implements ContextManager {
callbacks.computingPackageMap(true);
try {
// Try .packages first.
if (absolutePathContext.basename(packagespecFile.path) ==
PACKAGE_SPEC_NAME) {
if (pathContext.basename(packagespecFile.path) == PACKAGE_SPEC_NAME) {
Packages packages = _readPackagespec(packagespecFile);
return new PackagesFileDisposition(packages);
}
@ -1384,7 +1374,7 @@ class ContextManagerImpl implements ContextManager {
case ChangeType.ADD:
Resource resource = resourceProvider.getResource(path);
String directoryPath = absolutePathContext.dirname(path);
String directoryPath = pathContext.dirname(path);
// Check to see if we need to create a new context.
if (info.isTopLevel) {
@ -1394,8 +1384,7 @@ class ContextManagerImpl implements ContextManager {
if (_isPubspec(path)) {
// Check for a sibling .packages file.
if (!resourceProvider
.getFile(absolutePathContext.append(
directoryPath, PACKAGE_SPEC_NAME))
.getFile(pathContext.join(directoryPath, PACKAGE_SPEC_NAME))
.exists) {
_extractContext(info, resource);
return;
@ -1404,8 +1393,7 @@ class ContextManagerImpl implements ContextManager {
if (_isPackagespec(path)) {
// Check for a sibling pubspec.yaml file.
if (!resourceProvider
.getFile(
absolutePathContext.append(directoryPath, PUBSPEC_NAME))
.getFile(pathContext.join(directoryPath, PUBSPEC_NAME))
.exists) {
_extractContext(info, resource);
return;
@ -1429,15 +1417,14 @@ class ContextManagerImpl implements ContextManager {
// Note that it's important to verify that there is NEITHER a .packages nor a
// lingering pubspec.yaml before merging.
if (!info.isTopLevel) {
String directoryPath = absolutePathContext.dirname(path);
String directoryPath = pathContext.dirname(path);
// Only merge if this is the same directory described by our info object.
if (info.folder.path == directoryPath) {
if (_isPubspec(path)) {
// Check for a sibling .packages file.
if (!resourceProvider
.getFile(absolutePathContext.append(
directoryPath, PACKAGE_SPEC_NAME))
.getFile(pathContext.join(directoryPath, PACKAGE_SPEC_NAME))
.exists) {
_mergeContext(info);
return;
@ -1446,8 +1433,7 @@ class ContextManagerImpl implements ContextManager {
if (_isPackagespec(path)) {
// Check for a sibling pubspec.yaml file.
if (!resourceProvider
.getFile(
absolutePathContext.append(directoryPath, PUBSPEC_NAME))
.getFile(pathContext.join(directoryPath, PUBSPEC_NAME))
.exists) {
_mergeContext(info);
return;
@ -1479,16 +1465,14 @@ class ContextManagerImpl implements ContextManager {
* context root [root], contains a folder whose name starts with '.'.
*/
bool _isContainedInDotFolder(String root, String path) {
String pathDir = absolutePathContext.dirname(path);
String suffixPath = absolutePathContext.suffix(root, pathDir);
if (suffixPath == null) {
return false;
}
for (String pathComponent in absolutePathContext.split(suffixPath)) {
if (pathComponent.startsWith('.') &&
pathComponent != '.' &&
pathComponent != '..') {
return true;
String pathDir = pathContext.dirname(path);
String rootPrefix = root + pathContext.separator;
if (pathDir.startsWith(rootPrefix)) {
String suffixPath = pathDir.substring(rootPrefix.length);
for (String pathComponent in pathContext.split(suffixPath)) {
if (pathComponent.startsWith('.')) {
return true;
}
}
}
return false;
@ -1504,7 +1488,7 @@ class ContextManagerImpl implements ContextManager {
*/
bool _isExcludedBy(List<String> excludedPaths, String path) {
return excludedPaths.any((excludedPath) {
if (absolutePathContext.isWithin(excludedPath, path)) {
if (pathContext.isWithin(excludedPath, path)) {
return true;
}
return path == excludedPath;
@ -1516,19 +1500,19 @@ class ContextManagerImpl implements ContextManager {
* context root [root].
*/
bool _isInTopLevelDocDir(String root, String path) {
String suffixPath = absolutePathContext.suffix(root, path);
if (suffixPath == null) {
return false;
String rootPrefix = root + pathContext.separator;
if (path.startsWith(rootPrefix)) {
String suffix = path.substring(rootPrefix.length);
return suffix == DOC_DIR_NAME ||
suffix.startsWith(DOC_DIR_NAME + pathContext.separator);
}
return suffixPath == DOC_DIR_NAME ||
suffixPath.startsWith(DOC_DIR_NAME + absolutePathContext.separator);
return false;
}
bool _isPackagespec(String path) =>
absolutePathContext.basename(path) == PACKAGE_SPEC_NAME;
pathContext.basename(path) == PACKAGE_SPEC_NAME;
bool _isPubspec(String path) =>
absolutePathContext.basename(path) == PUBSPEC_NAME;
bool _isPubspec(String path) => pathContext.basename(path) == PUBSPEC_NAME;
/**
* Merges [info] context into its parent.

View file

@ -7,7 +7,6 @@ import 'package:analysis_server/src/plugin/plugin_manager.dart';
import 'package:analyzer/file_system/file_system.dart';
import 'package:analyzer/src/context/context_root.dart';
import 'package:analyzer/src/dart/analysis/driver.dart';
import 'package:analyzer/src/util/absolute_path.dart';
import 'package:front_end/src/base/source.dart';
import 'package:path/src/context.dart';
@ -99,10 +98,9 @@ class PluginWatcher implements DriverWatcher {
* [driver].
*/
String _getSdkPath(AnalysisDriver driver) {
AbsolutePathContext context = resourceProvider.absolutePathContext;
String sdkRoot = driver.sourceFactory.forUri('dart:core').fullName;
while (context.basename(sdkRoot) != 'lib') {
String parent = context.dirname(sdkRoot);
while (resourceProvider.pathContext.basename(sdkRoot) != 'lib') {
String parent = resourceProvider.pathContext.dirname(sdkRoot);
if (parent == sdkRoot) {
break;
}

View file

@ -7,7 +7,6 @@ library analyzer.file_system.file_system;
import 'dart:async';
import 'package:analyzer/src/generated/source.dart';
import 'package:analyzer/src/util/absolute_path.dart';
import 'package:path/path.dart';
import 'package:watcher/watcher.dart';
@ -225,11 +224,6 @@ abstract class Resource {
* [Resource]s.
*/
abstract class ResourceProvider {
/**
* Get the absolute path context used by this resource provider.
*/
AbsolutePathContext get absolutePathContext;
/**
* Get the path context used by this resource provider.
*/

View file

@ -12,7 +12,6 @@ import 'dart:core';
import 'package:analyzer/file_system/file_system.dart';
import 'package:analyzer/src/generated/source_io.dart';
import 'package:analyzer/src/source/source_resource.dart';
import 'package:analyzer/src/util/absolute_path.dart';
import 'package:path/path.dart' as pathos;
import 'package:watcher/watcher.dart';
@ -31,9 +30,6 @@ class MemoryResourceProvider implements ResourceProvider {
final pathos.Context _pathContext;
@override
final AbsolutePathContext absolutePathContext;
MemoryResourceProvider(
{pathos.Context context, @deprecated bool isWindows: false})
: _pathContext = (context ??= pathos.style == pathos.Style.windows
@ -41,9 +37,7 @@ class MemoryResourceProvider implements ResourceProvider {
// the drive inserted by MemoryResourceProvider.convertPath
// so that packages are mapped to the correct drive
? new pathos.Context(current: 'C:\\')
: pathos.context),
absolutePathContext =
new AbsolutePathContext(context.style == pathos.Style.windows);
: pathos.context);
@override
pathos.Context get pathContext => _pathContext;

View file

@ -11,7 +11,6 @@ import 'dart:io' as io;
import 'package:analyzer/file_system/file_system.dart';
import 'package:analyzer/src/generated/source_io.dart';
import 'package:analyzer/src/source/source_resource.dart';
import 'package:analyzer/src/util/absolute_path.dart';
import 'package:path/path.dart';
import 'package:watcher/watcher.dart';
@ -71,10 +70,6 @@ class PhysicalResourceProvider implements ResourceProvider {
*/
final String _stateLocation;
@override
final AbsolutePathContext absolutePathContext =
new AbsolutePathContext(io.Platform.isWindows);
PhysicalResourceProvider(FileReadMode fileReadMode, {String stateLocation})
: _stateLocation = stateLocation ?? _getStandardStateLocation() {
if (fileReadMode != null) {
@ -256,7 +251,7 @@ class _PhysicalFolder extends _PhysicalResource implements Folder {
@override
bool contains(String path) {
return absolutePathContext.isWithin(this.path, path);
return pathContext.isWithin(this.path, path);
}
@override
@ -345,9 +340,6 @@ abstract class _PhysicalResource implements Resource {
_PhysicalResource(this._entry);
AbsolutePathContext get absolutePathContext =>
PhysicalResourceProvider.INSTANCE.absolutePathContext;
@override
bool get exists => _entry.existsSync();
@ -356,7 +348,7 @@ abstract class _PhysicalResource implements Resource {
@override
Folder get parent {
String parentPath = absolutePathContext.dirname(path);
String parentPath = pathContext.dirname(path);
if (parentPath == path) {
return null;
}
@ -372,7 +364,7 @@ abstract class _PhysicalResource implements Resource {
Context get pathContext => io.Platform.isWindows ? windows : posix;
@override
String get shortName => absolutePathContext.basename(path);
String get shortName => pathContext.basename(path);
@override
bool operator ==(other) {

View file

@ -1,170 +0,0 @@
// 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.
library analyzer.src.util.absolute_path;
/// The class for manipulating absolute, normalized paths.
class AbsolutePathContext {
static const int _COLON = 0x3A;
static const int _LOWER_A = 0x61;
static const int _LOWER_Z = 0x7A;
static const int _UPPER_A = 0x41;
static const int _UPPER_Z = 0x5A;
final bool _isWindows;
String separator;
int _separatorChar;
String _singlePeriodComponent;
String _doublePeriodComponent;
String _singlePeriodEnding;
String _doublePeriodEnding;
AbsolutePathContext(this._isWindows) {
separator = _isWindows ? r'\' : '/';
_separatorChar = separator.codeUnitAt(0);
_singlePeriodComponent = separator + '.' + separator;
_doublePeriodComponent = separator + '..' + separator;
_singlePeriodEnding = separator + '.';
_doublePeriodEnding = separator + '..';
}
/// Append the given relative [suffix] to the given absolute [parent].
///
/// context.append('/path/to', 'foo'); // -> '/path/to/foo'
///
/// The given [suffix] cannot be an absolute path or use `..`.
String append(String parent, String suffix) {
return '$parent$separator$suffix';
}
/// Return the part of the absolute [path] after the last separator on the
/// context's platform.
///
/// context.basename('/path/to/foo.dart'); // -> 'foo.dart'
/// context.basename('/path/to'); // -> 'to'
/// context.basename('/path'); // -> 'path'
/// context.basename('/'); // -> ''
String basename(String path) {
int index = path.lastIndexOf(separator);
return path.substring(index + 1);
}
/// Return the part of the absolute [path] before the last separator.
///
/// context.dirname('/path/to/foo.dart'); // -> '/path/to'
/// context.dirname('/path/to'); // -> '/path'
/// context.dirname(r'/path'); // -> '/'
/// context.dirname(r'/'); // -> '/'
/// context.dirname(r'C:\path'); // -> 'C:\'
/// context.dirname(r'C:\'); // -> 'C:\'
String dirname(String path) {
int firstIndex = path.indexOf(separator);
int lastIndex = path.lastIndexOf(separator);
return lastIndex == firstIndex
? path.substring(0, firstIndex + 1)
: path.substring(0, lastIndex);
}
/// Return `true` if the given [path] is valid.
///
/// context.isNormalized('/foo/bar'); // -> true
/// context.isNormalized('/foo/bar/../baz'); // -> false
bool isValid(String path) {
return _isAbsolute(path) && _isNormalized(path);
}
/// Return `true` if [child] is a path beneath [parent], and `false`
/// otherwise. Both the [child] and [parent] paths must be absolute paths.
///
/// context.isWithin('/root/path', '/root/path/a'); // -> true
/// context.isWithin('/root/path', '/root/other'); // -> false
/// context.isWithin('/root/path', '/root/path'); // -> false
bool isWithin(String parent, String child) {
int parentLength = parent.length;
int childLength = child.length;
if (parentLength >= childLength) {
return false;
}
if (child.codeUnitAt(parentLength) != _separatorChar) {
return false;
}
return _startsWithUnsafe(child, parent);
}
/// Split [path] into its components using [separator].
///
/// context.split('/path/to/foo'); // -> ['', 'path', 'to', 'foo']
List<String> split(String path) {
return path.split(separator);
}
/// If the given [child] is within the given [parent], then return the
/// relative path from [parent] to [child]. Otherwise return `null`. Both
/// the [child] and [parent] paths must be absolute paths.
///
/// context.relative('/root/path', '/root/path/a/b.dart'); // -> 'a/b.dart'
/// context.relative('/root/path', '/root/other.dart'); // -> null
String suffix(String parent, String child) {
String parentPrefix = parent + separator;
if (child.startsWith(parentPrefix)) {
return child.substring(parentPrefix.length);
}
return null;
}
/// Return `true` if the given [path] is absolute.
///
/// _isAbsolute('/foo/bar'); // -> true
/// _isAbsolute('/'); // -> true
/// _isAbsolute('foo/bar'); // -> false
/// _isAbsolute('C:\foo\bar'); // -> true
/// _isAbsolute('C:\'); // -> true
/// _isAbsolute('foo\bar'); // -> false
bool _isAbsolute(String path) {
if (_isWindows) {
return path.length >= 3 &&
_isAlphabetic(path.codeUnitAt(0)) &&
path.codeUnitAt(1) == _COLON &&
path.codeUnitAt(2) == _separatorChar;
} else {
return path.isNotEmpty && path.codeUnitAt(0) == _separatorChar;
}
}
/// Return `true` if the given absolute [path] is normalized.
///
/// _isNormalized('/foo/bar'); // -> true
/// _isNormalized('/foo/..bar'); // -> true
/// _isNormalized('/foo/bar..'); // -> true
/// _isNormalized('/'); // -> true
/// _isNormalized('/foo/bar/../baz'); // -> false
/// _isNormalized('/foo/bar/..'); // -> false
bool _isNormalized(String path) {
return !path.contains(_singlePeriodComponent) &&
!path.contains(_doublePeriodComponent) &&
!path.endsWith(_singlePeriodEnding) &&
!path.endsWith(_doublePeriodEnding);
}
/// Returns whether [char] is the code for an ASCII letter (uppercase or
/// lowercase).
static bool _isAlphabetic(int char) {
return char >= _UPPER_A && char <= _UPPER_Z ||
char >= _LOWER_A && char <= _LOWER_Z;
}
/// Return `true` if [str] starts with the given [prefix].
///
/// The check is done from the end of [prefix], because absolute paths
/// usually have the same prefix, e.g. the user's home directory.
static bool _startsWithUnsafe(String str, String prefix) {
int len = prefix.length;
for (int i = len - 1; i >= 0; i--) {
if (str.codeUnitAt(i) != prefix.codeUnitAt(i)) {
return false;
}
}
return true;
}
}

View file

@ -10,7 +10,6 @@ import 'dart:core';
import 'package:analyzer/file_system/file_system.dart';
import 'package:analyzer/file_system/memory_file_system.dart';
import 'package:analyzer/src/generated/source.dart';
import 'package:analyzer/src/util/absolute_path.dart';
import 'package:path/path.dart' as path;
import 'package:test/test.dart';
@ -92,12 +91,7 @@ class TestPathTranslator {
class TestResourceProvider implements ResourceProvider {
final ResourceProvider _provider;
TestResourceProvider(this._provider) {
expect(_provider.absolutePathContext.separator, isWindows ? '\\' : '/');
}
@override
AbsolutePathContext get absolutePathContext => _provider.absolutePathContext;
TestResourceProvider(this._provider);
@override
path.Context get pathContext => _provider.pathContext;

View file

@ -1,141 +0,0 @@
// 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.
library analyzer.test.src.util.absolute_path_test;
import 'package:analyzer/src/util/absolute_path.dart';
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
main() {
defineReflectiveSuite(() {
defineReflectiveTests(AbsolutePathContextPosixTest);
defineReflectiveTests(AbsolutePathContextWindowsTest);
});
}
@reflectiveTest
class AbsolutePathContextPosixTest {
AbsolutePathContext context = new AbsolutePathContext(false);
void test_append() {
expect(context.append(r'/path/to', r'foo.dart'), r'/path/to/foo.dart');
}
void test_basename() {
expect(context.basename(r'/path/to/foo.dart'), r'foo.dart');
expect(context.basename(r'/path/to'), r'to');
expect(context.basename(r'/path'), r'path');
expect(context.basename(r'/'), r'');
}
void test_dirname() {
expect(context.dirname(r'/path/to/foo.dart'), r'/path/to');
expect(context.dirname(r'/path/to'), r'/path');
expect(context.dirname(r'/path'), r'/');
expect(context.dirname(r'/'), r'/');
}
void test_isValid_absolute() {
expect(context.isValid(r'/foo/bar'), isTrue);
expect(context.isValid(r'/foo'), isTrue);
expect(context.isValid(r'/'), isTrue);
expect(context.isValid(r''), isFalse);
expect(context.isValid(r'foo/bar'), isFalse);
}
void test_isValid_normalized() {
expect(context.isValid(r'/foo/bar'), isTrue);
expect(context.isValid(r'/foo/..bar'), isTrue);
expect(context.isValid(r'/foo/.bar/baz'), isTrue);
expect(context.isValid(r'/foo/...'), isTrue);
expect(context.isValid(r'/foo/bar..'), isTrue);
expect(context.isValid(r'/foo/.../bar'), isTrue);
expect(context.isValid(r'/foo/.bar/.'), isFalse);
expect(context.isValid(r'/foo/bar/../baz'), isFalse);
expect(context.isValid(r'/foo/bar/..'), isFalse);
expect(context.isValid(r'/foo/./bar'), isFalse);
expect(context.isValid(r'/.'), isFalse);
}
void test_isWithin() {
expect(context.isWithin(r'/root/path', r'/root/path/a'), isTrue);
expect(context.isWithin(r'/root/path', r'/root/other'), isFalse);
expect(context.isWithin(r'/root/path', r'/root/path'), isFalse);
}
void test_split() {
expect(context.split(r'/path/to/foo'), [r'', r'path', r'to', r'foo']);
expect(context.split(r'/path'), [r'', r'path']);
}
void test_suffix() {
expect(context.suffix(r'/root/path', r'/root/path/a/b.dart'), r'a/b.dart');
expect(context.suffix(r'/root/path', r'/root/other.dart'), isNull);
}
}
@reflectiveTest
class AbsolutePathContextWindowsTest {
AbsolutePathContext context = new AbsolutePathContext(true);
void test_append() {
expect(context.append(r'C:\path\to', r'foo.dart'), r'C:\path\to\foo.dart');
}
void test_basename() {
expect(context.basename(r'C:\path\to\foo.dart'), r'foo.dart');
expect(context.basename(r'C:\path\to'), r'to');
expect(context.basename(r'C:\path'), r'path');
expect(context.basename(r'C:\'), r'');
}
void test_dirname() {
expect(context.dirname(r'C:\path\to\foo.dart'), r'C:\path\to');
expect(context.dirname(r'C:\path\to'), r'C:\path');
expect(context.dirname(r'C:\path'), r'C:\');
expect(context.dirname(r'C:\'), r'C:\');
}
void test_isValid_absolute() {
expect(context.isValid(r'C:\foo\bar'), isTrue);
expect(context.isValid(r'c:\foo\bar'), isTrue);
expect(context.isValid(r'D:\foo\bar'), isTrue);
expect(context.isValid(r'C:\foo'), isTrue);
expect(context.isValid(r'C:\'), isTrue);
expect(context.isValid(r''), isFalse);
expect(context.isValid(r'foo\bar'), isFalse);
}
void test_isValid_normalized() {
expect(context.isValid(r'C:\foo\bar'), isTrue);
expect(context.isValid(r'C:\foo\..bar'), isTrue);
expect(context.isValid(r'C:\foo\.bar\baz'), isTrue);
expect(context.isValid(r'C:\foo\...'), isTrue);
expect(context.isValid(r'C:\foo\bar..'), isTrue);
expect(context.isValid(r'C:\foo\...\bar'), isTrue);
expect(context.isValid(r'C:\foo\.bar\.'), isFalse);
expect(context.isValid(r'C:\foo\bar\..\baz'), isFalse);
expect(context.isValid(r'C:\foo\bar\..'), isFalse);
expect(context.isValid(r'C:\foo\.\bar'), isFalse);
expect(context.isValid(r'C:\.'), isFalse);
}
void test_isWithin() {
expect(context.isWithin(r'C:\root\path', r'C:\root\path\a'), isTrue);
expect(context.isWithin(r'C:\root\path', r'C:\root\other'), isFalse);
expect(context.isWithin(r'C:\root\path', r'C:\root\path'), isFalse);
}
void test_split() {
expect(context.split(r'C:\path\to\foo'), [r'C:', r'path', r'to', r'foo']);
expect(context.split(r'C:\path'), [r'C:', r'path']);
}
void test_suffix() {
expect(
context.suffix(r'C:\root\path', r'C:\root\path\a\b.dart'), r'a\b.dart');
expect(context.suffix(r'C:\root\path', r'C:\root\other.dart'), isNull);
}
}

View file

@ -6,7 +6,6 @@ library analyzer.test.src.util.test_all;
import 'package:test_reflective_loader/test_reflective_loader.dart';
import 'absolute_path_test.dart' as absolute_path_test;
import 'asserts_test.dart' as asserts_test;
import 'glob_test.dart' as glob_test;
import 'lru_map_test.dart' as lru_map_test;
@ -15,7 +14,6 @@ import 'yaml_test.dart' as yaml_test;
/// Utility for manually running all tests.
main() {
defineReflectiveSuite(() {
absolute_path_test.main();
asserts_test.main();
glob_test.main();
lru_map_test.main();