// 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 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); } }); }