| // 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:flutter_tools/src/base/logger.dart'; |
| import 'package:flutter_tools/src/flutter_project_metadata.dart'; |
| import 'package:flutter_tools/src/project.dart'; |
| |
| import '../src/common.dart'; |
| import '../src/context.dart'; |
| import 'test_data/migrate_project.dart'; |
| import 'test_driver.dart'; |
| import 'test_utils.dart'; |
| |
| |
| void main() { |
| late Directory tempDir; |
| late FlutterRunTestDriver flutter; |
| late Logger logger; |
| |
| setUp(() async { |
| tempDir = createResolvedTempDirectorySync('run_test.'); |
| flutter = FlutterRunTestDriver(tempDir); |
| logger = BufferLogger.test(); |
| }); |
| |
| tearDown(() async { |
| await flutter.stop(); |
| tryToDelete(tempDir); |
| }); |
| |
| testWithoutContext('parse simple config file', () async { |
| final File metadataFile = tempDir.childFile('.metadata'); |
| metadataFile.createSync(recursive: true); |
| metadataFile.writeAsStringSync(''' |
| # This file tracks properties of this Flutter project. |
| # Used by Flutter tool to assess capabilities and perform upgrades etc. |
| # |
| # This file should be version controlled. |
| |
| version: |
| revision: fj19vkla9vnlka9vni3n808v3nch8cd |
| channel: stable |
| |
| project_type: app |
| |
| # Tracks metadata for the flutter migrate command |
| migration: |
| platforms: |
| - platform: root |
| create_revision: fj19vkla9vnlka9vni3n808v3nch8cd |
| base_revision: 93kf9v3njfa90vnidfjvn39nvi3vnie |
| - platform: android |
| create_revision: abfj19vkla9vnlka9vni3n808v3nch8cd |
| base_revision: ab93kf9v3njfa90vnidfjvn39nvi3vnie |
| |
| # User provided section |
| |
| # List of Local paths (relative to this file) that should be |
| # ignored by the migrate tool. |
| # |
| # Files that are not part of the templates will be ignored by default. |
| unmanaged_files: |
| - lib/main.dart |
| - ios/Runner.xcodeproj/project.pbxproj |
| - lib/file1/etc.dart |
| - android/my_file.java |
| ''', flush: true); |
| FlutterProjectMetadata metadata = FlutterProjectMetadata(metadataFile, logger); |
| |
| expect(metadata.migrateConfig.platformConfigs[SupportedPlatform.root]!.createRevision, equals('fj19vkla9vnlka9vni3n808v3nch8cd')); |
| expect(metadata.migrateConfig.platformConfigs[SupportedPlatform.root]!.baseRevision, equals('93kf9v3njfa90vnidfjvn39nvi3vnie')); |
| |
| expect(metadata.migrateConfig.platformConfigs[SupportedPlatform.android]!.createRevision, equals('abfj19vkla9vnlka9vni3n808v3nch8cd')); |
| expect(metadata.migrateConfig.platformConfigs[SupportedPlatform.android]!.baseRevision, equals('ab93kf9v3njfa90vnidfjvn39nvi3vnie')); |
| |
| expect(metadata.migrateConfig.unmanagedFiles[0], equals('lib/main.dart')); |
| expect(metadata.migrateConfig.unmanagedFiles[1], equals('ios/Runner.xcodeproj/project.pbxproj')); |
| expect(metadata.migrateConfig.unmanagedFiles[2], equals('lib/file1/etc.dart')); |
| expect(metadata.migrateConfig.unmanagedFiles[3], equals('android/my_file.java')); |
| |
| metadataFile.writeAsStringSync(''' |
| # This file tracks properties of this Flutter project. |
| # Used by Flutter tool to assess capabilities and perform upgrades etc. |
| # |
| # This file should be version controlled. |
| |
| version: |
| revision: fj19vkla9vnlka9vni3n808v3nch8cd |
| channel: stable |
| |
| project_type: app |
| ''', flush: true); |
| |
| metadata = FlutterProjectMetadata(metadataFile, logger); |
| |
| expect(metadata.migrateConfig.isEmpty, equals(true)); |
| expect(metadata.versionRevision, equals('fj19vkla9vnlka9vni3n808v3nch8cd')); |
| expect(metadata.versionChannel, equals('stable')); |
| }); |
| |
| testUsingContext('write simple config file', () async { |
| const String testCreateRevision = 'testmc9skl32nlnf23lnakcs9njr3'; |
| const String testBaseRevision = 'testanas9anlnq9ba7bjhavan3kma'; |
| MigrateConfig config = MigrateConfig( |
| platformConfigs: <SupportedPlatform, MigratePlatformConfig>{ |
| SupportedPlatform.android: MigratePlatformConfig(platform: SupportedPlatform.android, createRevision: testCreateRevision, baseRevision: testBaseRevision), |
| SupportedPlatform.ios: MigratePlatformConfig(platform: SupportedPlatform.ios, createRevision: testCreateRevision, baseRevision: testBaseRevision), |
| SupportedPlatform.root: MigratePlatformConfig(platform: SupportedPlatform.root, createRevision: testCreateRevision, baseRevision: testBaseRevision), |
| SupportedPlatform.windows: MigratePlatformConfig(platform: SupportedPlatform.windows, createRevision: testCreateRevision, baseRevision: testBaseRevision), |
| }, |
| unmanagedFiles: <String>[ |
| 'lib/main.dart', |
| 'ios/Runner.xcodeproj/project.pbxproj', |
| 'lib/file1/etc.dart', |
| ], |
| ); |
| String outputString = config.getOutputFileString(); |
| expect(outputString, equals(''' |
| |
| # Tracks metadata for the flutter migrate command |
| migration: |
| platforms: |
| - platform: android |
| create_revision: $testCreateRevision |
| base_revision: $testBaseRevision |
| - platform: ios |
| create_revision: $testCreateRevision |
| base_revision: $testBaseRevision |
| - platform: root |
| create_revision: $testCreateRevision |
| base_revision: $testBaseRevision |
| - platform: windows |
| create_revision: $testCreateRevision |
| base_revision: $testBaseRevision |
| |
| # User provided section |
| |
| # List of Local paths (relative to this file) that should be |
| # ignored by the migrate tool. |
| # |
| # Files that are not part of the templates will be ignored by default. |
| unmanaged_files: |
| - 'lib/main.dart' |
| - 'ios/Runner.xcodeproj/project.pbxproj' |
| - 'lib/file1/etc.dart' |
| ''')); |
| |
| config = MigrateConfig(); |
| outputString = config.getOutputFileString(); |
| expect(outputString, equals('')); |
| }); |
| |
| testUsingContext('populate migrate config', () async { |
| // Flutter Stable 1.22.6 hash: 9b2d32b605630f28625709ebd9d78ab3016b2bf6 |
| final MigrateProject project = MigrateProject('version:1.22.6_stable'); |
| await project.setUpIn(tempDir); |
| |
| final File metadataFile = tempDir.childFile('.metadata'); |
| |
| const String currentRevision = 'test_base_revision'; |
| const String createRevision = 'test_create_revision'; |
| |
| final FlutterProjectMetadata metadata = FlutterProjectMetadata(metadataFile, logger); |
| metadata.migrateConfig.populate( |
| projectDirectory: tempDir, |
| currentRevision: currentRevision, |
| createRevision: createRevision, |
| logger: logger, |
| ); |
| |
| expect(metadata.migrateConfig.platformConfigs.length, equals(3)); |
| |
| final List<SupportedPlatform> keyList = List<SupportedPlatform>.from(metadata.migrateConfig.platformConfigs.keys); |
| |
| expect(keyList[0], equals(SupportedPlatform.root)); |
| expect(metadata.migrateConfig.platformConfigs[SupportedPlatform.root]!.baseRevision, equals(currentRevision)); |
| expect(metadata.migrateConfig.platformConfigs[SupportedPlatform.root]!.createRevision, equals(createRevision)); |
| |
| expect(keyList[1], equals(SupportedPlatform.android)); |
| expect(metadata.migrateConfig.platformConfigs[SupportedPlatform.android]!.baseRevision, equals(currentRevision)); |
| expect(metadata.migrateConfig.platformConfigs[SupportedPlatform.android]!.createRevision, equals(createRevision)); |
| |
| expect(keyList[2], equals(SupportedPlatform.ios)); |
| expect(metadata.migrateConfig.platformConfigs[SupportedPlatform.ios]!.baseRevision, equals(currentRevision)); |
| expect(metadata.migrateConfig.platformConfigs[SupportedPlatform.ios]!.createRevision, equals(createRevision)); |
| |
| final File metadataFileOutput = tempDir.childFile('.metadata_output'); |
| metadata.writeFile(outputFile: metadataFileOutput); |
| expect(metadataFileOutput.readAsStringSync(), equals(''' |
| # This file tracks properties of this Flutter project. |
| # Used by Flutter tool to assess capabilities and perform upgrades etc. |
| # |
| # This file should be version controlled. |
| |
| version: |
| revision: 9b2d32b605630f28625709ebd9d78ab3016b2bf6 |
| channel: unknown |
| |
| project_type: app |
| |
| # Tracks metadata for the flutter migrate command |
| migration: |
| platforms: |
| - platform: root |
| create_revision: $createRevision |
| base_revision: $currentRevision |
| - platform: android |
| create_revision: $createRevision |
| base_revision: $currentRevision |
| - platform: ios |
| create_revision: $createRevision |
| base_revision: $currentRevision |
| |
| # User provided section |
| |
| # List of Local paths (relative to this file) that should be |
| # ignored by the migrate tool. |
| # |
| # Files that are not part of the templates will be ignored by default. |
| unmanaged_files: |
| - 'lib/main.dart' |
| - 'ios/Runner.xcodeproj/project.pbxproj' |
| ''')); |
| }); |
| |
| testUsingContext('equality compares platform', () async { |
| const String testCreateRevision = 'testmc9skl32nlnf23lnakcs9njr3'; |
| const String testBaseRevision = 'testanas9anlnq9ba7bjhavan3kma'; |
| final MigratePlatformConfig configAndroid = MigratePlatformConfig(platform: SupportedPlatform.android, createRevision: testCreateRevision, baseRevision: testBaseRevision); |
| final MigratePlatformConfig configIos = MigratePlatformConfig(platform: SupportedPlatform.ios, createRevision: testCreateRevision, baseRevision: testBaseRevision); |
| |
| expect(configAndroid.equals(configIos), false); |
| expect(configAndroid.equals(configAndroid), true); |
| expect(configIos.equals(configIos), true); |
| }); |
| } |