Remove mockito deps from dev/ (#77749)
This commit is contained in:
parent
5baebb88ff
commit
2edf6b7320
@ -61,7 +61,6 @@ dependencies:
|
|||||||
yaml: 3.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
yaml: 3.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
mockito: 4.1.1
|
|
||||||
test_api: 0.2.19
|
test_api: 0.2.19
|
||||||
|
|
||||||
# PUBSPEC CHECKSUM: 1856
|
# PUBSPEC CHECKSUM: 1c10
|
||||||
|
@ -1,188 +0,0 @@
|
|||||||
// Copyright 2014 The Flutter Authors. 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:async';
|
|
||||||
import 'dart:convert';
|
|
||||||
import 'dart:io';
|
|
||||||
|
|
||||||
import 'package:process/process.dart';
|
|
||||||
import 'package:mockito/mockito.dart';
|
|
||||||
|
|
||||||
import 'common.dart';
|
|
||||||
|
|
||||||
/// A mock that can be used to fake a process manager that runs commands
|
|
||||||
/// and returns results.
|
|
||||||
///
|
|
||||||
/// Call [setResults] to provide a list of results that will return from
|
|
||||||
/// each command line (with arguments).
|
|
||||||
///
|
|
||||||
/// Call [verifyCalls] to verify that each desired call occurred.
|
|
||||||
class FakeProcessManager extends Mock implements ProcessManager {
|
|
||||||
FakeProcessManager({this.stdinResults}) {
|
|
||||||
_setupMock();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// The callback that will be called each time stdin input is supplied to
|
|
||||||
/// a call.
|
|
||||||
final StringReceivedCallback stdinResults;
|
|
||||||
|
|
||||||
/// The list of results that will be sent back, organized by the command line
|
|
||||||
/// that will produce them. Each command line has a list of returned stdout
|
|
||||||
/// output that will be returned on each successive call.
|
|
||||||
Map<String, List<ProcessResult>> _fakeResults = <String, List<ProcessResult>>{};
|
|
||||||
Map<String, List<ProcessResult>> get fakeResults => _fakeResults;
|
|
||||||
set fakeResults(Map<String, List<ProcessResult>> value) {
|
|
||||||
_fakeResults = <String, List<ProcessResult>>{};
|
|
||||||
for (final String key in value.keys) {
|
|
||||||
_fakeResults[key] = (value[key] ?? <ProcessResult>[ProcessResult(0, 0, '', '')]).toList();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// The list of invocations that occurred, in the order they occurred.
|
|
||||||
List<Invocation> invocations = <Invocation>[];
|
|
||||||
|
|
||||||
/// Verify that the given command lines were called, in the given order, and that the
|
|
||||||
/// parameters were in the same order.
|
|
||||||
void verifyCalls(List<String> calls) {
|
|
||||||
int index = 0;
|
|
||||||
for (final String call in calls) {
|
|
||||||
expect(call.split(' '), orderedEquals(invocations[index].positionalArguments[0] as Iterable<dynamic>));
|
|
||||||
index++;
|
|
||||||
}
|
|
||||||
expect(invocations.length, equals(calls.length));
|
|
||||||
}
|
|
||||||
|
|
||||||
ProcessResult _popResult(List<String> command) {
|
|
||||||
final String key = command.join(' ');
|
|
||||||
expect(fakeResults, contains(key));
|
|
||||||
expect(fakeResults[key], isNotEmpty);
|
|
||||||
return fakeResults[key].removeAt(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
FakeProcess _popProcess(List<String> command) =>
|
|
||||||
FakeProcess(_popResult(command), stdinResults: stdinResults);
|
|
||||||
|
|
||||||
Future<Process> _nextProcess(Invocation invocation) async {
|
|
||||||
invocations.add(invocation);
|
|
||||||
return Future<Process>.value(_popProcess(invocation.positionalArguments[0] as List<String>));
|
|
||||||
}
|
|
||||||
|
|
||||||
ProcessResult _nextResultSync(Invocation invocation) {
|
|
||||||
invocations.add(invocation);
|
|
||||||
return _popResult(invocation.positionalArguments[0] as List<String>);
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<ProcessResult> _nextResult(Invocation invocation) async {
|
|
||||||
invocations.add(invocation);
|
|
||||||
return Future<ProcessResult>.value(_popResult(invocation.positionalArguments[0] as List<String>));
|
|
||||||
}
|
|
||||||
|
|
||||||
void _setupMock() {
|
|
||||||
// Not all possible types of invocations are covered here, just the ones
|
|
||||||
// expected to be called.
|
|
||||||
// TODO(gspencer): make this more general so that any call will be captured.
|
|
||||||
when(start(
|
|
||||||
any,
|
|
||||||
environment: anyNamed('environment'),
|
|
||||||
workingDirectory: anyNamed('workingDirectory'),
|
|
||||||
)).thenAnswer(_nextProcess);
|
|
||||||
|
|
||||||
when(start(any)).thenAnswer(_nextProcess);
|
|
||||||
|
|
||||||
when(run(
|
|
||||||
any,
|
|
||||||
environment: anyNamed('environment'),
|
|
||||||
workingDirectory: anyNamed('workingDirectory'),
|
|
||||||
)).thenAnswer(_nextResult);
|
|
||||||
|
|
||||||
when(run(any)).thenAnswer(_nextResult);
|
|
||||||
|
|
||||||
when(runSync(
|
|
||||||
any,
|
|
||||||
environment: anyNamed('environment'),
|
|
||||||
workingDirectory: anyNamed('workingDirectory'),
|
|
||||||
)).thenAnswer(_nextResultSync);
|
|
||||||
|
|
||||||
when(runSync(any)).thenAnswer(_nextResultSync);
|
|
||||||
|
|
||||||
when(killPid(any, any)).thenReturn(true);
|
|
||||||
|
|
||||||
when(canRun(any, workingDirectory: anyNamed('workingDirectory')))
|
|
||||||
.thenReturn(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// A fake process that can be used to interact with a process "started" by the FakeProcessManager.
|
|
||||||
class FakeProcess extends Mock implements Process {
|
|
||||||
FakeProcess(ProcessResult result, {void Function(String input) stdinResults})
|
|
||||||
: stdoutStream = Stream<List<int>>.value((result.stdout as String).codeUnits),
|
|
||||||
stderrStream = Stream<List<int>>.value((result.stderr as String).codeUnits),
|
|
||||||
desiredExitCode = result.exitCode,
|
|
||||||
stdinSink = IOSink(StringStreamConsumer(stdinResults)) {
|
|
||||||
_setupMock();
|
|
||||||
}
|
|
||||||
|
|
||||||
final IOSink stdinSink;
|
|
||||||
final Stream<List<int>> stdoutStream;
|
|
||||||
final Stream<List<int>> stderrStream;
|
|
||||||
final int desiredExitCode;
|
|
||||||
|
|
||||||
void _setupMock() {
|
|
||||||
when(kill(any)).thenReturn(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
Future<int> get exitCode => Future<int>.value(desiredExitCode);
|
|
||||||
|
|
||||||
@override
|
|
||||||
int get pid => 0;
|
|
||||||
|
|
||||||
@override
|
|
||||||
IOSink get stdin => stdinSink;
|
|
||||||
|
|
||||||
@override
|
|
||||||
Stream<List<int>> get stderr => stderrStream;
|
|
||||||
|
|
||||||
@override
|
|
||||||
Stream<List<int>> get stdout => stdoutStream;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Callback used to receive stdin input when it occurs.
|
|
||||||
typedef StringReceivedCallback = void Function(String received);
|
|
||||||
|
|
||||||
/// A stream consumer class that consumes UTF8 strings as lists of ints.
|
|
||||||
class StringStreamConsumer implements StreamConsumer<List<int>> {
|
|
||||||
StringStreamConsumer(this.sendString);
|
|
||||||
|
|
||||||
List<Stream<List<int>>> streams = <Stream<List<int>>>[];
|
|
||||||
List<StreamSubscription<List<int>>> subscriptions = <StreamSubscription<List<int>>>[];
|
|
||||||
List<Completer<dynamic>> completers = <Completer<dynamic>>[];
|
|
||||||
|
|
||||||
/// The callback called when this consumer receives input.
|
|
||||||
StringReceivedCallback sendString;
|
|
||||||
|
|
||||||
@override
|
|
||||||
Future<dynamic> addStream(Stream<List<int>> value) {
|
|
||||||
streams.add(value);
|
|
||||||
completers.add(Completer<dynamic>());
|
|
||||||
subscriptions.add(
|
|
||||||
value.listen((List<int> data) {
|
|
||||||
sendString(utf8.decode(data));
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
subscriptions.last.onDone(() => completers.last.complete(null));
|
|
||||||
return Future<dynamic>.value(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
Future<dynamic> close() async {
|
|
||||||
for (final Completer<dynamic> completer in completers) {
|
|
||||||
await completer.future;
|
|
||||||
}
|
|
||||||
completers.clear();
|
|
||||||
streams.clear();
|
|
||||||
subscriptions.clear();
|
|
||||||
return Future<dynamic>.value(null);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,108 +0,0 @@
|
|||||||
// Copyright 2014 The Flutter Authors. 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 'common.dart';
|
|
||||||
|
|
||||||
import 'fake_process_manager.dart';
|
|
||||||
|
|
||||||
void main() {
|
|
||||||
group('ArchivePublisher', () {
|
|
||||||
FakeProcessManager processManager;
|
|
||||||
final List<String> stdinCaptured = <String>[];
|
|
||||||
|
|
||||||
void _captureStdin(String item) {
|
|
||||||
stdinCaptured.add(item);
|
|
||||||
}
|
|
||||||
|
|
||||||
setUp(() async {
|
|
||||||
processManager = FakeProcessManager(stdinResults: _captureStdin);
|
|
||||||
});
|
|
||||||
|
|
||||||
tearDown(() async {});
|
|
||||||
|
|
||||||
test('start works', () async {
|
|
||||||
final Map<String, List<ProcessResult>> calls = <String, List<ProcessResult>>{
|
|
||||||
'gsutil acl get gs://flutter_infra_release/releases/releases.json': <ProcessResult>[
|
|
||||||
ProcessResult(0, 0, 'output1', ''),
|
|
||||||
],
|
|
||||||
'gsutil cat gs://flutter_infra_release/releases/releases.json': <ProcessResult>[
|
|
||||||
ProcessResult(0, 0, 'output2', ''),
|
|
||||||
],
|
|
||||||
};
|
|
||||||
processManager.fakeResults = calls;
|
|
||||||
for (final String key in calls.keys) {
|
|
||||||
final Process process = await processManager.start(key.split(' '));
|
|
||||||
String output = '';
|
|
||||||
process.stdout.listen((List<int> item) {
|
|
||||||
output += utf8.decode(item);
|
|
||||||
});
|
|
||||||
await process.exitCode;
|
|
||||||
expect(output, equals(calls[key][0].stdout));
|
|
||||||
}
|
|
||||||
processManager.verifyCalls(calls.keys.toList());
|
|
||||||
});
|
|
||||||
|
|
||||||
test('run works', () async {
|
|
||||||
final Map<String, List<ProcessResult>> calls = <String, List<ProcessResult>>{
|
|
||||||
'gsutil acl get gs://flutter_infra_release/releases/releases.json': <ProcessResult>[
|
|
||||||
ProcessResult(0, 0, 'output1', ''),
|
|
||||||
],
|
|
||||||
'gsutil cat gs://flutter_infra_release/releases/releases.json': <ProcessResult>[
|
|
||||||
ProcessResult(0, 0, 'output2', ''),
|
|
||||||
],
|
|
||||||
};
|
|
||||||
processManager.fakeResults = calls;
|
|
||||||
for (final String key in calls.keys) {
|
|
||||||
final ProcessResult result = await processManager.run(key.split(' '));
|
|
||||||
expect(result.stdout, equals(calls[key][0].stdout));
|
|
||||||
}
|
|
||||||
processManager.verifyCalls(calls.keys.toList());
|
|
||||||
});
|
|
||||||
|
|
||||||
test('runSync works', () async {
|
|
||||||
final Map<String, List<ProcessResult>> calls = <String, List<ProcessResult>>{
|
|
||||||
'gsutil acl get gs://flutter_infra_release/releases/releases.json': <ProcessResult>[
|
|
||||||
ProcessResult(0, 0, 'output1', ''),
|
|
||||||
],
|
|
||||||
'gsutil cat gs://flutter_infra_release/releases/releases.json': <ProcessResult>[
|
|
||||||
ProcessResult(0, 0, 'output2', ''),
|
|
||||||
],
|
|
||||||
};
|
|
||||||
processManager.fakeResults = calls;
|
|
||||||
for (final String key in calls.keys) {
|
|
||||||
final ProcessResult result = processManager.runSync(key.split(' '));
|
|
||||||
expect(result.stdout, equals(calls[key][0].stdout));
|
|
||||||
}
|
|
||||||
processManager.verifyCalls(calls.keys.toList());
|
|
||||||
});
|
|
||||||
|
|
||||||
test('captures stdin', () async {
|
|
||||||
final Map<String, List<ProcessResult>> calls = <String, List<ProcessResult>>{
|
|
||||||
'gsutil acl get gs://flutter_infra_release/releases/releases.json': <ProcessResult>[
|
|
||||||
ProcessResult(0, 0, 'output1', ''),
|
|
||||||
],
|
|
||||||
'gsutil cat gs://flutter_infra_release/releases/releases.json': <ProcessResult>[
|
|
||||||
ProcessResult(0, 0, 'output2', ''),
|
|
||||||
],
|
|
||||||
};
|
|
||||||
processManager.fakeResults = calls;
|
|
||||||
for (final String key in calls.keys) {
|
|
||||||
final Process process = await processManager.start(key.split(' '));
|
|
||||||
String output = '';
|
|
||||||
process.stdout.listen((List<int> item) {
|
|
||||||
output += utf8.decode(item);
|
|
||||||
});
|
|
||||||
final String testInput = '${calls[key][0].stdout} input';
|
|
||||||
process.stdin.add(testInput.codeUnits);
|
|
||||||
await process.exitCode;
|
|
||||||
expect(output, equals(calls[key][0].stdout));
|
|
||||||
expect(stdinCaptured.last, equals(testInput));
|
|
||||||
}
|
|
||||||
processManager.verifyCalls(calls.keys.toList());
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
@ -6,13 +6,12 @@ import 'dart:convert';
|
|||||||
import 'dart:io' hide Platform;
|
import 'dart:io' hide Platform;
|
||||||
import 'dart:typed_data';
|
import 'dart:typed_data';
|
||||||
|
|
||||||
import 'package:mockito/mockito.dart';
|
|
||||||
import 'package:path/path.dart' as path;
|
import 'package:path/path.dart' as path;
|
||||||
import 'package:platform/platform.dart' show FakePlatform;
|
import 'package:platform/platform.dart' show FakePlatform;
|
||||||
|
|
||||||
|
import '../../../packages/flutter_tools/test/src/fake_process_manager.dart';
|
||||||
import '../prepare_package.dart';
|
import '../prepare_package.dart';
|
||||||
import 'common.dart';
|
import 'common.dart';
|
||||||
import 'fake_process_manager.dart';
|
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
const String testRef = 'deadbeefdeadbeefdeadbeefdeadbeefdeadbeef';
|
const String testRef = 'deadbeefdeadbeefdeadbeefdeadbeefdeadbeef';
|
||||||
@ -43,20 +42,27 @@ void main() {
|
|||||||
);
|
);
|
||||||
group('ProcessRunner for $platform', () {
|
group('ProcessRunner for $platform', () {
|
||||||
test('Returns stdout', () async {
|
test('Returns stdout', () async {
|
||||||
final FakeProcessManager fakeProcessManager = FakeProcessManager();
|
final FakeProcessManager fakeProcessManager = FakeProcessManager.list(<FakeCommand>[
|
||||||
fakeProcessManager.fakeResults = <String, List<ProcessResult>>{
|
const FakeCommand(
|
||||||
'echo test': <ProcessResult>[ProcessResult(0, 0, 'output', 'error')],
|
command: <String>['echo', 'test',],
|
||||||
};
|
stdout: 'output',
|
||||||
|
stderr: 'error',
|
||||||
|
)
|
||||||
|
]);
|
||||||
final ProcessRunner processRunner = ProcessRunner(
|
final ProcessRunner processRunner = ProcessRunner(
|
||||||
subprocessOutput: false, platform: platform, processManager: fakeProcessManager);
|
subprocessOutput: false, platform: platform, processManager: fakeProcessManager);
|
||||||
final String output = await processRunner.runProcess(<String>['echo', 'test']);
|
final String output = await processRunner.runProcess(<String>['echo', 'test']);
|
||||||
expect(output, equals('output'));
|
expect(output, equals('output'));
|
||||||
});
|
});
|
||||||
test('Throws on process failure', () async {
|
test('Throws on process failure', () async {
|
||||||
final FakeProcessManager fakeProcessManager = FakeProcessManager();
|
final FakeProcessManager fakeProcessManager = FakeProcessManager.list(<FakeCommand>[
|
||||||
fakeProcessManager.fakeResults = <String, List<ProcessResult>>{
|
const FakeCommand(
|
||||||
'echo test': <ProcessResult>[ProcessResult(0, -1, 'output', 'error')],
|
command: <String>['echo', 'test',],
|
||||||
};
|
stdout: 'output',
|
||||||
|
stderr: 'error',
|
||||||
|
exitCode: -1,
|
||||||
|
)
|
||||||
|
]);
|
||||||
final ProcessRunner processRunner = ProcessRunner(
|
final ProcessRunner processRunner = ProcessRunner(
|
||||||
subprocessOutput: false, platform: platform, processManager: fakeProcessManager);
|
subprocessOutput: false, platform: platform, processManager: fakeProcessManager);
|
||||||
expect(
|
expect(
|
||||||
@ -81,7 +87,7 @@ void main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
setUp(() async {
|
setUp(() async {
|
||||||
processManager = FakeProcessManager();
|
processManager = FakeProcessManager.list(<FakeCommand>[]);
|
||||||
args.clear();
|
args.clear();
|
||||||
namedArgs.clear();
|
namedArgs.clear();
|
||||||
tempDir = Directory.systemTemp.createTempSync('flutter_prepage_package_test.');
|
tempDir = Directory.systemTemp.createTempSync('flutter_prepage_package_test.');
|
||||||
@ -110,7 +116,8 @@ void main() {
|
|||||||
final String createBase = path.join(tempDir.absolute.path, 'create_');
|
final String createBase = path.join(tempDir.absolute.path, 'create_');
|
||||||
final String archiveName = path.join(tempDir.absolute.path,
|
final String archiveName = path.join(tempDir.absolute.path,
|
||||||
'flutter_${platformName}_v1.2.3-dev${platform.isLinux ? '.tar.xz' : '.zip'}');
|
'flutter_${platformName}_v1.2.3-dev${platform.isLinux ? '.tar.xz' : '.zip'}');
|
||||||
processManager.fakeResults = <String, List<ProcessResult>>{
|
|
||||||
|
processManager.addCommands(convertResults(<String, List<ProcessResult>>{
|
||||||
'git clone -b dev https://chromium.googlesource.com/external/github.com/flutter/flutter': null,
|
'git clone -b dev https://chromium.googlesource.com/external/github.com/flutter/flutter': null,
|
||||||
'git reset --hard $testRef': null,
|
'git reset --hard $testRef': null,
|
||||||
'git remote set-url origin https://github.com/flutter/flutter.git': null,
|
'git remote set-url origin https://github.com/flutter/flutter.git': null,
|
||||||
@ -129,17 +136,9 @@ void main() {
|
|||||||
if (platform.isWindows) '7za a -tzip -mx=9 $archiveName flutter': null
|
if (platform.isWindows) '7za a -tzip -mx=9 $archiveName flutter': null
|
||||||
else if (platform.isMacOS) 'zip -r -9 --symlinks $archiveName flutter': null
|
else if (platform.isMacOS) 'zip -r -9 --symlinks $archiveName flutter': null
|
||||||
else if (platform.isLinux) 'tar cJf $archiveName flutter': null,
|
else if (platform.isLinux) 'tar cJf $archiveName flutter': null,
|
||||||
};
|
}));
|
||||||
await creator.initializeRepo();
|
await creator.initializeRepo();
|
||||||
await creator.createArchive();
|
await creator.createArchive();
|
||||||
expect(
|
|
||||||
verify(processManager.start(
|
|
||||||
captureAny,
|
|
||||||
workingDirectory: captureAnyNamed('workingDirectory'),
|
|
||||||
environment: captureAnyNamed('environment'),
|
|
||||||
)).captured[2]['PUB_CACHE'],
|
|
||||||
endsWith(path.join('flutter', '.pub-cache')),
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test('calls the right commands for archive output', () async {
|
test('calls the right commands for archive output', () async {
|
||||||
@ -166,7 +165,7 @@ void main() {
|
|||||||
else if (platform.isMacOS) 'zip -r -9 --symlinks $archiveName flutter': null
|
else if (platform.isMacOS) 'zip -r -9 --symlinks $archiveName flutter': null
|
||||||
else if (platform.isLinux) 'tar cJf $archiveName flutter': null,
|
else if (platform.isLinux) 'tar cJf $archiveName flutter': null,
|
||||||
};
|
};
|
||||||
processManager.fakeResults = calls;
|
processManager.addCommands(convertResults(calls));
|
||||||
creator = ArchiveCreator(
|
creator = ArchiveCreator(
|
||||||
tempDir,
|
tempDir,
|
||||||
tempDir,
|
tempDir,
|
||||||
@ -179,7 +178,6 @@ void main() {
|
|||||||
);
|
);
|
||||||
await creator.initializeRepo();
|
await creator.initializeRepo();
|
||||||
await creator.createArchive();
|
await creator.createArchive();
|
||||||
processManager.verifyCalls(calls.keys.toList());
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test('throws when a command errors out', () async {
|
test('throws when a command errors out', () async {
|
||||||
@ -188,7 +186,7 @@ void main() {
|
|||||||
<ProcessResult>[ProcessResult(0, 0, 'output1', '')],
|
<ProcessResult>[ProcessResult(0, 0, 'output1', '')],
|
||||||
'git reset --hard $testRef': <ProcessResult>[ProcessResult(0, -1, 'output2', '')],
|
'git reset --hard $testRef': <ProcessResult>[ProcessResult(0, -1, 'output2', '')],
|
||||||
};
|
};
|
||||||
processManager.fakeResults = calls;
|
processManager.addCommands(convertResults(calls));
|
||||||
expect(expectAsync0(creator.initializeRepo), throwsA(isA<PreparePackageException>()));
|
expect(expectAsync0(creator.initializeRepo), throwsA(isA<PreparePackageException>()));
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -216,7 +214,7 @@ void main() {
|
|||||||
else if (platform.isMacOS) 'zip -r -9 --symlinks $archiveName flutter': null
|
else if (platform.isMacOS) 'zip -r -9 --symlinks $archiveName flutter': null
|
||||||
else if (platform.isLinux) 'tar cJf $archiveName flutter': null,
|
else if (platform.isLinux) 'tar cJf $archiveName flutter': null,
|
||||||
};
|
};
|
||||||
processManager.fakeResults = calls;
|
processManager.addCommands(convertResults(calls));
|
||||||
creator = ArchiveCreator(
|
creator = ArchiveCreator(
|
||||||
tempDir,
|
tempDir,
|
||||||
tempDir,
|
tempDir,
|
||||||
@ -230,7 +228,6 @@ void main() {
|
|||||||
);
|
);
|
||||||
await creator.initializeRepo();
|
await creator.initializeRepo();
|
||||||
await creator.createArchive();
|
await creator.createArchive();
|
||||||
processManager.verifyCalls(calls.keys.toList());
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -247,7 +244,7 @@ void main() {
|
|||||||
final String newGsArchivePath = 'gs://flutter_infra_release/releases/stable/$platformName/$archiveName';
|
final String newGsArchivePath = 'gs://flutter_infra_release/releases/stable/$platformName/$archiveName';
|
||||||
|
|
||||||
setUp(() async {
|
setUp(() async {
|
||||||
processManager = FakeProcessManager();
|
processManager = FakeProcessManager.list(<FakeCommand>[]);
|
||||||
tempDir = Directory.systemTemp.createTempSync('flutter_prepage_package_test.');
|
tempDir = Directory.systemTemp.createTempSync('flutter_prepage_package_test.');
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -312,7 +309,7 @@ void main() {
|
|||||||
'$gsutilCall -- rm $newGsJsonPath': null,
|
'$gsutilCall -- rm $newGsJsonPath': null,
|
||||||
'$gsutilCall -- -h Content-Type:application/json cp $jsonPath $newGsJsonPath': null,
|
'$gsutilCall -- -h Content-Type:application/json cp $jsonPath $newGsJsonPath': null,
|
||||||
};
|
};
|
||||||
processManager.fakeResults = calls;
|
processManager.addCommands(convertResults(calls));
|
||||||
final File outputFile = File(path.join(tempDir.absolute.path, archiveName));
|
final File outputFile = File(path.join(tempDir.absolute.path, archiveName));
|
||||||
outputFile.createSync();
|
outputFile.createSync();
|
||||||
assert(tempDir.existsSync());
|
assert(tempDir.existsSync());
|
||||||
@ -329,7 +326,7 @@ void main() {
|
|||||||
);
|
);
|
||||||
assert(tempDir.existsSync());
|
assert(tempDir.existsSync());
|
||||||
await publisher.publishArchive();
|
await publisher.publishArchive();
|
||||||
processManager.verifyCalls(calls.keys.toList());
|
|
||||||
final File releaseFile = File(jsonPath);
|
final File releaseFile = File(jsonPath);
|
||||||
expect(releaseFile.existsSync(), isTrue);
|
expect(releaseFile.existsSync(), isTrue);
|
||||||
final String contents = releaseFile.readAsStringSync();
|
final String contents = releaseFile.readAsStringSync();
|
||||||
@ -376,9 +373,8 @@ void main() {
|
|||||||
// This process returns 0 because file already exists
|
// This process returns 0 because file already exists
|
||||||
'$gsutilCall -- stat $gsArchivePath': <ProcessResult>[ProcessResult(0, 0, '', '')],
|
'$gsutilCall -- stat $gsArchivePath': <ProcessResult>[ProcessResult(0, 0, '', '')],
|
||||||
};
|
};
|
||||||
processManager.fakeResults = calls;
|
processManager.addCommands(convertResults(calls));
|
||||||
expect(() async => publisher.publishArchive(false), throwsException);
|
expect(() async => publisher.publishArchive(false), throwsException);
|
||||||
processManager.verifyCalls(calls.keys.toList());
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test('publishArchive does not throw if forceUpload is true and artifact already exists on cloud storage', () async {
|
test('publishArchive does not throw if forceUpload is true and artifact already exists on cloud storage', () async {
|
||||||
@ -448,11 +444,33 @@ void main() {
|
|||||||
'$gsutilCall -- rm $newGsJsonPath': null,
|
'$gsutilCall -- rm $newGsJsonPath': null,
|
||||||
'$gsutilCall -- -h Content-Type:application/json cp $jsonPath $newGsJsonPath': null,
|
'$gsutilCall -- -h Content-Type:application/json cp $jsonPath $newGsJsonPath': null,
|
||||||
};
|
};
|
||||||
processManager.fakeResults = calls;
|
processManager.addCommands(convertResults(calls));
|
||||||
assert(tempDir.existsSync());
|
assert(tempDir.existsSync());
|
||||||
await publisher.publishArchive(true);
|
await publisher.publishArchive(true);
|
||||||
processManager.verifyCalls(calls.keys.toList());
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
List<FakeCommand> convertResults(Map<String, List<ProcessResult>> results) {
|
||||||
|
final List<FakeCommand> commands = <FakeCommand>[];
|
||||||
|
for (final String key in results.keys) {
|
||||||
|
final List<ProcessResult> candidates = results[key];
|
||||||
|
final List<String> args = key.split(' ');
|
||||||
|
if (candidates == null) {
|
||||||
|
commands.add(FakeCommand(
|
||||||
|
command: args,
|
||||||
|
));
|
||||||
|
} else {
|
||||||
|
for (final ProcessResult result in candidates) {
|
||||||
|
commands.add(FakeCommand(
|
||||||
|
command: args,
|
||||||
|
exitCode: result.exitCode,
|
||||||
|
stderr: result.stderr?.toString(),
|
||||||
|
stdout: result.stdout?.toString(),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return commands;
|
||||||
|
}
|
||||||
|
@ -6,22 +6,20 @@ import 'dart:io' hide Platform;
|
|||||||
|
|
||||||
import 'package:file/file.dart' as fs;
|
import 'package:file/file.dart' as fs;
|
||||||
import 'package:file/memory.dart';
|
import 'package:file/memory.dart';
|
||||||
import 'package:mockito/mockito.dart';
|
|
||||||
import 'package:path/path.dart' as path;
|
import 'package:path/path.dart' as path;
|
||||||
import 'package:process/process.dart';
|
import 'package:process/process.dart';
|
||||||
|
|
||||||
import '../test.dart';
|
import '../test.dart';
|
||||||
import 'common.dart';
|
import 'common.dart';
|
||||||
|
|
||||||
class MockFile extends Mock implements File {}
|
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
MockFile file;
|
|
||||||
setUp(() {
|
|
||||||
file = MockFile();
|
|
||||||
when(file.existsSync()).thenReturn(true);
|
|
||||||
});
|
|
||||||
group('verifyVersion()', () {
|
group('verifyVersion()', () {
|
||||||
|
MemoryFileSystem fileSystem;
|
||||||
|
|
||||||
|
setUp(() {
|
||||||
|
fileSystem = MemoryFileSystem.test();
|
||||||
|
});
|
||||||
|
|
||||||
test('passes for valid version strings', () async {
|
test('passes for valid version strings', () async {
|
||||||
const List<String> valid_versions = <String>[
|
const List<String> valid_versions = <String>[
|
||||||
'1.2.3',
|
'1.2.3',
|
||||||
@ -31,7 +29,9 @@ void main() {
|
|||||||
'1.2.3-5.0.pre.12',
|
'1.2.3-5.0.pre.12',
|
||||||
];
|
];
|
||||||
for (final String version in valid_versions) {
|
for (final String version in valid_versions) {
|
||||||
when(file.readAsString()).thenAnswer((Invocation invocation) => Future<String>.value(version));
|
final File file = fileSystem.file('version');
|
||||||
|
file.writeAsStringSync(version);
|
||||||
|
|
||||||
expect(
|
expect(
|
||||||
await verifyVersion(file),
|
await verifyVersion(file),
|
||||||
isNull,
|
isNull,
|
||||||
@ -51,7 +51,9 @@ void main() {
|
|||||||
'1.2.3-hotfix.1',
|
'1.2.3-hotfix.1',
|
||||||
];
|
];
|
||||||
for (final String version in invalid_versions) {
|
for (final String version in invalid_versions) {
|
||||||
when(file.readAsString()).thenAnswer((Invocation invocation) => Future<String>.value(version));
|
final File file = fileSystem.file('version');
|
||||||
|
file.writeAsStringSync(version);
|
||||||
|
|
||||||
expect(
|
expect(
|
||||||
await verifyVersion(file),
|
await verifyVersion(file),
|
||||||
'The version logic generated an invalid version string: "$version".',
|
'The version logic generated an invalid version string: "$version".',
|
||||||
|
@ -13,7 +13,7 @@ dependencies:
|
|||||||
string_scanner: 1.1.0
|
string_scanner: 1.1.0
|
||||||
url_launcher: 6.0.2
|
url_launcher: 6.0.2
|
||||||
cupertino_icons: 1.0.2
|
cupertino_icons: 1.0.2
|
||||||
video_player: 2.0.0
|
video_player: 2.0.1
|
||||||
scoped_model:
|
scoped_model:
|
||||||
git:
|
git:
|
||||||
url: https://github.com/kevmoo/scoped_model.git
|
url: https://github.com/kevmoo/scoped_model.git
|
||||||
@ -272,4 +272,4 @@ flutter:
|
|||||||
- asset: packages/flutter_gallery_assets/fonts/merriweather/Merriweather-Regular.ttf
|
- asset: packages/flutter_gallery_assets/fonts/merriweather/Merriweather-Regular.ttf
|
||||||
- asset: packages/flutter_gallery_assets/fonts/merriweather/Merriweather-Light.ttf
|
- asset: packages/flutter_gallery_assets/fonts/merriweather/Merriweather-Light.ttf
|
||||||
|
|
||||||
# PUBSPEC CHECKSUM: 32e0
|
# PUBSPEC CHECKSUM: b0e1
|
||||||
|
@ -7,91 +7,60 @@ environment:
|
|||||||
dependencies:
|
dependencies:
|
||||||
archive: 3.1.2
|
archive: 3.1.2
|
||||||
args: 1.6.0
|
args: 1.6.0
|
||||||
flutter_tools:
|
|
||||||
path: '../../packages/flutter_tools'
|
|
||||||
http: 0.12.2
|
http: 0.12.2
|
||||||
intl: 0.17.0
|
intl: 0.17.0
|
||||||
meta: 1.3.0
|
meta: 1.3.0
|
||||||
path: 1.8.0
|
path: 1.8.0
|
||||||
process: 4.1.0
|
process: 4.1.0
|
||||||
|
|
||||||
_fe_analyzer_shared: 14.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
analyzer: 0.41.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
async: 2.5.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
boolean_selector: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
browser_launcher: 0.1.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
built_collection: 4.3.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
built_value: 7.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
charcode: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
charcode: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
cli_util: 0.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
clock: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
clock: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
collection: 1.15.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
collection: 1.15.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
completion: 0.2.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
convert: 3.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
coverage: 0.15.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
crypto: 3.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
crypto: 3.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
csslib: 0.17.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
dds: 1.7.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
devtools: 0.9.7+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
devtools_server: 0.9.7+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
devtools_shared: 0.9.7+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
dwds: 8.0.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
fake_async: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
file: 6.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
file: 6.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
fixnum: 0.10.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
flutter_template_images: 1.0.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
glob: 2.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
html: 0.15.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
http_multi_server: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
http_parser: 3.1.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
http_parser: 3.1.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
io: 1.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
json_rpc_2: 2.2.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
logging: 0.11.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
matcher: 0.12.10 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
mime: 1.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
multicast_dns: 0.2.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
mustache_template: 2.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
native_stack_traces: 0.3.7 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
package_config: 1.9.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
pedantic: 1.11.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
pedantic: 1.11.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
petitparser: 4.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
platform: 3.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
platform: 3.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
pool: 1.5.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
pub_semver: 1.4.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
quiver: 2.1.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
shelf: 0.7.9 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
shelf_packages_handler: 2.0.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
shelf_proxy: 0.1.0+7 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
shelf_static: 0.2.9+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
shelf_web_socket: 0.2.4+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
source_map_stack_trace: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
source_maps: 0.10.10 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
source_span: 1.8.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
source_span: 1.8.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
sse: 3.8.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
stack_trace: 1.10.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
stream_channel: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
string_scanner: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
string_scanner: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
sync_http: 0.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
term_glyph: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
term_glyph: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
test_core: 0.3.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
typed_data: 1.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
typed_data: 1.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
usage: 3.4.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
uuid: 3.0.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
vm_service: 6.0.1-nullsafety.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
vm_snapshot_analysis: 0.5.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
watcher: 1.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
web_socket_channel: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
webdriver: 3.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
webkit_inspection_protocol: 0.7.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
xml: 5.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
yaml: 3.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
test: 1.16.5
|
test: 1.16.5
|
||||||
test_api: 0.2.19
|
test_api: 0.2.19
|
||||||
mockito: 4.1.1
|
|
||||||
|
|
||||||
|
_fe_analyzer_shared: 14.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
|
analyzer: 0.41.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
|
async: 2.5.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
|
boolean_selector: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
|
cli_util: 0.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
|
convert: 3.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
|
coverage: 0.15.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
|
glob: 2.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
|
http_multi_server: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
|
io: 1.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
js: 0.6.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
js: 0.6.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
|
logging: 0.11.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
|
matcher: 0.12.10 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
|
mime: 1.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
node_preamble: 1.4.13 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
node_preamble: 1.4.13 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
|
package_config: 1.9.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
|
pool: 1.5.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
|
pub_semver: 1.4.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
|
shelf: 0.7.9 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
|
shelf_packages_handler: 2.0.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
|
shelf_static: 0.2.9+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
|
shelf_web_socket: 0.2.4+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
|
source_map_stack_trace: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
|
source_maps: 0.10.10 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
|
stack_trace: 1.10.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
|
stream_channel: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
|
test_core: 0.3.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
|
vm_service: 6.0.1-nullsafety.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
|
watcher: 1.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
|
web_socket_channel: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
|
webkit_inspection_protocol: 0.7.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
|
yaml: 3.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||||
|
|
||||||
# PUBSPEC CHECKSUM: fbfe
|
# PUBSPEC CHECKSUM: c5cc
|
||||||
|
Loading…
x
Reference in New Issue
Block a user