Unverified Commit 2edf6b73 authored by Jonah Williams's avatar Jonah Williams Committed by GitHub

Remove mockito deps from dev/ (#77749)

parent 5baebb88
......@@ -61,7 +61,6 @@ dependencies:
yaml: 3.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
dev_dependencies:
mockito: 4.1.1
test_api: 0.2.19
# PUBSPEC CHECKSUM: 1856
# PUBSPEC CHECKSUM: 1c10
// 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);
}
}
// 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:typed_data';
import 'package:mockito/mockito.dart';
import 'package:path/path.dart' as path;
import 'package:platform/platform.dart' show FakePlatform;
import '../../../packages/flutter_tools/test/src/fake_process_manager.dart';
import '../prepare_package.dart';
import 'common.dart';
import 'fake_process_manager.dart';
void main() {
const String testRef = 'deadbeefdeadbeefdeadbeefdeadbeefdeadbeef';
......@@ -43,20 +42,27 @@ void main() {
);
group('ProcessRunner for $platform', () {
test('Returns stdout', () async {
final FakeProcessManager fakeProcessManager = FakeProcessManager();
fakeProcessManager.fakeResults = <String, List<ProcessResult>>{
'echo test': <ProcessResult>[ProcessResult(0, 0, 'output', 'error')],
};
final FakeProcessManager fakeProcessManager = FakeProcessManager.list(<FakeCommand>[
const FakeCommand(
command: <String>['echo', 'test',],
stdout: 'output',
stderr: 'error',
)
]);
final ProcessRunner processRunner = ProcessRunner(
subprocessOutput: false, platform: platform, processManager: fakeProcessManager);
final String output = await processRunner.runProcess(<String>['echo', 'test']);
expect(output, equals('output'));
});
test('Throws on process failure', () async {
final FakeProcessManager fakeProcessManager = FakeProcessManager();
fakeProcessManager.fakeResults = <String, List<ProcessResult>>{
'echo test': <ProcessResult>[ProcessResult(0, -1, 'output', 'error')],
};
final FakeProcessManager fakeProcessManager = FakeProcessManager.list(<FakeCommand>[
const FakeCommand(
command: <String>['echo', 'test',],
stdout: 'output',
stderr: 'error',
exitCode: -1,
)
]);
final ProcessRunner processRunner = ProcessRunner(
subprocessOutput: false, platform: platform, processManager: fakeProcessManager);
expect(
......@@ -81,7 +87,7 @@ void main() {
}
setUp(() async {
processManager = FakeProcessManager();
processManager = FakeProcessManager.list(<FakeCommand>[]);
args.clear();
namedArgs.clear();
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 archiveName = path.join(tempDir.absolute.path,
'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 reset --hard $testRef': 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
else if (platform.isMacOS) 'zip -r -9 --symlinks $archiveName flutter': null
else if (platform.isLinux) 'tar cJf $archiveName flutter': null,
};
}));
await creator.initializeRepo();
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 {
......@@ -166,7 +165,7 @@ void main() {
else if (platform.isMacOS) 'zip -r -9 --symlinks $archiveName flutter': null
else if (platform.isLinux) 'tar cJf $archiveName flutter': null,
};
processManager.fakeResults = calls;
processManager.addCommands(convertResults(calls));
creator = ArchiveCreator(
tempDir,
tempDir,
......@@ -179,7 +178,6 @@ void main() {
);
await creator.initializeRepo();
await creator.createArchive();
processManager.verifyCalls(calls.keys.toList());
});
test('throws when a command errors out', () async {
......@@ -188,7 +186,7 @@ void main() {
<ProcessResult>[ProcessResult(0, 0, 'output1', '')],
'git reset --hard $testRef': <ProcessResult>[ProcessResult(0, -1, 'output2', '')],
};
processManager.fakeResults = calls;
processManager.addCommands(convertResults(calls));
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.isLinux) 'tar cJf $archiveName flutter': null,
};
processManager.fakeResults = calls;
processManager.addCommands(convertResults(calls));
creator = ArchiveCreator(
tempDir,
tempDir,
......@@ -230,7 +228,6 @@ void main() {
);
await creator.initializeRepo();
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';
setUp(() async {
processManager = FakeProcessManager();
processManager = FakeProcessManager.list(<FakeCommand>[]);
tempDir = Directory.systemTemp.createTempSync('flutter_prepage_package_test.');
});
......@@ -312,7 +309,7 @@ void main() {
'$gsutilCall -- rm $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));
outputFile.createSync();
assert(tempDir.existsSync());
......@@ -329,7 +326,7 @@ void main() {
);
assert(tempDir.existsSync());
await publisher.publishArchive();
processManager.verifyCalls(calls.keys.toList());
final File releaseFile = File(jsonPath);
expect(releaseFile.existsSync(), isTrue);
final String contents = releaseFile.readAsStringSync();
......@@ -376,9 +373,8 @@ void main() {
// This process returns 0 because file already exists
'$gsutilCall -- stat $gsArchivePath': <ProcessResult>[ProcessResult(0, 0, '', '')],
};
processManager.fakeResults = calls;
processManager.addCommands(convertResults(calls));
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 {
......@@ -448,11 +444,33 @@ void main() {
'$gsutilCall -- rm $newGsJsonPath': null,
'$gsutilCall -- -h Content-Type:application/json cp $jsonPath $newGsJsonPath': null,
};
processManager.fakeResults = calls;
processManager.addCommands(convertResults(calls));
assert(tempDir.existsSync());
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/memory.dart';
import 'package:mockito/mockito.dart';
import 'package:path/path.dart' as path;
import 'package:process/process.dart';
import '../test.dart';
import 'common.dart';
class MockFile extends Mock implements File {}
void main() {
MockFile file;
setUp(() {
file = MockFile();
when(file.existsSync()).thenReturn(true);
});
group('verifyVersion()', () {
MemoryFileSystem fileSystem;
setUp(() {
fileSystem = MemoryFileSystem.test();
});
test('passes for valid version strings', () async {
const List<String> valid_versions = <String>[
'1.2.3',
......@@ -31,7 +29,9 @@ void main() {
'1.2.3-5.0.pre.12',
];
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(
await verifyVersion(file),
isNull,
......@@ -51,7 +51,9 @@ void main() {
'1.2.3-hotfix.1',
];
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(
await verifyVersion(file),
'The version logic generated an invalid version string: "$version".',
......
......@@ -13,7 +13,7 @@ dependencies:
string_scanner: 1.1.0
url_launcher: 6.0.2
cupertino_icons: 1.0.2
video_player: 2.0.0
video_player: 2.0.1
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-Light.ttf
# PUBSPEC CHECKSUM: 32e0
# PUBSPEC CHECKSUM: b0e1
......@@ -7,91 +7,60 @@ environment:
dependencies:
archive: 3.1.2
args: 1.6.0
flutter_tools:
path: '../../packages/flutter_tools'
http: 0.12.2
intl: 0.17.0
meta: 1.3.0
path: 1.8.0
process: 4.1.0
charcode: 1.2.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"
crypto: 3.0.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"
http_parser: 3.1.4 # 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"
platform: 3.0.0 # 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"
string_scanner: 1.1.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"
typed_data: 1.3.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
dev_dependencies:
test: 1.16.5
test_api: 0.2.19
_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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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:
test: 1.16.5
test_api: 0.2.19
mockito: 4.1.1
js: 0.6.3 # 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"
# PUBSPEC CHECKSUM: fbfe
# PUBSPEC CHECKSUM: c5cc
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment