blob: 5279086b286898e76e819cc147038c3359b0ff60 [file]
// Copyright 2026 The Flutter Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file or at https://developers.google.com/open-source/licenses/bsd.
import 'dart:io';
import 'package:devtools_tool/model.dart';
import 'package:path/path.dart' as path;
import 'package:test/test.dart';
void main() {
group('FlutterSdk.findFromPath', () {
late Directory tempDir;
setUp(() {
tempDir = Directory.systemTemp.createTempSync('flutter_sdk_test_');
});
tearDown(() {
tempDir.deleteSync(recursive: true);
});
test('finds SDK root from bin/flutter executable path', () {
final binDir = Directory(path.join(tempDir.path, 'bin'))..createSync();
final flutterExe = File(path.join(binDir.path, 'flutter'))..createSync();
final sdk = FlutterSdk.findFromPath(flutterExe.path);
expect(sdk.sdkPath, equals(tempDir.resolveSymbolicLinksSync()));
});
test('resolves symbolic links to find actual SDK root', () {
final sdkDir = Directory(path.join(tempDir.path, 'real_sdk'))
..createSync();
final binDir = Directory(path.join(sdkDir.path, 'bin'))..createSync();
final flutterExe = File(path.join(binDir.path, 'flutter'))..createSync();
final linkDir = Directory(path.join(tempDir.path, 'symlink_bin'))
..createSync();
final symlink = Link(path.join(linkDir.path, 'flutter'));
symlink.createSync(flutterExe.path);
final sdk = FlutterSdk.findFromPath(symlink.path);
expect(sdk.sdkPath, equals(sdkDir.resolveSymbolicLinksSync()));
});
test('finds SDK root when given SDK directory path directly', () {
final binDir = Directory(path.join(tempDir.path, 'bin'))..createSync();
File(path.join(binDir.path, 'flutter')).createSync();
final sdk = FlutterSdk.findFromPath(tempDir.path);
expect(sdk.sdkPath, equals(tempDir.resolveSymbolicLinksSync()));
});
test('throws Exception when unable to locate Flutter SDK', () {
expect(
() => FlutterSdk.findFromPath('/non/existent/path/to/flutter'),
throwsA(isA<Exception>()),
);
});
});
}