| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 | // Copyright 2011 The Closure Library Authors. All Rights Reserved.//// Licensed under the Apache License, Version 2.0 (the "License");// you may not use this file except in compliance with the License.// You may obtain a copy of the License at////      http://www.apache.org/licenses/LICENSE-2.0//// Unless required by applicable law or agreed to in writing, software// distributed under the License is distributed on an "AS-IS" BASIS,// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.// See the License for the specific language governing permissions and// limitations under the License.goog.provide('goog.testing.fs.integrationTest');goog.setTestOnly('goog.testing.fs.integrationTest');goog.require('goog.Promise');goog.require('goog.events');goog.require('goog.fs');goog.require('goog.fs.DirectoryEntry');goog.require('goog.fs.Error');goog.require('goog.fs.FileSaver');goog.require('goog.testing.PropertyReplacer');goog.require('goog.testing.fs');goog.require('goog.testing.jsunit');var TEST_DIR = 'goog-fs-test-dir';var Behavior = goog.fs.DirectoryEntry.Behavior;var EventType = goog.fs.FileSaver.EventType;var ReadyState = goog.fs.FileSaver.ReadyState;var deferredFs = goog.testing.fs.getTemporary();function setUpPage() {  goog.testing.fs.install(new goog.testing.PropertyReplacer());}function tearDown() {  return loadTestDir().then(function(dir) { return dir.removeRecursively(); });}function testWriteFile() {  return loadFile('test', Behavior.CREATE)      .then(goog.partial(writeToFile, 'test content'))      .then(goog.partial(checkFileContent, 'test content'));}function testRemoveFile() {  return loadFile('test', Behavior.CREATE)      .then(goog.partial(writeToFile, 'test content'))      .then(function(fileEntry) { return fileEntry.remove(); })      .then(goog.partial(checkFileRemoved, 'test'));}function testMoveFile() {  var subdir = loadDirectory('subdir', Behavior.CREATE);  var writtenFile = loadFile('test', Behavior.CREATE)                        .then(goog.partial(writeToFile, 'test content'));  return goog.Promise.all([subdir, writtenFile])      .then(function(results) {        var dir = results[0];        var fileEntry = results[1];        return fileEntry.moveTo(dir);      })      .then(goog.partial(checkFileContent, 'test content'))      .then(goog.partial(checkFileRemoved, 'test'));}function testCopyFile() {  var file = loadFile('test', Behavior.CREATE);  var subdir = loadDirectory('subdir', Behavior.CREATE);  var writtenFile = file.then(goog.partial(writeToFile, 'test content'));  return goog.Promise.all([subdir, writtenFile])      .then(function(results) {        var dir = results[0];        var fileEntry = results[1];        return fileEntry.copyTo(dir);      })      .then(goog.partial(checkFileContent, 'test content'))      .then(function() { return file; })      .then(goog.partial(checkFileContent, 'test content'));}function testAbortWrite() {  var file = loadFile('test', Behavior.CREATE);  file.then(goog.partial(startWrite, 'test content'))      .then(function(writer) {        writer.abort();        return writer;      })      .then(goog.partial(waitForEvent, EventType.ABORT));  return file.then(goog.partial(checkFileContent, ''));}function testSeek() {  var file = loadFile('test', Behavior.CREATE);  return file.then(goog.partial(writeToFile, 'test content'))      .then(function(fileEntry) { return fileEntry.createWriter(); })      .then(goog.partial(checkReadyState, ReadyState.INIT))      .then(function(writer) {        writer.seek(5);        writer.write(goog.fs.getBlob('stuff and things'));        return writer;      })      .then(goog.partial(checkReadyState, ReadyState.WRITING))      .then(goog.partial(waitForEvent, EventType.WRITE))      .then(function() { return file; })      .then(goog.partial(checkFileContent, 'test stuff and things'));}function testTruncate() {  var file = loadFile('test', Behavior.CREATE);  return file.then(goog.partial(writeToFile, 'test content'))      .then(function(fileEntry) { return fileEntry.createWriter(); })      .then(goog.partial(checkReadyState, ReadyState.INIT))      .then(function(writer) {        writer.truncate(4);        return writer;      })      .then(goog.partial(checkReadyState, ReadyState.WRITING))      .then(goog.partial(waitForEvent, EventType.WRITE))      .then(function() { return file; })      .then(goog.partial(checkFileContent, 'test'));}function loadTestDir() {  return deferredFs.then(function(fs) {    return fs.getRoot().getDirectory(TEST_DIR, Behavior.CREATE);  });}function loadFile(filename, behavior) {  return loadTestDir().then(function(dir) {    return dir.getFile(filename, behavior);  });}function loadDirectory(filename, behavior) {  return loadTestDir().then(function(dir) {    return dir.getDirectory(filename, behavior);  });}function startWrite(content, fileEntry) {  return fileEntry.createWriter()      .then(goog.partial(checkReadyState, ReadyState.INIT))      .then(function(writer) {        writer.write(goog.fs.getBlob(content));        return writer;      })      .then(goog.partial(checkReadyState, ReadyState.WRITING));}function waitForEvent(type, target) {  return new goog.Promise(function(resolve, reject) {    goog.events.listenOnce(target, type, resolve);  });}function writeToFile(content, fileEntry) {  return startWrite(content, fileEntry)      .then(goog.partial(waitForEvent, EventType.WRITE))      .then(function() { return fileEntry; });}function checkFileContent(content, fileEntry) {  return fileEntry.file()      .then(function(blob) { return goog.fs.blobToString(blob); })      .then(goog.partial(assertEquals, content));}function checkFileRemoved(filename) {  return loadFile(filename)      .then(goog.partial(fail, 'expected file to be removed'))      .thenCatch(function(err) {        assertEquals(err.code, goog.fs.Error.ErrorCode.NOT_FOUND);        return true;  // Go back to the non-rejected path.      });}function checkReadyState(expectedState, writer) {  assertEquals(expectedState, writer.getReadyState());  return writer;}
 |