// 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.
//
// This test is Windows-only. It tests a short (shorter than 260) relative path
// representing a long absolute path cannot be used by Windows API. Running this
// test without proper support on long path will get an error.

// @dart = 2.9

import 'dart:io';

const maxPath = 260;

void main(args) {
  if (!Platform.isWindows) {
    return;
  }
  final dir = Directory.systemTemp.createTempSync('test');

  if (dir.path.length >= maxPath) {
    return;
  }

  // Make sure oldpath is shorter than MAX_PATH (260).
  int length = (maxPath - dir.path.length) ~/ 2;
  final oldpath = Directory('${dir.path}\\${'x' * length}}');
  oldpath.createSync(recursive: true);
  final temp = Directory.current;

  Directory.current = oldpath.path;

  // The length of relative path is always shorter than maxPath, but it
  // represents a path exceeding the maxPath.
  final newpath = Directory('.\\${'y' * 2 * length}');
  newpath.createSync();

  // Reset current directory before deletion.
  Directory.current = temp.path;
  dir.deleteSync(recursive: true);
}
