// Copyright (c) 2013, 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";

void testDeleteLongPathPrefix() {
  var dir = Directory.systemTemp.createTempSync('dart_file_win');
  var dirPath = "\\\\?\\${dir.path}";
  var subPath = dirPath;
  for (int i = 0; i < 16; i++) {
    subPath += "\\a-long-path-segment";
    dir = new Directory(subPath)..createSync();
  }
  Expect.isTrue(dir.path.length > 256);
  var prefixDir = new Directory(dirPath);
  Expect.isTrue(prefixDir.existsSync());
  prefixDir.deleteSync(recursive: true);
  Expect.isFalse(dir.existsSync());
  Expect.isFalse(prefixDir.existsSync());
}

void main() {
  if (!Platform.isWindows) return;
  testDeleteLongPathPrefix();
}
