// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file // for details. 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'; import 'package:package_config/src/util_io.dart'; import 'package:test/test.dart'; /// Creates a directory structure from [description] and runs [fileTest]. /// /// Description is a map, each key is a file entry. If the value is a map, /// it's a subdirectory, otherwise it's a file and the value is the content /// as a string. /// Introduces a group to hold the [setUp]/[tearDown] logic. void fileTest(String name, Map description, void Function(Directory directory) fileTest) { group('file-test', () { var tempDir = Directory.systemTemp.createTempSync('pkgcfgtest'); setUp(() { _createFiles(tempDir, description); }); tearDown(() { tempDir.deleteSync(recursive: true); }); test(name, () => fileTest(tempDir)); }); } /// Creates a set of files under a new temporary directory. /// Returns the temporary directory. /// /// The [description] is a map from file names to content. /// If the content is again a map, it represents a subdirectory /// with the content as description. /// Otherwise the content should be a string, /// which is written to the file as UTF-8. // Directory createTestFiles(Map description) { // var target = Directory.systemTemp.createTempSync("pkgcfgtest"); // _createFiles(target, description); // return target; // } // Creates temporary files in the target directory. void _createFiles(Directory target, Map description) { description.forEach((name, content) { var entryName = pathJoin(target.path, '$name'); if (content is Map) { _createFiles(Directory(entryName)..createSync(), content); } else { File(entryName).writeAsStringSync(content as String, flush: true); } }); } /// Creates a [Directory] for a subdirectory of [parent]. Directory subdir(Directory parent, String dirName) => Directory(pathJoinAll([parent.path, ...dirName.split('/')])); /// Creates a [File] for an entry in the [directory] directory. File dirFile(Directory directory, String fileName) => File(pathJoin(directory.path, fileName));