mirror of
https://github.com/flutter/flutter
synced 2024-10-14 04:02:56 +00:00
a0334fb500
First pass at fixing #57985 and implementing #59602 This doesn't have enough metadata to be useful for IDEs yet, but it prevents the issue from getting worse while we iterate on it.
111 lines
4.2 KiB
Dart
111 lines
4.2 KiB
Dart
// 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/memory.dart';
|
|
import 'package:flutter_tools/src/base/file_system.dart';
|
|
import 'package:flutter_tools/src/cache.dart';
|
|
import 'package:flutter_tools/src/dart/pub.dart';
|
|
import 'package:flutter_tools/src/template.dart';
|
|
import 'package:flutter_tools/src/globals.dart' as globals;
|
|
import 'package:mockito/mockito.dart';
|
|
|
|
import 'src/common.dart';
|
|
import 'src/testbed.dart';
|
|
|
|
void main() {
|
|
Testbed testbed;
|
|
|
|
setUp(() {
|
|
testbed = Testbed();
|
|
});
|
|
|
|
test('Template.render throws ToolExit when FileSystem exception is raised', () => testbed.run(() {
|
|
final Template template = Template(
|
|
globals.fs.directory('examples'),
|
|
globals.fs.currentDirectory,
|
|
null,
|
|
fileSystem: globals.fs,
|
|
templateManifest: null,
|
|
);
|
|
final MockDirectory mockDirectory = MockDirectory();
|
|
when(mockDirectory.createSync(recursive: true)).thenThrow(const FileSystemException());
|
|
|
|
expect(() => template.render(mockDirectory, <String, Object>{}),
|
|
throwsToolExit());
|
|
}));
|
|
|
|
test('Template.render replaces .img.tmpl files with files from the image source', () => testbed.run(() {
|
|
final MemoryFileSystem fileSystem = MemoryFileSystem();
|
|
final Directory templateDir = fileSystem.directory('templates');
|
|
final Directory imageSourceDir = fileSystem.directory('template_images');
|
|
final Directory destination = fileSystem.directory('target');
|
|
const String imageName = 'some_image.png';
|
|
templateDir.childFile('$imageName.img.tmpl').createSync(recursive: true);
|
|
final File sourceImage = imageSourceDir.childFile(imageName);
|
|
sourceImage.createSync(recursive: true);
|
|
sourceImage.writeAsStringSync('Ceci n\'est pas une pipe');
|
|
|
|
final Template template = Template(
|
|
templateDir,
|
|
templateDir,
|
|
imageSourceDir,
|
|
fileSystem: fileSystem,
|
|
templateManifest: null,
|
|
);
|
|
template.render(destination, <String, Object>{});
|
|
|
|
final File destinationImage = destination.childFile(imageName);
|
|
expect(destinationImage.existsSync(), true);
|
|
expect(destinationImage.readAsBytesSync(), equals(sourceImage.readAsBytesSync()));
|
|
}));
|
|
|
|
test('Template.fromName runs pub get if .packages is missing', () => testbed.run(() async {
|
|
final MemoryFileSystem fileSystem = MemoryFileSystem();
|
|
|
|
// Attempting to run pub in a test throws.
|
|
await expectLater(Template.fromName('app', fileSystem: fileSystem, templateManifest: null),
|
|
throwsUnsupportedError);
|
|
}));
|
|
|
|
test('Template.fromName runs pub get if .packages is missing flutter_template_images', () => testbed.run(() async {
|
|
final MemoryFileSystem fileSystem = MemoryFileSystem();
|
|
Cache.flutterRoot = '/flutter';
|
|
final File packagesFile = fileSystem.directory(Cache.flutterRoot)
|
|
.childDirectory('packages')
|
|
.childDirectory('flutter_tools')
|
|
.childFile('.packages');
|
|
packagesFile.createSync(recursive: true);
|
|
|
|
// Attempting to run pub in a test throws.
|
|
await expectLater(Template.fromName('app', fileSystem: fileSystem, templateManifest: null),
|
|
throwsUnsupportedError);
|
|
}));
|
|
|
|
test('Template.fromName runs pub get if flutter_template_images directory is missing', () => testbed.run(() async {
|
|
final MemoryFileSystem fileSystem = MemoryFileSystem();
|
|
Cache.flutterRoot = '/flutter';
|
|
final File packagesFile = fileSystem.directory(Cache.flutterRoot)
|
|
.childDirectory('packages')
|
|
.childDirectory('flutter_tools')
|
|
.childFile('.packages');
|
|
packagesFile.createSync(recursive: true);
|
|
packagesFile.writeAsStringSync('\n');
|
|
|
|
when(pub.get(
|
|
context: PubContext.pubGet,
|
|
directory: anyNamed('directory'),
|
|
)).thenAnswer((Invocation invocation) async {
|
|
// Create valid package entry.
|
|
packagesFile.writeAsStringSync('flutter_template_images:file:///flutter_template_images');
|
|
});
|
|
|
|
await Template.fromName('app', fileSystem: fileSystem, templateManifest: null);
|
|
}, overrides: <Type, Generator>{
|
|
Pub: () => MockPub(),
|
|
}));
|
|
}
|
|
|
|
class MockPub extends Mock implements Pub {}
|
|
class MockDirectory extends Mock implements Directory {}
|