chore: adopt Dart 3.9 toolchain — honest floor + tall-style reformat (T-353)
Raise the declared minimums in pubspec.yaml to what our deps already require: Flutter >=3.35.0 / Dart >=3.9.0 (was 3.19.0 / 3.5.0). alchemist 0.12 needs Flutter 3.32; Dart 3.9 first ships in Flutter 3.35, so 3.35 is the binding floor. Pin the exact build toolchain in .fvmrc (Flutter 3.44.1). Moving to the Dart 3.9 language level switches `dart format` to the new "tall" style and enables two new lints. This commit is the resulting mechanical churn, isolated from any behaviour change: - whole-tree `dart format` reformat (tall style) - `dart fix` for unnecessary_underscores + use_null_aware_elements No runtime behaviour change; `make test` green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -47,22 +47,26 @@ void main() {
|
||||
});
|
||||
|
||||
test('contributes the install command', () async {
|
||||
await boot(CliInstaller(
|
||||
resolvedExecutable: '${tmp.path}/gui/clide',
|
||||
env: {'PATH': '${tmp.path}/bin'},
|
||||
bundledClientCandidates: const [],
|
||||
installDir: '${tmp.path}/bin',
|
||||
));
|
||||
await boot(
|
||||
CliInstaller(
|
||||
resolvedExecutable: '${tmp.path}/gui/clide',
|
||||
env: {'PATH': '${tmp.path}/bin'},
|
||||
bundledClientCandidates: const [],
|
||||
installDir: '${tmp.path}/bin',
|
||||
),
|
||||
);
|
||||
expect(f.services.commands.get('clide.installCli'), isNotNull);
|
||||
});
|
||||
|
||||
test('warns on activation when clide is missing from PATH', () async {
|
||||
await boot(CliInstaller(
|
||||
resolvedExecutable: '${tmp.path}/gui/clide',
|
||||
env: {'PATH': '${tmp.path}/empty'},
|
||||
bundledClientCandidates: const [],
|
||||
installDir: '${tmp.path}/bin',
|
||||
));
|
||||
await boot(
|
||||
CliInstaller(
|
||||
resolvedExecutable: '${tmp.path}/gui/clide',
|
||||
env: {'PATH': '${tmp.path}/empty'},
|
||||
bundledClientCandidates: const [],
|
||||
installDir: '${tmp.path}/bin',
|
||||
),
|
||||
);
|
||||
final notes = f.services.notify.active;
|
||||
expect(notes, isNotEmpty);
|
||||
expect(notes.first.level, NotificationLevel.warning);
|
||||
@@ -73,12 +77,7 @@ void main() {
|
||||
final gui = touchExec('${tmp.path}/gui/clide').path;
|
||||
final binDir = Directory('${tmp.path}/bin')..createSync();
|
||||
Link('${binDir.path}/clide').createSync(gui); // PATH clide → the GUI
|
||||
await boot(CliInstaller(
|
||||
resolvedExecutable: gui,
|
||||
env: {'PATH': binDir.path},
|
||||
bundledClientCandidates: const [],
|
||||
installDir: binDir.path,
|
||||
));
|
||||
await boot(CliInstaller(resolvedExecutable: gui, env: {'PATH': binDir.path}, bundledClientCandidates: const [], installDir: binDir.path));
|
||||
final notes = f.services.notify.active;
|
||||
expect(notes, isNotEmpty);
|
||||
expect(notes.first.level, NotificationLevel.warning);
|
||||
@@ -89,12 +88,9 @@ void main() {
|
||||
final dev = touchExec('${tmp.path}/native/linux-x64/clide').path;
|
||||
final binDir = Directory('${tmp.path}/bin')..createSync();
|
||||
Link('${binDir.path}/clide').createSync(dev);
|
||||
await boot(CliInstaller(
|
||||
resolvedExecutable: '${tmp.path}/gui/clide',
|
||||
env: {'PATH': binDir.path},
|
||||
bundledClientCandidates: const [],
|
||||
installDir: binDir.path,
|
||||
));
|
||||
await boot(
|
||||
CliInstaller(resolvedExecutable: '${tmp.path}/gui/clide', env: {'PATH': binDir.path}, bundledClientCandidates: const [], installDir: binDir.path),
|
||||
);
|
||||
final notes = f.services.notify.active;
|
||||
expect(notes, isNotEmpty);
|
||||
expect(notes.first.level, NotificationLevel.info);
|
||||
@@ -104,47 +100,35 @@ void main() {
|
||||
test('does not warn when clide is already installed', () async {
|
||||
final binDir = Directory('${tmp.path}/bin')..createSync();
|
||||
touchExec('${binDir.path}/clide');
|
||||
await boot(CliInstaller(
|
||||
resolvedExecutable: '${tmp.path}/gui/clide',
|
||||
env: {'PATH': binDir.path},
|
||||
bundledClientCandidates: const [],
|
||||
installDir: binDir.path,
|
||||
));
|
||||
await boot(
|
||||
CliInstaller(resolvedExecutable: '${tmp.path}/gui/clide', env: {'PATH': binDir.path}, bundledClientCandidates: const [], installDir: binDir.path),
|
||||
);
|
||||
expect(f.services.notify.active, isEmpty);
|
||||
});
|
||||
|
||||
test('running the command installs the client and reports success', () async {
|
||||
final src = touchExec('${tmp.path}/bundle/clide-cli');
|
||||
final binDir = '${tmp.path}/bin';
|
||||
await boot(CliInstaller(
|
||||
resolvedExecutable: '${tmp.path}/gui/clide',
|
||||
env: {'PATH': binDir},
|
||||
bundledClientCandidates: [src.path],
|
||||
installDir: binDir,
|
||||
));
|
||||
await boot(CliInstaller(resolvedExecutable: '${tmp.path}/gui/clide', env: {'PATH': binDir}, bundledClientCandidates: [src.path], installDir: binDir));
|
||||
final r = await f.services.commands.execute('clide.installCli');
|
||||
expect(r.ok, isTrue);
|
||||
expect(r.data['installed'], '$binDir/clide');
|
||||
expect(File('$binDir/clide').existsSync(), isTrue);
|
||||
expect(
|
||||
f.services.notify.active.any((n) => n.level == NotificationLevel.success && n.title == 'clide CLI installed'),
|
||||
isTrue,
|
||||
);
|
||||
expect(f.services.notify.active.any((n) => n.level == NotificationLevel.success && n.title == 'clide CLI installed'), isTrue);
|
||||
});
|
||||
|
||||
test('running the command surfaces a tool error when nothing to install', () async {
|
||||
await boot(CliInstaller(
|
||||
resolvedExecutable: '${tmp.path}/gui/clide',
|
||||
env: {'PATH': '${tmp.path}/bin'},
|
||||
bundledClientCandidates: const [],
|
||||
installDir: '${tmp.path}/bin',
|
||||
));
|
||||
await boot(
|
||||
CliInstaller(
|
||||
resolvedExecutable: '${tmp.path}/gui/clide',
|
||||
env: {'PATH': '${tmp.path}/bin'},
|
||||
bundledClientCandidates: const [],
|
||||
installDir: '${tmp.path}/bin',
|
||||
),
|
||||
);
|
||||
final r = await f.services.commands.execute('clide.installCli');
|
||||
expect(r.ok, isFalse);
|
||||
expect(r.error!.kind, IpcErrorKind.toolError);
|
||||
expect(
|
||||
f.services.notify.active.any((n) => n.level == NotificationLevel.error),
|
||||
isTrue,
|
||||
);
|
||||
expect(f.services.notify.active.any((n) => n.level == NotificationLevel.error), isTrue);
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user