// Copyright (c) 2012, 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 "package:expect/expect.dart";
import 'dart:io';

main() {
  Directory temp = Directory.systemTemp.createTempSync('dart_regress_7679');
  File script = new File('${temp.path}/script.dart');
  script.writeAsStringSync("""
import 'dart:io';

class Expect {
  static void isTrue(var x) {
    if (!identical(x, true)) {
      throw new StateError("Not identical");
    }
  }
}

main() {
  Directory d = new Directory('a');
  d.create(recursive: true).then((_) {
    d.exists().then((result) {
      Expect.isTrue(result);
      d = new Directory('b/c/d');
      d.create(recursive: true).then((_) {
        d.exists().then((result) {
          Expect.isTrue(result);
        });
      });
    });
  });
}
""");
  String executable = new File(Platform.executable).resolveSymbolicLinksSync();
  // Note: we prevent this child process from using Crashpad handler because
  // this introduces an issue with deleting the temporary directory.
  Process.run(
      executable,
      []
        ..addAll(Platform.executableArguments)
        ..add('script.dart'),
      workingDirectory: temp.path,
      environment: {'DART_CRASHPAD_HANDLER': ''}).then((result) {
    temp.deleteSync(recursive: true);
    Expect.equals(0, result.exitCode);
  });
}
