| // 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'; |
| |
| import 'package:file/memory.dart'; |
| import 'package:platform/platform.dart'; |
| |
| import '../../../packages/flutter_tools/test/src/fake_process_manager.dart'; |
| import '../post_process_docs.dart'; |
| import 'common.dart'; |
| |
| void main() async { |
| group('getBranch', () { |
| const String branchName = 'stable'; |
| test('getBranchName does not call git if env LUCI_BRANCH provided', () async { |
| final Platform platform = FakePlatform( |
| environment: <String, String>{'LUCI_BRANCH': branchName}, |
| ); |
| final ProcessManager processManager = FakeProcessManager.empty(); |
| final String calculatedBranchName = await getBranchName( |
| platform: platform, |
| processManager: processManager, |
| ); |
| expect(calculatedBranchName, branchName); |
| }); |
| |
| test('getBranchName calls git if env LUCI_BRANCH not provided', () async { |
| final Platform platform = FakePlatform(environment: <String, String>{}); |
| |
| final ProcessManager processManager = FakeProcessManager.list(<FakeCommand>[ |
| const FakeCommand( |
| command: <String>['git', 'status', '-b', '--porcelain'], |
| stdout: '## $branchName', |
| ), |
| ]); |
| |
| final String calculatedBranchName = await getBranchName( |
| platform: platform, |
| processManager: processManager, |
| ); |
| expect(calculatedBranchName, branchName); |
| expect(processManager, hasNoRemainingExpectations); |
| }); |
| test('getBranchName calls git if env LUCI_BRANCH is empty', () async { |
| final Platform platform = FakePlatform(environment: <String, String>{'LUCI_BRANCH': ''}); |
| |
| final ProcessManager processManager = FakeProcessManager.list(<FakeCommand>[ |
| const FakeCommand( |
| command: <String>['git', 'status', '-b', '--porcelain'], |
| stdout: '## $branchName', |
| ), |
| ]); |
| final String calculatedBranchName = await getBranchName( |
| platform: platform, |
| processManager: processManager, |
| ); |
| expect(calculatedBranchName, branchName); |
| expect(processManager, hasNoRemainingExpectations); |
| }); |
| }); |
| |
| group('gitRevision', () { |
| test('Return short format', () async { |
| const String commitHash = 'e65f01793938e13cac2d321b9fcdc7939f9b2ea6'; |
| final ProcessManager processManager = FakeProcessManager.list(<FakeCommand>[ |
| const FakeCommand(command: <String>['git', 'rev-parse', 'HEAD'], stdout: commitHash), |
| ]); |
| final String revision = await gitRevision(processManager: processManager); |
| expect(processManager, hasNoRemainingExpectations); |
| expect(revision, commitHash.substring(0, 10)); |
| }); |
| |
| test('Return full length', () async { |
| const String commitHash = 'e65f01793938e13cac2d321b9fcdc7939f9b2ea6'; |
| final ProcessManager processManager = FakeProcessManager.list(<FakeCommand>[ |
| const FakeCommand(command: <String>['git', 'rev-parse', 'HEAD'], stdout: commitHash), |
| ]); |
| final String revision = await gitRevision(fullLength: true, processManager: processManager); |
| expect(processManager, hasNoRemainingExpectations); |
| expect(revision, commitHash); |
| }); |
| }); |
| |
| group('runProcessWithValidation', () { |
| test('With no error', () async { |
| const List<String> command = <String>['git', 'rev-parse', 'HEAD']; |
| final ProcessManager processManager = FakeProcessManager.list(<FakeCommand>[ |
| const FakeCommand(command: command), |
| ]); |
| await runProcessWithValidations(command, '', processManager: processManager, verbose: false); |
| expect(processManager, hasNoRemainingExpectations); |
| }); |
| |
| test('With error', () async { |
| const List<String> command = <String>['git', 'rev-parse', 'HEAD']; |
| final ProcessManager processManager = FakeProcessManager.list(<FakeCommand>[ |
| const FakeCommand(command: command, exitCode: 1), |
| ]); |
| try { |
| await runProcessWithValidations( |
| command, |
| '', |
| processManager: processManager, |
| verbose: false, |
| ); |
| throw Exception('Exception was not thrown'); |
| } on CommandException catch (e) { |
| expect(e, isA<Exception>()); |
| } |
| }); |
| }); |
| |
| group('generateFooter', () { |
| test('generated correctly', () async { |
| const String expectedContent = ''' |
| (function() { |
| var span = document.querySelector('footer>span'); |
| if (span) { |
| span.innerText = 'Flutter 3.0.0 • 2022-09-22 14:09 • abcdef • stable'; |
| } |
| var sourceLink = document.querySelector('a.source-link'); |
| if (sourceLink) { |
| sourceLink.href = sourceLink.href.replace('/master/', '/abcdef/'); |
| } |
| })(); |
| '''; |
| final MemoryFileSystem fs = MemoryFileSystem(); |
| final File footerFile = fs.file('/a/b/c/footer.js')..createSync(recursive: true); |
| await createFooter( |
| footerFile, |
| '3.0.0', |
| timestampParam: '2022-09-22 14:09', |
| branchParam: 'stable', |
| revisionParam: 'abcdef', |
| ); |
| final String content = await footerFile.readAsString(); |
| expect(content, expectedContent); |
| }); |
| }); |
| } |