
// @dart = 2.9
library fileapi;

import 'dart:async';
import 'dart:html';

import 'package:async_helper/async_helper.dart';
import 'package:async_helper/async_minitest.dart';

class FileAndDir {
  FileEntry file;
  DirectoryEntry dir;
  FileAndDir(this.file, this.dir);
}

FileSystem fs;

main() async {
  getFileSystem() async {
    var fileSystem = await window.requestFileSystem(100);
    fs = fileSystem;
  }

  // Do the boilerplate to get several files and directories created to then
  // test the functions that use those items.
  Future doDirSetup(String testName) async {
    await getFileSystem();

    var file = await fs.root.createFile('file_$testName');
    var dir = await fs.root.createDirectory('dir_$testName');
    return new Future.value(new FileAndDir(file, dir));
  }

  if (FileSystem.supported) {
    test('createWriter', () async {
      var fileAndDir = await doDirSetup('createWriter');
      var writer = await fileAndDir.file.createWriter();
      expect(writer.position, 0);
      expect(writer.readyState, FileWriter.INIT);
      expect(writer.length, 0);
    });

    test('file', () async {
      var fileAndDir = await doDirSetup('file');
      var fileObj = await fileAndDir.file.file();
      expect(fileObj.name, fileAndDir.file.name);
      expect(fileObj.relativePath, '');
      expect(
          new DateTime.now().difference(fileObj.lastModifiedDate).inMinutes <
              30,
          isTrue);
    });
  }
}

