blob: 4385e66be130a312acc1d8dedb78e7cac3423f04 [file] [log] [blame]
// 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 'package:file/file.dart';
import 'package:file/memory.dart';
import 'package:flutter_tools/src/android/migrations/top_level_gradle_build_file_migration.dart';
import 'package:flutter_tools/src/base/logger.dart';
import 'package:flutter_tools/src/project.dart';
import 'package:test/fake.dart';
import '../../src/common.dart';
import '../../src/context.dart';
void main() {
group('Android migration', () {
group('migrate the Gradle "clean" task to lazy declaration', () {
late MemoryFileSystem memoryFileSystem;
late BufferLogger bufferLogger;
late FakeAndroidProject project;
late File topLevelGradleBuildFile;
setUp(() {
memoryFileSystem = MemoryFileSystem.test();
bufferLogger = BufferLogger.test();
project = FakeAndroidProject(
root: memoryFileSystem.currentDirectory.childDirectory('android')..createSync(),
);
topLevelGradleBuildFile = project.hostAppGradleRoot.childFile('build.gradle');
});
testUsingContext('skipped if files are missing', () {
final TopLevelGradleBuildFileMigration androidProjectMigration = TopLevelGradleBuildFileMigration(
project,
bufferLogger,
);
androidProjectMigration.migrate();
expect(topLevelGradleBuildFile.existsSync(), isFalse);
expect(bufferLogger.traceText, contains('Top-level Gradle build file not found, skipping migration of task "clean".'));
});
testUsingContext('skipped if nothing to upgrade', () {
topLevelGradleBuildFile.writeAsStringSync('''
tasks.register("clean", Delete) {
delete rootProject.buildDir
}
''');
final TopLevelGradleBuildFileMigration androidProjectMigration = TopLevelGradleBuildFileMigration(
project,
bufferLogger,
);
final DateTime previousLastModified = topLevelGradleBuildFile.lastModifiedSync();
androidProjectMigration.migrate();
expect(topLevelGradleBuildFile.lastModifiedSync(), previousLastModified);
});
testUsingContext('top-level build.gradle is migrated', () {
topLevelGradleBuildFile.writeAsStringSync('''
task clean(type: Delete) {
delete rootProject.buildDir
}
''');
final TopLevelGradleBuildFileMigration androidProjectMigration = TopLevelGradleBuildFileMigration(
project,
bufferLogger,
);
androidProjectMigration.migrate();
expect(bufferLogger.traceText, contains('Migrating "clean" Gradle task to lazy declaration style.'));
expect(topLevelGradleBuildFile.readAsStringSync(), equals('''
tasks.register("clean", Delete) {
delete rootProject.buildDir
}
'''));
});
});
});
}
class FakeAndroidProject extends Fake implements AndroidProject {
FakeAndroidProject({required Directory root}) : hostAppGradleRoot = root;
@override
Directory hostAppGradleRoot;
}