// Copyright 2013 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:io' as io; import 'package:file/file.dart'; import 'package:file/memory.dart'; import 'package:flutter_plugin_tools/src/common/gradle.dart'; import 'package:test/test.dart'; import '../mocks.dart'; import '../util.dart'; void main() { late FileSystem fileSystem; late RecordingProcessRunner processRunner; setUp(() { fileSystem = MemoryFileSystem(); processRunner = RecordingProcessRunner(); }); group('isConfigured', () { test('reports true when configured on Windows', () async { final Directory plugin = createFakePlugin( 'plugin', fileSystem.directory('/'), extraFiles: ['android/gradlew.bat']); final GradleProject project = GradleProject( plugin, processRunner: processRunner, platform: MockPlatform(isWindows: true), ); expect(project.isConfigured(), true); }); test('reports true when configured on non-Windows', () async { final Directory plugin = createFakePlugin( 'plugin', fileSystem.directory('/'), extraFiles: ['android/gradlew']); final GradleProject project = GradleProject( plugin, processRunner: processRunner, platform: MockPlatform(isMacOS: true), ); expect(project.isConfigured(), true); }); test('reports false when not configured on Windows', () async { final Directory plugin = createFakePlugin( 'plugin', fileSystem.directory('/'), extraFiles: ['android/foo']); final GradleProject project = GradleProject( plugin, processRunner: processRunner, platform: MockPlatform(isWindows: true), ); expect(project.isConfigured(), false); }); test('reports true when configured on non-Windows', () async { final Directory plugin = createFakePlugin( 'plugin', fileSystem.directory('/'), extraFiles: ['android/foo']); final GradleProject project = GradleProject( plugin, processRunner: processRunner, platform: MockPlatform(isMacOS: true), ); expect(project.isConfigured(), false); }); }); group('runXcodeBuild', () { test('runs without arguments', () async { final Directory plugin = createFakePlugin( 'plugin', fileSystem.directory('/'), extraFiles: ['android/gradlew']); final GradleProject project = GradleProject( plugin, processRunner: processRunner, platform: MockPlatform(isMacOS: true), ); final int exitCode = await project.runCommand('foo'); expect(exitCode, 0); expect( processRunner.recordedCalls, orderedEquals([ ProcessCall( plugin.childDirectory('android').childFile('gradlew').path, const [ 'foo', ], plugin.childDirectory('android').path), ])); }); test('runs with arguments', () async { final Directory plugin = createFakePlugin( 'plugin', fileSystem.directory('/'), extraFiles: ['android/gradlew']); final GradleProject project = GradleProject( plugin, processRunner: processRunner, platform: MockPlatform(isMacOS: true), ); final int exitCode = await project.runCommand( 'foo', arguments: ['--bar', '--baz'], ); expect(exitCode, 0); expect( processRunner.recordedCalls, orderedEquals([ ProcessCall( plugin.childDirectory('android').childFile('gradlew').path, const [ 'foo', '--bar', '--baz', ], plugin.childDirectory('android').path), ])); }); test('runs with the correct wrapper on Windows', () async { final Directory plugin = createFakePlugin( 'plugin', fileSystem.directory('/'), extraFiles: ['android/gradlew.bat']); final GradleProject project = GradleProject( plugin, processRunner: processRunner, platform: MockPlatform(isWindows: true), ); final int exitCode = await project.runCommand('foo'); expect(exitCode, 0); expect( processRunner.recordedCalls, orderedEquals([ ProcessCall( plugin.childDirectory('android').childFile('gradlew.bat').path, const [ 'foo', ], plugin.childDirectory('android').path), ])); }); test('returns error codes', () async { final Directory plugin = createFakePlugin( 'plugin', fileSystem.directory('/'), extraFiles: ['android/gradlew.bat']); final GradleProject project = GradleProject( plugin, processRunner: processRunner, platform: MockPlatform(isWindows: true), ); processRunner.mockProcessesForExecutable[project.gradleWrapper.path] = [ MockProcess(exitCode: 1), ]; final int exitCode = await project.runCommand('foo'); expect(exitCode, 1); }); }); }