mirror of
https://github.com/flutter/flutter
synced 2024-10-14 04:02:56 +00:00
fd7222eea8
Package projects were erroneously being treated as apps
195 lines
7.2 KiB
Dart
195 lines
7.2 KiB
Dart
// Copyright 2018 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 'dart:async';
|
|
import 'package:flutter_tools/src/project.dart';
|
|
import 'package:flutter_tools/src/base/file_system.dart';
|
|
import 'package:test/test.dart';
|
|
import 'package:file/file.dart';
|
|
import 'package:file/memory.dart';
|
|
|
|
import 'src/context.dart';
|
|
|
|
void main() {
|
|
group('Project', () {
|
|
testInMemory('knows location', () {
|
|
final Directory directory = fs.directory('myproject');
|
|
expect(new FlutterProject(directory).directory, directory);
|
|
});
|
|
group('ensure ready for platform-specific tooling', () {
|
|
testInMemory('does nothing, if project is not created', () async {
|
|
final FlutterProject project = someProject();
|
|
project.ensureReadyForPlatformSpecificTooling();
|
|
expect(project.directory.existsSync(), isFalse);
|
|
});
|
|
testInMemory('does nothing in plugin or package root project', () async {
|
|
final FlutterProject project = aPluginProject();
|
|
project.ensureReadyForPlatformSpecificTooling();
|
|
expect(project.ios.directory.childFile('Runner/GeneratedPluginRegistrant.h').existsSync(), isFalse);
|
|
expect(project.ios.directory.childFile('Flutter/Generated.xcconfig').existsSync(), isFalse);
|
|
});
|
|
testInMemory('injects plugins', () async {
|
|
final FlutterProject project = aProjectWithIos();
|
|
project.ensureReadyForPlatformSpecificTooling();
|
|
expect(project.ios.directory.childFile('Runner/GeneratedPluginRegistrant.h').existsSync(), isTrue);
|
|
});
|
|
testInMemory('generates Xcode configuration', () async {
|
|
final FlutterProject project = aProjectWithIos();
|
|
project.ensureReadyForPlatformSpecificTooling();
|
|
expect(project.ios.directory.childFile('Flutter/Generated.xcconfig').existsSync(), isTrue);
|
|
});
|
|
});
|
|
group('organization names set', () {
|
|
testInMemory('is empty, if project not created', () async {
|
|
final FlutterProject project = someProject();
|
|
expect(await project.organizationNames(), isEmpty);
|
|
});
|
|
testInMemory('is empty, if no platform folders exist', () async {
|
|
final FlutterProject project = someProject();
|
|
project.directory.createSync();
|
|
expect(await project.organizationNames(), isEmpty);
|
|
});
|
|
testInMemory('is populated from iOS bundle identifier', () async {
|
|
final FlutterProject project = someProject();
|
|
addIosWithBundleId(project.directory, 'io.flutter.someProject');
|
|
expect(await project.organizationNames(), <String>['io.flutter']);
|
|
});
|
|
testInMemory('is populated from Android application ID', () async {
|
|
final FlutterProject project = someProject();
|
|
addAndroidWithApplicationId(project.directory, 'io.flutter.someproject');
|
|
expect(await project.organizationNames(), <String>['io.flutter']);
|
|
});
|
|
testInMemory('is populated from iOS bundle identifier in plugin example', () async {
|
|
final FlutterProject project = someProject();
|
|
addIosWithBundleId(project.example.directory, 'io.flutter.someProject');
|
|
expect(await project.organizationNames(), <String>['io.flutter']);
|
|
});
|
|
testInMemory('is populated from Android application ID in plugin example', () async {
|
|
final FlutterProject project = someProject();
|
|
addAndroidWithApplicationId(project.example.directory, 'io.flutter.someproject');
|
|
expect(await project.organizationNames(), <String>['io.flutter']);
|
|
});
|
|
testInMemory('is populated from Android group in plugin', () async {
|
|
final FlutterProject project = someProject();
|
|
addAndroidWithGroup(project.directory, 'io.flutter.someproject');
|
|
expect(await project.organizationNames(), <String>['io.flutter']);
|
|
});
|
|
testInMemory('is singleton, if sources agree', () async {
|
|
final FlutterProject project = someProject();
|
|
addIosWithBundleId(project.directory, 'io.flutter.someProject');
|
|
addAndroidWithApplicationId(project.directory, 'io.flutter.someproject');
|
|
expect(await project.organizationNames(), <String>['io.flutter']);
|
|
});
|
|
testInMemory('is non-singleton, if sources disagree', () async {
|
|
final FlutterProject project = someProject();
|
|
addIosWithBundleId(project.directory, 'io.flutter.someProject');
|
|
addAndroidWithApplicationId(project.directory, 'io.clutter.someproject');
|
|
expect(
|
|
await project.organizationNames(),
|
|
<String>['io.flutter', 'io.clutter'],
|
|
);
|
|
});
|
|
});
|
|
});
|
|
}
|
|
|
|
FlutterProject someProject() => new FlutterProject(fs.directory('some_project'));
|
|
|
|
FlutterProject aProjectWithIos() {
|
|
final Directory directory = fs.directory('ios_project');
|
|
directory.childFile('pubspec.yaml').createSync(recursive: true);
|
|
directory.childFile('.packages').createSync(recursive: true);
|
|
directory.childDirectory('ios').createSync(recursive: true);
|
|
return new FlutterProject(directory);
|
|
}
|
|
|
|
FlutterProject aPluginProject() {
|
|
final Directory directory = fs.directory('plugin_project/example');
|
|
directory.childFile('pubspec.yaml').createSync(recursive: true);
|
|
directory.childFile('.packages').createSync(recursive: true);
|
|
directory.childDirectory('ios').createSync(recursive: true);
|
|
return new FlutterProject(directory.parent);
|
|
}
|
|
|
|
void testInMemory(String description, Future<Null> testMethod()) {
|
|
testUsingContext(
|
|
description,
|
|
testMethod,
|
|
overrides: <Type, Generator>{
|
|
FileSystem: () => new MemoryFileSystem(),
|
|
},
|
|
);
|
|
}
|
|
|
|
void addPubPackages(Directory directory) {
|
|
directory.childFile('pubspec.yaml')
|
|
..createSync(recursive: true);
|
|
directory.childFile('.packages')
|
|
..createSync(recursive: true);
|
|
}
|
|
|
|
void addIosWithBundleId(Directory directory, String id) {
|
|
directory
|
|
.childDirectory('ios')
|
|
.childDirectory('Runner.xcodeproj')
|
|
.childFile('project.pbxproj')
|
|
..createSync(recursive: true)
|
|
..writeAsStringSync(projectFileWithBundleId(id));
|
|
}
|
|
|
|
void addAndroidWithApplicationId(Directory directory, String id) {
|
|
directory
|
|
.childDirectory('android')
|
|
.childDirectory('app')
|
|
.childFile('build.gradle')
|
|
..createSync(recursive: true)
|
|
..writeAsStringSync(gradleFileWithApplicationId(id));
|
|
}
|
|
|
|
void addAndroidWithGroup(Directory directory, String id) {
|
|
directory.childDirectory('android').childFile('build.gradle')
|
|
..createSync(recursive: true)
|
|
..writeAsStringSync(gradleFileWithGroupId(id));
|
|
}
|
|
|
|
String projectFileWithBundleId(String id) {
|
|
return '''
|
|
97C147061CF9000F007C117D /* Debug */ = {
|
|
isa = XCBuildConfiguration;
|
|
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
|
|
buildSettings = {
|
|
PRODUCT_BUNDLE_IDENTIFIER = $id;
|
|
PRODUCT_NAME = "\$(TARGET_NAME)";
|
|
};
|
|
name = Debug;
|
|
};
|
|
''';
|
|
}
|
|
|
|
String gradleFileWithApplicationId(String id) {
|
|
return '''
|
|
apply plugin: 'com.android.application'
|
|
android {
|
|
compileSdkVersion 27
|
|
|
|
defaultConfig {
|
|
applicationId '$id'
|
|
}
|
|
}
|
|
''';
|
|
}
|
|
|
|
String gradleFileWithGroupId(String id) {
|
|
return '''
|
|
group '$id'
|
|
version '1.0-SNAPSHOT'
|
|
|
|
apply plugin: 'com.android.library'
|
|
|
|
android {
|
|
compileSdkVersion 27
|
|
}
|
|
''';
|
|
}
|