// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// @dart = 2.9

import 'dart:io';

import 'package:expect/expect.dart';

Future<void> main() async {
  final origDir = Directory.current;
  final exePath = Platform.resolvedExecutable;
  final d = Directory.systemTemp.createTempSync('dart_symlink');

  // Roughly emulate a Brew installation:
  //   - $BREW/bin/dart -> ../Cellar/dart/2.8.0-dev.20.0/bin/dart
  //   - $BREW/Cellar/dart/2.8.0-dev.20.0/bin/dart -> $DART_SDK/bin/dart
  final a = Directory('${d.path}/usr/local/bin');
  a.createSync(recursive: true);

  // /usr/local/Cellar/dart/2.8.0-dev.20.0/bin/dart -> $DART_SDK/bin/dart
  Directory.current = a;
  final linkLocation = '${d.path}/usr/local/bin/Cellar/dart/2.8.0-dev.20.0/bin/dart';
  final link = Link(linkLocation);
  link.createSync(exePath, recursive: true);

  // /usr/local/bin/dart -> /usr/local/Cellar/dart/2.8.0-dev.20/bin/dart
  final link2 = Link('dart')..createSync(linkLocation, recursive: true);
  final path = Uri.parse(link2.absolute.path).path;
  Directory.current = origDir;
  final result = await Process.run('$path', ['help']);
  Expect.equals(result.exitCode, 0);
}
