// 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/file.dart'; import 'package:flutter_tools/src/base/io.dart'; import 'package:flutter_tools/src/base/logger.dart'; import 'package:flutter_tools/src/base/os.dart'; import '../integration.shard/test_utils.dart'; import '../src/common.dart'; Future<void> main() async { test('verify the dart binary arch matches the host arch', () async { final HostPlatform dartArch = _identifyMacBinaryArch(_dartBinary.path); final OperatingSystemUtils os = OperatingSystemUtils( processManager: processManager, fileSystem: fileSystem, platform: platform, logger: BufferLogger.test(), ); expect(dartArch, os.hostPlatform); }, skip: !platform.isMacOS); // [intended] Calls macOS-specific commands } // Call `file` on the path and parse the output. HostPlatform _identifyMacBinaryArch(String path) { // Expect STDOUT like: // bin/cache/dart-sdk/bin/dart: Mach-O 64-bit executable x86_64 final RegExp pattern = RegExp(r'Mach-O 64-bit executable (\w+)'); final ProcessResult result = processManager.runSync( <String>['file', _dartBinary.path], ); final RegExpMatch? match = pattern.firstMatch(result.stdout as String); if (match == null) { fail('Unrecognized STDOUT from `file`: "${result.stdout}"'); } switch (match.group(1)) { case 'x86_64': return HostPlatform.darwin_x64; case 'arm64': return HostPlatform.darwin_arm64; default: fail('Unexpected architecture ${match.group(1)}'); } } final String _flutterRootPath = getFlutterRoot(); final Directory _flutterRoot = fileSystem.directory(_flutterRootPath); final File _dartBinary = _flutterRoot .childDirectory('bin') .childDirectory('cache') .childDirectory('dart-sdk') .childDirectory('bin') .childFile('dart') .absolute;