// 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 accessible from its web-page, and a
/// File can be created.

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

main() {
  Window nw = window;

  asyncStart();
  nw.requestFileSystem(10).then((FileSystem fs) {
    fs.root?.createFile("xyz").then((Entry entry) {
      print("file created:$entry");
      Expect.isTrue(entry.isFile);
      asyncEnd();
    }, onError: (e) {
      asyncEnd();
      Expect.fail("createFile:$e");
    });
  }, onError: (e) {
    asyncEnd();
    Expect.fail(e.toString());
  });
}
