// 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 'dart:io' as io; import 'package:path/path.dart' as path; import 'package:test/test.dart'; class FileContentPair { FileContentPair({required this.name, required this.original, required this.formatted}); final String name; final String original; final String formatted; } final FileContentPair dartContentPair = FileContentPair( name: 'format_test.dart', original: 'enum \n\nfoo {\n entry1,\n entry2,\n}', formatted: 'enum foo { entry1, entry2 }\n', ); class TestFileFixture { TestFileFixture(this.filePairs, this.baseDir) { for (final FileContentPair filePair in filePairs) { final io.File file = io.File(path.join(baseDir.path, filePair.name)); file.writeAsStringSync(filePair.original); files.add(file); } } final List files = []; final io.Directory baseDir; final List filePairs; void gitAdd() { final List args = ['add']; for (final io.File file in files) { args.add(file.path); } io.Process.runSync('git', args); } void gitRemove() { final List args = ['rm', '-f']; for (final io.File file in files) { args.add(file.path); } io.Process.runSync('git', args); } Iterable getFileContents() { final List results = []; for (int i = 0; i < files.length; i++) { final io.File file = files[i]; final FileContentPair filePair = filePairs[i]; final String content = file.readAsStringSync().replaceAll('\r\n', '\n'); results.add( FileContentPair(name: filePair.name, original: content, formatted: filePair.formatted), ); } return results; } } void main() { final io.File script = io.File(path.current).absolute; final io.Directory flutterRoot = script.parent.parent; final String formatterPath = path.join( flutterRoot.path, 'dev', 'tools', 'format.${io.Platform.isWindows ? 'bat' : 'sh'}', ); test('Can fix Dart formatting errors', () { final TestFileFixture fixture = TestFileFixture([ dartContentPair, ], flutterRoot); try { fixture.gitAdd(); io.Process.runSync(formatterPath, ['--fix'], workingDirectory: flutterRoot.path); final Iterable files = fixture.getFileContents(); for (final FileContentPair pair in files) { expect(pair.original, equals(pair.formatted)); } } finally { fixture.gitRemove(); } }); }