// 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.

import "package:expect/expect.dart";
import 'dart:io';

main() {
  Directory temp = new Directory('').createTempSync();
  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 Error("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(new Options().executable).fullPathSync();
  Process.run(executable, ['script.dart'], workingDirectory: temp.path)
      .then((result) {
        temp.deleteSync(recursive: true);
        Expect.equals(0, result.exitCode);
      });
}
