// Copyright (c) 2014, 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.

/// @assertion Future<FileSystem> requestFileSystem(int size, {bool persistent:
/// false})
/// Access a sandboxed file system of the specified size. If persistent is true,
/// the application will request permission from the user to create lasting
/// storage. This storage cannot be freed without the user's permission.
/// Returns a Future whose value stores a reference to the sandboxed file system
/// for use. Because the file system is sandboxed, applications cannot access
/// file systems created in other web pages.
/// @description Checks that FileSystem is not accessible outside its web-page,
/// and a Directory can be created.
/// todo is it in other page?

import "dart:html";
import "../../../Utils/expect.dart";

main() {
  Window nw = window;

  asyncStart();
  nw.requestFileSystem(10).then((FileSystem fs) {
    fs.root?.createDirectory("abc").then((Entry entry) {
      Expect.isTrue(entry.isDirectory);
      asyncEnd();
    }, onError: (e) {
      asyncEnd();
      Expect.fail("createDirectory:$e");
    });
  }, onError: (e) {
    asyncEnd();
    Expect.fail("requestFileSystem:$e");
  });
}
