// Copyright 2019 The Chromium 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 'package:flutter_tools/src/cache.dart'; import 'package:flutter_tools/src/commands/precache.dart'; import 'package:flutter_tools/src/runner/flutter_command.dart'; import 'package:flutter_tools/src/version.dart'; import 'package:mockito/mockito.dart'; import '../src/common.dart'; import '../src/context.dart'; import '../src/mocks.dart'; void main() { group('precache', () { final MockCache cache = MockCache(); Set<DevelopmentArtifact> artifacts; when(cache.isUpToDate()).thenReturn(false); when(cache.updateAll(any)).thenAnswer((Invocation invocation) { artifacts = invocation.positionalArguments.first; return Future<void>.value(null); }); testUsingContext('Adds artifact flags to requested artifacts', () async { final PrecacheCommand command = PrecacheCommand(); applyMocksToCommand(command); await createTestCommandRunner(command).run( const <String>['precache', '--ios', '--android', '--web', '--macos', '--linux', '--windows', '--fuchsia'] ); expect(artifacts, unorderedEquals(<DevelopmentArtifact>{ DevelopmentArtifact.universal, DevelopmentArtifact.iOS, DevelopmentArtifact.android, DevelopmentArtifact.web, DevelopmentArtifact.macOS, DevelopmentArtifact.linux, DevelopmentArtifact.windows, DevelopmentArtifact.fuchsia, })); }, overrides: <Type, Generator>{ Cache: () => cache, }); final MockFlutterVersion flutterVersion = MockFlutterVersion(); when(flutterVersion.isStable).thenReturn(true); testUsingContext('Adds artifact flags to requested artifacts on stable', () async { // Release lock between test cases. Cache.releaseLockEarly(); final PrecacheCommand command = PrecacheCommand(); applyMocksToCommand(command); await createTestCommandRunner(command).run( const <String>['precache', '--ios', '--android', '--web', '--macos', '--linux', '--windows', '--fuchsia'] ); expect(artifacts, unorderedEquals(<DevelopmentArtifact>{ DevelopmentArtifact.universal, DevelopmentArtifact.iOS, DevelopmentArtifact.android, })); }, overrides: <Type, Generator>{ Cache: () => cache, FlutterVersion: () => flutterVersion, }); testUsingContext('Downloads artifacts when --force is provided', () async { when(cache.isUpToDate()).thenReturn(true); // Release lock between test cases. Cache.releaseLockEarly(); final PrecacheCommand command = PrecacheCommand(); applyMocksToCommand(command); await createTestCommandRunner(command).run(const <String>['precache', '--force']); expect(artifacts, unorderedEquals(<DevelopmentArtifact>{ DevelopmentArtifact.universal, DevelopmentArtifact.iOS, DevelopmentArtifact.android, })); }, overrides: <Type, Generator>{ Cache: () => cache, FlutterVersion: () => flutterVersion, }); }); } class MockFlutterVersion extends Mock implements FlutterVersion {} class MockCache extends Mock implements Cache {}