// Copyright (c) 2017, 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';

main() async {
  Link link1 = new Link(
      Directory.systemTemp.path + Platform.pathSeparator + 'link1.lnk');
  Link link2 = new Link(
      Directory.systemTemp.path + Platform.pathSeparator + 'link2.lnk');

  Directory target1 = new Directory(
      Directory.systemTemp.path + Platform.pathSeparator + 'target1');
  Directory target2 = new Directory(
      Directory.systemTemp.path + Platform.pathSeparator + 'target2');

  target1.createSync();
  target2.createSync();

  Expect.isTrue(target1.existsSync());
  Expect.isTrue(target2.existsSync());

  link1.createSync(target1.path);
  link2.createSync(target2.path);
  Expect.isTrue(link1.existsSync());
  Expect.isTrue(link2.existsSync());

  try {
    Link renamed = await link1.rename(link2.path);
    Expect.isFalse(link1.existsSync());
    Expect.isTrue(renamed.existsSync());
    Expect.equals(renamed.path, link2.path);
  } finally {
    target1.delete();
    target2.delete();
    link2.delete();
    if (link1.existsSync()) {
      link1.delete();
    }
  }
}
