You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by kn...@apache.org on 2019/03/12 01:51:12 UTC
[cordova-plugin-file] branch travis_tests updated: Safari only test
This is an automated email from the ASF dual-hosted git repository.
knaito pushed a commit to branch travis_tests
in repository https://gitbox.apache.org/repos/asf/cordova-plugin-file.git
The following commit(s) were added to refs/heads/travis_tests by this push:
new c662280 Safari only test
c662280 is described below
commit c6622805088dc04c86d393bc02d6cec7dba1cec1
Author: knaito <kn...@asial.co.jp>
AuthorDate: Tue Mar 12 10:50:52 2019 +0900
Safari only test
---
tests/tests.js | 8214 ++++++++++++++++++++++++++++----------------------------
1 file changed, 4145 insertions(+), 4069 deletions(-)
diff --git a/tests/tests.js b/tests/tests.js
index d227e8d..564f345 100644
--- a/tests/tests.js
+++ b/tests/tests.js
@@ -19,19 +19,18 @@
*/
/* eslint-env jasmine */
-/* global WebKitBlobBuilder */
exports.defineAutoTests = function () {
/* eslint-disable no-undef */
- var isBrowser = (cordova.platformId === 'browser');
+ // var isBrowser = (cordova.platformId === 'browser');
// Use feature detection to determine current browser instead of checking user-agent
- var isChrome = isBrowser && window.webkitRequestFileSystem && window.webkitResolveLocalFileSystemURL;
- var isIE = isBrowser && (window.msIndexedDB);
- var isIndexedDBShim = isBrowser && !isChrome; // Firefox and IE for example
+ // var isChrome = isBrowser && window.webkitRequestFileSystem && window.webkitResolveLocalFileSystemURL;
+ // var isIE = isBrowser && (window.msIndexedDB);
+ // var isIndexedDBShim = isBrowser && !isChrome; // Firefox and IE for example
- var isWindows = (cordova.platformId === 'windows' || cordova.platformId === 'windows8');
+ // var isWindows = (cordova.platformId === 'windows' || cordova.platformId === 'windows8');
/* eslint-enable no-undef */
- var MEDIUM_TIMEOUT = 15000;
+ // var MEDIUM_TIMEOUT = 15000;
window.customLog = function (eventName, eventObject) {
console.log('eventName: ' + eventObject);
@@ -43,4140 +42,4217 @@ exports.defineAutoTests = function () {
}
};
- describe('File API', function () {
- // Adding a Jasmine helper matcher, to report errors when comparing to FileError better.
- var fileErrorMap = {
- 1: 'NOT_FOUND_ERR',
- 2: 'SECURITY_ERR',
- 3: 'ABORT_ERR',
- 4: 'NOT_READABLE_ERR',
- 5: 'ENCODING_ERR',
- 6: 'NO_MODIFICATION_ALLOWED_ERR',
- 7: 'INVALID_STATE_ERR',
- 8: 'SYNTAX_ERR',
- 9: 'INVALID_MODIFICATION_ERR',
- 10: 'QUOTA_EXCEEDED_ERR',
- 11: 'TYPE_MISMATCH_ERR',
- 12: 'PATH_EXISTS_ERR'
- };
- var root;
- var temp_root;
- var persistent_root;
- beforeEach(function (done) {
- // Custom Matchers
- jasmine.Expectation.addMatchers({
- toBeFileError: function () {
- return {
- compare: function (error, code) {
- var pass = error.code === code;
- return {
- pass: pass,
- message: 'Expected FileError with code ' + fileErrorMap[error.code] + ' (' + error.code + ') to be ' + fileErrorMap[code] + '(' + code + ')'
- };
- }
- };
- },
- toCanonicallyMatch: function () {
- return {
- compare: function (currentPath, path) {
- var a = path.split('/').join('').split('\\').join('');
- var b = currentPath.split('/').join('').split('\\').join('');
- var pass = a === b;
- return {
- pass: pass,
- message: 'Expected paths to match : ' + path + ' should be ' + currentPath
- };
- }
- };
- },
- toFailWithMessage: function () {
- return {
- compare: function (error, message) { // eslint-disable-line handle-callback-err
- var pass = false;
- return {
- pass: pass,
- message: message
- };
- }
- };
- },
- toBeDataUrl: function () {
- return {
- compare: function (url) {
- var pass = false;
- // "data:application/octet-stream;base64,"
- var header = url.substr(0, url.indexOf(','));
- var headerParts = header.split(/[:;]/);
- if (headerParts.length === 3 &&
- headerParts[0] === 'data' &&
- headerParts[2] === 'base64') {
- pass = true;
- }
- var message = 'Expected ' + url + ' to be a valid data url. ' + header + ' is not valid header for data uris';
- return {
- pass: pass,
- message: message
- };
- }
- };
- }
- });
- // Define global variables
+ var isSafari = function () {
+ var ua = window.navigator.userAgent.toLowerCase();
+ return (ua.indexOf('safari') !== -1 && ua.indexOf('chrome') === -1 && ua.indexOf('edge') === -1);
+ };
+
+ describe('Safari only Test', function () {
+
+ window.customLog('log', 'Safari only test');
+
+ it('file.spec.0 can use indexed db', function (done) {
+
+ if (!isSafari()) {
+ window.customLog('log', 'The system is not safari.');
+ done();
+ return;
+ }
+
+ var FILE_STORE_ = 'xentries';
+ var dbName = 'hogehoge';
+
var onError = function (e) {
- console.log('[ERROR] Problem setting up root filesystem for test running! Error to follow.');
- console.log(JSON.stringify(e));
+ window.customLog('log', 'db error');
+ window.customLog('log', e.toString());
+ done();
};
- window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function (fileSystem) { // eslint-disable-line no-undef
- root = fileSystem.root;
- // set in file.tests.js
- persistent_root = root;
- window.requestFileSystem(LocalFileSystem.TEMPORARY, 0, function (fileSystem) { // eslint-disable-line no-undef
- temp_root = fileSystem.root;
- // set in file.tests.js
- done();
- }, onError);
- }, onError);
- });
- // HELPER FUNCTIONS
- // deletes specified file or directory
- var deleteEntry = function (name, success, error) {
- // deletes entry, if it exists
- // entry.remove success callback is required: http://www.w3.org/TR/2011/WD-file-system-api-20110419/#the-entry-interface
- success = success || function () {};
- error = error || failed.bind(null, success, 'deleteEntry failed.');
-
- window.resolveLocalFileSystemURL(root.toURL() + '/' + name, function (entry) {
- if (entry.isDirectory === true) {
- entry.removeRecursively(success, error);
- } else {
- entry.remove(success, error);
+
+ var indexedDB = window.indexedDB || window.mozIndexedDB;
+
+ var mydb = null;
+ var request = indexedDB.open(dbName, '3');
+
+ var myentry = { 'myname': 'hogehoge' };
+ var mypath = '/aaa/bbb';
+
+ request.onerror = onError;
+
+ request.onupgradeneeded = function (e) {
+ window.customLog('log', 'upgrade needed');
+ mydb = e.target.result;
+ mydb.onerror = onError;
+ if (!mydb.objectStoreNames.contains(FILE_STORE_)) {
+ mydb.createObjectStore(FILE_STORE_/*, {keyPath: 'id', autoIncrement: true} */);
}
- }, success);
- };
- // deletes file, if it exists, then invokes callback
- var deleteFile = function (fileName, callback) {
- // entry.remove success callback is required: http://www.w3.org/TR/2011/WD-file-system-api-20110419/#the-entry-interface
- callback = callback || function () {};
-
- root.getFile(fileName, null, // remove file system entry
- function (entry) {
- entry.remove(callback, function () {
- console.log('[ERROR] deleteFile cleanup method invoked fail callback.');
- });
- }, // doesn't exist
- callback);
- };
- // deletes and re-creates the specified file
- var createFile = function (fileName, success, error) {
- deleteEntry(fileName, function () {
- root.getFile(fileName, {
- create: true
- }, success, error);
- }, error);
- };
- // deletes and re-creates the specified directory
- var createDirectory = function (dirName, success, error) {
- deleteEntry(dirName, function () {
- root.getDirectory(dirName, {
- create: true
- }, success, error);
- }, error);
- };
- function failed (done, msg, error) {
- window.customLog('log', 'failed is called : ' + msg);
- var info = typeof msg === 'undefined' ? 'Unexpected error callback' : msg;
- var codeMsg = (error && error.code) ? (': ' + fileErrorMap[error.code]) : '';
- expect(true).toFailWithMessage(info + '\n' + JSON.stringify(error) + codeMsg);
- done();
- }
- var succeed = function (done, msg) {
- var info = typeof msg === 'undefined' ? 'Unexpected success callback' : msg;
- expect(true).toFailWithMessage(info);
- done();
- };
- var joinURL = function (base, extension) {
- if (base.charAt(base.length - 1) !== '/' && extension.charAt(0) !== '/') {
- return base + '/' + extension;
- }
- if (base.charAt(base.length - 1) === '/' && extension.charAt(0) === '/') {
- return base + extension.substring(1);
- }
- return base + extension;
- };
- describe('FileError object', function () {
- /* eslint-disable no-undef */
- it('file.spec.1 should define FileError constants', function () {
- expect(FileError.NOT_FOUND_ERR).toBe(1);
- expect(FileError.SECURITY_ERR).toBe(2);
- expect(FileError.ABORT_ERR).toBe(3);
- expect(FileError.NOT_READABLE_ERR).toBe(4);
- expect(FileError.ENCODING_ERR).toBe(5);
- expect(FileError.NO_MODIFICATION_ALLOWED_ERR).toBe(6);
- expect(FileError.INVALID_STATE_ERR).toBe(7);
- expect(FileError.SYNTAX_ERR).toBe(8);
- expect(FileError.INVALID_MODIFICATION_ERR).toBe(9);
- expect(FileError.QUOTA_EXCEEDED_ERR).toBe(10);
- expect(FileError.TYPE_MISMATCH_ERR).toBe(11);
- expect(FileError.PATH_EXISTS_ERR).toBe(12);
- });
- });
- describe('LocalFileSystem', function () {
- it('file.spec.2 should define LocalFileSystem constants', function () {
- expect(LocalFileSystem.TEMPORARY).toBe(0);
- expect(LocalFileSystem.PERSISTENT).toBe(1);
- /* eslint-enable no-undef */
- });
- describe('window.requestFileSystem', function () {
- it('file.spec.3 should be defined', function () {
- expect(window.requestFileSystem).toBeDefined();
- });
- it('file.spec.4 should be able to retrieve a PERSISTENT file system', function (done) {
- var win = function (fileSystem) {
- expect(fileSystem).toBeDefined();
- expect(fileSystem.name).toBeDefined();
- if (isChrome) {
- expect(fileSystem.name).toContain('Persistent');
- } else {
- expect(fileSystem.name).toBe('persistent');
- }
- expect(fileSystem.root).toBeDefined();
- expect(fileSystem.root.filesystem).toBeDefined();
- // Shouldn't use cdvfile by default.
- expect(fileSystem.root.toURL()).not.toMatch(/^cdvfile:/);
- // All DirectoryEntry URLs should always have a trailing slash.
- expect(fileSystem.root.toURL()).toMatch(/\/$/);
- done();
- };
+ };
- // Request a little bit of space on the filesystem, unless we're running in a browser where that could cause a prompt.
- var spaceRequired = isBrowser ? 0 : 1024;
-
- // retrieve PERSISTENT file system
- window.requestFileSystem(LocalFileSystem.PERSISTENT, spaceRequired, win, failed.bind(null, done, 'window.requestFileSystem - Error retrieving PERSISTENT file system')); // eslint-disable-line no-undef
- });
- it('file.spec.5 should be able to retrieve a TEMPORARY file system', function (done) {
- var win = function (fileSystem) {
- expect(fileSystem).toBeDefined();
- if (isChrome) {
- expect(fileSystem.name).toContain('Temporary');
- } else {
- expect(fileSystem.name).toBe('temporary');
- }
- expect(fileSystem.root).toBeDefined();
- expect(fileSystem.root.filesystem).toBeDefined();
- expect(fileSystem.root.filesystem).toBe(fileSystem);
- done();
- };
- // retrieve TEMPORARY file system
- window.requestFileSystem(LocalFileSystem.TEMPORARY, 0, win, failed.bind(null, done, 'window.requestFileSystem - Error retrieving TEMPORARY file system')); // eslint-disable-line no-undef
- });
- it('file.spec.6 should error if you request a file system that is too large', function (done) {
- if (isBrowser) {
- /* window.requestFileSystem TEMPORARY and PERSISTENT filesystem quota is not limited in Chrome.
- Firefox filesystem size is not limited but every 50MB request user permission.
- IE10 allows up to 10mb of combined AppCache and IndexedDB used in implementation
- of filesystem without prompting, once you hit that level you will be asked if you
- want to allow it to be increased up to a max of 250mb per site.
- So `size` parameter for `requestFileSystem` function does not affect on filesystem in Firefox and IE. */
- pending();
- }
-
- var fail = function (error) {
- expect(error).toBeDefined();
- expect(error).toBeFileError(FileError.QUOTA_EXCEEDED_ERR); // eslint-disable-line no-undef
- done();
- };
- // win = createWin('window.requestFileSystem');
- // Request the file system
- window.requestFileSystem(LocalFileSystem.TEMPORARY, 1000000000000000, failed.bind(null, done, 'window.requestFileSystem - Error retrieving TEMPORARY file system'), fail); // eslint-disable-line no-undef
- });
- it('file.spec.7 should error out if you request a file system that does not exist', function (done) {
-
- var fail = function (error) {
- expect(error).toBeDefined();
- if (isChrome) {
- /* INVALID_MODIFICATION_ERR (code: 9) or ??? (code: 13) is thrown instead of SYNTAX_ERR(code: 8)
- on requesting of a non-existant filesystem. */
- // expect(error).toBeFileError(FileError.INVALID_MODIFICATION_ERR);
- } else {
- expect(error).toBeFileError(FileError.SYNTAX_ERR); // eslint-disable-line no-undef
- }
- done();
- };
- // Request the file system
- window.requestFileSystem(-1, 0, succeed.bind(null, done, 'window.requestFileSystem'), fail);
- });
- });
- describe('window.resolveLocalFileSystemURL', function () {
- it('file.spec.8 should be defined', function () {
- expect(window.resolveLocalFileSystemURL).toBeDefined();
- });
- it('file.spec.9 should resolve a valid file name', function (done) {
- var fileName = 'file.spec.9';
- var win = function (fileEntry) {
- window.customLog('log', '----- win is called ----');
- expect(fileEntry).toBeDefined();
- expect(fileEntry.isFile).toBe(true);
- expect(fileEntry.isDirectory).toBe(false);
- expect(fileEntry.name).toCanonicallyMatch(fileName);
- expect(fileEntry.toURL()).not.toMatch(/^cdvfile:/, 'should not use cdvfile URL');
- expect(fileEntry.toURL()).not.toMatch(/\/$/, 'URL should not end with a slash');
- // Clean-up
- deleteEntry(fileName, done);
- };
- createFile(fileName, function (entry) {
- window.customLog('log', '----- entry.toURL() ----');
- window.customLog('log', entry.toURL());
- setTimeout(function () {
- window.resolveLocalFileSystemURL(entry.toURL(), win, function (err) {
- window.customLog('log', '********* called *******');
- (failed.bind(null, done, 'window.resolveLocalFileSystemURL - Error resolving file URL: ' + entry.toURL()))(err);
- });
- }, 1000);
- }, failed.bind(null, done, 'createFile - Error creating file: ' + fileName), failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
- });
- it('file.spec.9.1 should resolve a file even with a terminating slash', function (done) {
- var fileName = 'file.spec.9.1';
- var win = function (fileEntry) {
- expect(fileEntry).toBeDefined();
- expect(fileEntry.isFile).toBe(true);
- expect(fileEntry.isDirectory).toBe(false);
- expect(fileEntry.name).toCanonicallyMatch(fileName);
- expect(fileEntry.toURL()).not.toMatch(/^cdvfile:/, 'should not use cdvfile URL');
- expect(fileEntry.toURL()).not.toMatch(/\/$/, 'URL should not end with a slash');
- // Clean-up
- deleteEntry(fileName, done);
- };
- createFile(fileName, function (entry) {
- var entryURL = entry.toURL() + '/';
- window.resolveLocalFileSystemURL(entryURL, win, failed.bind(null, done, 'window.resolveLocalFileSystemURL - Error resolving file URL: ' + entryURL));
- }, failed.bind(null, done, 'createFile - Error creating file: ' + fileName), failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
- });
- it('file.spec.9.5 should resolve a directory', function (done) {
- var fileName = 'file.spec.9.5';
- var win = function (fileEntry) {
- expect(fileEntry).toBeDefined();
- expect(fileEntry.isFile).toBe(false);
- expect(fileEntry.isDirectory).toBe(true);
- expect(fileEntry.name).toCanonicallyMatch(fileName);
- expect(fileEntry.toURL()).not.toMatch(/^cdvfile:/, 'should not use cdvfile URL');
- expect(fileEntry.toURL()).toMatch(/\/$/, 'URL end with a slash');
- // cleanup
- deleteEntry(fileName, done);
- };
- function gotDirectory (entry) {
- // lookup file system entry
- window.resolveLocalFileSystemURL(entry.toURL(), win, failed.bind(null, done, 'window.resolveLocalFileSystemURL - Error resolving directory URL: ' + entry.toURL()));
- }
- createDirectory(fileName, gotDirectory, failed.bind(null, done, 'createDirectory - Error creating directory: ' + fileName), failed.bind(null, done, 'createDirectory - Error creating directory: ' + fileName));
- });
- it('file.spec.9.6 should resolve a directory even without a terminating slash', function (done) {
- var fileName = 'file.spec.9.6';
- var win = function (fileEntry) {
- expect(fileEntry).toBeDefined();
- expect(fileEntry.isFile).toBe(false);
- expect(fileEntry.isDirectory).toBe(true);
- expect(fileEntry.name).toCanonicallyMatch(fileName);
- expect(fileEntry.toURL()).not.toMatch(/^cdvfile:/, 'should not use cdvfile URL');
- expect(fileEntry.toURL()).toMatch(/\/$/, 'URL end with a slash');
- // cleanup
- deleteEntry(fileName, done);
- };
- function gotDirectory (entry) {
- // lookup file system entry
- var entryURL = entry.toURL();
- entryURL = entryURL.substring(0, entryURL.length - 1);
- window.resolveLocalFileSystemURL(entryURL, win, failed.bind(null, done, 'window.resolveLocalFileSystemURL - Error resolving directory URL: ' + entryURL));
- }
- createDirectory(fileName, gotDirectory, failed.bind(null, done, 'createDirectory - Error creating directory: ' + fileName), failed.bind(null, done, 'createDirectory - Error creating directory: ' + fileName));
- });
-
- it('file.spec.9.7 should resolve a file with valid nativeURL', function (done) {
- if (isBrowser) {
- pending('browsers doesn\'t return nativeURL');
- }
- var fileName = 'de.create.file';
- var win = function (entry) {
- var path = entry.nativeURL.split('///')[1];
- expect(/\/{2,}/.test(path)).toBeFalsy();
- // cleanup
- deleteEntry(entry.name, done);
- };
- root.getFile(fileName, {
- create: true
- }, win, succeed.bind(null, done, 'root.getFile - Error unexpected callback, file should not exists: ' + fileName));
- });
-
- it('file.spec.10 resolve valid file name with parameters', function (done) {
- var fileName = 'resolve.file.uri.params';
- var win = function (fileEntry) {
- expect(fileEntry).toBeDefined();
- if (fileEntry.toURL().toLowerCase().substring(0, 10) === 'cdvfile://') {
- expect(fileEntry.fullPath).toBe('/' + fileName + '?1234567890');
- }
- expect(fileEntry.name).toBe(fileName);
- // cleanup
- deleteEntry(fileName, done);
- };
- // create a new file entry
- createFile(fileName, function (entry) {
- window.resolveLocalFileSystemURL(entry.toURL() + '?1234567890', win, failed.bind(null, done, 'window.resolveLocalFileSystemURL - Error resolving file URI: ' + entry.toURL()));
- }, failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
- });
- it('file.spec.11 should error (NOT_FOUND_ERR) when resolving (non-existent) invalid file name', function (done) {
- var fileName = cordova.platformId === 'windowsphone' ? root.toURL() + '/' + 'this.is.not.a.valid.file.txt' : joinURL(root.toURL(), 'this.is.not.a.valid.file.txt'); // eslint-disable-line no-undef
- var fail = function (error) {
- expect(error).toBeDefined();
- if (isChrome) {
- expect(error).toBeFileError(FileError.SYNTAX_ERR); // eslint-disable-line no-undef
- } else {
- expect(error).toBeFileError(FileError.NOT_FOUND_ERR); // eslint-disable-line no-undef
- }
+ request.onsuccess = function (e) {
+ mydb = e.target.result;
+ mydb.onerror = onError;
+ window.customLog('log', 'step 1');
+
+ var tx = mydb.transaction([FILE_STORE_], 'readwrite');
+ tx.onabort = function (err) {
+ window.customLog('log', 'db abort!!!');
+ console.log(err);
+ done();
+ };
+ tx.oncomplete = function () {
+ window.customLog('log', 'step 2');
+ var tx2 = mydb.transaction([FILE_STORE_], 'readonly');
+ tx2.onabort = function (err) {
+ window.customLog('log', 'db2 abort!!!');
+ console.log(err);
done();
};
- // lookup file system entry
- window.resolveLocalFileSystemURL(fileName, succeed.bind(null, done, 'window.resolveLocalFileSystemURL - Error unexpected callback resolving file URI: ' + fileName), fail);
- });
- it('file.spec.12 should error (ENCODING_ERR) when resolving invalid URI with leading /', function (done) {
- var fileName = '/this.is.not.a.valid.url';
- var fail = function (error) {
- expect(error).toBeDefined();
- if (isChrome) {
- // O.o chrome returns error code 0
- } else {
- expect(error).toBeFileError(FileError.ENCODING_ERR); // eslint-disable-line no-undef
- }
+ tx2.oncomplete = function () {
+ window.customLog('log', 'ALL OK');
done();
};
- // lookup file system entry
- window.resolveLocalFileSystemURL(fileName, succeed.bind(null, done, 'window.resolveLocalFileSystemURL - Error unexpected callback resolving file URI: ' + fileName), fail);
- });
- });
- });
- // LocalFileSystem
- describe('Metadata interface', function () {
- it('file.spec.13 should exist and have the right properties', function () {
- var metadata = new Metadata(); // eslint-disable-line no-undef
- expect(metadata).toBeDefined();
- expect(metadata.modificationTime).toBeDefined();
- });
- });
- describe('Flags interface', function () {
- it('file.spec.14 should exist and have the right properties', function () {
- var flags = new Flags(false, true); // eslint-disable-line no-undef
- expect(flags).toBeDefined();
- expect(flags.create).toBeDefined();
- expect(flags.create).toBe(false);
- expect(flags.exclusive).toBeDefined();
- expect(flags.exclusive).toBe(true);
- });
- });
- describe('FileSystem interface', function () {
- it('file.spec.15 should have a root that is a DirectoryEntry', function (done) {
- var win = function (entry) {
- expect(entry).toBeDefined();
- expect(entry.isFile).toBe(false);
- expect(entry.isDirectory).toBe(true);
- expect(entry.name).toBeDefined();
- expect(entry.fullPath).toBeDefined();
- expect(entry.getMetadata).toBeDefined();
- expect(entry.moveTo).toBeDefined();
- expect(entry.copyTo).toBeDefined();
- expect(entry.toURL).toBeDefined();
- expect(entry.remove).toBeDefined();
- expect(entry.getParent).toBeDefined();
- expect(entry.createReader).toBeDefined();
- expect(entry.getFile).toBeDefined();
- expect(entry.getDirectory).toBeDefined();
- expect(entry.removeRecursively).toBeDefined();
- done();
};
- window.resolveLocalFileSystemURL(root.toURL(), win, failed.bind(null, done, 'window.resolveLocalFileSystemURL - Error resolving file URI: ' + root.toURL()));
- });
+
+ tx.objectStore(FILE_STORE_).put(myentry, mypath);
+ };
+
+ request.onblocked = onError;
});
- describe('DirectoryEntry', function () {
- it('file.spec.16 getFile: get Entry for file that does not exist', function (done) {
- var fileName = 'de.no.file';
- var fail = function (error) {
- expect(error).toBeDefined();
- if (isChrome) {
- expect(error).toBeFileError(FileError.SYNTAX_ERR); // eslint-disable-line no-undef
- } else {
- expect(error).toBeFileError(FileError.NOT_FOUND_ERR); // eslint-disable-line no-undef
- }
- done();
- };
- // create:false, exclusive:false, file does not exist
- root.getFile(fileName, {
- create: false
- }, succeed.bind(null, done, 'root.getFile - Error unexpected callback, file should not exists: ' + fileName), fail);
- });
- it('file.spec.17 getFile: create new file', function (done) {
- var fileName = 'de.create.file';
- var filePath = joinURL(root.fullPath, fileName);
- var win = function (entry) {
- expect(entry).toBeDefined();
- expect(entry.isFile).toBe(true);
- expect(entry.isDirectory).toBe(false);
- expect(entry.name).toCanonicallyMatch(fileName);
- expect(entry.fullPath).toCanonicallyMatch(filePath);
- // cleanup
- deleteEntry(entry.name, done);
- };
- // create:true, exclusive:false, file does not exist
- root.getFile(fileName, {
- create: true
- }, win, succeed.bind(null, done, 'root.getFile - Error unexpected callback, file should not exists: ' + fileName));
- });
- it('file.spec.18 getFile: create new file (exclusive)', function (done) {
- var fileName = 'de.create.exclusive.file';
- var filePath = joinURL(root.fullPath, fileName);
- var win = function (entry) {
- expect(entry).toBeDefined();
- expect(entry.isFile).toBe(true);
- expect(entry.isDirectory).toBe(false);
- expect(entry.name).toBe(fileName);
- expect(entry.fullPath).toCanonicallyMatch(filePath);
- // cleanup
- deleteEntry(entry.name, done);
- };
- // create:true, exclusive:true, file does not exist
- root.getFile(fileName, {
- create: true,
- exclusive: true
- }, win, failed.bind(null, done, 'root.getFile - Error creating file: ' + fileName));
- });
- it('file.spec.19 getFile: create file that already exists', function (done) {
- var fileName = 'de.create.existing.file';
- var filePath = joinURL(root.fullPath, fileName);
-
- function win (entry) {
- expect(entry).toBeDefined();
- expect(entry.isFile).toBe(true);
- expect(entry.isDirectory).toBe(false);
- expect(entry.name).toCanonicallyMatch(fileName);
- expect(entry.fullPath).toCanonicallyMatch(filePath);
- // cleanup
- deleteEntry(entry.name, done);
- }
+ });
- function getFile (file) {
- // create:true, exclusive:false, file exists
- root.getFile(fileName, {
- create: true
- }, win, failed.bind(null, done, 'root.getFile - Error creating file: ' + fileName));
- }
+// describe('File API', function () {
+// // Adding a Jasmine helper matcher, to report errors when comparing to FileError better.
+// var fileErrorMap = {
+// 1: 'NOT_FOUND_ERR',
+// 2: 'SECURITY_ERR',
+// 3: 'ABORT_ERR',
+// 4: 'NOT_READABLE_ERR',
+// 5: 'ENCODING_ERR',
+// 6: 'NO_MODIFICATION_ALLOWED_ERR',
+// 7: 'INVALID_STATE_ERR',
+// 8: 'SYNTAX_ERR',
+// 9: 'INVALID_MODIFICATION_ERR',
+// 10: 'QUOTA_EXCEEDED_ERR',
+// 11: 'TYPE_MISMATCH_ERR',
+// 12: 'PATH_EXISTS_ERR'
+// };
+// var root;
+// var temp_root;
+// var persistent_root;
+// beforeEach(function (done) {
+// // Custom Matchers
+// jasmine.Expectation.addMatchers({
+// toBeFileError: function () {
+// return {
+// compare: function (error, code) {
+// var pass = error.code === code;
+// return {
+// pass: pass,
+// message: 'Expected FileError with code ' + fileErrorMap[error.code] + ' (' + error.code + ') to be ' + fileErrorMap[code] + '(' + code + ')'
+// };
+// }
+// };
+// },
+// toCanonicallyMatch: function () {
+// return {
+// compare: function (currentPath, path) {
+// var a = path.split('/').join('').split('\\').join('');
+// var b = currentPath.split('/').join('').split('\\').join('');
+// var pass = a === b;
+// return {
+// pass: pass,
+// message: 'Expected paths to match : ' + path + ' should be ' + currentPath
+// };
+// }
+// };
+// },
+// toFailWithMessage: function () {
+// return {
+// compare: function (error, message) { // eslint-disable-line handle-callback-err
+// var pass = false;
+// return {
+// pass: pass,
+// message: message
+// };
+// }
+// };
+// },
+// toBeDataUrl: function () {
+// return {
+// compare: function (url) {
+// var pass = false;
+// // "data:application/octet-stream;base64,"
+// var header = url.substr(0, url.indexOf(','));
+// var headerParts = header.split(/[:;]/);
+// if (headerParts.length === 3 &&
+// headerParts[0] === 'data' &&
+// headerParts[2] === 'base64') {
+// pass = true;
+// }
+// var message = 'Expected ' + url + ' to be a valid data url. ' + header + ' is not valid header for data uris';
+// return {
+// pass: pass,
+// message: message
+// };
+// }
+// };
+// }
+// });
+// // Define global variables
+// var onError = function (e) {
+// console.log('[ERROR] Problem setting up root filesystem for test running! Error to follow.');
+// console.log(JSON.stringify(e));
+// };
+// window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function (fileSystem) { // eslint-disable-line no-undef
+// root = fileSystem.root;
+// // set in file.tests.js
+// persistent_root = root;
+// window.requestFileSystem(LocalFileSystem.TEMPORARY, 0, function (fileSystem) { // eslint-disable-line no-undef
+// temp_root = fileSystem.root;
+// // set in file.tests.js
+// done();
+// }, onError);
+// }, onError);
+// });
+// // HELPER FUNCTIONS
+// // deletes specified file or directory
+// var deleteEntry = function (name, success, error) {
+// // deletes entry, if it exists
+// // entry.remove success callback is required: http://www.w3.org/TR/2011/WD-file-system-api-20110419/#the-entry-interface
+// success = success || function () {};
+// error = error || failed.bind(null, success, 'deleteEntry failed.');
- // create file to kick off it
- root.getFile(fileName, {
- create: true
- }, getFile, failed.bind(null, done, 'root.getFile - Error on initial creating file: ' + fileName));
- });
- it('file.spec.20 getFile: create file that already exists (exclusive)', function (done) {
- var fileName = 'de.create.exclusive.existing.file';
- var existingFile;
-
- function fail (error) {
- expect(error).toBeDefined();
- if (isChrome) {
- /* INVALID_MODIFICATION_ERR (code: 9) or ??? (code: 13) is thrown instead of PATH_EXISTS_ERR(code: 12)
- on trying to exclusively create a file, which already exists in Chrome. */
- // expect(error).toBeFileError(FileError.INVALID_MODIFICATION_ERR);
- } else {
- expect(error).toBeFileError(FileError.PATH_EXISTS_ERR); // eslint-disable-line no-undef
- }
- // cleanup
- deleteEntry(existingFile.name, done);
- }
+// window.resolveLocalFileSystemURL(root.toURL() + '/' + name, function (entry) {
+// if (entry.isDirectory === true) {
+// entry.removeRecursively(success, error);
+// } else {
+// entry.remove(success, error);
+// }
+// }, success);
+// };
+// // deletes file, if it exists, then invokes callback
+// var deleteFile = function (fileName, callback) {
+// // entry.remove success callback is required: http://www.w3.org/TR/2011/WD-file-system-api-20110419/#the-entry-interface
+// callback = callback || function () {};
- function getFile (file) {
- existingFile = file;
- // create:true, exclusive:true, file exists
- root.getFile(fileName, {
- create: true,
- exclusive: true
- }, succeed.bind(null, done, 'root.getFile - getFile function - Error unexpected callback, file should exists: ' + fileName), fail);
- }
+// root.getFile(fileName, null, // remove file system entry
+// function (entry) {
+// entry.remove(callback, function () {
+// console.log('[ERROR] deleteFile cleanup method invoked fail callback.');
+// });
+// }, // doesn't exist
+// callback);
+// };
+// // deletes and re-creates the specified file
+// var createFile = function (fileName, success, error) {
+// deleteEntry(fileName, function () {
+// root.getFile(fileName, {
+// create: true
+// }, success, error);
+// }, error);
+// };
+// // deletes and re-creates the specified directory
+// var createDirectory = function (dirName, success, error) {
+// deleteEntry(dirName, function () {
+// root.getDirectory(dirName, {
+// create: true
+// }, success, error);
+// }, error);
+// };
+// function failed (done, msg, error) {
+// window.customLog('log', 'failed is called : ' + msg);
+// var info = typeof msg === 'undefined' ? 'Unexpected error callback' : msg;
+// var codeMsg = (error && error.code) ? (': ' + fileErrorMap[error.code]) : '';
+// expect(true).toFailWithMessage(info + '\n' + JSON.stringify(error) + codeMsg);
+// done();
+// }
+// var succeed = function (done, msg) {
+// var info = typeof msg === 'undefined' ? 'Unexpected success callback' : msg;
+// expect(true).toFailWithMessage(info);
+// done();
+// };
+// var joinURL = function (base, extension) {
+// if (base.charAt(base.length - 1) !== '/' && extension.charAt(0) !== '/') {
+// return base + '/' + extension;
+// }
+// if (base.charAt(base.length - 1) === '/' && extension.charAt(0) === '/') {
+// return base + extension.substring(1);
+// }
+// return base + extension;
+// };
+// describe('FileError object', function () {
+// /* eslint-disable no-undef */
+// it('file.spec.1 should define FileError constants', function () {
+// expect(FileError.NOT_FOUND_ERR).toBe(1);
+// expect(FileError.SECURITY_ERR).toBe(2);
+// expect(FileError.ABORT_ERR).toBe(3);
+// expect(FileError.NOT_READABLE_ERR).toBe(4);
+// expect(FileError.ENCODING_ERR).toBe(5);
+// expect(FileError.NO_MODIFICATION_ALLOWED_ERR).toBe(6);
+// expect(FileError.INVALID_STATE_ERR).toBe(7);
+// expect(FileError.SYNTAX_ERR).toBe(8);
+// expect(FileError.INVALID_MODIFICATION_ERR).toBe(9);
+// expect(FileError.QUOTA_EXCEEDED_ERR).toBe(10);
+// expect(FileError.TYPE_MISMATCH_ERR).toBe(11);
+// expect(FileError.PATH_EXISTS_ERR).toBe(12);
+// });
+// });
+// describe('LocalFileSystem', function () {
+// it('file.spec.2 should define LocalFileSystem constants', function () {
+// expect(LocalFileSystem.TEMPORARY).toBe(0);
+// expect(LocalFileSystem.PERSISTENT).toBe(1);
+// /* eslint-enable no-undef */
+// });
+// describe('window.requestFileSystem', function () {
+// it('file.spec.3 should be defined', function () {
+// expect(window.requestFileSystem).toBeDefined();
+// });
+// it('file.spec.4 should be able to retrieve a PERSISTENT file system', function (done) {
+// var win = function (fileSystem) {
+// expect(fileSystem).toBeDefined();
+// expect(fileSystem.name).toBeDefined();
+// if (isChrome) {
+// expect(fileSystem.name).toContain('Persistent');
+// } else {
+// expect(fileSystem.name).toBe('persistent');
+// }
+// expect(fileSystem.root).toBeDefined();
+// expect(fileSystem.root.filesystem).toBeDefined();
+// // Shouldn't use cdvfile by default.
+// expect(fileSystem.root.toURL()).not.toMatch(/^cdvfile:/);
+// // All DirectoryEntry URLs should always have a trailing slash.
+// expect(fileSystem.root.toURL()).toMatch(/\/$/);
+// done();
+// };
- // create file to kick off it
- root.getFile(fileName, {
- create: true
- }, getFile, failed.bind(null, done, 'root.getFile - Error creating file: ' + fileName));
- });
- it('file.spec.21 DirectoryEntry.getFile: get Entry for existing file', function (done) {
- var fileName = 'de.get.file';
- var filePath = joinURL(root.fullPath, fileName);
- var win = function (entry) {
- expect(entry).toBeDefined();
- expect(entry.isFile).toBe(true);
- expect(entry.isDirectory).toBe(false);
- expect(entry.name).toCanonicallyMatch(fileName);
- expect(entry.fullPath).toCanonicallyMatch(filePath);
- expect(entry.filesystem).toBeDefined();
- expect(entry.filesystem).toBe(root.filesystem);
- // clean up
- deleteEntry(entry.name, done);
- };
- var getFile = function (file) {
- // create:false, exclusive:false, file exists
- root.getFile(fileName, {
- create: false
- }, win, failed.bind(null, done, 'root.getFile - Error getting file entry: ' + fileName));
- };
- // create file to kick off it
- root.getFile(fileName, {
- create: true
- }, getFile, failed.bind(null, done, 'root.getFile - Error creating file: ' + fileName));
- });
- it('file.spec.22 DirectoryEntry.getFile: get FileEntry for invalid path', function (done) {
- if (isBrowser) {
- /* The plugin does not follow to ["8.3 Naming restrictions"]
- (http://www.w3.org/TR/2011/WD-file-system-api-20110419/#naming-restrictions). */
- pending();
- }
+// // Request a little bit of space on the filesystem, unless we're running in a browser where that could cause a prompt.
+// var spaceRequired = isBrowser ? 0 : 1024;
- var fileName = 'de:invalid:path';
- var fail = function (error) {
- expect(error).toBeDefined();
- expect(error).toBeFileError(FileError.ENCODING_ERR); // eslint-disable-line no-undef
- done();
- };
- // create:false, exclusive:false, invalid path
- root.getFile(fileName, {
- create: false
- }, succeed.bind(null, done, 'root.getFile - Error unexpected callback, file should not exists: ' + fileName), fail);
- });
- it('file.spec.23 DirectoryEntry.getDirectory: get Entry for directory that does not exist', function (done) {
- var dirName = 'de.no.dir';
- var fail = function (error) {
- expect(error).toBeDefined();
- if (isChrome) {
- expect(error).toBeFileError(FileError.SYNTAX_ERR); // eslint-disable-line no-undef
- } else {
- expect(error).toBeFileError(FileError.NOT_FOUND_ERR); // eslint-disable-line no-undef
- }
- done();
- };
- // create:false, exclusive:false, directory does not exist
- root.getDirectory(dirName, {
- create: false
- }, succeed.bind(null, done, 'root.getDirectory - Error unexpected callback, directory should not exists: ' + dirName), fail);
- });
- it('file.spec.24 DirectoryEntry.getDirectory: create new dir with space then resolveLocalFileSystemURL', function (done) {
- var dirName = 'de create dir';
-
- function win (directory) {
- expect(directory).toBeDefined();
- expect(directory.isFile).toBe(false);
- expect(directory.isDirectory).toBe(true);
- expect(directory.name).toCanonicallyMatch(dirName);
- expect(directory.fullPath).toCanonicallyMatch(joinURL(root.fullPath, dirName));
- // cleanup
- deleteEntry(directory.name, done);
- }
+// // retrieve PERSISTENT file system
+// window.requestFileSystem(LocalFileSystem.PERSISTENT, spaceRequired, win, failed.bind(null, done, 'window.requestFileSystem - Error retrieving PERSISTENT file system')); // eslint-disable-line no-undef
+// });
+// it('file.spec.5 should be able to retrieve a TEMPORARY file system', function (done) {
+// var win = function (fileSystem) {
+// expect(fileSystem).toBeDefined();
+// if (isChrome) {
+// expect(fileSystem.name).toContain('Temporary');
+// } else {
+// expect(fileSystem.name).toBe('temporary');
+// }
+// expect(fileSystem.root).toBeDefined();
+// expect(fileSystem.root.filesystem).toBeDefined();
+// expect(fileSystem.root.filesystem).toBe(fileSystem);
+// done();
+// };
+// // retrieve TEMPORARY file system
+// window.requestFileSystem(LocalFileSystem.TEMPORARY, 0, win, failed.bind(null, done, 'window.requestFileSystem - Error retrieving TEMPORARY file system')); // eslint-disable-line no-undef
+// });
+// it('file.spec.6 should error if you request a file system that is too large', function (done) {
+// if (isBrowser) {
+// /* window.requestFileSystem TEMPORARY and PERSISTENT filesystem quota is not limited in Chrome.
+// Firefox filesystem size is not limited but every 50MB request user permission.
+// IE10 allows up to 10mb of combined AppCache and IndexedDB used in implementation
+// of filesystem without prompting, once you hit that level you will be asked if you
+// want to allow it to be increased up to a max of 250mb per site.
+// So `size` parameter for `requestFileSystem` function does not affect on filesystem in Firefox and IE. */
+// pending();
+// }
- function getDir (dirEntry) {
- expect(dirEntry.filesystem).toBeDefined();
- expect(dirEntry.filesystem).toBe(root.filesystem);
- var dirURI = dirEntry.toURL();
- // now encode URI and try to resolve
- window.resolveLocalFileSystemURL(dirURI, win, failed.bind(null, done, 'window.resolveLocalFileSystemURL - getDir function - Error resolving directory: ' + dirURI));
- }
+// var fail = function (error) {
+// expect(error).toBeDefined();
+// expect(error).toBeFileError(FileError.QUOTA_EXCEEDED_ERR); // eslint-disable-line no-undef
+// done();
+// };
+// // win = createWin('window.requestFileSystem');
+// // Request the file system
+// window.requestFileSystem(LocalFileSystem.TEMPORARY, 1000000000000000, failed.bind(null, done, 'window.requestFileSystem - Error retrieving TEMPORARY file system'), fail); // eslint-disable-line no-undef
+// });
+// it('file.spec.7 should error out if you request a file system that does not exist', function (done) {
- // create:true, exclusive:false, directory does not exist
- root.getDirectory(dirName, {
- create: true
- }, getDir, failed.bind(null, done, 'root.getDirectory - Error creating directory : ' + dirName));
- });
- // This test is excluded, and should probably be removed. Filesystem
- // should always be properly encoded URLs, and *not* raw paths, and it
- // doesn't make sense to double-encode the URLs and expect that to be
- // handled by the implementation.
- // If a particular platform uses paths internally rather than URLs, // then that platform should careful to pass them correctly to its
- // backend.
- xit('file.spec.25 DirectoryEntry.getDirectory: create new dir with space resolveLocalFileSystemURL with encoded URI', function (done) {
- var dirName = 'de create dir2';
- var dirPath = joinURL(root.fullPath, dirName);
-
- function win (directory) {
- expect(directory).toBeDefined();
- expect(directory.isFile).toBe(false);
- expect(directory.isDirectory).toBe(true);
- expect(directory.name).toCanonicallyMatch(dirName);
- expect(directory.fullPath).toCanonicallyMatch(dirPath);
- // cleanup
- deleteEntry(directory.name, done);
- }
+// var fail = function (error) {
+// expect(error).toBeDefined();
+// if (isChrome) {
+// /* INVALID_MODIFICATION_ERR (code: 9) or ??? (code: 13) is thrown instead of SYNTAX_ERR(code: 8)
+// on requesting of a non-existant filesystem. */
+// // expect(error).toBeFileError(FileError.INVALID_MODIFICATION_ERR);
+// } else {
+// expect(error).toBeFileError(FileError.SYNTAX_ERR); // eslint-disable-line no-undef
+// }
+// done();
+// };
+// // Request the file system
+// window.requestFileSystem(-1, 0, succeed.bind(null, done, 'window.requestFileSystem'), fail);
+// });
+// });
+// describe('window.resolveLocalFileSystemURL', function () {
+// it('file.spec.8 should be defined', function () {
+// expect(window.resolveLocalFileSystemURL).toBeDefined();
+// });
+// it('file.spec.9 should resolve a valid file name', function (done) {
+// var fileName = 'file.spec.9';
+// var win = function (fileEntry) {
+// window.customLog('log', '----- win is called ----');
+// expect(fileEntry).toBeDefined();
+// expect(fileEntry.isFile).toBe(true);
+// expect(fileEntry.isDirectory).toBe(false);
+// expect(fileEntry.name).toCanonicallyMatch(fileName);
+// expect(fileEntry.toURL()).not.toMatch(/^cdvfile:/, 'should not use cdvfile URL');
+// expect(fileEntry.toURL()).not.toMatch(/\/$/, 'URL should not end with a slash');
+// // Clean-up
+// deleteEntry(fileName, done);
+// };
+// createFile(fileName, function (entry) {
+// window.customLog('log', '----- entry.toURL() ----');
+// window.customLog('log', entry.toURL());
+// setTimeout(function () {
+// window.resolveLocalFileSystemURL(entry.toURL(), win, function (err) {
+// window.customLog('log', '********* called *******');
+// (failed.bind(null, done, 'window.resolveLocalFileSystemURL - Error resolving file URL: ' + entry.toURL()))(err);
+// });
+// }, 1000);
+// }, failed.bind(null, done, 'createFile - Error creating file: ' + fileName), failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
+// });
+// it('file.spec.9.1 should resolve a file even with a terminating slash', function (done) {
+// var fileName = 'file.spec.9.1';
+// var win = function (fileEntry) {
+// expect(fileEntry).toBeDefined();
+// expect(fileEntry.isFile).toBe(true);
+// expect(fileEntry.isDirectory).toBe(false);
+// expect(fileEntry.name).toCanonicallyMatch(fileName);
+// expect(fileEntry.toURL()).not.toMatch(/^cdvfile:/, 'should not use cdvfile URL');
+// expect(fileEntry.toURL()).not.toMatch(/\/$/, 'URL should not end with a slash');
+// // Clean-up
+// deleteEntry(fileName, done);
+// };
+// createFile(fileName, function (entry) {
+// var entryURL = entry.toURL() + '/';
+// window.resolveLocalFileSystemURL(entryURL, win, failed.bind(null, done, 'window.resolveLocalFileSystemURL - Error resolving file URL: ' + entryURL));
+// }, failed.bind(null, done, 'createFile - Error creating file: ' + fileName), failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
+// });
+// it('file.spec.9.5 should resolve a directory', function (done) {
+// var fileName = 'file.spec.9.5';
+// var win = function (fileEntry) {
+// expect(fileEntry).toBeDefined();
+// expect(fileEntry.isFile).toBe(false);
+// expect(fileEntry.isDirectory).toBe(true);
+// expect(fileEntry.name).toCanonicallyMatch(fileName);
+// expect(fileEntry.toURL()).not.toMatch(/^cdvfile:/, 'should not use cdvfile URL');
+// expect(fileEntry.toURL()).toMatch(/\/$/, 'URL end with a slash');
+// // cleanup
+// deleteEntry(fileName, done);
+// };
+// function gotDirectory (entry) {
+// // lookup file system entry
+// window.resolveLocalFileSystemURL(entry.toURL(), win, failed.bind(null, done, 'window.resolveLocalFileSystemURL - Error resolving directory URL: ' + entry.toURL()));
+// }
+// createDirectory(fileName, gotDirectory, failed.bind(null, done, 'createDirectory - Error creating directory: ' + fileName), failed.bind(null, done, 'createDirectory - Error creating directory: ' + fileName));
+// });
+// it('file.spec.9.6 should resolve a directory even without a terminating slash', function (done) {
+// var fileName = 'file.spec.9.6';
+// var win = function (fileEntry) {
+// expect(fileEntry).toBeDefined();
+// expect(fileEntry.isFile).toBe(false);
+// expect(fileEntry.isDirectory).toBe(true);
+// expect(fileEntry.name).toCanonicallyMatch(fileName);
+// expect(fileEntry.toURL()).not.toMatch(/^cdvfile:/, 'should not use cdvfile URL');
+// expect(fileEntry.toURL()).toMatch(/\/$/, 'URL end with a slash');
+// // cleanup
+// deleteEntry(fileName, done);
+// };
+// function gotDirectory (entry) {
+// // lookup file system entry
+// var entryURL = entry.toURL();
+// entryURL = entryURL.substring(0, entryURL.length - 1);
+// window.resolveLocalFileSystemURL(entryURL, win, failed.bind(null, done, 'window.resolveLocalFileSystemURL - Error resolving directory URL: ' + entryURL));
+// }
+// createDirectory(fileName, gotDirectory, failed.bind(null, done, 'createDirectory - Error creating directory: ' + fileName), failed.bind(null, done, 'createDirectory - Error creating directory: ' + fileName));
+// });
- function getDir (dirEntry) {
- var dirURI = dirEntry.toURL();
- // now encode URI and try to resolve
- window.resolveLocalFileSystemURL(encodeURI(dirURI), win, failed.bind(null, done, 'window.resolveLocalFileSystemURL - getDir function - Error resolving directory: ' + dirURI));
- }
+// it('file.spec.9.7 should resolve a file with valid nativeURL', function (done) {
+// if (isBrowser) {
+// pending('browsers doesn\'t return nativeURL');
+// }
+// var fileName = 'de.create.file';
+// var win = function (entry) {
+// var path = entry.nativeURL.split('///')[1];
+// expect(/\/{2,}/.test(path)).toBeFalsy();
+// // cleanup
+// deleteEntry(entry.name, done);
+// };
+// root.getFile(fileName, {
+// create: true
+// }, win, succeed.bind(null, done, 'root.getFile - Error unexpected callback, file should not exists: ' + fileName));
+// });
- // create:true, exclusive:false, directory does not exist
- root.getDirectory(dirName, {
- create: true
- }, getDir, failed.bind(null, done, 'root.getDirectory - Error creating directory : ' + dirName));
- });
- it('file.spec.26 DirectoryEntry.getDirectory: create new directory', function (done) {
- var dirName = 'de.create.dir';
- var dirPath = joinURL(root.fullPath, dirName);
- var win = function (directory) {
- expect(directory).toBeDefined();
- expect(directory.isFile).toBe(false);
- expect(directory.isDirectory).toBe(true);
- expect(directory.name).toCanonicallyMatch(dirName);
- expect(directory.fullPath).toCanonicallyMatch(dirPath);
- expect(directory.filesystem).toBeDefined();
- expect(directory.filesystem).toBe(root.filesystem);
- // cleanup
- deleteEntry(directory.name, done);
- };
- // create:true, exclusive:false, directory does not exist
- root.getDirectory(dirName, {
- create: true
- }, win, failed.bind(null, done, 'root.getDirectory - Error creating directory : ' + dirName));
- });
- it('file.spec.27 DirectoryEntry.getDirectory: create new directory (exclusive)', function (done) {
- var dirName = 'de.create.exclusive.dir';
- var dirPath = joinURL(root.fullPath, dirName);
- var win = function (directory) {
- expect(directory).toBeDefined();
- expect(directory.isFile).toBe(false);
- expect(directory.isDirectory).toBe(true);
- expect(directory.name).toCanonicallyMatch(dirName);
- expect(directory.fullPath).toCanonicallyMatch(dirPath);
- expect(directory.filesystem).toBeDefined();
- expect(directory.filesystem).toBe(root.filesystem);
- // cleanup
- deleteEntry(directory.name, done);
- };
- // create:true, exclusive:true, directory does not exist
- root.getDirectory(dirName, {
- create: true,
- exclusive: true
- }, win, failed.bind(null, done, 'root.getDirectory - Error creating directory : ' + dirName));
- });
- it('file.spec.28 DirectoryEntry.getDirectory: create directory that already exists', function (done) {
- var dirName = 'de.create.existing.dir';
- var dirPath = joinURL(root.fullPath, dirName);
- var win = function (directory) {
- expect(directory).toBeDefined();
- expect(directory.isFile).toBe(false);
- expect(directory.isDirectory).toBe(true);
- expect(directory.name).toCanonicallyMatch(dirName);
- expect(directory.fullPath).toCanonicallyMatch(dirPath);
- // cleanup
- deleteEntry(directory.name, done);
- };
- // create directory to kick off it
- root.getDirectory(dirName, {
- create: true
- }, function () {
- root.getDirectory(dirName, {
- create: true
- }, win, failed.bind(null, done, 'root.getDirectory - Error creating existent second directory : ' + dirName));
- }, failed.bind(null, done, 'root.getDirectory - Error creating directory : ' + dirName));
- });
- it('file.spec.29 DirectoryEntry.getDirectory: create directory that already exists (exclusive)', function (done) {
-
- var dirName = 'de.create.exclusive.existing.dir';
- var existingDir;
- var fail = function (error) {
- expect(error).toBeDefined();
- if (isChrome) {
- /* INVALID_MODIFICATION_ERR (code: 9) or ??? (code: 13) is thrown instead of PATH_EXISTS_ERR(code: 12)
- on trying to exclusively create a file or directory, which already exists (Chrome). */
- // expect(error).toBeFileError(FileError.INVALID_MODIFICATION_ERR);
- } else {
- expect(error).toBeFileError(FileError.PATH_EXISTS_ERR); // eslint-disable-line no-undef
- }
- // cleanup
- deleteEntry(existingDir.name, done);
- };
- // create directory to kick off it
- root.getDirectory(dirName, {
- create: true
- }, function (directory) {
- existingDir = directory;
- // create:true, exclusive:true, directory exists
- root.getDirectory(dirName, {
- create: true,
- exclusive: true
- }, failed.bind(null, done, 'root.getDirectory - Unexpected success callback, second directory should not be created : ' + dirName), fail);
- }, failed.bind(null, done, 'root.getDirectory - Error creating directory : ' + dirName));
- });
- it('file.spec.30 DirectoryEntry.getDirectory: get Entry for existing directory', function (done) {
- var dirName = 'de.get.dir';
- var dirPath = joinURL(root.fullPath, dirName);
- var win = function (directory) {
- expect(directory).toBeDefined();
- expect(directory.isFile).toBe(false);
- expect(directory.isDirectory).toBe(true);
- expect(directory.name).toCanonicallyMatch(dirName);
- expect(directory.fullPath).toCanonicallyMatch(dirPath);
- // cleanup
- deleteEntry(directory.name, done);
- };
- // create directory to kick it off
- root.getDirectory(dirName, {
- create: true
- }, function () {
- root.getDirectory(dirName, {
- create: false
- }, win, failed.bind(null, done, 'root.getDirectory - Error getting directory entry : ' + dirName));
- }, failed.bind(null, done, 'root.getDirectory - Error creating directory : ' + dirName));
- });
- it('file.spec.31 DirectoryEntry.getDirectory: get DirectoryEntry for invalid path', function (done) {
- if (isBrowser) {
- /* The plugin does not follow to ["8.3 Naming restrictions"]
- (http://www.w3.org/TR/2011/WD-file-system-api-20110419/#naming-restrictions). */
- pending();
- }
+// it('file.spec.10 resolve valid file name with parameters', function (done) {
+// var fileName = 'resolve.file.uri.params';
+// var win = function (fileEntry) {
+// expect(fileEntry).toBeDefined();
+// if (fileEntry.toURL().toLowerCase().substring(0, 10) === 'cdvfile://') {
+// expect(fileEntry.fullPath).toBe('/' + fileName + '?1234567890');
+// }
+// expect(fileEntry.name).toBe(fileName);
+// // cleanup
+// deleteEntry(fileName, done);
+// };
+// // create a new file entry
+// createFile(fileName, function (entry) {
+// window.resolveLocalFileSystemURL(entry.toURL() + '?1234567890', win, failed.bind(null, done, 'window.resolveLocalFileSystemURL - Error resolving file URI: ' + entry.toURL()));
+// }, failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
+// });
+// it('file.spec.11 should error (NOT_FOUND_ERR) when resolving (non-existent) invalid file name', function (done) {
+// var fileName = cordova.platformId === 'windowsphone' ? root.toURL() + '/' + 'this.is.not.a.valid.file.txt' : joinURL(root.toURL(), 'this.is.not.a.valid.file.txt'); // eslint-disable-line no-undef
+// var fail = function (error) {
+// expect(error).toBeDefined();
+// if (isChrome) {
+// expect(error).toBeFileError(FileError.SYNTAX_ERR); // eslint-disable-line no-undef
+// } else {
+// expect(error).toBeFileError(FileError.NOT_FOUND_ERR); // eslint-disable-line no-undef
+// }
+// done();
+// };
+// // lookup file system entry
+// window.resolveLocalFileSystemURL(fileName, succeed.bind(null, done, 'window.resolveLocalFileSystemURL - Error unexpected callback resolving file URI: ' + fileName), fail);
+// });
+// it('file.spec.12 should error (ENCODING_ERR) when resolving invalid URI with leading /', function (done) {
+// var fileName = '/this.is.not.a.valid.url';
+// var fail = function (error) {
+// expect(error).toBeDefined();
+// if (isChrome) {
+// // O.o chrome returns error code 0
+// } else {
+// expect(error).toBeFileError(FileError.ENCODING_ERR); // eslint-disable-line no-undef
+// }
+// done();
+// };
+// // lookup file system entry
+// window.resolveLocalFileSystemURL(fileName, succeed.bind(null, done, 'window.resolveLocalFileSystemURL - Error unexpected callback resolving file URI: ' + fileName), fail);
+// });
+// });
+// });
+// // LocalFileSystem
+// describe('Metadata interface', function () {
+// it('file.spec.13 should exist and have the right properties', function () {
+// var metadata = new Metadata(); // eslint-disable-line no-undef
+// expect(metadata).toBeDefined();
+// expect(metadata.modificationTime).toBeDefined();
+// });
+// });
+// describe('Flags interface', function () {
+// it('file.spec.14 should exist and have the right properties', function () {
+// var flags = new Flags(false, true); // eslint-disable-line no-undef
+// expect(flags).toBeDefined();
+// expect(flags.create).toBeDefined();
+// expect(flags.create).toBe(false);
+// expect(flags.exclusive).toBeDefined();
+// expect(flags.exclusive).toBe(true);
+// });
+// });
+// describe('FileSystem interface', function () {
+// it('file.spec.15 should have a root that is a DirectoryEntry', function (done) {
+// var win = function (entry) {
+// expect(entry).toBeDefined();
+// expect(entry.isFile).toBe(false);
+// expect(entry.isDirectory).toBe(true);
+// expect(entry.name).toBeDefined();
+// expect(entry.fullPath).toBeDefined();
+// expect(entry.getMetadata).toBeDefined();
+// expect(entry.moveTo).toBeDefined();
+// expect(entry.copyTo).toBeDefined();
+// expect(entry.toURL).toBeDefined();
+// expect(entry.remove).toBeDefined();
+// expect(entry.getParent).toBeDefined();
+// expect(entry.createReader).toBeDefined();
+// expect(entry.getFile).toBeDefined();
+// expect(entry.getDirectory).toBeDefined();
+// expect(entry.removeRecursively).toBeDefined();
+// done();
+// };
+// window.resolveLocalFileSystemURL(root.toURL(), win, failed.bind(null, done, 'window.resolveLocalFileSystemURL - Error resolving file URI: ' + root.toURL()));
+// });
+// });
+// describe('DirectoryEntry', function () {
+// it('file.spec.16 getFile: get Entry for file that does not exist', function (done) {
+// var fileName = 'de.no.file';
+// var fail = function (error) {
+// expect(error).toBeDefined();
+// if (isChrome) {
+// expect(error).toBeFileError(FileError.SYNTAX_ERR); // eslint-disable-line no-undef
+// } else {
+// expect(error).toBeFileError(FileError.NOT_FOUND_ERR); // eslint-disable-line no-undef
+// }
+// done();
+// };
+// // create:false, exclusive:false, file does not exist
+// root.getFile(fileName, {
+// create: false
+// }, succeed.bind(null, done, 'root.getFile - Error unexpected callback, file should not exists: ' + fileName), fail);
+// });
+// it('file.spec.17 getFile: create new file', function (done) {
+// var fileName = 'de.create.file';
+// var filePath = joinURL(root.fullPath, fileName);
+// var win = function (entry) {
+// expect(entry).toBeDefined();
+// expect(entry.isFile).toBe(true);
+// expect(entry.isDirectory).toBe(false);
+// expect(entry.name).toCanonicallyMatch(fileName);
+// expect(entry.fullPath).toCanonicallyMatch(filePath);
+// // cleanup
+// deleteEntry(entry.name, done);
+// };
+// // create:true, exclusive:false, file does not exist
+// root.getFile(fileName, {
+// create: true
+// }, win, succeed.bind(null, done, 'root.getFile - Error unexpected callback, file should not exists: ' + fileName));
+// });
+// it('file.spec.18 getFile: create new file (exclusive)', function (done) {
+// var fileName = 'de.create.exclusive.file';
+// var filePath = joinURL(root.fullPath, fileName);
+// var win = function (entry) {
+// expect(entry).toBeDefined();
+// expect(entry.isFile).toBe(true);
+// expect(entry.isDirectory).toBe(false);
+// expect(entry.name).toBe(fileName);
+// expect(entry.fullPath).toCanonicallyMatch(filePath);
+// // cleanup
+// deleteEntry(entry.name, done);
+// };
+// // create:true, exclusive:true, file does not exist
+// root.getFile(fileName, {
+// create: true,
+// exclusive: true
+// }, win, failed.bind(null, done, 'root.getFile - Error creating file: ' + fileName));
+// });
+// it('file.spec.19 getFile: create file that already exists', function (done) {
+// var fileName = 'de.create.existing.file';
+// var filePath = joinURL(root.fullPath, fileName);
- var dirName = 'de:invalid:path';
- var fail = function (error) {
- expect(error).toBeDefined();
- expect(error).toBeFileError(FileError.ENCODING_ERR); // eslint-disable-line no-undef
- done();
- };
- // create:false, exclusive:false, invalid path
- root.getDirectory(dirName, {
- create: false
- }, succeed.bind(null, done, 'root.getDirectory - Unexpected success callback, directory should not exists: ' + dirName), fail);
- });
- it('file.spec.32 DirectoryEntry.getDirectory: get DirectoryEntry for existing file', function (done) {
- var fileName = 'de.existing.file';
- var existingFile;
- var fail = function (error) {
- expect(error).toBeDefined();
- if (isChrome) {
- // chrome returns an unknown error with code 17
- } else {
- expect(error).toBeFileError(FileError.TYPE_MISMATCH_ERR); // eslint-disable-line no-undef
- }
- // cleanup
- deleteEntry(existingFile.name, done);
- };
- // create file to kick off it
- root.getFile(fileName, {
- create: true
- }, function (file) {
- existingFile = file;
- root.getDirectory(fileName, {
- create: false
- }, succeed.bind(null, done, 'root.getDirectory - Unexpected success callback, directory should not exists: ' + fileName), fail);
- }, failed.bind(null, done, 'root.getFile - Error creating file : ' + fileName));
- });
- it('file.spec.33 DirectoryEntry.getFile: get FileEntry for existing directory', function (done) {
- var dirName = 'de.existing.dir';
- var existingDir;
- var fail = function (error) {
- expect(error).toBeDefined();
- if (isChrome) {
- // chrome returns an unknown error with code 17
- } else {
- expect(error).toBeFileError(FileError.TYPE_MISMATCH_ERR); // eslint-disable-line no-undef
- }
- // cleanup
- deleteEntry(existingDir.name, done);
- };
- // create directory to kick off it
- root.getDirectory(dirName, {
- create: true
- }, function (directory) {
- existingDir = directory;
- root.getFile(dirName, {
- create: false
- }, succeed.bind(null, done, 'root.getFile - Unexpected success callback, file should not exists: ' + dirName), fail);
- }, failed.bind(null, done, 'root.getDirectory - Error creating directory : ' + dirName));
- });
- it('file.spec.34 DirectoryEntry.removeRecursively on directory', function (done) {
- var dirName = 'de.removeRecursively';
- var subDirName = 'dir';
- var dirExists = function (error) {
- expect(error).toBeDefined();
- if (isChrome) {
- expect(error).toBeFileError(FileError.SYNTAX_ERR); // eslint-disable-line no-undef
- } else {
- expect(error).toBeFileError(FileError.NOT_FOUND_ERR); // eslint-disable-line no-undef
- }
- done();
- };
- // create a new directory entry to kick off it
- root.getDirectory(dirName, {
- create: true
- }, function (entry) {
- entry.getDirectory(subDirName, {
- create: true
- }, function (dir) {
- entry.removeRecursively(function () {
- root.getDirectory(dirName, {
- create: false
- }, succeed.bind(null, done, 'root.getDirectory - Unexpected success callback, directory should not exists: ' + dirName), dirExists);
- }, failed.bind(null, done, 'entry.removeRecursively - Error removing directory recursively : ' + dirName));
- }, failed.bind(null, done, 'root.getDirectory - Error creating directory : ' + subDirName));
- }, failed.bind(null, done, 'root.getDirectory - Error creating directory : ' + dirName));
- });
- it('file.spec.35 createReader: create reader on existing directory', function () {
- // create reader for root directory
- var reader = root.createReader();
- expect(reader).toBeDefined();
- expect(typeof reader.readEntries).toBe('function');
- });
- it('file.spec.36 removeRecursively on root file system', function (done) {
-
- var remove = function (error) {
- expect(error).toBeDefined();
- if (isChrome) {
- /* INVALID_MODIFICATION_ERR (code: 9) or ??? (code: 13) is thrown instead of
- NO_MODIFICATION_ALLOWED_ERR(code: 6) on trying to call removeRecursively
- on the root file system (Chrome). */
- // expect(error).toBeFileError(FileError.INVALID_MODIFICATION_ERR);
- } else {
- expect(error).toBeFileError(FileError.NO_MODIFICATION_ALLOWED_ERR); // eslint-disable-line no-undef
- }
- done();
- };
- // remove root file system
- root.removeRecursively(succeed.bind(null, done, 'root.removeRecursively - Unexpected success callback, root cannot be removed'), remove);
- });
- });
- describe('DirectoryReader interface', function () {
- describe('readEntries', function () {
- it('file.spec.37 should read contents of existing directory', function (done) {
- var reader;
- var win = function (entries) {
- expect(entries).toBeDefined();
- expect(entries instanceof Array).toBe(true);
- done();
- };
- // create reader for root directory
- reader = root.createReader();
- // read entries
- reader.readEntries(win, failed.bind(null, done, 'reader.readEntries - Error reading entries'));
- });
- it('file.spec.37.1 should read contents of existing directory', function (done) {
- var dirName = 'readEntries.dir';
- var fileName = 'readeEntries.file';
- root.getDirectory(dirName, {
- create: true
- }, function (directory) {
- directory.getFile(fileName, {
- create: true
- }, function (fileEntry) {
- var reader = directory.createReader();
- reader.readEntries(function (entries) {
- expect(entries).toBeDefined();
- expect(entries instanceof Array).toBe(true);
- expect(entries.length).toBe(1);
- expect(entries[0].fullPath).toCanonicallyMatch(fileEntry.fullPath);
- expect(entries[0].filesystem).not.toBe(null);
- if (isChrome) {
- // Slicing '[object {type}]' -> '{type}'
- expect(entries[0].filesystem.toString().slice(8, -1)).toEqual('DOMFileSystem');
- } else {
- expect(entries[0].filesystem instanceof FileSystem).toBe(true); // eslint-disable-line no-undef
- }
-
- // cleanup
- deleteEntry(directory.name, done);
- }, failed.bind(null, done, 'reader.readEntries - Error reading entries from directory: ' + dirName));
- }, failed.bind(null, done, 'directory.getFile - Error creating file : ' + fileName));
- }, failed.bind(null, done, 'root.getDirectory - Error creating directory : ' + dirName));
- });
- it('file.spec.109 should return an empty entry list on the second call', function (done) {
- var reader;
- var fileName = 'test109.txt';
- // Add a file to ensure the root directory is non-empty and then read the contents of the directory.
- root.getFile(fileName, {
- create: true
- }, function (entry) {
- reader = root.createReader();
- // First read
- reader.readEntries(function (entries) {
- expect(entries).toBeDefined();
- expect(entries instanceof Array).toBe(true);
- expect(entries.length).not.toBe(0);
- // Second read
- reader.readEntries(function (entries_) {
- expect(entries_).toBeDefined();
- expect(entries_ instanceof Array).toBe(true);
- expect(entries_.length).toBe(0);
- // Clean up
- deleteEntry(entry.name, done);
- }, failed.bind(null, done, 'reader.readEntries - Error during SECOND reading of entries from [root] directory'));
- }, failed.bind(null, done, 'reader.readEntries - Error during FIRST reading of entries from [root] directory'));
- }, failed.bind(null, done, 'root.getFile - Error creating file : ' + fileName));
- });
- });
- it('file.spec.38 should read contents of directory that has been removed', function (done) {
- var dirName = 'de.createReader.notfound';
- // create a new directory entry to kick off it
- root.getDirectory(dirName, {
- create: true
- }, function (directory) {
- directory.removeRecursively(function () {
- var reader = directory.createReader();
- reader.readEntries(succeed.bind(null, done, 'reader.readEntries - Unexpected success callback, it should not read entries from deleted dir: ' + dirName), function (error) {
- expect(error).toBeDefined();
- if (isChrome) {
- expect(error).toBeFileError(FileError.SYNTAX_ERR); // eslint-disable-line no-undef
- } else {
- expect(error).toBeFileError(FileError.NOT_FOUND_ERR); // eslint-disable-line no-undef
- }
- root.getDirectory(dirName, {
- create: false
- }, succeed.bind(null, done, 'root.getDirectory - Unexpected success callback, it should not get deleted directory: ' + dirName), function (err) {
- expect(err).toBeDefined();
- if (isChrome) {
- expect(error).toBeFileError(FileError.SYNTAX_ERR); // eslint-disable-line no-undef
- } else {
- expect(error).toBeFileError(FileError.NOT_FOUND_ERR); // eslint-disable-line no-undef
- }
- done();
- });
- });
- }, failed.bind(null, done, 'directory.removeRecursively - Error removing directory recursively : ' + dirName));
- }, failed.bind(null, done, 'root.getDirectory - Error creating directory : ' + dirName));
- });
- });
- // DirectoryReader interface
- describe('File', function () {
- it('file.spec.39 constructor should be defined', function () {
- expect(File).toBeDefined(); // eslint-disable-line no-undef
- expect(typeof File).toBe('function');
- });
- it('file.spec.40 should be define File attributes', function () {
- var file = new File(); // eslint-disable-line no-undef
- expect(file.name).toBeDefined();
- expect(file.type).toBeDefined();
- expect(file.lastModifiedDate).toBeDefined();
- expect(file.size).toBeDefined();
- });
- });
- // File
- describe('FileEntry', function () {
-
- it('file.spec.41 should be define FileEntry methods', function (done) {
- var fileName = 'fe.methods';
- var testFileEntry = function (fileEntry) {
- expect(fileEntry).toBeDefined();
- expect(typeof fileEntry.createWriter).toBe('function');
- expect(typeof fileEntry.file).toBe('function');
- // cleanup
- deleteEntry(fileEntry.name, done);
- };
- // create a new file entry to kick off it
- root.getFile(fileName, {
- create: true
- }, testFileEntry, failed.bind(null, done, 'root.getFile - Error creating file : ' + fileName));
- });
- it('file.spec.42 createWriter should return a FileWriter object', function (done) {
- var fileName = 'fe.createWriter';
- var testFile;
- var testWriter = function (writer) {
- expect(writer).toBeDefined();
- if (isChrome) {
- // Slicing '[object {type}]' -> '{type}'
- expect(writer.toString().slice(8, -1)).toEqual('FileWriter');
- } else {
- expect(writer instanceof FileWriter).toBe(true); // eslint-disable-line no-undef
- }
-
- // cleanup
- deleteEntry(testFile.name, done);
- };
- // create a new file entry to kick off it
- root.getFile(fileName, {
- create: true
- }, function (fileEntry) {
- testFile = fileEntry;
- fileEntry.createWriter(testWriter, failed.bind(null, done, 'fileEntry.createWriter - Error creating Writer from entry'));
- }, failed.bind(null, done, 'root.getFile - Error creating file : ' + fileName));
- });
- it('file.spec.43 file should return a File object', function (done) {
- var fileName = 'fe.file';
- var newFile;
- var testFile = function (file) {
- expect(file).toBeDefined();
- if (isChrome) {
- // Slicing '[object {type}]' -> '{type}'
- expect(file.toString().slice(8, -1)).toEqual('File');
- } else {
- expect(file instanceof File).toBe(true); // eslint-disable-line no-undef
- }
-
- // cleanup
- deleteEntry(newFile.name, done);
- };
- // create a new file entry to kick off it
- root.getFile(fileName, {
- create: true
- }, function (fileEntry) {
- newFile = fileEntry;
- fileEntry.file(testFile, failed.bind(null, done, 'fileEntry.file - Error reading file using fileEntry: ' + fileEntry.name));
- }, failed.bind(null, done, 'root.getFile - Error creating file : ' + fileName));
- });
- it('file.spec.44 file: on File that has been removed', function (done) {
- var fileName = 'fe.no.file';
- // create a new file entry to kick off it
- root.getFile(fileName, {
- create: true
- }, function (fileEntry) {
- fileEntry.remove(function () {
- fileEntry.file(succeed.bind(null, done, 'fileEntry.file - Unexpected success callback, file it should not be created from removed entry'), function (error) {
- expect(error).toBeDefined();
- if (isChrome) {
- expect(error).toBeFileError(FileError.SYNTAX_ERR); // eslint-disable-line no-undef
- } else {
- expect(error).toBeFileError(FileError.NOT_FOUND_ERR); // eslint-disable-line no-undef
- }
- done();
- });
- }, failed.bind(null, done, 'fileEntry.remove - Error removing entry : ' + fileName));
- }, failed.bind(null, done, 'root.getFile - Error creating file : ' + fileName));
- });
- });
- // FileEntry
- describe('Entry', function () {
- it('file.spec.45 Entry object', function (done) {
- var fileName = 'entry';
- var fullPath = joinURL(root.fullPath, fileName);
- var winEntry = function (entry) {
- expect(entry).toBeDefined();
- expect(entry.isFile).toBe(true);
- expect(entry.isDirectory).toBe(false);
- expect(entry.name).toCanonicallyMatch(fileName);
- expect(entry.fullPath).toCanonicallyMatch(fullPath);
- expect(typeof entry.getMetadata).toBe('function');
- expect(typeof entry.setMetadata).toBe('function');
- expect(typeof entry.moveTo).toBe('function');
- expect(typeof entry.copyTo).toBe('function');
- expect(typeof entry.toURL).toBe('function');
- expect(typeof entry.remove).toBe('function');
- expect(typeof entry.getParent).toBe('function');
- expect(typeof entry.createWriter).toBe('function');
- expect(typeof entry.file).toBe('function');
- // Clean up
- deleteEntry(fileName, done);
- };
- // create a new file entry
- createFile(fileName, winEntry, failed.bind(null, done, 'createFile - Error creating file : ' + fileName));
- });
- it('file.spec.46 Entry.getMetadata on file', function (done) {
- var fileName = 'entry.metadata.file';
- // create a new file entry
- createFile(fileName, function (entry) {
- entry.getMetadata(function (metadata) {
- expect(metadata).toBeDefined();
- expect(metadata.modificationTime instanceof Date).toBe(true);
- expect(typeof metadata.size).toBe('number');
- // cleanup
- deleteEntry(fileName, done);
- }, failed.bind(null, done, 'entry.getMetadata - Error getting metadata from entry : ' + fileName));
- }, failed.bind(null, done, 'createFile - Error creating file : ' + fileName));
- });
- it('file.spec.47 Entry.getMetadata on directory', function (done) {
- if (isIndexedDBShim) {
- /* Does not support metadata for directories (Firefox, IE) */
- pending();
- }
+// function win (entry) {
+// expect(entry).toBeDefined();
+// expect(entry.isFile).toBe(true);
+// expect(entry.isDirectory).toBe(false);
+// expect(entry.name).toCanonicallyMatch(fileName);
+// expect(entry.fullPath).toCanonicallyMatch(filePath);
+// // cleanup
+// deleteEntry(entry.name, done);
+// }
- var dirName = 'entry.metadata.dir';
- // create a new directory entry
- createDirectory(dirName, function (entry) {
- entry.getMetadata(function (metadata) {
- expect(metadata).toBeDefined();
- expect(metadata.modificationTime instanceof Date).toBe(true);
- expect(typeof metadata.size).toBe('number');
- expect(metadata.size).toBe(0);
- // cleanup
- deleteEntry(dirName, done);
- }, failed.bind(null, done, 'entry.getMetadata - Error getting metadata from entry : ' + dirName));
- }, failed.bind(null, done, 'createDirectory - Error creating directory : ' + dirName));
- });
- it('file.spec.48 Entry.getParent on file in root file system', function (done) {
- var fileName = 'entry.parent.file';
- var rootPath = root.fullPath;
- // create a new file entry
- createFile(fileName, function (entry) {
- entry.getParent(function (parent) {
- expect(parent).toBeDefined();
- expect(parent.fullPath).toCanonicallyMatch(rootPath);
- // cleanup
- deleteEntry(fileName, done);
- }, failed.bind(null, done, 'entry.getParent - Error getting parent directory of file : ' + fileName));
- }, failed.bind(null, done, 'createFile - Error creating file : ' + fileName));
- });
- it('file.spec.49 Entry.getParent on directory in root file system', function (done) {
- var dirName = 'entry.parent.dir';
- var rootPath = root.fullPath;
- // create a new directory entry
- createDirectory(dirName, function (entry) {
- entry.getParent(function (parent) {
- expect(parent).toBeDefined();
- expect(parent.fullPath).toCanonicallyMatch(rootPath);
- // cleanup
- deleteEntry(dirName, done);
- }, failed.bind(null, done, 'entry.getParent - Error getting parent directory of directory : ' + dirName));
- }, failed.bind(null, done, 'createDirectory - Error creating directory : ' + dirName));
- });
- it('file.spec.50 Entry.getParent on root file system', function (done) {
- var rootPath = root.fullPath;
- var winParent = function (parent) {
- expect(parent).toBeDefined();
- expect(parent.fullPath).toCanonicallyMatch(rootPath);
- done();
- };
- // create a new directory entry
- root.getParent(winParent, failed.bind(null, done, 'root.getParent - Error getting parent directory of root'));
- });
- it('file.spec.51 Entry.toURL on file', function (done) {
- var fileName = 'entry.uri.file';
- var rootPath = root.fullPath;
- var winURI = function (entry) {
- var uri = entry.toURL();
- expect(uri).toBeDefined();
- expect(uri.indexOf(rootPath)).not.toBe(-1);
- // cleanup
- deleteEntry(fileName, done);
- };
- // create a new file entry
- createFile(fileName, winURI, failed.bind(null, done, 'createFile - Error creating file : ' + fileName));
- });
- it('file.spec.52 Entry.toURL on directory', function (done) {
- var dirName_1 = 'num 1';
- var dirName_2 = 'num 2';
- var rootPath = root.fullPath;
- createDirectory(dirName_1, function (entry) {
- entry.getDirectory(dirName_2, {
- create: true
- }, function (entryFile) {
- var uri = entryFile.toURL();
- expect(uri).toBeDefined();
- expect(uri).toContain('/num%201/num%202/');
- expect(uri.indexOf(rootPath)).not.toBe(-1);
- // cleanup
- deleteEntry(dirName_1, done);
- }, failed.bind(null, done, 'entry.getDirectory - Error creating directory : ' + dirName_2));
- }, failed.bind(null, done, 'createDirectory - Error creating directory : ' + dirName_1));
- });
- it('file.spec.53 Entry.remove on file', function (done) {
- var fileName = 'entr .rm.file';
- // create a new file entry
- createFile(fileName, function (entry) {
- expect(entry).toBeDefined();
- entry.remove(function () {
- root.getFile(fileName, null, succeed.bind(null, done, 'root.getFile - Unexpected success callback, it should not get deleted file : ' + fileName), function (error) {
- expect(error).toBeDefined();
- if (isChrome) {
- expect(error).toBeFileError(FileError.SYNTAX_ERR); // eslint-disable-line no-undef
- } else {
- expect(error).toBeFileError(FileError.NOT_FOUND_ERR); // eslint-disable-line no-undef
- }
- // cleanup
- deleteEntry(fileName, done);
- });
- }, failed.bind(null, done, 'entry.remove - Error removing entry : ' + fileName));
- }, failed.bind(null, done, 'createFile - Error creating file : ' + fileName));
- });
- it('file.spec.53.1 Entry.remove on filename with #s', function (done) {
- if (isBrowser) {
- pending('Browsers can\'t do that');
- }
- var fileName = 'entry.#rm#.file';
- // create a new file entry
- createFile(fileName, function (entry) {
- expect(entry).toBeDefined();
- entry.remove(function () {
- root.getFile(fileName, null, succeed.bind(null, done, 'root.getFile - Unexpected success callback, it should not get deleted file : ' + fileName), function (error) {
- expect(error).toBeDefined();
- expect(error).toBeFileError(FileError.NOT_FOUND_ERR); // eslint-disable-line no-undef
- // cleanup
- deleteEntry(fileName, done);
- });
- }, failed.bind(null, done, 'entry.remove - Error removing entry : ' + fileName));
- }, failed.bind(null, done, 'createFile - Error creating file : ' + fileName));
- });
- it('file.spec.54 remove on empty directory', function (done) {
- var dirName = 'entry.rm.dir';
- // create a new directory entry
- createDirectory(dirName, function (entry) {
- expect(entry).toBeDefined();
- entry.remove(function () {
- root.getDirectory(dirName, null, succeed.bind(null, done, 'root.getDirectory - Unexpected success callback, it should not get deleted directory : ' + dirName), function (error) {
- expect(error).toBeDefined();
- if (isChrome) {
- expect(error).toBeFileError(FileError.SYNTAX_ERR); // eslint-disable-line no-undef
- } else {
- expect(error).toBeFileError(FileError.NOT_FOUND_ERR); // eslint-disable-line no-undef
- }
- // cleanup
- deleteEntry(dirName, done);
- });
- }, failed.bind(null, done, 'entry.remove - Error removing entry : ' + dirName));
- }, failed.bind(null, done, 'createDirectory - Error creating directory : ' + dirName));
- });
- it('file.spec.55 remove on non-empty directory', function (done) {
- if (isIndexedDBShim) {
- /* Both Entry.remove and directoryEntry.removeRecursively don't fail when removing
- non-empty directories - directories being removed are cleaned
- along with contents instead (Firefox, IE) */
- pending();
- }
+// function getFile (file) {
+// // create:true, exclusive:false, file exists
+// root.getFile(fileName, {
+// create: true
+// }, win, failed.bind(null, done, 'root.getFile - Error creating file: ' + fileName));
+// }
- var dirName = 'ent y.rm.dir.not.empty';
- var fileName = 're ove.txt';
- var fullPath = joinURL(root.fullPath, dirName);
- // create a new directory entry
- createDirectory(dirName, function (entry) {
- entry.getFile(fileName, {
- create: true
- }, function (fileEntry) {
- entry.remove(succeed.bind(null, done, 'entry.remove - Unexpected success callback, it should not remove a directory that contains files : ' + dirName), function (error) {
- expect(error).toBeDefined();
- if (isChrome) {
- // chrome is returning unknown error with code 13
- } else {
- expect(error).toBeFileError(FileError.INVALID_MODIFICATION_ERR); // eslint-disable-line no-undef
- }
- root.getDirectory(dirName, null, function (entry) {
- expect(entry).toBeDefined();
- expect(entry.fullPath).toCanonicallyMatch(fullPath);
- // cleanup
- deleteEntry(dirName, done);
- }, failed.bind(null, done, 'root.getDirectory - Error getting directory : ' + dirName));
- });
- }, failed.bind(null, done, 'entry.getFile - Error creating file : ' + fileName + ' inside of ' + dirName));
- }, failed.bind(null, done, 'createDirectory - Error creating directory : ' + dirName));
- });
- it('file.spec.56 remove on root file system', function (done) {
-
- // remove entry that doesn't exist
- root.remove(succeed.bind(null, done, 'entry.remove - Unexpected success callback, it should not remove entry that it does not exists'), function (error) {
- expect(error).toBeDefined();
- if (isChrome) {
- /* INVALID_MODIFICATION_ERR (code: 9) or ??? (code: 13) is thrown instead of
- NO_MODIFICATION_ALLOWED_ERR(code: 6) on trying to call removeRecursively
- on the root file system. */
- // expect(error).toBeFileError(FileError.INVALID_MODIFICATION_ERR);
- } else {
- expect(error).toBeFileError(FileError.NO_MODIFICATION_ALLOWED_ERR); // eslint-disable-line no-undef
- }
- done();
- });
- });
- it('file.spec.57 copyTo: file', function (done) {
- var file1 = 'entry copy.file1';
- var file2 = 'entry copy.file2';
- var fullPath = joinURL(root.fullPath, file2);
- // create a new file entry to kick off it
- deleteEntry(file2, function () {
- createFile(file1, function (fileEntry) {
- // copy file1 to file2
- fileEntry.copyTo(root, file2, function (entry) {
- expect(entry).toBeDefined();
- expect(entry.isFile).toBe(true);
- expect(entry.isDirectory).toBe(false);
- expect(entry.fullPath).toCanonicallyMatch(fullPath);
- expect(entry.name).toCanonicallyMatch(file2);
- root.getFile(file2, {
- create: false
- }, function (entry2) {
- expect(entry2).toBeDefined();
- expect(entry2.isFile).toBe(true);
- expect(entry2.isDirectory).toBe(false);
- expect(entry2.fullPath).toCanonicallyMatch(fullPath);
- expect(entry2.name).toCanonicallyMatch(file2);
- // cleanup
- deleteEntry(file1, function () {
- deleteEntry(file2, done);
- });
- }, failed.bind(null, done, 'root.getFile - Error getting copied file : ' + file2));
- }, failed.bind(null, done, 'fileEntry.copyTo - Error copying file : ' + file2));
- }, failed.bind(null, done, 'createFile - Error creating file : ' + file1));
- }, failed.bind(null, done, 'deleteEntry - Error removing file : ' + file2));
- });
- it('file.spec.58 copyTo: file onto itself', function (done) {
- var file1 = 'entry.copy.fos.file1';
- // create a new file entry to kick off it
- createFile(file1, function (entry) {
- // copy file1 onto itself
- entry.copyTo(root, null, succeed.bind(null, done, 'entry.copyTo - Unexpected success callback, it should not copy a null file'), function (error) {
- expect(error).toBeDefined();
- if (isChrome) {
- // chrome returns unknown error with code 13
- } else {
- expect(error).toBeFileError(FileError.INVALID_MODIFICATION_ERR); // eslint-disable-line no-undef
- }
- // cleanup
- deleteEntry(file1, done);
- });
- }, failed.bind(null, done, 'createFile - Error creating file : ' + file1));
- });
- it('file.spec.59 copyTo: directory', function (done) {
- if (isIndexedDBShim) {
- /* `copyTo` and `moveTo` functions do not support directories (Firefox, IE) */
- pending();
- }
+// // create file to kick off it
+// root.getFile(fileName, {
+// create: true
+// }, getFile, failed.bind(null, done, 'root.getFile - Error on initial creating file: ' + fileName));
+// });
+// it('file.spec.20 getFile: create file that already exists (exclusive)', function (done) {
+// var fileName = 'de.create.exclusive.existing.file';
+// var existingFile;
- var file1 = 'file1';
- var srcDir = 'entry.copy.srcDir';
- var dstDir = 'entry.copy.dstDir';
- var dstPath = joinURL(root.fullPath, dstDir);
- var filePath = joinURL(dstPath, file1);
- // create a new directory entry to kick off it
- deleteEntry(dstDir, function () {
- createDirectory(srcDir, function (directory) {
- // create a file within new directory
- directory.getFile(file1, {
- create: true
- }, function () {
- directory.copyTo(root, dstDir, function (directory) {
- expect(directory).toBeDefined();
- expect(directory.isFile).toBe(false);
- expect(directory.isDirectory).toBe(true);
- expect(directory.fullPath).toCanonicallyMatch(dstPath);
- expect(directory.name).toCanonicallyMatch(dstDir);
- root.getDirectory(dstDir, {
- create: false
- }, function (dirEntry) {
- expect(dirEntry).toBeDefined();
- expect(dirEntry.isFile).toBe(false);
- expect(dirEntry.isDirectory).toBe(true);
- expect(dirEntry.fullPath).toCanonicallyMatch(dstPath);
- expect(dirEntry.name).toCanonicallyMatch(dstDir);
- dirEntry.getFile(file1, {
- create: false
- }, function (fileEntry) {
- expect(fileEntry).toBeDefined();
- expect(fileEntry.isFile).toBe(true);
- expect(fileEntry.isDirectory).toBe(false);
- expect(fileEntry.fullPath).toCanonicallyMatch(filePath);
- expect(fileEntry.name).toCanonicallyMatch(file1);
- // cleanup
- deleteEntry(srcDir, function () {
- deleteEntry(dstDir, done);
- });
- }, failed.bind(null, done, 'dirEntry.getFile - Error getting file : ' + file1));
- }, failed.bind(null, done, 'root.getDirectory - Error getting copied directory : ' + dstDir));
- }, failed.bind(null, done, 'directory.copyTo - Error copying directory : ' + srcDir + ' to :' + dstDir));
- }, failed.bind(null, done, 'directory.getFile - Error creating file : ' + file1));
- }, failed.bind(null, done, 'createDirectory - Error creating directory : ' + srcDir));
- }, failed.bind(null, done, 'deleteEntry - Error removing directory : ' + dstDir));
- });
- it('file.spec.60 copyTo: directory to backup at same root directory', function (done) {
- if (isIndexedDBShim) {
- /* `copyTo` and `moveTo` functions do not support directories (Firefox, IE) */
- pending();
- }
+// function fail (error) {
+// expect(error).toBeDefined();
+// if (isChrome) {
+// /* INVALID_MODIFICATION_ERR (code: 9) or ??? (code: 13) is thrown instead of PATH_EXISTS_ERR(code: 12)
+// on trying to exclusively create a file, which already exists in Chrome. */
+// // expect(error).toBeFileError(FileError.INVALID_MODIFICATION_ERR);
+// } else {
+// expect(error).toBeFileError(FileError.PATH_EXISTS_ERR); // eslint-disable-line no-undef
+// }
+// // cleanup
+// deleteEntry(existingFile.name, done);
+// }
- var file1 = 'file1';
- var srcDir = 'entry.copy srcDirSame';
- var dstDir = 'entry.copy srcDirSame-backup';
- var dstPath = joinURL(root.fullPath, dstDir);
- var filePath = joinURL(dstPath, file1);
- // create a new directory entry to kick off it
- deleteEntry(dstDir, function () {
- createDirectory(srcDir, function (directory) {
- directory.getFile(file1, {
- create: true
- }, function () {
- directory.copyTo(root, dstDir, function (directory) {
- expect(directory).toBeDefined();
- expect(directory.isFile).toBe(false);
- expect(directory.isDirectory).toBe(true);
- expect(directory.fullPath).toCanonicallyMatch(dstPath);
- expect(directory.name).toCanonicallyMatch(dstDir);
- root.getDirectory(dstDir, {
- create: false
- }, function (dirEntry) {
- expect(dirEntry).toBeDefined();
- expect(dirEntry.isFile).toBe(false);
- expect(dirEntry.isDirectory).toBe(true);
- expect(dirEntry.fullPath).toCanonicallyMatch(dstPath);
- expect(dirEntry.name).toCanonicallyMatch(dstDir);
- dirEntry.getFile(file1, {
- create: false
- }, function (fileEntry) {
- expect(fileEntry).toBeDefined();
- expect(fileEntry.isFile).toBe(true);
- expect(fileEntry.isDirectory).toBe(false);
- expect(fileEntry.fullPath).toCanonicallyMatch(filePath);
- expect(fileEntry.name).toCanonicallyMatch(file1);
- // cleanup
- deleteEntry(srcDir, function () {
- deleteEntry(dstDir, done);
- });
- }, failed.bind(null, done, 'dirEntry.getFile - Error getting file : ' + file1));
- }, failed.bind(null, done, 'root.getDirectory - Error getting copied directory : ' + dstDir));
- }, failed.bind(null, done, 'directory.copyTo - Error copying directory : ' + srcDir + ' to :' + dstDir));
- }, failed.bind(null, done, 'directory.getFile - Error creating file : ' + file1));
- }, failed.bind(null, done, 'createDirectory - Error creating directory : ' + srcDir));
- }, failed.bind(null, done, 'deleteEntry - Error removing directory : ' + dstDir));
- });
- it('file.spec.61 copyTo: directory onto itself', function (done) {
- if (isIndexedDBShim) {
- /* `copyTo` and `moveTo` functions do not support directories (Firefox, IE) */
- pending();
- }
+// function getFile (file) {
+// existingFile = file;
+// // create:true, exclusive:true, file exists
+// root.getFile(fileName, {
+// create: true,
+// exclusive: true
+// }, succeed.bind(null, done, 'root.getFile - getFile function - Error unexpected callback, file should exists: ' + fileName), fail);
+// }
- var file1 = 'file1';
- var srcDir = 'entry.copy.dos.srcDir';
- var srcPath = joinURL(root.fullPath, srcDir);
- var filePath = joinURL(srcPath, file1);
- // create a new directory entry to kick off it
- createDirectory(srcDir, function (directory) {
- // create a file within new directory
- directory.getFile(file1, {
- create: true
- }, function (fileEntry) {
- // copy srcDir onto itself
- directory.copyTo(root, null, succeed.bind(null, done, 'directory.copyTo - Unexpected success callback, it should not copy file: ' + srcDir + ' to a null destination'), function (error) {
- expect(error).toBeDefined();
- if (isChrome) {
- // chrome returns unknown error with code 13
- } else {
- expect(error).toBeFileError(FileError.INVALID_MODIFICATION_ERR); // eslint-disable-line no-undef
- }
- root.getDirectory(srcDir, {
- create: false
- }, function (dirEntry) {
- expect(dirEntry).toBeDefined();
- expect(dirEntry.fullPath).toCanonicallyMatch(srcPath);
- dirEntry.getFile(file1, {
- create: false
- }, function (fileEntry) {
- expect(fileEntry).toBeDefined();
- expect(fileEntry.fullPath).toCanonicallyMatch(filePath);
- // cleanup
- deleteEntry(srcDir, done);
- }, failed.bind(null, done, 'dirEntry.getFile - Error getting file : ' + file1));
- }, failed.bind(null, done, 'root.getDirectory - Error getting directory : ' + srcDir));
- });
- }, failed.bind(null, done, 'directory.getFile - Error creating file : ' + file1));
- }, failed.bind(null, done, 'createDirectory - Error creating directory : ' + srcDir));
- });
- it('file.spec.62 copyTo: directory into itself', function (done) {
- if (isIndexedDBShim) {
- /* `copyTo` and `moveTo` functions do not support directories (Firefox, IE) */
- pending();
- }
+// // create file to kick off it
+// root.getFile(fileName, {
+// create: true
+// }, getFile, failed.bind(null, done, 'root.getFile - Error creating file: ' + fileName));
+// });
+// it('file.spec.21 DirectoryEntry.getFile: get Entry for existing file', function (done) {
+// var fileName = 'de.get.file';
+// var filePath = joinURL(root.fullPath, fileName);
+// var win = function (entry) {
+// expect(entry).toBeDefined();
+// expect(entry.isFile).toBe(true);
+// expect(entry.isDirectory).toBe(false);
+// expect(entry.name).toCanonicallyMatch(fileName);
+// expect(entry.fullPath).toCanonicallyMatch(filePath);
+// expect(entry.filesystem).toBeDefined();
+// expect(entry.filesystem).toBe(root.filesystem);
+// // clean up
+// deleteEntry(entry.name, done);
+// };
+// var getFile = function (file) {
+// // create:false, exclusive:false, file exists
+// root.getFile(fileName, {
+// create: false
+// }, win, failed.bind(null, done, 'root.getFile - Error getting file entry: ' + fileName));
+// };
+// // create file to kick off it
+// root.getFile(fileName, {
+// create: true
+// }, getFile, failed.bind(null, done, 'root.getFile - Error creating file: ' + fileName));
+// });
+// it('file.spec.22 DirectoryEntry.getFile: get FileEntry for invalid path', function (done) {
+// if (isBrowser) {
+// /* The plugin does not follow to ["8.3 Naming restrictions"]
+// (http://www.w3.org/TR/2011/WD-file-system-api-20110419/#naming-restrictions). */
+// pending();
+// }
- var srcDir = 'entry.copy.dis.srcDir';
- var dstDir = 'entry.copy.dis.dstDir';
- var srcPath = joinURL(root.fullPath, srcDir);
- // create a new directory entry to kick off it
- createDirectory(srcDir, function (directory) {
- // copy source directory into itself
- directory.copyTo(directory, dstDir, succeed.bind(null, done, 'directory.copyTo - Unexpected success callback, it should not copy a directory ' + srcDir + ' into itself'), function (error) {
- expect(error).toBeDefined();
- if (isChrome) {
- // chrome returns unknown error with code 13
- } else {
- expect(error).toBeFileError(FileError.INVALID_MODIFICATION_ERR); // eslint-disable-line no-undef
- }
- root.getDirectory(srcDir, {
- create: false
- }, function (dirEntry) {
- // returning confirms existence so just check fullPath entry
- expect(dirEntry).toBeDefined();
- expect(dirEntry.fullPath).toCanonicallyMatch(srcPath);
- // cleanup
- deleteEntry(srcDir, done);
- }, failed.bind(null, done, 'root.getDirectory - Error getting directory : ' + srcDir));
- });
- }, failed.bind(null, done, 'createDirectory - Error creating directory : ' + srcDir));
- });
- it('file.spec.63 copyTo: directory that does not exist', function (done) {
- var file1 = 'entry.copy.dnf.file1';
- var dirName = 'dir-foo';
- createFile(file1, function (fileEntry) {
- createDirectory(dirName, function (dirEntry) {
- dirEntry.remove(function () {
- fileEntry.copyTo(dirEntry, null, succeed.bind(null, done, 'fileEntry.copyTo - Unexpected success callback, it should not copy a file ' + file1 + ' into a removed directory'), function (error) {
- expect(error).toBeDefined();
- if (isChrome) {
- expect(error).toBeFileError(FileError.SYNTAX_ERR); // eslint-disable-line no-undef
- } else {
- expect(error).toBeFileError(FileError.NOT_FOUND_ERR); // eslint-disable-line no-undef
- }
- done();
- });
- }, failed.bind(null, done, 'dirEntry.remove - Error removing directory : ' + dirName));
- }, failed.bind(null, done, 'createDirectory - Error creating directory : ' + dirName));
- }, failed.bind(null, done, 'createFile - Error creating file : ' + file1));
- });
- it('file.spec.64 copyTo: invalid target name', function (done) {
- if (isBrowser) {
- /* The plugin does not follow ["8.3 Naming restrictions"]
- (http://www.w3.org/TR/2011/WD-file-system-api-20110419/#naming-restrictions */
- pending();
- }
+// var fileName = 'de:invalid:path';
+// var fail = function (error) {
+// expect(error).toBeDefined();
+// expect(error).toBeFileError(FileError.ENCODING_ERR); // eslint-disable-line no-undef
+// done();
+// };
+// // create:false, exclusive:false, invalid path
+// root.getFile(fileName, {
+// create: false
+// }, succeed.bind(null, done, 'root.getFile - Error unexpected callback, file should not exists: ' + fileName), fail);
+// });
+// it('file.spec.23 DirectoryEntry.getDirectory: get Entry for directory that does not exist', function (done) {
+// var dirName = 'de.no.dir';
+// var fail = function (error) {
+// expect(error).toBeDefined();
+// if (isChrome) {
+// expect(error).toBeFileError(FileError.SYNTAX_ERR); // eslint-disable-line no-undef
+// } else {
+// expect(error).toBeFileError(FileError.NOT_FOUND_ERR); // eslint-disable-line no-undef
+// }
+// done();
+// };
+// // create:false, exclusive:false, directory does not exist
+// root.getDirectory(dirName, {
+// create: false
+// }, succeed.bind(null, done, 'root.getDirectory - Error unexpected callback, directory should not exists: ' + dirName), fail);
+// });
+// it('file.spec.24 DirectoryEntry.getDirectory: create new dir with space then resolveLocalFileSystemURL', function (done) {
+// var dirName = 'de create dir';
- var file1 = 'entry.copy.itn.file1';
- var file2 = 'bad:file:name';
- // create a new file entry
- createFile(file1, function (entry) {
- // copy file1 to file2
- entry.copyTo(root, file2, succeed.bind(null, done, 'entry.copyTo - Unexpected success callback, it should not copy a file ' + file1 + ' to an invalid file name: ' + file2), function (error) {
- expect(error).toBeDefined();
- expect(error).toBeFileError(FileError.ENCODING_ERR); // eslint-disable-line no-undef
- // cleanup
- deleteEntry(file1, done);
- });
- }, failed.bind(null, done, 'createFile - Error creating file : ' + file1));
- });
- it('file.spec.65 moveTo: file to same parent', function (done) {
- var file1 = 'entry.move.fsp.file1';
- var file2 = 'entry.move.fsp.file2';
- var dstPath = joinURL(root.fullPath, file2);
- // create a new file entry to kick off it
- createFile(file1, function (entry) {
- // move file1 to file2
- entry.moveTo(root, file2, function (entry) {
- expect(entry).toBeDefined();
- expect(entry.isFile).toBe(true);
- expect(entry.isDirectory).toBe(false);
- expect(entry.fullPath).toCanonicallyMatch(dstPath);
- expect(entry.name).toCanonicallyMatch(file2);
- root.getFile(file2, {
- create: false
- }, function (fileEntry) {
- expect(fileEntry).toBeDefined();
- expect(fileEntry.fullPath).toCanonicallyMatch(dstPath);
- root.getFile(file1, {
- create: false
- }, succeed.bind(null, done, 'root.getFile - Unexpected success callback, it should not get invalid or moved file: ' + file1), function (error) {
- // expect(navigator.fileMgr.testFileExists(srcPath) === false, "original file should not exist.");
- expect(error).toBeDefined();
- if (isChrome) {
- expect(error).toBeFileError(FileError.SYNTAX_ERR); // eslint-disable-line no-undef
- } else {
- expect(error).toBeFileError(FileError.NOT_FOUND_ERR); // eslint-disable-line no-undef
- }
- // cleanup
- deleteEntry(file1, function () {
- deleteEntry(file2, done);
- });
- });
- }, failed.bind(null, done, 'root.getFile - Error getting file : ' + file2));
- }, failed.bind(null, done, 'entry.moveTo - Error moving file : ' + file1 + ' to root as: ' + file2));
- }, failed.bind(null, done, 'createFile - Error creating file : ' + file1));
- });
- it('file.spec.66 moveTo: file to new parent', function (done) {
- var file1 = 'entry.move.fnp.file1';
- var dir = 'entry.move.fnp.dir';
- var dstPath = joinURL(joinURL(root.fullPath, dir), file1);
- // ensure destination directory is cleaned up first
- deleteEntry(dir, function () {
- // create a new file entry to kick off it
- createFile(file1, function (entry) {
- // create a parent directory to move file to
- root.getDirectory(dir, {
- create: true
- }, function (directory) {
- // move file1 to new directory
- // move the file
- entry.moveTo(directory, null, function (entry) {
- expect(entry).toBeDefined();
- expect(entry.isFile).toBe(true);
- expect(entry.isDirectory).toBe(false);
- expect(entry.fullPath).toCanonicallyMatch(dstPath);
- expect(entry.name).toCanonicallyMatch(file1);
- // test the moved file exists
- directory.getFile(file1, {
- create: false
- }, function (fileEntry) {
- expect(fileEntry).toBeDefined();
- expect(fileEntry.fullPath).toCanonicallyMatch(dstPath);
- root.getFile(file1, {
- create: false
- }, succeed.bind(null, done, 'root.getFile - Unexpected success callback, it should not get invalid or moved file: ' + file1), function (error) {
- expect(error).toBeDefined();
- if (isChrome) {
- expect(error).toBeFileError(FileError.SYNTAX_ERR); // eslint-disable-line no-undef
- } else {
- expect(error).toBeFileError(FileError.NOT_FOUND_ERR); // eslint-disable-line no-undef
- }
- // cleanup
- deleteEntry(file1, function () {
- deleteEntry(dir, done);
- });
- });
- }, failed.bind(null, done, 'directory.getFile - Error getting file : ' + file1 + ' from: ' + dir));
- }, failed.bind(null, done, 'entry.moveTo - Error moving file : ' + file1 + ' to: ' + dir + ' with the same name'));
- }, failed.bind(null, done, 'root.getDirectory - Error creating directory : ' + dir));
- }, failed.bind(null, done, 'createFile - Error creating file : ' + file1));
- }, failed.bind(null, done, 'deleteEntry - Error removing directory : ' + dir));
- });
- it('file.spec.67 moveTo: directory to same parent', function (done) {
- if (isIndexedDBShim) {
- /* `copyTo` and `moveTo` functions do not support directories (Firefox, IE) */
- pending();
- }
+// function win (directory) {
+// expect(directory).toBeDefined();
+// expect(directory.isFile).toBe(false);
+// expect(directory.isDirectory).toBe(true);
+// expect(directory.name).toCanonicallyMatch(dirName);
+// expect(directory.fullPath).toCanonicallyMatch(joinURL(root.fullPath, dirName));
+// // cleanup
+// deleteEntry(directory.name, done);
+// }
- var file1 = 'file1';
- var srcDir = 'entry.move.dsp.srcDir';
- var dstDir = 'entry.move.dsp.dstDir';
- var dstPath = joinURL(root.fullPath, dstDir);
- var filePath = joinURL(dstPath, file1);
- // ensure destination directory is cleaned up before it
- deleteEntry(dstDir, function () {
- // create a new directory entry to kick off it
- createDirectory(srcDir, function (directory) {
- // create a file within directory
- directory.getFile(file1, {
- create: true
- }, function () {
- // move srcDir to dstDir
- directory.moveTo(root, dstDir, function (directory) {
- expect(directory).toBeDefined();
- expect(directory.isFile).toBe(false);
- expect(directory.isDirectory).toBe(true);
- expect(directory.fullPath).toCanonicallyMatch(dstPath);
- expect(directory.name).toCanonicallyMatch(dstDir);
- // test that moved file exists in destination dir
- directory.getFile(file1, {
- create: false
- }, function (fileEntry) {
- expect(fileEntry).toBeDefined();
- expect(fileEntry.fullPath).toCanonicallyMatch(filePath);
- // check that the moved file no longer exists in original dir
- root.getFile(file1, {
- create: false
- }, succeed.bind(null, done, 'directory.getFile - Unexpected success callback, it should not get invalid or moved file: ' + file1), function (error) {
- expect(error).toBeDefined();
- if (isChrome) {
- expect(error).toBeFileError(FileError.SYNTAX_ERR); // eslint-disable-line no-undef
- } else {
- expect(error).toBeFileError(FileError.NOT_FOUND_ERR); // eslint-disable-line no-undef
- }
- // cleanup
- deleteEntry(srcDir, function () {
- deleteEntry(dstDir, done);
- });
- });
- }, failed.bind(null, done, 'directory.getFile - Error getting file : ' + file1 + ' from: ' + srcDir));
- }, failed.bind(null, done, 'entry.moveTo - Error moving directory : ' + srcDir + ' to root as: ' + dstDir));
- }, failed.bind(null, done, 'directory.getFile - Error creating file : ' + file1));
- }, failed.bind(null, done, 'createDirectory - Error creating directory : ' + srcDir));
- }, failed.bind(null, done, 'deleteEntry - Error removing directory : ' + dstDir));
- });
- it('file.spec.68 moveTo: directory to same parent with same name', function (done) {
- if (isIndexedDBShim) {
- /* `copyTo` and `moveTo` functions do not support directories (Firefox, IE) */
- pending();
- }
+// function getDir (dirEntry) {
+// expect(dirEntry.filesystem).toBeDefined();
+// expect(dirEntry.filesystem).toBe(root.filesystem);
+// var dirURI = dirEntry.toURL();
+// // now encode URI and try to resolve
+// window.resolveLocalFileSystemURL(dirURI, win, failed.bind(null, done, 'window.resolveLocalFileSystemURL - getDir function - Error resolving directory: ' + dirURI));
+// }
- var file1 = 'file1';
- var srcDir = 'entry.move.dsp.srcDir';
- var dstDir = 'entry.move.dsp.srcDir-backup';
- var dstPath = joinURL(root.fullPath, dstDir);
- var filePath = joinURL(dstPath, file1);
- // ensure destination directory is cleaned up before it
- deleteEntry(dstDir, function () {
- // create a new directory entry to kick off it
- createDirectory(srcDir, function (directory) {
- // create a file within directory
- directory.getFile(file1, {
- create: true
- }, function () {
- // move srcDir to dstDir
- directory.moveTo(root, dstDir, function (directory) {
- expect(directory).toBeDefined();
- expect(directory.isFile).toBe(false);
- expect(directory.isDirectory).toBe(true);
- expect(directory.fullPath).toCanonicallyMatch(dstPath);
- expect(directory.name).toCanonicallyMatch(dstDir);
- // check that moved file exists in destination dir
- directory.getFile(file1, {
- create: false
- }, function (fileEntry) {
- expect(fileEntry).toBeDefined();
- expect(fileEntry.fullPath).toCanonicallyMatch(filePath);
- // check that the moved file no longer exists in original dir
- root.getFile(file1, {
- create: false
- }, succeed.bind(null, done, 'directory.getFile - Unexpected success callback, it should not get invalid or moved file: ' + file1), function (error) {
- expect(error).toBeDefined();
- if (isChrome) {
- expect(error).toBeFileError(FileError.SYNTAX_ERR); // eslint-disable-line no-undef
- } else {
- expect(error).toBeFileError(FileError.NOT_FOUND_ERR); // eslint-disable-line no-undef
- }
- // cleanup
- deleteEntry(srcDir, function () {
- deleteEntry(dstDir, done);
- });
- });
- }, failed.bind(null, done, 'directory.getFile - Error getting file : ' + file1 + ' from: ' + srcDir));
- }, failed.bind(null, done, 'entry.moveTo - Error moving directory : ' + srcDir + ' to root as: ' + dstDir));
- }, failed.bind(null, done, 'directory.getFile - Error creating file : ' + file1));
- }, failed.bind(null, done, 'createDirectory - Error creating directory : ' + srcDir));
- }, failed.bind(null, done, 'deleteEntry - Error removing directory : ' + dstDir));
- });
- it('file.spec.69 moveTo: directory to new parent', function (done) {
- if (isIndexedDBShim) {
- /* `copyTo` and `moveTo` functions do not support directories (Firefox, IE) */
- pending();
- }
+// // create:true, exclusive:false, directory does not exist
+// root.getDirectory(dirName, {
+// create: true
+// }, getDir, failed.bind(null, done, 'root.getDirectory - Error creating directory : ' + dirName));
+// });
+// // This test is excluded, and should probably be removed. Filesystem
+// // should always be properly encoded URLs, and *not* raw paths, and it
+// // doesn't make sense to double-encode the URLs and expect that to be
+// // handled by the implementation.
+// // If a particular platform uses paths internally rather than URLs, // then that platform should careful to pass them correctly to its
+// // backend.
+// xit('file.spec.25 DirectoryEntry.getDirectory: create new dir with space resolveLocalFileSystemURL with encoded URI', function (done) {
+// var dirName = 'de create dir2';
+// var dirPath = joinURL(root.fullPath, dirName);
- var file1 = 'file1';
- var srcDir = 'entry.move.dnp.srcDir';
- var dstDir = 'entry.move.dnp.dstDir';
- var dstPath = joinURL(root.fullPath, dstDir);
- var filePath = joinURL(dstPath, file1);
- // ensure destination directory is cleaned up before it
- deleteEntry(dstDir, function () {
- // create a new directory entry to kick off it
- createDirectory(srcDir, function (directory) {
- // create a file within directory
- directory.getFile(file1, {
- create: true
- }, function () {
- // move srcDir to dstDir
- directory.moveTo(root, dstDir, function (dirEntry) {
- expect(dirEntry).toBeDefined();
- expect(dirEntry.isFile).toBe(false);
- expect(dirEntry.isDirectory).toBe(true);
- expect(dirEntry.fullPath).toCanonicallyMatch(dstPath);
- expect(dirEntry.name).toCanonicallyMatch(dstDir);
- // test that moved file exists in destination dir
- dirEntry.getFile(file1, {
- create: false
- }, function (fileEntry) {
- expect(fileEntry).toBeDefined();
- expect(fileEntry.fullPath).toCanonicallyMatch(filePath);
- // test that the moved file no longer exists in original dir
- root.getFile(file1, {
- create: false
- }, succeed.bind(null, done, 'root.getFile - Unexpected success callback, it should not get invalid or moved file: ' + file1), function (error) {
- expect(error).toBeDefined();
- if (isChrome) {
- expect(error).toBeFileError(FileError.SYNTAX_ERR); // eslint-disable-line no-undef
- } else {
- expect(error).toBeFileError(FileError.NOT_FOUND_ERR); // eslint-disable-line no-undef
- }
- // cleanup
- deleteEntry(srcDir, function () {
- deleteEntry(dstDir, done);
- });
- });
- }, failed.bind(null, done, 'directory.getFile - Error getting file : ' + file1 + ' from: ' + dstDir));
- }, failed.bind(null, done, 'directory.moveTo - Error moving directory : ' + srcDir + ' to root as: ' + dstDir));
- }, failed.bind(null, done, 'directory.getFile - Error creating file : ' + file1));
- }, failed.bind(null, done, 'createDirectory - Error creating directory : ' + srcDir));
- }, failed.bind(null, done, 'deleteEntry - Error removing directory : ' + dstDir));
- });
+// function win (directory) {
+// expect(directory).toBeDefined();
+// expect(directory.isFile).toBe(false);
+// expect(directory.isDirectory).toBe(true);
+// expect(directory.name).toCanonicallyMatch(dirName);
+// expect(directory.fullPath).toCanonicallyMatch(dirPath);
+// // cleanup
+// deleteEntry(directory.name, done);
+// }
- it('file.spec.131 moveTo: directories tree to new parent', function (done) {
- if (isIndexedDBShim) {
- /* `copyTo` and `moveTo` functions do not support directories (Firefox, IE) */
- pending();
- }
+// function getDir (dirEntry) {
+// var dirURI = dirEntry.toURL();
+// // now encode URI and try to resolve
+// window.resolveLocalFileSystemURL(encodeURI(dirURI), win, failed.bind(null, done, 'window.resolveLocalFileSystemURL - getDir function - Error resolving directory: ' + dirURI));
+// }
- var srcDir = 'entry.move.dnp.srcDir';
- var srcDirNestedFirst = 'entry.move.dnp.srcDir.Nested1';
- var srcDirNestedSecond = 'entry.move.dnp.srcDir.Nested2';
- var dstDir = 'entry.move.dnp.dstDir';
-
- createDirectory(dstDir, function (dstDirectory) {
- createDirectory(srcDir, function (srcDirectory) {
- srcDirectory.getDirectory(srcDirNestedFirst, { create: true }, function () {
- srcDirectory.getDirectory(srcDirNestedSecond, { create: true }, function () {
- srcDirectory.moveTo(dstDirectory, srcDir, function successMove (transferredDirectory) {
- var directoryReader = transferredDirectory.createReader();
- directoryReader.readEntries(function successRead (entries) {
- expect(entries.length).toBe(2);
- if (!isChrome) {
- expect(entries[0].name).toBe(srcDirNestedFirst);
- expect(entries[1].name).toBe(srcDirNestedSecond);
- }
- deleteEntry(dstDir, done);
- }, failed.bind(null, done, 'Error getting entries from: ' + transferredDirectory));
- }, failed.bind(null, done, 'directory.moveTo - Error moving directory : ' + srcDir + ' to root as: ' + dstDir));
- }, failed.bind(null, done, 'directory.getDirectory - Error creating directory : ' + srcDirNestedSecond));
- }, failed.bind(null, done, 'directory.getDirectory - Error creating directory : ' + srcDirNestedFirst));
- }, failed.bind(null, done, 'createDirectory - Error creating source directory : ' + srcDir));
- }, failed.bind(null, done, 'createDirectory - Error creating dest directory : ' + dstDir));
- });
+// // create:true, exclusive:false, directory does not exist
+// root.getDirectory(dirName, {
+// create: true
+// }, getDir, failed.bind(null, done, 'root.getDirectory - Error creating directory : ' + dirName));
+// });
+// it('file.spec.26 DirectoryEntry.getDirectory: create new directory', function (done) {
+// var dirName = 'de.create.dir';
+// var dirPath = joinURL(root.fullPath, dirName);
+// var win = function (directory) {
+// expect(directory).toBeDefined();
+// expect(directory.isFile).toBe(false);
+// expect(directory.isDirectory).toBe(true);
+// expect(directory.name).toCanonicallyMatch(dirName);
+// expect(directory.fullPath).toCanonicallyMatch(dirPath);
+// expect(directory.filesystem).toBeDefined();
+// expect(directory.filesystem).toBe(root.filesystem);
+// // cleanup
+// deleteEntry(directory.name, done);
+// };
+// // create:true, exclusive:false, directory does not exist
+// root.getDirectory(dirName, {
+// create: true
+// }, win, failed.bind(null, done, 'root.getDirectory - Error creating directory : ' + dirName));
+// });
+// it('file.spec.27 DirectoryEntry.getDirectory: create new directory (exclusive)', function (done) {
+// var dirName = 'de.create.exclusive.dir';
+// var dirPath = joinURL(root.fullPath, dirName);
+// var win = function (directory) {
+// expect(directory).toBeDefined();
+// expect(directory.isFile).toBe(false);
+// expect(directory.isDirectory).toBe(true);
+// expect(directory.name).toCanonicallyMatch(dirName);
+// expect(directory.fullPath).toCanonicallyMatch(dirPath);
+// expect(directory.filesystem).toBeDefined();
+// expect(directory.filesystem).toBe(root.filesystem);
+// // cleanup
+// deleteEntry(directory.name, done);
+// };
+// // create:true, exclusive:true, directory does not exist
+// root.getDirectory(dirName, {
+// create: true,
+// exclusive: true
+// }, win, failed.bind(null, done, 'root.getDirectory - Error creating directory : ' + dirName));
+// });
+// it('file.spec.28 DirectoryEntry.getDirectory: create directory that already exists', function (done) {
+// var dirName = 'de.create.existing.dir';
+// var dirPath = joinURL(root.fullPath, dirName);
+// var win = function (directory) {
+// expect(directory).toBeDefined();
+// expect(directory.isFile).toBe(false);
+// expect(directory.isDirectory).toBe(true);
+// expect(directory.name).toCanonicallyMatch(dirName);
+// expect(directory.fullPath).toCanonicallyMatch(dirPath);
+// // cleanup
+// deleteEntry(directory.name, done);
+// };
+// // create directory to kick off it
+// root.getDirectory(dirName, {
+// create: true
+// }, function () {
+// root.getDirectory(dirName, {
+// create: true
+// }, win, failed.bind(null, done, 'root.getDirectory - Error creating existent second directory : ' + dirName));
+// }, failed.bind(null, done, 'root.getDirectory - Error creating directory : ' + dirName));
+// });
+// it('file.spec.29 DirectoryEntry.getDirectory: create directory that already exists (exclusive)', function (done) {
- it('file.spec.70 moveTo: directory onto itself', function (done) {
- if (isIndexedDBShim) {
- /* `copyTo` and `moveTo` functions do not support directories (Firefox, IE) */
- pending();
- }
+// var dirName = 'de.create.exclusive.existing.dir';
+// var existingDir;
+// var fail = function (error) {
+// expect(error).toBeDefined();
+// if (isChrome) {
+// /* INVALID_MODIFICATION_ERR (code: 9) or ??? (code: 13) is thrown instead of PATH_EXISTS_ERR(code: 12)
+// on trying to exclusively create a file or directory, which already exists (Chrome). */
+// // expect(error).toBeFileError(FileError.INVALID_MODIFICATION_ERR);
+// } else {
+// expect(error).toBeFileError(FileError.PATH_EXISTS_ERR); // eslint-disable-line no-undef
+// }
+// // cleanup
+// deleteEntry(existingDir.name, done);
+// };
+// // create directory to kick off it
+// root.getDirectory(dirName, {
+// create: true
+// }, function (directory) {
+// existingDir = directory;
+// // create:true, exclusive:true, directory exists
+// root.getDirectory(dirName, {
+// create: true,
+// exclusive: true
+// }, failed.bind(null, done, 'root.getDirectory - Unexpected success callback, second directory should not be created : ' + dirName), fail);
+// }, failed.bind(null, done, 'root.getDirectory - Error creating directory : ' + dirName));
+// });
+// it('file.spec.30 DirectoryEntry.getDirectory: get Entry for existing directory', function (done) {
+// var dirName = 'de.get.dir';
+// var dirPath = joinURL(root.fullPath, dirName);
+// var win = function (directory) {
+// expect(directory).toBeDefined();
+// expect(directory.isFile).toBe(false);
+// expect(directory.isDirectory).toBe(true);
+// expect(directory.name).toCanonicallyMatch(dirName);
+// expect(directory.fullPath).toCanonicallyMatch(dirPath);
+// // cleanup
+// deleteEntry(directory.name, done);
+// };
+// // create directory to kick it off
+// root.getDirectory(dirName, {
+// create: true
+// }, function () {
+// root.getDirectory(dirName, {
+// create: false
+// }, win, failed.bind(null, done, 'root.getDirectory - Error getting directory entry : ' + dirName));
+// }, failed.bind(null, done, 'root.getDirectory - Error creating directory : ' + dirName));
+// });
+// it('file.spec.31 DirectoryEntry.getDirectory: get DirectoryEntry for invalid path', function (done) {
+// if (isBrowser) {
+// /* The plugin does not follow to ["8.3 Naming restrictions"]
+// (http://www.w3.org/TR/2011/WD-file-system-api-20110419/#naming-restrictions). */
+// pending();
+// }
- var file1 = 'file1';
- var srcDir = 'entry.move.dos.srcDir';
- var srcPath = joinURL(root.fullPath, srcDir);
- var filePath = joinURL(srcPath, file1);
- // create a new directory entry to kick off it
- createDirectory(srcDir, function (directory) {
- // create a file within new directory
- directory.getFile(file1, {
- create: true
- }, function () {
- // move srcDir onto itself
- directory.moveTo(root, null, succeed.bind(null, done, 'directory.moveTo - Unexpected success callback, it should not move directory to invalid path'), function (error) {
- expect(error).toBeDefined();
- if (isChrome) {
- // chrome returns unknown error with code 13
- } else {
- expect(error).toBeFileError(FileError.INVALID_MODIFICATION_ERR); // eslint-disable-line no-undef
- }
- // test that original dir still exists
- root.getDirectory(srcDir, {
- create: false
- }, function (dirEntry) {
- // returning confirms existence so just check fullPath entry
- expect(dirEntry).toBeDefined();
- expect(dirEntry.fullPath).toCanonicallyMatch(srcPath);
- dirEntry.getFile(file1, {
- create: false
- }, function (fileEntry) {
- expect(fileEntry).toBeDefined();
- expect(fileEntry.fullPath).toCanonicallyMatch(filePath);
- // cleanup
- deleteEntry(srcDir, done);
- }, failed.bind(null, done, 'dirEntry.getFile - Error getting file : ' + file1 + ' from: ' + srcDir));
- }, failed.bind(null, done, 'root.getDirectory - Error getting directory : ' + srcDir));
- });
- }, failed.bind(null, done, 'directory.getFile - Error creating file : ' + file1));
- }, failed.bind(null, done, 'createDirectory - Error creating directory : ' + srcDir));
- });
- it('file.spec.71 moveTo: directory into itself', function (done) {
- if (isIndexedDBShim) {
- /* `copyTo` and `moveTo` functions do not support directories (Firefox, IE) */
- pending();
- }
+// var dirName = 'de:invalid:path';
+// var fail = function (error) {
+// expect(error).toBeDefined();
+// expect(error).toBeFileError(FileError.ENCODING_ERR); // eslint-disable-line no-undef
+// done();
+// };
+// // create:false, exclusive:false, invalid path
+// root.getDirectory(dirName, {
+// create: false
+// }, succeed.bind(null, done, 'root.getDirectory - Unexpected success callback, directory should not exists: ' + dirName), fail);
+// });
+// it('file.spec.32 DirectoryEntry.getDirectory: get DirectoryEntry for existing file', function (done) {
+// var fileName = 'de.existing.file';
+// var existingFile;
+// var fail = function (error) {
+// expect(error).toBeDefined();
+// if (isChrome) {
+// // chrome returns an unknown error with code 17
+// } else {
+// expect(error).toBeFileError(FileError.TYPE_MISMATCH_ERR); // eslint-disable-line no-undef
+// }
+// // cleanup
+// deleteEntry(existingFile.name, done);
+// };
+// // create file to kick off it
+// root.getFile(fileName, {
+// create: true
+// }, function (file) {
+// existingFile = file;
+// root.getDirectory(fileName, {
+// create: false
+// }, succeed.bind(null, done, 'root.getDirectory - Unexpected success callback, directory should not exists: ' + fileName), fail);
+// }, failed.bind(null, done, 'root.getFile - Error creating file : ' + fileName));
+// });
+// it('file.spec.33 DirectoryEntry.getFile: get FileEntry for existing directory', function (done) {
+// var dirName = 'de.existing.dir';
+// var existingDir;
+// var fail = function (error) {
+// expect(error).toBeDefined();
+// if (isChrome) {
+// // chrome returns an unknown error with code 17
+// } else {
+// expect(error).toBeFileError(FileError.TYPE_MISMATCH_ERR); // eslint-disable-line no-undef
+// }
+// // cleanup
+// deleteEntry(existingDir.name, done);
+// };
+// // create directory to kick off it
+// root.getDirectory(dirName, {
+// create: true
+// }, function (directory) {
+// existingDir = directory;
+// root.getFile(dirName, {
+// create: false
+// }, succeed.bind(null, done, 'root.getFile - Unexpected success callback, file should not exists: ' + dirName), fail);
+// }, failed.bind(null, done, 'root.getDirectory - Error creating directory : ' + dirName));
+// });
+// it('file.spec.34 DirectoryEntry.removeRecursively on directory', function (done) {
+// var dirName = 'de.removeRecursively';
+// var subDirName = 'dir';
+// var dirExists = function (error) {
+// expect(error).toBeDefined();
+// if (isChrome) {
+// expect(error).toBeFileError(FileError.SYNTAX_ERR); // eslint-disable-line no-undef
+// } else {
+// expect(error).toBeFileError(FileError.NOT_FOUND_ERR); // eslint-disable-line no-undef
+// }
+// done();
+// };
+// // create a new directory entry to kick off it
+// root.getDirectory(dirName, {
+// create: true
+// }, function (entry) {
+// entry.getDirectory(subDirName, {
+// create: true
+// }, function (dir) {
+// entry.removeRecursively(function () {
+// root.getDirectory(dirName, {
+// create: false
+// }, succeed.bind(null, done, 'root.getDirectory - Unexpected success callback, directory should not exists: ' + dirName), dirExists);
+// }, failed.bind(null, done, 'entry.removeRecursively - Error removing directory recursively : ' + dirName));
+// }, failed.bind(null, done, 'root.getDirectory - Error creating directory : ' + subDirName));
+// }, failed.bind(null, done, 'root.getDirectory - Error creating directory : ' + dirName));
+// });
+// it('file.spec.35 createReader: create reader on existing directory', function () {
+// // create reader for root directory
+// var reader = root.createReader();
+// expect(reader).toBeDefined();
+// expect(typeof reader.readEntries).toBe('function');
+// });
+// it('file.spec.36 removeRecursively on root file system', function (done) {
- var srcDir = 'entry.move.dis.srcDir';
- var dstDir = 'entry.move.dis.dstDir';
- var srcPath = joinURL(root.fullPath, srcDir);
- // create a new directory entry to kick off it
- createDirectory(srcDir, function (directory) {
- // move source directory into itself
- directory.moveTo(directory, dstDir, succeed.bind(null, done, 'directory.moveTo - Unexpected success callback, it should not move a directory into itself: ' + srcDir), function (error) {
- expect(error).toBeDefined();
- if (isChrome) {
- // chrome returns unknown error with code 13
- } else {
- expect(error).toBeFileError(FileError.INVALID_MODIFICATION_ERR); // eslint-disable-line no-undef
- }
- // make sure original directory still exists
- root.getDirectory(srcDir, {
- create: false
- }, function (entry) {
- expect(entry).toBeDefined();
- expect(entry.fullPath).toCanonicallyMatch(srcPath);
- // cleanup
- deleteEntry(srcDir, done);
- }, failed.bind(null, done, 'root.getDirectory - Error getting directory, making sure that original directory still exists: ' + srcDir));
- });
- }, failed.bind(null, done, 'createDirectory - Error creating directory : ' + srcDir));
- });
- it('file.spec.130 moveTo: directory into similar directory', function (done) {
- if (isIndexedDBShim) {
- /* `copyTo` and `moveTo` functions do not support directories (Firefox, IE) */
- pending();
- }
+// var remove = function (error) {
+// expect(error).toBeDefined();
+// if (isChrome) {
+// /* INVALID_MODIFICATION_ERR (code: 9) or ??? (code: 13) is thrown instead of
+// NO_MODIFICATION_ALLOWED_ERR(code: 6) on trying to call removeRecursively
+// on the root file system (Chrome). */
+// // expect(error).toBeFileError(FileError.INVALID_MODIFICATION_ERR);
+// } else {
+// expect(error).toBeFileError(FileError.NO_MODIFICATION_ALLOWED_ERR); // eslint-disable-line no-undef
+// }
+// done();
+// };
+// // remove root file system
+// root.removeRecursively(succeed.bind(null, done, 'root.removeRecursively - Unexpected success callback, root cannot be removed'), remove);
+// });
+// });
+// describe('DirectoryReader interface', function () {
+// describe('readEntries', function () {
+// it('file.spec.37 should read contents of existing directory', function (done) {
+// var reader;
+// var win = function (entries) {
+// expect(entries).toBeDefined();
+// expect(entries instanceof Array).toBe(true);
+// done();
+// };
+// // create reader for root directory
+// reader = root.createReader();
+// // read entries
+// reader.readEntries(win, failed.bind(null, done, 'reader.readEntries - Error reading entries'));
+// });
+// it('file.spec.37.1 should read contents of existing directory', function (done) {
+// var dirName = 'readEntries.dir';
+// var fileName = 'readeEntries.file';
+// root.getDirectory(dirName, {
+// create: true
+// }, function (directory) {
+// directory.getFile(fileName, {
+// create: true
+// }, function (fileEntry) {
+// var reader = directory.createReader();
+// reader.readEntries(function (entries) {
+// expect(entries).toBeDefined();
+// expect(entries instanceof Array).toBe(true);
+// expect(entries.length).toBe(1);
+// expect(entries[0].fullPath).toCanonicallyMatch(fileEntry.fullPath);
+// expect(entries[0].filesystem).not.toBe(null);
+// if (isChrome) {
+// // Slicing '[object {type}]' -> '{type}'
+// expect(entries[0].filesystem.toString().slice(8, -1)).toEqual('DOMFileSystem');
+// } else {
+// expect(entries[0].filesystem instanceof FileSystem).toBe(true); // eslint-disable-line no-undef
+// }
- var srcDir = 'entry.move.dis.srcDir';
- var dstDir = 'entry.move.dis.srcDir-backup';
- // create a new directory entry to kick off it
- createDirectory(srcDir, function (srcDirEntry) {
- deleteEntry(dstDir, function () {
- createDirectory(dstDir, function (dstDirEntry) {
- // move source directory into itself
- srcDirEntry.moveTo(dstDirEntry, 'file', function (newDirEntry) {
- expect(newDirEntry).toBeDefined();
- deleteEntry(dstDir, done);
- }, failed.bind(null, done, 'directory.moveTo - Error moving a directory into a similarly-named directory: ' + srcDir));
- }, failed.bind(null, done, 'createDirectory - Error creating directory : ' + dstDir));
- }, failed.bind(null, done, 'deleteEntry - Error deleting directory : ' + dstDir));
- }, failed.bind(null, done, 'createDirectory - Error creating directory : ' + srcDir));
- });
- it('file.spec.72 moveTo: file onto itself', function (done) {
- var file1 = 'entry.move.fos.file1';
- var filePath = joinURL(root.fullPath, file1);
- // create a new file entry to kick off it
- createFile(file1, function (entry) {
- // move file1 onto itself
- entry.moveTo(root, null, succeed.bind(null, done, 'entry.moveTo - Unexpected success callback, it should not move a file: ' + file1 + ' into the same parent'), function (error) {
- expect(error).toBeDefined();
- if (isChrome) {
- // chrome returns unknown error with code 13
- } else {
- expect(error).toBeFileError(FileError.INVALID_MODIFICATION_ERR); // eslint-disable-line no-undef
- }
- // test that original file still exists
- root.getFile(file1, {
- create: false
- }, function (fileEntry) {
- expect(fileEntry).toBeDefined();
- expect(fileEntry.fullPath).toCanonicallyMatch(filePath);
- // cleanup
- deleteEntry(file1, done);
- }, failed.bind(null, done, 'root.getFile - Error getting file, making sure that original file still exists: ' + file1));
- });
- }, failed.bind(null, done, 'createFile - Error creating file : ' + file1));
- });
- it('file.spec.73 moveTo: file onto existing directory', function (done) {
- var file1 = 'entry.move.fod.file1';
- var dstDir = 'entry.move.fod.dstDir';
- var subDir = 'subDir';
- var dirPath = joinURL(joinURL(root.fullPath, dstDir), subDir);
- var filePath = joinURL(root.fullPath, file1);
- // ensure destination directory is cleaned up before it
- deleteEntry(dstDir, function () {
- // create a new file entry to kick off it
- createFile(file1, function (entry) {
- // create top level directory
- root.getDirectory(dstDir, {
- create: true
- }, function (directory) {
- // create sub-directory
- directory.getDirectory(subDir, {
- create: true
- }, function (subDirectory) {
- // move file1 onto sub-directory
- entry.moveTo(directory, subDir, succeed.bind(null, done, 'entry.moveTo - Unexpected success callback, it should not move a file: ' + file1 + ' into directory: ' + dstDir + '\n' + subDir + ' directory already exists'), function (error) {
- expect(error).toBeDefined();
- if (isChrome) {
- // chrome returns unknown error with code 13
- } else {
- expect(error).toBeFileError(FileError.INVALID_MODIFICATION_ERR); // eslint-disable-line no-undef
- }
- // check that original dir still exists
- directory.getDirectory(subDir, {
- create: false
- }, function (dirEntry) {
- expect(dirEntry).toBeDefined();
- expect(dirEntry.fullPath).toCanonicallyMatch(dirPath);
- // check that original file still exists
- root.getFile(file1, {
- create: false
- }, function (fileEntry) {
- expect(fileEntry).toBeDefined();
- expect(fileEntry.fullPath).toCanonicallyMatch(filePath);
- // cleanup
- deleteEntry(file1, function () {
- deleteEntry(dstDir, done);
- });
- }, failed.bind(null, done, 'root.getFile - Error getting file, making sure that original file still exists: ' + file1));
- }, failed.bind(null, done, 'directory.getDirectory - Error getting directory, making sure that original directory still exists: ' + subDir));
- });
- }, failed.bind(null, done, 'directory.getDirectory - Error creating directory : ' + subDir));
- }, failed.bind(null, done, 'root.getDirectory - Error creating directory : ' + dstDir));
- }, failed.bind(null, done, 'createFile - Error creating file : ' + file1));
- }, failed.bind(null, done, 'deleteEntry - Error removing directory : ' + dstDir));
- });
- it('file.spec.74 moveTo: directory onto existing file', function (done) {
- if (isIndexedDBShim) {
- /* `copyTo` and `moveTo` functions do not support directories (Firefox, IE) */
- pending();
- }
+// // cleanup
+// deleteEntry(directory.name, done);
+// }, failed.bind(null, done, 'reader.readEntries - Error reading entries from directory: ' + dirName));
+// }, failed.bind(null, done, 'directory.getFile - Error creating file : ' + fileName));
+// }, failed.bind(null, done, 'root.getDirectory - Error creating directory : ' + dirName));
+// });
+// it('file.spec.109 should return an empty entry list on the second call', function (done) {
+// var reader;
+// var fileName = 'test109.txt';
+// // Add a file to ensure the root directory is non-empty and then read the contents of the directory.
+// root.getFile(fileName, {
+// create: true
+// }, function (entry) {
+// reader = root.createReader();
+// // First read
+// reader.readEntries(function (entries) {
+// expect(entries).toBeDefined();
+// expect(entries instanceof Array).toBe(true);
+// expect(entries.length).not.toBe(0);
+// // Second read
+// reader.readEntries(function (entries_) {
+// expect(entries_).toBeDefined();
+// expect(entries_ instanceof Array).toBe(true);
+// expect(entries_.length).toBe(0);
+// // Clean up
+// deleteEntry(entry.name, done);
+// }, failed.bind(null, done, 'reader.readEntries - Error during SECOND reading of entries from [root] directory'));
+// }, failed.bind(null, done, 'reader.readEntries - Error during FIRST reading of entries from [root] directory'));
+// }, failed.bind(null, done, 'root.getFile - Error creating file : ' + fileName));
+// });
+// });
+// it('file.spec.38 should read contents of directory that has been removed', function (done) {
+// var dirName = 'de.createReader.notfound';
+// // create a new directory entry to kick off it
+// root.getDirectory(dirName, {
+// create: true
+// }, function (directory) {
+// directory.removeRecursively(function () {
+// var reader = directory.createReader();
+// reader.readEntries(succeed.bind(null, done, 'reader.readEntries - Unexpected success callback, it should not read entries from deleted dir: ' + dirName), function (error) {
+// expect(error).toBeDefined();
+// if (isChrome) {
+// expect(error).toBeFileError(FileError.SYNTAX_ERR); // eslint-disable-line no-undef
+// } else {
+// expect(error).toBeFileError(FileError.NOT_FOUND_ERR); // eslint-disable-line no-undef
+// }
+// root.getDirectory(dirName, {
+// create: false
+// }, succeed.bind(null, done, 'root.getDirectory - Unexpected success callback, it should not get deleted directory: ' + dirName), function (err) {
+// expect(err).toBeDefined();
+// if (isChrome) {
+// expect(error).toBeFileError(FileError.SYNTAX_ERR); // eslint-disable-line no-undef
+// } else {
+// expect(error).toBeFileError(FileError.NOT_FOUND_ERR); // eslint-disable-line no-undef
+// }
+// done();
+// });
+// });
+// }, failed.bind(null, done, 'directory.removeRecursively - Error removing directory recursively : ' + dirName));
+// }, failed.bind(null, done, 'root.getDirectory - Error creating directory : ' + dirName));
+// });
+// });
+// // DirectoryReader interface
+// describe('File', function () {
+// it('file.spec.39 constructor should be defined', function () {
+// expect(File).toBeDefined(); // eslint-disable-line no-undef
+// expect(typeof File).toBe('function');
+// });
+// it('file.spec.40 should be define File attributes', function () {
+// var file = new File(); // eslint-disable-line no-undef
+// expect(file.name).toBeDefined();
+// expect(file.type).toBeDefined();
+// expect(file.lastModifiedDate).toBeDefined();
+// expect(file.size).toBeDefined();
+// });
+// });
+// // File
+// describe('FileEntry', function () {
- var file1 = 'entry.move.dof.file1';
- var srcDir = 'entry.move.dof.srcDir';
- var dirPath = joinURL(root.fullPath, srcDir);
- var filePath = joinURL(root.fullPath, file1);
- // create a new directory entry to kick off it
- createDirectory(srcDir, function (entry) {
- // create file
- root.getFile(file1, {
- create: true
- }, function (fileEntry) {
- // move directory onto file
- entry.moveTo(root, file1, succeed.bind(null, done, 'entry.moveTo - Unexpected success callback, it should not move : \n' + srcDir + ' into root directory renamed as ' + file1 + '\n' + file1 + ' file already exists'), function (error) {
- expect(error).toBeDefined();
- if (isChrome) {
- // chrome returns unknown error with code 13
- } else {
- expect(error).toBeFileError(FileError.INVALID_MODIFICATION_ERR); // eslint-disable-line no-undef
- }
- // test that original directory exists
- root.getDirectory(srcDir, {
- create: false
- }, function (dirEntry) {
- // returning confirms existence so just check fullPath entry
- expect(dirEntry).toBeDefined();
- expect(dirEntry.fullPath).toCanonicallyMatch(dirPath);
- // test that original file exists
- root.getFile(file1, {
- create: false
- }, function (fileEntry) {
- expect(fileEntry).toBeDefined();
- expect(fileEntry.fullPath).toCanonicallyMatch(filePath);
- // cleanup
- deleteEntry(file1, function () {
- deleteEntry(srcDir, done);
- });
- }, failed.bind(null, done, 'root.getFile - Error getting file, making sure that original file still exists: ' + file1));
- }, failed.bind(null, done, 'directory.getDirectory - Error getting directory, making sure that original directory still exists: ' + srcDir));
- });
- }, failed.bind(null, done, 'root.getFile - Error creating file : ' + file1));
- }, failed.bind(null, done, 'createDirectory - Error creating directory : ' + srcDir));
- });
- it('file.spec.75 copyTo: directory onto existing file', function (done) {
- if (isIndexedDBShim) {
- /* `copyTo` and `moveTo` functions do not support directories (Firefox, IE) */
- pending();
- }
+// it('file.spec.41 should be define FileEntry methods', function (done) {
+// var fileName = 'fe.methods';
+// var testFileEntry = function (fileEntry) {
+// expect(fileEntry).toBeDefined();
+// expect(typeof fileEntry.createWriter).toBe('function');
+// expect(typeof fileEntry.file).toBe('function');
+// // cleanup
+// deleteEntry(fileEntry.name, done);
+// };
+// // create a new file entry to kick off it
+// root.getFile(fileName, {
+// create: true
+// }, testFileEntry, failed.bind(null, done, 'root.getFile - Error creating file : ' + fileName));
+// });
+// it('file.spec.42 createWriter should return a FileWriter object', function (done) {
+// var fileName = 'fe.createWriter';
+// var testFile;
+// var testWriter = function (writer) {
+// expect(writer).toBeDefined();
+// if (isChrome) {
+// // Slicing '[object {type}]' -> '{type}'
+// expect(writer.toString().slice(8, -1)).toEqual('FileWriter');
+// } else {
+// expect(writer instanceof FileWriter).toBe(true); // eslint-disable-line no-undef
+// }
- var file1 = 'entry.copy.dof.file1';
- var srcDir = 'entry.copy.dof.srcDir';
- var dirPath = joinURL(root.fullPath, srcDir);
- var filePath = joinURL(root.fullPath, file1);
- // create a new directory entry to kick off it
- createDirectory(srcDir, function (entry) {
- // create file
- root.getFile(file1, {
- create: true
- }, function () {
- // copy directory onto file
- entry.copyTo(root, file1, succeed.bind(null, done, 'entry.copyTo - Unexpected success callback, it should not copy : \n' + srcDir + ' into root directory renamed as ' + file1 + '\n' + file1 + ' file already exists'), function (error) {
- expect(error).toBeDefined();
- if (isChrome) {
- // chrome returns unknown error with code 13
- } else {
- expect(error).toBeFileError(FileError.INVALID_MODIFICATION_ERR); // eslint-disable-line no-undef
- }
- // check that original dir still exists
- root.getDirectory(srcDir, {
- create: false
- }, function (dirEntry) {
- // returning confirms existence so just check fullPath entry
- expect(dirEntry).toBeDefined();
- expect(dirEntry.fullPath).toCanonicallyMatch(dirPath);
- // test that original file still exists
- root.getFile(file1, {
- create: false
- }, function (fileEntry) {
- expect(fileEntry).toBeDefined();
- expect(fileEntry.fullPath).toCanonicallyMatch(filePath);
- // cleanup
- deleteEntry(file1, function () {
- deleteEntry(srcDir, done);
- });
- }, failed.bind(null, done, 'root.getFile - Error getting file, making sure that original file still exists: ' + file1));
- }, failed.bind(null, done, 'root.getDirectory - Error getting directory, making sure that original directory still exists: ' + srcDir));
- });
- }, failed.bind(null, done, 'root.getFile - Error creating file : ' + file1));
- }, failed.bind(null, done, 'createDirectory - Error creating directory : ' + srcDir));
- });
- it('file.spec.76 moveTo: directory onto directory that is not empty', function (done) {
- if (isIndexedDBShim) {
- /* `copyTo` and `moveTo` functions do not support directories (Firefox, IE) */
- pending();
- }
+// // cleanup
+// deleteEntry(testFile.name, done);
+// };
+// // create a new file entry to kick off it
+// root.getFile(fileName, {
+// create: true
+// }, function (fileEntry) {
+// testFile = fileEntry;
+// fileEntry.createWriter(testWriter, failed.bind(null, done, 'fileEntry.createWriter - Error creating Writer from entry'));
+// }, failed.bind(null, done, 'root.getFile - Error creating file : ' + fileName));
+// });
+// it('file.spec.43 file should return a File object', function (done) {
+// var fileName = 'fe.file';
+// var newFile;
+// var testFile = function (file) {
+// expect(file).toBeDefined();
+// if (isChrome) {
+// // Slicing '[object {type}]' -> '{type}'
+// expect(file.toString().slice(8, -1)).toEqual('File');
+// } else {
+// expect(file instanceof File).toBe(true); // eslint-disable-line no-undef
+// }
- var srcDir = 'entry.move.dod.srcDir';
- var dstDir = 'entry.move.dod.dstDir';
- var subDir = 'subDir';
- var srcPath = joinURL(root.fullPath, srcDir);
- var dstPath = joinURL(joinURL(root.fullPath, dstDir), subDir);
- // ensure destination directory is cleaned up before it
- deleteEntry(dstDir, function () {
- // create a new file entry to kick off it
- createDirectory(srcDir, function (entry) {
- // create top level directory
- root.getDirectory(dstDir, {
- create: true
- }, function (directory) {
- // create sub-directory
- directory.getDirectory(subDir, {
- create: true
- }, function () {
- // move srcDir onto dstDir (not empty)
- entry.moveTo(root, dstDir, succeed.bind(null, done, 'entry.moveTo - Unexpected success callback, it should not copy : \n' + srcDir + ' into root directory renamed as ' + dstDir + '\n' + dstDir + ' directory already exists'), function (error) {
- expect(error).toBeDefined();
- if (isChrome) {
- // chrome returns unknown error with code 13
- } else {
- expect(error).toBeFileError(FileError.INVALID_MODIFICATION_ERR); // eslint-disable-line no-undef
- }
- // making sure destination directory still exists
- directory.getDirectory(subDir, {
- create: false
- }, function (dirEntry) {
- // returning confirms existence so just check fullPath entry
- expect(dirEntry).toBeDefined();
- expect(dirEntry.fullPath).toCanonicallyMatch(dstPath);
- // making sure source directory exists
- root.getDirectory(srcDir, {
- create: false
- }, function (srcEntry) {
- expect(srcEntry).toBeDefined();
- expect(srcEntry.fullPath).toCanonicallyMatch(srcPath);
- // cleanup
- deleteEntry(srcDir, function () {
- deleteEntry(dstDir, done);
- });
- }, failed.bind(null, done, 'root.getDirectory - Error getting directory, making sure that original directory still exists: ' + srcDir));
- }, failed.bind(null, done, 'directory.getDirectory - Error getting directory, making sure that original directory still exists: ' + subDir));
- });
- }, failed.bind(null, done, 'directory.getDirectory - Error creating directory : ' + subDir));
- }, failed.bind(null, done, 'directory.getDirectory - Error creating directory : ' + subDir));
- }, failed.bind(null, done, 'createDirectory - Error creating directory : ' + srcDir));
- }, failed.bind(null, done, 'deleteEntry - Error removing directory : ' + dstDir));
- });
- it('file.spec.77 moveTo: file replace existing file', function (done) {
- var file1 = 'entry.move.frf.file1';
- var file2 = 'entry.move.frf.file2';
- var file2Path = joinURL(root.fullPath, file2);
- // create a new directory entry to kick off it
- createFile(file1, function (entry) {
- // create file
- root.getFile(file2, {
- create: true
- }, function () {
- // replace file2 with file1
- entry.moveTo(root, file2, function (entry2) {
- expect(entry2).toBeDefined();
- expect(entry2.isFile).toBe(true);
- expect(entry2.isDirectory).toBe(false);
- expect(entry2.fullPath).toCanonicallyMatch(file2Path);
- expect(entry2.name).toCanonicallyMatch(file2);
- // old file should not exists
- root.getFile(file1, {
- create: false
- }, succeed.bind(null, done, 'root.getFile - Unexpected success callback, file: ' + file1 + ' should not exists'), function (error) {
- expect(error).toBeDefined();
- if (isChrome) {
- expect(error).toBeFileError(FileError.SYNTAX_ERR); // eslint-disable-line no-undef
- } else {
- expect(error).toBeFileError(FileError.NOT_FOUND_ERR); // eslint-disable-line no-undef
- }
- // test that new file exists
- root.getFile(file2, {
- create: false
- }, function (fileEntry) {
- expect(fileEntry).toBeDefined();
- expect(fileEntry.fullPath).toCanonicallyMatch(file2Path);
- // cleanup
- deleteEntry(file1, function () {
- deleteEntry(file2, done);
- });
- }, failed.bind(null, done, 'root.getFile - Error getting moved file: ' + file2));
- });
- }, failed.bind(null, done, 'entry.moveTo - Error moving file : ' + file1 + ' to root as: ' + file2));
- }, failed.bind(null, done, 'root.getFile - Error creating file: ' + file2));
- }, failed.bind(null, done, 'createFile - Error creating file: ' + file1));
- });
- it('file.spec.78 moveTo: directory replace empty directory', function (done) {
- if (isIndexedDBShim) {
- /* `copyTo` and `moveTo` functions do not support directories (Firefox, IE) */
- pending();
- }
+// // cleanup
+// deleteEntry(newFile.name, done);
+// };
+// // create a new file entry to kick off it
+// root.getFile(fileName, {
+// create: true
+// }, function (fileEntry) {
+// newFile = fileEntry;
+// fileEntry.file(testFile, failed.bind(null, done, 'fileEntry.file - Error reading file using fileEntry: ' + fileEntry.name));
+// }, failed.bind(null, done, 'root.getFile - Error creating file : ' + fileName));
+// });
+// it('file.spec.44 file: on File that has been removed', function (done) {
+// var fileName = 'fe.no.file';
+// // create a new file entry to kick off it
+// root.getFile(fileName, {
+// create: true
+// }, function (fileEntry) {
+// fileEntry.remove(function () {
+// fileEntry.file(succeed.bind(null, done, 'fileEntry.file - Unexpected success callback, file it should not be created from removed entry'), function (error) {
+// expect(error).toBeDefined();
+// if (isChrome) {
+// expect(error).toBeFileError(FileError.SYNTAX_ERR); // eslint-disable-line no-undef
+// } else {
+// expect(error).toBeFileError(FileError.NOT_FOUND_ERR); // eslint-disable-line no-undef
+// }
+// done();
+// });
+// }, failed.bind(null, done, 'fileEntry.remove - Error removing entry : ' + fileName));
+// }, failed.bind(null, done, 'root.getFile - Error creating file : ' + fileName));
+// });
+// });
+// // FileEntry
+// describe('Entry', function () {
+// it('file.spec.45 Entry object', function (done) {
+// var fileName = 'entry';
+// var fullPath = joinURL(root.fullPath, fileName);
+// var winEntry = function (entry) {
+// expect(entry).toBeDefined();
+// expect(entry.isFile).toBe(true);
+// expect(entry.isDirectory).toBe(false);
+// expect(entry.name).toCanonicallyMatch(fileName);
+// expect(entry.fullPath).toCanonicallyMatch(fullPath);
+// expect(typeof entry.getMetadata).toBe('function');
+// expect(typeof entry.setMetadata).toBe('function');
+// expect(typeof entry.moveTo).toBe('function');
+// expect(typeof entry.copyTo).toBe('function');
+// expect(typeof entry.toURL).toBe('function');
+// expect(typeof entry.remove).toBe('function');
+// expect(typeof entry.getParent).toBe('function');
+// expect(typeof entry.createWriter).toBe('function');
+// expect(typeof entry.file).toBe('function');
+// // Clean up
+// deleteEntry(fileName, done);
+// };
+// // create a new file entry
+// createFile(fileName, winEntry, failed.bind(null, done, 'createFile - Error creating file : ' + fileName));
+// });
+// it('file.spec.46 Entry.getMetadata on file', function (done) {
+// var fileName = 'entry.metadata.file';
+// // create a new file entry
+// createFile(fileName, function (entry) {
+// entry.getMetadata(function (metadata) {
+// expect(metadata).toBeDefined();
+// expect(metadata.modificationTime instanceof Date).toBe(true);
+// expect(typeof metadata.size).toBe('number');
+// // cleanup
+// deleteEntry(fileName, done);
+// }, failed.bind(null, done, 'entry.getMetadata - Error getting metadata from entry : ' + fileName));
+// }, failed.bind(null, done, 'createFile - Error creating file : ' + fileName));
+// });
+// it('file.spec.47 Entry.getMetadata on directory', function (done) {
+// if (isIndexedDBShim) {
+// /* Does not support metadata for directories (Firefox, IE) */
+// pending();
+// }
- var file1 = 'file1';
- var srcDir = 'entry.move.drd.srcDir';
- var dstDir = 'entry.move.drd.dstDir';
- var dstPath = joinURL(root.fullPath, dstDir);
- var filePath = dstPath + '/' + file1;
- // ensure destination directory is cleaned up before it
- deleteEntry(dstDir, function () {
- // create a new directory entry to kick off it
- createDirectory(srcDir, function (directory) {
- // create a file within source directory
- directory.getFile(file1, {
- create: true
- }, function () {
- // create destination directory
- root.getDirectory(dstDir, {
- create: true
- }, function () {
- // move srcDir to dstDir
- directory.moveTo(root, dstDir, function (dirEntry) {
- expect(dirEntry).toBeDefined();
- expect(dirEntry.isFile).toBe(false);
- expect(dirEntry.isDirectory).toBe(true);
- expect(dirEntry.fullPath).toCanonicallyMatch(dstPath);
- expect(dirEntry.name).toCanonicallyMatch(dstDir);
- // check that old directory contents have been moved
- dirEntry.getFile(file1, {
- create: false
- }, function (fileEntry) {
- expect(fileEntry).toBeDefined();
- expect(fileEntry.fullPath).toCanonicallyMatch(filePath);
- // check that old directory no longer exists
- root.getDirectory(srcDir, {
- create: false
- }, succeed.bind(null, done, 'root.getDirectory - Unexpected success callback, directory: ' + srcDir + ' should not exists'), function (error) {
- expect(error).toBeDefined();
- if (isChrome) {
- expect(error).toBeFileError(FileError.SYNTAX_ERR); // eslint-disable-line no-undef
- } else {
- expect(error).toBeFileError(FileError.NOT_FOUND_ERR); // eslint-disable-line no-undef
- }
- // cleanup
- deleteEntry(srcDir, function () {
- deleteEntry(dstDir, done);
- });
- });
- }, failed.bind(null, done, 'dirEntry.getFile - Error getting moved file: ' + file1));
- }, failed.bind(null, done, 'entry.moveTo - Error moving directory : ' + srcDir + ' to root as: ' + dstDir));
- }, failed.bind(null, done, 'root.getDirectory - Error creating directory: ' + dstDir));
- }, failed.bind(null, done, 'root.getFile - Error creating file: ' + file1));
- }, failed.bind(null, done, 'createDirectory - Error creating directory: ' + srcDir));
- }, failed.bind(null, done, 'deleteEntry - Error removing directory : ' + dstDir));
- });
- it('file.spec.79 moveTo: directory that does not exist', function (done) {
- if (isChrome) {
- pending('chrome freak out about non-existend dir not being a DirectoryEntry');
- }
- var file1 = 'entry.move.dnf.file1';
- var dstDir = 'entry.move.dnf.dstDir';
- var dstPath = joinURL(root.fullPath, dstDir);
- // create a new file entry to kick off it
- createFile(file1, function (entry) {
- // move file to directory that does not exist
- var directory = new DirectoryEntry(); // eslint-disable-line no-undef
- directory.filesystem = root.filesystem;
- directory.fullPath = dstPath;
- entry.moveTo(directory, null, succeed.bind(null, done, 'entry.moveTo - Unexpected success callback, parent directory: ' + dstPath + ' should not exists'), function (error) {
- expect(error).toBeDefined();
- if (isChrome) {
- /* INVALID_MODIFICATION_ERR (code: 9) is thrown instead of NOT_FOUND_ERR(code: 1)
- on trying to moveTo directory that does not exist. */
- expect(error).toBeFileError(FileError.INVALID_MODIFICATION_ERR); // eslint-disable-line no-undef
- } else {
- expect(error).toBeFileError(FileError.NOT_FOUND_ERR); // eslint-disable-line no-undef
- }
- // cleanup
- deleteEntry(file1, done);
- });
- }, failed.bind(null, done, 'createFile - Error creating file: ' + file1));
- });
- it('file.spec.80 moveTo: invalid target name', function (done) {
- if (isBrowser) {
- /* The plugin does not follow ["8.3 Naming restrictions"]
- (http://www.w3.org/TR/2011/WD-file-system-api-20110419/#naming-restrictions */
- pending();
- }
+// var dirName = 'entry.metadata.dir';
+// // create a new directory entry
+// createDirectory(dirName, function (entry) {
+// entry.getMetadata(function (metadata) {
+// expect(metadata).toBeDefined();
+// expect(metadata.modificationTime instanceof Date).toBe(true);
+// expect(typeof metadata.size).toBe('number');
+// expect(metadata.size).toBe(0);
+// // cleanup
+// deleteEntry(dirName, done);
+// }, failed.bind(null, done, 'entry.getMetadata - Error getting metadata from entry : ' + dirName));
+// }, failed.bind(null, done, 'createDirectory - Error creating directory : ' + dirName));
+// });
+// it('file.spec.48 Entry.getParent on file in root file system', function (done) {
+// var fileName = 'entry.parent.file';
+// var rootPath = root.fullPath;
+// // create a new file entry
+// createFile(fileName, function (entry) {
+// entry.getParent(function (parent) {
+// expect(parent).toBeDefined();
+// expect(parent.fullPath).toCanonicallyMatch(rootPath);
+// // cleanup
+// deleteEntry(fileName, done);
+// }, failed.bind(null, done, 'entry.getParent - Error getting parent directory of file : ' + fileName));
+// }, failed.bind(null, done, 'createFile - Error creating file : ' + fileName));
+// });
+// it('file.spec.49 Entry.getParent on directory in root file system', function (done) {
+// var dirName = 'entry.parent.dir';
+// var rootPath = root.fullPath;
+// // create a new directory entry
+// createDirectory(dirName, function (entry) {
+// entry.getParent(function (parent) {
+// expect(parent).toBeDefined();
+// expect(parent.fullPath).toCanonicallyMatch(rootPath);
+// // cleanup
+// deleteEntry(dirName, done);
+// }, failed.bind(null, done, 'entry.getParent - Error getting parent directory of directory : ' + dirName));
+// }, failed.bind(null, done, 'createDirectory - Error creating directory : ' + dirName));
+// });
+// it('file.spec.50 Entry.getParent on root file system', function (done) {
+// var rootPath = root.fullPath;
+// var winParent = function (parent) {
+// expect(parent).toBeDefined();
+// expect(parent.fullPath).toCanonicallyMatch(rootPath);
+// done();
+// };
+// // create a new directory entry
+// root.getParent(winParent, failed.bind(null, done, 'root.getParent - Error getting parent directory of root'));
+// });
+// it('file.spec.51 Entry.toURL on file', function (done) {
+// var fileName = 'entry.uri.file';
+// var rootPath = root.fullPath;
+// var winURI = function (entry) {
+// var uri = entry.toURL();
+// expect(uri).toBeDefined();
+// expect(uri.indexOf(rootPath)).not.toBe(-1);
+// // cleanup
+// deleteEntry(fileName, done);
+// };
+// // create a new file entry
+// createFile(fileName, winURI, failed.bind(null, done, 'createFile - Error creating file : ' + fileName));
+// });
+// it('file.spec.52 Entry.toURL on directory', function (done) {
+// var dirName_1 = 'num 1';
+// var dirName_2 = 'num 2';
+// var rootPath = root.fullPath;
+// createDirectory(dirName_1, function (entry) {
+// entry.getDirectory(dirName_2, {
+// create: true
+// }, function (entryFile) {
+// var uri = entryFile.toURL();
+// expect(uri).toBeDefined();
+// expect(uri).toContain('/num%201/num%202/');
+// expect(uri.indexOf(rootPath)).not.toBe(-1);
+// // cleanup
+// deleteEntry(dirName_1, done);
+// }, failed.bind(null, done, 'entry.getDirectory - Error creating directory : ' + dirName_2));
+// }, failed.bind(null, done, 'createDirectory - Error creating directory : ' + dirName_1));
+// });
+// it('file.spec.53 Entry.remove on file', function (done) {
+// var fileName = 'entr .rm.file';
+// // create a new file entry
+// createFile(fileName, function (entry) {
+// expect(entry).toBeDefined();
+// entry.remove(function () {
+// root.getFile(fileName, null, succeed.bind(null, done, 'root.getFile - Unexpected success callback, it should not get deleted file : ' + fileName), function (error) {
+// expect(error).toBeDefined();
+// if (isChrome) {
+// expect(error).toBeFileError(FileError.SYNTAX_ERR); // eslint-disable-line no-undef
+// } else {
+// expect(error).toBeFileError(FileError.NOT_FOUND_ERR); // eslint-disable-line no-undef
+// }
+// // cleanup
+// deleteEntry(fileName, done);
+// });
+// }, failed.bind(null, done, 'entry.remove - Error removing entry : ' + fileName));
+// }, failed.bind(null, done, 'createFile - Error creating file : ' + fileName));
+// });
+// it('file.spec.53.1 Entry.remove on filename with #s', function (done) {
+// if (isBrowser) {
+// pending('Browsers can\'t do that');
+// }
+// var fileName = 'entry.#rm#.file';
+// // create a new file entry
+// createFile(fileName, function (entry) {
+// expect(entry).toBeDefined();
+// entry.remove(function () {
+// root.getFile(fileName, null, succeed.bind(null, done, 'root.getFile - Unexpected success callback, it should not get deleted file : ' + fileName), function (error) {
+// expect(error).toBeDefined();
+// expect(error).toBeFileError(FileError.NOT_FOUND_ERR); // eslint-disable-line no-undef
+// // cleanup
+// deleteEntry(fileName, done);
+// });
+// }, failed.bind(null, done, 'entry.remove - Error removing entry : ' + fileName));
+// }, failed.bind(null, done, 'createFile - Error creating file : ' + fileName));
+// });
+// it('file.spec.54 remove on empty directory', function (done) {
+// var dirName = 'entry.rm.dir';
+// // create a new directory entry
+// createDirectory(dirName, function (entry) {
+// expect(entry).toBeDefined();
+// entry.remove(function () {
+// root.getDirectory(dirName, null, succeed.bind(null, done, 'root.getDirectory - Unexpected success callback, it should not get deleted directory : ' + dirName), function (error) {
+// expect(error).toBeDefined();
+// if (isChrome) {
+// expect(error).toBeFileError(FileError.SYNTAX_ERR); // eslint-disable-line no-undef
+// } else {
+// expect(error).toBeFileError(FileError.NOT_FOUND_ERR); // eslint-disable-line no-undef
+// }
+// // cleanup
+// deleteEntry(dirName, done);
+// });
+// }, failed.bind(null, done, 'entry.remove - Error removing entry : ' + dirName));
+// }, failed.bind(null, done, 'createDirectory - Error creating directory : ' + dirName));
+// });
+// it('file.spec.55 remove on non-empty directory', function (done) {
+// if (isIndexedDBShim) {
+// /* Both Entry.remove and directoryEntry.removeRecursively don't fail when removing
+// non-empty directories - directories being removed are cleaned
+// along with contents instead (Firefox, IE) */
+// pending();
+// }
- var file1 = 'entry.move.itn.file1';
- var file2 = 'bad:file:name';
- // create a new file entry to kick off it
- createFile(file1, function (entry) {
- // move file1 to file2
- entry.moveTo(root, file2, succeed.bind(null, done, 'entry.moveTo - Unexpected success callback, : ' + file1 + ' to root as: ' + file2), function (error) {
- expect(error).toBeDefined();
- expect(error).toBeFileError(FileError.ENCODING_ERR); // eslint-disable-line no-undef
- // cleanup
- deleteEntry(file1, done);
- });
- }, failed.bind(null, done, 'createFile - Error creating file: ' + file1));
- });
- });
- // Entry
- describe('FileReader', function () {
- it('file.spec.81 should have correct methods', function () {
- var reader = new FileReader(); // eslint-disable-line no-undef
- expect(reader).toBeDefined();
- expect(typeof reader.readAsBinaryString).toBe('function');
- expect(typeof reader.readAsDataURL).toBe('function');
- expect(typeof reader.readAsText).toBe('function');
- expect(typeof reader.readAsArrayBuffer).toBe('function');
- expect(typeof reader.abort).toBe('function');
- expect(reader.result).toBe(null);
- });
- });
- // FileReader
- describe('Read method', function () {
- it('file.spec.82 should error out on non-existent file', function (done) {
- var fileName = cordova.platformId === 'windowsphone' ? root.toURL() + '/' + 'somefile.txt' : 'somefile.txt'; // eslint-disable-line no-undef
- var verifier = function (evt) {
- expect(evt).toBeDefined();
- if (isChrome) {
- expect(evt.target.error).toBeFileError(FileError.SYNTAX_ERR); // eslint-disable-line no-undef
- } else {
- expect(evt.target.error).toBeFileError(FileError.NOT_FOUND_ERR); // eslint-disable-line no-undef
- }
- done();
- };
- root.getFile(fileName, {
- create: true
- }, function (entry) {
- entry.file(function (file) {
- deleteEntry(fileName, function () {
- // Create FileReader
- var reader = new FileReader(); // eslint-disable-line no-undef
- reader.onerror = verifier;
- reader.onload = succeed.bind(null, done, 'reader.onload - Unexpected success callback, file: ' + fileName + ' it should not exists');
- reader.readAsText(file);
- }, failed.bind(null, done, 'deleteEntry - Error removing file: ' + fileName));
- }, failed.bind(null, done, 'entry.file - Error reading file: ' + fileName));
- }, failed.bind(null, done, 'root.getFile - Error creating file: ' + fileName));
- });
- it('file.spec.83 should be able to read native blob objects', function (done) {
- // Skip test if blobs are not supported (e.g.: Android 2.3).
- if (typeof window.Blob === 'undefined' || typeof window.Uint8Array === 'undefined') {
- expect(true).toFailWithMessage('Platform does not supported this feature');
- done();
- }
- var contents = 'asdf';
- var uint8Array = new Uint8Array(contents.length);
- for (var i = 0; i < contents.length; ++i) {
- uint8Array[i] = contents.charCodeAt(i);
- }
- var Builder = window.BlobBuilder || window.WebKitBlobBuilder;
- var blob;
- if (Builder) {
- var builder = new Builder();
- builder.append(uint8Array.buffer);
- builder.append(contents);
- blob = builder.getBlob('text/plain');
- } else {
- try {
- // iOS 6 does not support Views, so pass in the buffer.
- blob = new Blob([uint8Array.buffer, contents]); // eslint-disable-line no-undef
- } catch (e) {
- // Skip the test if we can't create a blob (e.g.: iOS 5).
- if (e instanceof TypeError) {
- expect(true).toFailWithMessage('Platform does not supported this feature');
- done();
- }
- throw e;
- }
- }
- var verifier = function (evt) {
- expect(evt).toBeDefined();
- expect(evt.target.result).toBe('asdfasdf');
- done();
- };
- var reader = new FileReader(); // eslint-disable-line no-undef
- reader.onloadend = verifier;
- reader.readAsText(blob);
- });
- function writeDummyFile (writeBinary, callback, done, fileContents) {
- var fileName = 'dummy.txt';
- var fileEntry = null;
- // use default string if file data is not provided
- var fileData = fileContents !== undefined ? fileContents :
- '\u20AC\xEB - There is an exception to every rule. Except this one.';
- var fileDataAsBinaryString = fileContents !== undefined ? fileContents :
- '\xe2\x82\xac\xc3\xab - There is an exception to every rule. Except this one.';
-
- function createWriter (fe) {
- fileEntry = fe;
- fileEntry.createWriter(writeFile, failed.bind(null, done, 'fileEntry.createWriter - Error reading file: ' + fileName));
- }
+// var dirName = 'ent y.rm.dir.not.empty';
+// var fileName = 're ove.txt';
+// var fullPath = joinURL(root.fullPath, dirName);
+// // create a new directory entry
+// createDirectory(dirName, function (entry) {
+// entry.getFile(fileName, {
+// create: true
+// }, function (fileEntry) {
+// entry.remove(succeed.bind(null, done, 'entry.remove - Unexpected success callback, it should not remove a directory that contains files : ' + dirName), function (error) {
+// expect(error).toBeDefined();
+// if (isChrome) {
+// // chrome is returning unknown error with code 13
+// } else {
+// expect(error).toBeFileError(FileError.INVALID_MODIFICATION_ERR); // eslint-disable-line no-undef
+// }
+// root.getDirectory(dirName, null, function (entry) {
+// expect(entry).toBeDefined();
+// expect(entry.fullPath).toCanonicallyMatch(fullPath);
+// // cleanup
+// deleteEntry(dirName, done);
+// }, failed.bind(null, done, 'root.getDirectory - Error getting directory : ' + dirName));
+// });
+// }, failed.bind(null, done, 'entry.getFile - Error creating file : ' + fileName + ' inside of ' + dirName));
+// }, failed.bind(null, done, 'createDirectory - Error creating directory : ' + dirName));
+// });
+// it('file.spec.56 remove on root file system', function (done) {
- // writes file and reads it back in
- function writeFile (writer) {
- writer.onwriteend = function () {
- fileEntry.file(function (f) {
- callback(fileEntry, f, fileData, fileDataAsBinaryString);
- }, failed.bind(null, done, 'writer.onwriteend - Error writing data on file: ' + fileName));
- };
- writer.write(fileData);
- }
+// // remove entry that doesn't exist
+// root.remove(succeed.bind(null, done, 'entry.remove - Unexpected success callback, it should not remove entry that it does not exists'), function (error) {
+// expect(error).toBeDefined();
+// if (isChrome) {
+// /* INVALID_MODIFICATION_ERR (code: 9) or ??? (code: 13) is thrown instead of
+// NO_MODIFICATION_ALLOWED_ERR(code: 6) on trying to call removeRecursively
+// on the root file system. */
+// // expect(error).toBeFileError(FileError.INVALID_MODIFICATION_ERR);
+// } else {
+// expect(error).toBeFileError(FileError.NO_MODIFICATION_ALLOWED_ERR); // eslint-disable-line no-undef
+// }
+// done();
+// });
+// });
+// it('file.spec.57 copyTo: file', function (done) {
+// var file1 = 'entry copy.file1';
+// var file2 = 'entry copy.file2';
+// var fullPath = joinURL(root.fullPath, file2);
+// // create a new file entry to kick off it
+// deleteEntry(file2, function () {
+// createFile(file1, function (fileEntry) {
+// // copy file1 to file2
+// fileEntry.copyTo(root, file2, function (entry) {
+// expect(entry).toBeDefined();
+// expect(entry.isFile).toBe(true);
+// expect(entry.isDirectory).toBe(false);
+// expect(entry.fullPath).toCanonicallyMatch(fullPath);
+// expect(entry.name).toCanonicallyMatch(file2);
+// root.getFile(file2, {
+// create: false
+// }, function (entry2) {
+// expect(entry2).toBeDefined();
+// expect(entry2.isFile).toBe(true);
+// expect(entry2.isDirectory).toBe(false);
+// expect(entry2.fullPath).toCanonicallyMatch(fullPath);
+// expect(entry2.name).toCanonicallyMatch(file2);
+// // cleanup
+// deleteEntry(file1, function () {
+// deleteEntry(file2, done);
+// });
+// }, failed.bind(null, done, 'root.getFile - Error getting copied file : ' + file2));
+// }, failed.bind(null, done, 'fileEntry.copyTo - Error copying file : ' + file2));
+// }, failed.bind(null, done, 'createFile - Error creating file : ' + file1));
+// }, failed.bind(null, done, 'deleteEntry - Error removing file : ' + file2));
+// });
+// it('file.spec.58 copyTo: file onto itself', function (done) {
+// var file1 = 'entry.copy.fos.file1';
+// // create a new file entry to kick off it
+// createFile(file1, function (entry) {
+// // copy file1 onto itself
+// entry.copyTo(root, null, succeed.bind(null, done, 'entry.copyTo - Unexpected success callback, it should not copy a null file'), function (error) {
+// expect(error).toBeDefined();
+// if (isChrome) {
+// // chrome returns unknown error with code 13
+// } else {
+// expect(error).toBeFileError(FileError.INVALID_MODIFICATION_ERR); // eslint-disable-line no-undef
+// }
+// // cleanup
+// deleteEntry(file1, done);
+// });
+// }, failed.bind(null, done, 'createFile - Error creating file : ' + file1));
+// });
+// it('file.spec.59 copyTo: directory', function (done) {
+// if (isIndexedDBShim) {
+// /* `copyTo` and `moveTo` functions do not support directories (Firefox, IE) */
+// pending();
+// }
- fileData += writeBinary ? 'bin:\x01\x00' : '';
- fileDataAsBinaryString += writeBinary ? 'bin:\x01\x00' : '';
- // create a file, write to it, and read it in again
- createFile(fileName, createWriter, failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
- }
- function runReaderTest (funcName, writeBinary, done, progressFunc, verifierFunc, sliceStart, sliceEnd, fileContents) {
- writeDummyFile(writeBinary, function (fileEntry, file, fileData, fileDataAsBinaryString) {
- var verifier = function (evt) {
- expect(evt).toBeDefined();
- verifierFunc(evt, fileData, fileDataAsBinaryString);
- };
- var reader = new FileReader(); // eslint-disable-line no-undef
- reader.onprogress = progressFunc;
- reader.onload = verifier;
- reader.onerror = failed.bind(null, done, 'reader.onerror - Error reading file: ' + file + ' using function: ' + funcName);
- if (sliceEnd !== undefined) {
- // 'type' is specified so that is will be preserved in the resulting file:
- // http://www.w3.org/TR/FileAPI/#slice-method-algo -> "6.4.1. The slice method" -> 4. A), 6. c)
- file = file.slice(sliceStart, sliceEnd, file.type);
- } else if (sliceStart !== undefined) {
- file = file.slice(sliceStart, file.size, file.type);
- }
- reader[funcName](file);
- }, done, fileContents);
- }
- function arrayBufferEqualsString (ab, str) {
- var buf = new Uint8Array(ab);
- var match = buf.length === str.length;
- for (var i = 0; match && i < buf.length; i++) {
- match = buf[i] === str.charCodeAt(i);
- }
- return match;
- }
- it('file.spec.84 should read file properly, readAsText', function (done) {
- runReaderTest('readAsText', false, done, null, function (evt, fileData, fileDataAsBinaryString) {
- expect(evt.target.result).toBe(fileData);
- done();
- });
- });
- it('file.spec.84.1 should read JSON file properly, readAsText', function (done) {
- var testObject = {key1: 'value1', key2: 2};
- runReaderTest('readAsText', false, done, null, function (evt, fileData, fileDataAsBinaryString) {
- expect(evt.target.result).toEqual(JSON.stringify(testObject));
- done();
- }, undefined, undefined, JSON.stringify(testObject));
- });
- it('file.spec.85 should read file properly, Data URI', function (done) {
- runReaderTest('readAsDataURL', true, done, null, function (evt, fileData, fileDataAsBinaryString) {
- /* `readAsDataURL` function is supported, but the mediatype in Chrome depends on entry name extension,
- mediatype in IE is always empty (which is the same as `text-plain` according the specification),
- the mediatype in Firefox is always `application/octet-stream`.
- For example, if the content is `abcdefg` then Firefox returns `data:application/octet-stream;base64,YWJjZGVmZw==`,
- IE returns `data:;base64,YWJjZGVmZw==`, Chrome returns `data:<mediatype depending on extension of entry name>;base64,YWJjZGVmZw==`. */
- expect(evt.target.result).toBeDataUrl();
-
- // The atob function it is completely ignored during mobilespec execution, besides the returned object: evt
- // it is encoded and the atob function is aimed to decode a string. Even with btoa (encode) the function it gets stucked
- // because of the Unicode characters that contains the fileData object.
- // Issue reported at JIRA with all the details: CB-7095
-
- // expect(evt.target.result.slice(23)).toBe(atob(fileData));
+// var file1 = 'file1';
+// var srcDir = 'entry.copy.srcDir';
+// var dstDir = 'entry.copy.dstDir';
+// var dstPath = joinURL(root.fullPath, dstDir);
+// var filePath = joinURL(dstPath, file1);
+// // create a new directory entry to kick off it
+// deleteEntry(dstDir, function () {
+// createDirectory(srcDir, function (directory) {
+// // create a file within new directory
+// directory.getFile(file1, {
+// create: true
+// }, function () {
+// directory.copyTo(root, dstDir, function (directory) {
+// expect(directory).toBeDefined();
+// expect(directory.isFile).toBe(false);
+// expect(directory.isDirectory).toBe(true);
+// expect(directory.fullPath).toCanonicallyMatch(dstPath);
+// expect(directory.name).toCanonicallyMatch(dstDir);
+// root.getDirectory(dstDir, {
+// create: false
+// }, function (dirEntry) {
+// expect(dirEntry).toBeDefined();
+// expect(dirEntry.isFile).toBe(false);
+// expect(dirEntry.isDirectory).toBe(true);
+// expect(dirEntry.fullPath).toCanonicallyMatch(dstPath);
+// expect(dirEntry.name).toCanonicallyMatch(dstDir);
+// dirEntry.getFile(file1, {
+// create: false
+// }, function (fileEntry) {
+// expect(fileEntry).toBeDefined();
+// expect(fileEntry.isFile).toBe(true);
+// expect(fileEntry.isDirectory).toBe(false);
+// expect(fileEntry.fullPath).toCanonicallyMatch(filePath);
+// expect(fileEntry.name).toCanonicallyMatch(file1);
+// // cleanup
+// deleteEntry(srcDir, function () {
+// deleteEntry(dstDir, done);
+// });
+// }, failed.bind(null, done, 'dirEntry.getFile - Error getting file : ' + file1));
+// }, failed.bind(null, done, 'root.getDirectory - Error getting copied directory : ' + dstDir));
+// }, failed.bind(null, done, 'directory.copyTo - Error copying directory : ' + srcDir + ' to :' + dstDir));
+// }, failed.bind(null, done, 'directory.getFile - Error creating file : ' + file1));
+// }, failed.bind(null, done, 'createDirectory - Error creating directory : ' + srcDir));
+// }, failed.bind(null, done, 'deleteEntry - Error removing directory : ' + dstDir));
+// });
+// it('file.spec.60 copyTo: directory to backup at same root directory', function (done) {
+// if (isIndexedDBShim) {
+// /* `copyTo` and `moveTo` functions do not support directories (Firefox, IE) */
+// pending();
+// }
- done();
- });
- });
- it('file.spec.86 should read file properly, readAsBinaryString', function (done) {
- if (isIE) {
- /* `readAsBinaryString` function is not supported by IE and has not the stub. */
- pending();
- }
+// var file1 = 'file1';
+// var srcDir = 'entry.copy srcDirSame';
+// var dstDir = 'entry.copy srcDirSame-backup';
+// var dstPath = joinURL(root.fullPath, dstDir);
+// var filePath = joinURL(dstPath, file1);
+// // create a new directory entry to kick off it
+// deleteEntry(dstDir, function () {
+// createDirectory(srcDir, function (directory) {
+// directory.getFile(file1, {
+// create: true
+// }, function () {
+// directory.copyTo(root, dstDir, function (directory) {
+// expect(directory).toBeDefined();
+// expect(directory.isFile).toBe(false);
+// expect(directory.isDirectory).toBe(true);
+// expect(directory.fullPath).toCanonicallyMatch(dstPath);
+// expect(directory.name).toCanonicallyMatch(dstDir);
+// root.getDirectory(dstDir, {
+// create: false
+// }, function (dirEntry) {
+// expect(dirEntry).toBeDefined();
+// expect(dirEntry.isFile).toBe(false);
+// expect(dirEntry.isDirectory).toBe(true);
+// expect(dirEntry.fullPath).toCanonicallyMatch(dstPath);
+// expect(dirEntry.name).toCanonicallyMatch(dstDir);
+// dirEntry.getFile(file1, {
+// create: false
+// }, function (fileEntry) {
+// expect(fileEntry).toBeDefined();
+// expect(fileEntry.isFile).toBe(true);
+// expect(fileEntry.isDirectory).toBe(false);
+// expect(fileEntry.fullPath).toCanonicallyMatch(filePath);
+// expect(fileEntry.name).toCanonicallyMatch(file1);
+// // cleanup
+// deleteEntry(srcDir, function () {
+// deleteEntry(dstDir, done);
+// });
+// }, failed.bind(null, done, 'dirEntry.getFile - Error getting file : ' + file1));
+// }, failed.bind(null, done, 'root.getDirectory - Error getting copied directory : ' + dstDir));
+// }, failed.bind(null, done, 'directory.copyTo - Error copying directory : ' + srcDir + ' to :' + dstDir));
+// }, failed.bind(null, done, 'directory.getFile - Error creating file : ' + file1));
+// }, failed.bind(null, done, 'createDirectory - Error creating directory : ' + srcDir));
+// }, failed.bind(null, done, 'deleteEntry - Error removing directory : ' + dstDir));
+// });
+// it('file.spec.61 copyTo: directory onto itself', function (done) {
+// if (isIndexedDBShim) {
+// /* `copyTo` and `moveTo` functions do not support directories (Firefox, IE) */
+// pending();
+// }
- runReaderTest('readAsBinaryString', true, done, null, function (evt, fileData, fileDataAsBinaryString) {
- expect(evt.target.result).toBe(fileDataAsBinaryString);
- done();
- });
- });
- it('file.spec.87 should read file properly, readAsArrayBuffer', function (done) {
- // Skip test if ArrayBuffers are not supported (e.g.: Android 2.3).
- if (typeof window.ArrayBuffer === 'undefined') {
- expect(true).toFailWithMessage('Platform does not supported this feature');
- done();
- }
- runReaderTest('readAsArrayBuffer', true, done, null, function (evt, fileData, fileDataAsBinaryString) {
- expect(arrayBufferEqualsString(evt.target.result, fileDataAsBinaryString)).toBe(true);
- done();
- });
- });
- it('file.spec.88 should read sliced file: readAsText', function (done) {
- runReaderTest('readAsText', false, done, null, function (evt, fileData, fileDataAsBinaryString) {
- expect(evt.target.result).toBe(fileDataAsBinaryString.slice(10, 40));
- done();
- }, 10, 40);
- });
- it('file.spec.89 should read sliced file: slice past eof', function (done) {
- runReaderTest('readAsText', false, done, null, function (evt, fileData, fileDataAsBinaryString) {
- expect(evt.target.result).toBe(fileData.slice(-5, 9999));
- done();
- }, -5, 9999);
- });
- it('file.spec.90 should read sliced file: slice to eof', function (done) {
- runReaderTest('readAsText', false, done, null, function (evt, fileData, fileDataAsBinaryString) {
- expect(evt.target.result).toBe(fileData.slice(-5));
- done();
- }, -5);
- });
- it('file.spec.91 should read empty slice', function (done) {
- runReaderTest('readAsText', false, done, null, function (evt, fileData, fileDataAsBinaryString) {
- expect(evt.target.result).toBe('');
- done();
- }, 0, 0);
- });
- it('file.spec.92 should read sliced file properly, readAsDataURL', function (done) {
- runReaderTest('readAsDataURL', true, done, null, function (evt, fileData, fileDataAsBinaryString) {
- /* `readAsDataURL` function is supported, but the mediatype in Chrome depends on entry name extension,
- mediatype in IE is always empty (which is the same as `text-plain` according the specification),
- the mediatype in Firefox is always `application/octet-stream`.
- For example, if the content is `abcdefg` then Firefox returns `data:application/octet-stream;base64,YWJjZGVmZw==`,
- IE returns `data:;base64,YWJjZGVmZw==`, Chrome returns `data:<mediatype depending on extension of entry name>;base64,YWJjZGVmZw==`. */
- expect(evt.target.result).toBeDataUrl();
-
- // The atob function it is completely ignored during mobilespec execution, besides the returned object: evt
- // it is encoded and the atob function is aimed to decode a string. Even with btoa (encode) the function it gets stucked
- // because of the Unicode characters that contains the fileData object.
- // Issue reported at JIRA with all the details: CB-7095
-
- // expect(evt.target.result.slice(23)).toBe(atob(fileDataAsBinaryString.slice(10, -3)));
+// var file1 = 'file1';
+// var srcDir = 'entry.copy.dos.srcDir';
+// var srcPath = joinURL(root.fullPath, srcDir);
+// var filePath = joinURL(srcPath, file1);
+// // create a new directory entry to kick off it
+// createDirectory(srcDir, function (directory) {
+// // create a file within new directory
+// directory.getFile(file1, {
+// create: true
+// }, function (fileEntry) {
+// // copy srcDir onto itself
+// directory.copyTo(root, null, succeed.bind(null, done, 'directory.copyTo - Unexpected success callback, it should not copy file: ' + srcDir + ' to a null destination'), function (error) {
+// expect(error).toBeDefined();
+// if (isChrome) {
+// // chrome returns unknown error with code 13
+// } else {
+// expect(error).toBeFileError(FileError.INVALID_MODIFICATION_ERR); // eslint-disable-line no-undef
+// }
+// root.getDirectory(srcDir, {
+// create: false
+// }, function (dirEntry) {
+// expect(dirEntry).toBeDefined();
+// expect(dirEntry.fullPath).toCanonicallyMatch(srcPath);
+// dirEntry.getFile(file1, {
+// create: false
+// }, function (fileEntry) {
+// expect(fileEntry).toBeDefined();
+// expect(fileEntry.fullPath).toCanonicallyMatch(filePath);
+// // cleanup
+// deleteEntry(srcDir, done);
+// }, failed.bind(null, done, 'dirEntry.getFile - Error getting file : ' + file1));
+// }, failed.bind(null, done, 'root.getDirectory - Error getting directory : ' + srcDir));
+// });
+// }, failed.bind(null, done, 'directory.getFile - Error creating file : ' + file1));
+// }, failed.bind(null, done, 'createDirectory - Error creating directory : ' + srcDir));
+// });
+// it('file.spec.62 copyTo: directory into itself', function (done) {
+// if (isIndexedDBShim) {
+// /* `copyTo` and `moveTo` functions do not support directories (Firefox, IE) */
+// pending();
+// }
- done();
- }, 10, -3);
- });
- it('file.spec.93 should read sliced file properly, readAsBinaryString', function (done) {
- if (isIE) {
- /* `readAsBinaryString` function is not supported by IE and has not the stub. */
- pending();
- }
+// var srcDir = 'entry.copy.dis.srcDir';
+// var dstDir = 'entry.copy.dis.dstDir';
+// var srcPath = joinURL(root.fullPath, srcDir);
+// // create a new directory entry to kick off it
+// createDirectory(srcDir, function (directory) {
+// // copy source directory into itself
+// directory.copyTo(directory, dstDir, succeed.bind(null, done, 'directory.copyTo - Unexpected success callback, it should not copy a directory ' + srcDir + ' into itself'), function (error) {
+// expect(error).toBeDefined();
+// if (isChrome) {
+// // chrome returns unknown error with code 13
+// } else {
+// expect(error).toBeFileError(FileError.INVALID_MODIFICATION_ERR); // eslint-disable-line no-undef
+// }
+// root.getDirectory(srcDir, {
+// create: false
+// }, function (dirEntry) {
+// // returning confirms existence so just check fullPath entry
+// expect(dirEntry).toBeDefined();
+// expect(dirEntry.fullPath).toCanonicallyMatch(srcPath);
+// // cleanup
+// deleteEntry(srcDir, done);
+// }, failed.bind(null, done, 'root.getDirectory - Error getting directory : ' + srcDir));
+// });
+// }, failed.bind(null, done, 'createDirectory - Error creating directory : ' + srcDir));
+// });
+// it('file.spec.63 copyTo: directory that does not exist', function (done) {
+// var file1 = 'entry.copy.dnf.file1';
+// var dirName = 'dir-foo';
+// createFile(file1, function (fileEntry) {
+// createDirectory(dirName, function (dirEntry) {
+// dirEntry.remove(function () {
+// fileEntry.copyTo(dirEntry, null, succeed.bind(null, done, 'fileEntry.copyTo - Unexpected success callback, it should not copy a file ' + file1 + ' into a removed directory'), function (error) {
+// expect(error).toBeDefined();
+// if (isChrome) {
+// expect(error).toBeFileError(FileError.SYNTAX_ERR); // eslint-disable-line no-undef
+// } else {
+// expect(error).toBeFileError(FileError.NOT_FOUND_ERR); // eslint-disable-line no-undef
+// }
+// done();
+// });
+// }, failed.bind(null, done, 'dirEntry.remove - Error removing directory : ' + dirName));
+// }, failed.bind(null, done, 'createDirectory - Error creating directory : ' + dirName));
+// }, failed.bind(null, done, 'createFile - Error creating file : ' + file1));
+// });
+// it('file.spec.64 copyTo: invalid target name', function (done) {
+// if (isBrowser) {
+// /* The plugin does not follow ["8.3 Naming restrictions"]
+// (http://www.w3.org/TR/2011/WD-file-system-api-20110419/#naming-restrictions */
+// pending();
+// }
- runReaderTest('readAsBinaryString', true, done, null, function (evt, fileData, fileDataAsBinaryString) {
- expect(evt.target.result).toBe(fileDataAsBinaryString.slice(-10, -5));
- done();
- }, -10, -5);
- });
- it('file.spec.94 should read sliced file properly, readAsArrayBuffer', function (done) {
- // Skip test if ArrayBuffers are not supported (e.g.: Android 2.3).
- if (typeof window.ArrayBuffer === 'undefined') {
- expect(true).toFailWithMessage('Platform does not supported this feature');
- done();
- }
- runReaderTest('readAsArrayBuffer', true, done, null, function (evt, fileData, fileDataAsBinaryString) {
- expect(arrayBufferEqualsString(evt.target.result, fileDataAsBinaryString.slice(0, -1))).toBe(true);
- done();
- }, 0, -1);
- });
- it('file.spec.94.5 should read large file in multiple chunks, readAsArrayBuffer', function (done) {
- // Skip test if ArrayBuffers are not supported (e.g.: Android 2.3).
- if (typeof window.ArrayBuffer === 'undefined') {
- expect(true).toFailWithMessage('Platform does not supported this feature');
- done();
- }
+// var file1 = 'entry.copy.itn.file1';
+// var file2 = 'bad:file:name';
+// // create a new file entry
+// createFile(file1, function (entry) {
+// // copy file1 to file2
+// entry.copyTo(root, file2, succeed.bind(null, done, 'entry.copyTo - Unexpected success callback, it should not copy a file ' + file1 + ' to an invalid file name: ' + file2), function (error) {
+// expect(error).toBeDefined();
+// expect(error).toBeFileError(FileError.ENCODING_ERR); // eslint-disable-line no-undef
+// // cleanup
+// deleteEntry(file1, done);
+// });
+// }, failed.bind(null, done, 'createFile - Error creating file : ' + file1));
+// });
+// it('file.spec.65 moveTo: file to same parent', function (done) {
+// var file1 = 'entry.move.fsp.file1';
+// var file2 = 'entry.move.fsp.file2';
+// var dstPath = joinURL(root.fullPath, file2);
+// // create a new file entry to kick off it
+// createFile(file1, function (entry) {
+// // move file1 to file2
+// entry.moveTo(root, file2, function (entry) {
+// expect(entry).toBeDefined();
+// expect(entry.isFile).toBe(true);
+// expect(entry.isDirectory).toBe(false);
+// expect(entry.fullPath).toCanonicallyMatch(dstPath);
+// expect(entry.name).toCanonicallyMatch(file2);
+// root.getFile(file2, {
+// create: false
+// }, function (fileEntry) {
+// expect(fileEntry).toBeDefined();
+// expect(fileEntry.fullPath).toCanonicallyMatch(dstPath);
+// root.getFile(file1, {
+// create: false
+// }, succeed.bind(null, done, 'root.getFile - Unexpected success callback, it should not get invalid or moved file: ' + file1), function (error) {
+// // expect(navigator.fileMgr.testFileExists(srcPath) === false, "original file should not exist.");
+// expect(error).toBeDefined();
+// if (isChrome) {
+// expect(error).toBeFileError(FileError.SYNTAX_ERR); // eslint-disable-line no-undef
+// } else {
+// expect(error).toBeFileError(FileError.NOT_FOUND_ERR); // eslint-disable-line no-undef
+// }
+// // cleanup
+// deleteEntry(file1, function () {
+// deleteEntry(file2, done);
+// });
+// });
+// }, failed.bind(null, done, 'root.getFile - Error getting file : ' + file2));
+// }, failed.bind(null, done, 'entry.moveTo - Error moving file : ' + file1 + ' to root as: ' + file2));
+// }, failed.bind(null, done, 'createFile - Error creating file : ' + file1));
+// });
+// it('file.spec.66 moveTo: file to new parent', function (done) {
+// var file1 = 'entry.move.fnp.file1';
+// var dir = 'entry.move.fnp.dir';
+// var dstPath = joinURL(joinURL(root.fullPath, dir), file1);
+// // ensure destination directory is cleaned up first
+// deleteEntry(dir, function () {
+// // create a new file entry to kick off it
+// createFile(file1, function (entry) {
+// // create a parent directory to move file to
+// root.getDirectory(dir, {
+// create: true
+// }, function (directory) {
+// // move file1 to new directory
+// // move the file
+// entry.moveTo(directory, null, function (entry) {
+// expect(entry).toBeDefined();
+// expect(entry.isFile).toBe(true);
+// expect(entry.isDirectory).toBe(false);
+// expect(entry.fullPath).toCanonicallyMatch(dstPath);
+// expect(entry.name).toCanonicallyMatch(file1);
+// // test the moved file exists
+// directory.getFile(file1, {
+// create: false
+// }, function (fileEntry) {
+// expect(fileEntry).toBeDefined();
+// expect(fileEntry.fullPath).toCanonicallyMatch(dstPath);
+// root.getFile(file1, {
+// create: false
+// }, succeed.bind(null, done, 'root.getFile - Unexpected success callback, it should not get invalid or moved file: ' + file1), function (error) {
+// expect(error).toBeDefined();
+// if (isChrome) {
+// expect(error).toBeFileError(FileError.SYNTAX_ERR); // eslint-disable-line no-undef
+// } else {
+// expect(error).toBeFileError(FileError.NOT_FOUND_ERR); // eslint-disable-line no-undef
+// }
+// // cleanup
+// deleteEntry(file1, function () {
+// deleteEntry(dir, done);
+// });
+// });
+// }, failed.bind(null, done, 'directory.getFile - Error getting file : ' + file1 + ' from: ' + dir));
+// }, failed.bind(null, done, 'entry.moveTo - Error moving file : ' + file1 + ' to: ' + dir + ' with the same name'));
+// }, failed.bind(null, done, 'root.getDirectory - Error creating directory : ' + dir));
+// }, failed.bind(null, done, 'createFile - Error creating file : ' + file1));
+// }, failed.bind(null, done, 'deleteEntry - Error removing directory : ' + dir));
+// });
+// it('file.spec.67 moveTo: directory to same parent', function (done) {
+// if (isIndexedDBShim) {
+// /* `copyTo` and `moveTo` functions do not support directories (Firefox, IE) */
+// pending();
+// }
- var largeText = '';
- for (var i = 0; i < 1000; i++) {
- largeText += 'Test ' + i + '\n';
- }
+// var file1 = 'file1';
+// var srcDir = 'entry.move.dsp.srcDir';
+// var dstDir = 'entry.move.dsp.dstDir';
+// var dstPath = joinURL(root.fullPath, dstDir);
+// var filePath = joinURL(dstPath, file1);
+// // ensure destination directory is cleaned up before it
+// deleteEntry(dstDir, function () {
+// // create a new directory entry to kick off it
+// createDirectory(srcDir, function (directory) {
+// // create a file within directory
+// directory.getFile(file1, {
+// create: true
+// }, function () {
+// // move srcDir to dstDir
+// directory.moveTo(root, dstDir, function (directory) {
+// expect(directory).toBeDefined();
+// expect(directory.isFile).toBe(false);
+// expect(directory.isDirectory).toBe(true);
+// expect(directory.fullPath).toCanonicallyMatch(dstPath);
+// expect(directory.name).toCanonicallyMatch(dstDir);
+// // test that moved file exists in destination dir
+// directory.getFile(file1, {
+// create: false
+// }, function (fileEntry) {
+// expect(fileEntry).toBeDefined();
+// expect(fileEntry.fullPath).toCanonicallyMatch(filePath);
+// // check that the moved file no longer exists in original dir
+// root.getFile(file1, {
+// create: false
+// }, succeed.bind(null, done, 'directory.getFile - Unexpected success callback, it should not get invalid or moved file: ' + file1), function (error) {
+// expect(error).toBeDefined();
+// if (isChrome) {
+// expect(error).toBeFileError(FileError.SYNTAX_ERR); // eslint-disable-line no-undef
+// } else {
+// expect(error).toBeFileError(FileError.NOT_FOUND_ERR); // eslint-disable-line no-undef
+// }
+// // cleanup
+// deleteEntry(srcDir, function () {
+// deleteEntry(dstDir, done);
+// });
+// });
+// }, failed.bind(null, done, 'directory.getFile - Error getting file : ' + file1 + ' from: ' + srcDir));
+// }, failed.bind(null, done, 'entry.moveTo - Error moving directory : ' + srcDir + ' to root as: ' + dstDir));
+// }, failed.bind(null, done, 'directory.getFile - Error creating file : ' + file1));
+// }, failed.bind(null, done, 'createDirectory - Error creating directory : ' + srcDir));
+// }, failed.bind(null, done, 'deleteEntry - Error removing directory : ' + dstDir));
+// });
+// it('file.spec.68 moveTo: directory to same parent with same name', function (done) {
+// if (isIndexedDBShim) {
+// /* `copyTo` and `moveTo` functions do not support directories (Firefox, IE) */
+// pending();
+// }
- // Set the chunk size so that the read will take 5 chunks
- FileReader.READ_CHUNK_SIZE = Math.floor(largeText.length / 4) + 1; // eslint-disable-line no-undef
+// var file1 = 'file1';
+// var srcDir = 'entry.move.dsp.srcDir';
+// var dstDir = 'entry.move.dsp.srcDir-backup';
+// var dstPath = joinURL(root.fullPath, dstDir);
+// var filePath = joinURL(dstPath, file1);
+// // ensure destination directory is cleaned up before it
+// deleteEntry(dstDir, function () {
+// // create a new directory entry to kick off it
+// createDirectory(srcDir, function (directory) {
+// // create a file within directory
+// directory.getFile(file1, {
+// create: true
+// }, function () {
+// // move srcDir to dstDir
+// directory.moveTo(root, dstDir, function (directory) {
+// expect(directory).toBeDefined();
+// expect(directory.isFile).toBe(false);
+// expect(directory.isDirectory).toBe(true);
+// expect(directory.fullPath).toCanonicallyMatch(dstPath);
+// expect(directory.name).toCanonicallyMatch(dstDir);
+// // check that moved file exists in destination dir
+// directory.getFile(file1, {
+// create: false
+// }, function (fileEntry) {
+// expect(fileEntry).toBeDefined();
+// expect(fileEntry.fullPath).toCanonicallyMatch(filePath);
+// // check that the moved file no longer exists in original dir
+// root.getFile(file1, {
+// create: false
+// }, succeed.bind(null, done, 'directory.getFile - Unexpected success callback, it should not get invalid or moved file: ' + file1), function (error) {
+// expect(error).toBeDefined();
+// if (isChrome) {
+// expect(error).toBeFileError(FileError.SYNTAX_ERR); // eslint-disable-line no-undef
+// } else {
+// expect(error).toBeFileError(FileError.NOT_FOUND_ERR); // eslint-disable-line no-undef
+// }
+// // cleanup
+// deleteEntry(srcDir, function () {
+// deleteEntry(dstDir, done);
+// });
+// });
+// }, failed.bind(null, done, 'directory.getFile - Error getting file : ' + file1 + ' from: ' + srcDir));
+// }, failed.bind(null, done, 'entry.moveTo - Error moving directory : ' + srcDir + ' to root as: ' + dstDir));
+// }, failed.bind(null, done, 'directory.getFile - Error creating file : ' + file1));
+// }, failed.bind(null, done, 'createDirectory - Error creating directory : ' + srcDir));
+// }, failed.bind(null, done, 'deleteEntry - Error removing directory : ' + dstDir));
+// });
+// it('file.spec.69 moveTo: directory to new parent', function (done) {
+// if (isIndexedDBShim) {
+// /* `copyTo` and `moveTo` functions do not support directories (Firefox, IE) */
+// pending();
+// }
- var chunkCount = 0;
- var lastProgressValue = -1;
- var progressFunc = function (evt) {
- expect(evt.loaded).toBeDefined();
- expect(evt.total).toBeDefined();
+// var file1 = 'file1';
+// var srcDir = 'entry.move.dnp.srcDir';
+// var dstDir = 'entry.move.dnp.dstDir';
+// var dstPath = joinURL(root.fullPath, dstDir);
+// var filePath = joinURL(dstPath, file1);
+// // ensure destination directory is cleaned up before it
+// deleteEntry(dstDir, function () {
+// // create a new directory entry to kick off it
+// createDirectory(srcDir, function (directory) {
+// // create a file within directory
+// directory.getFile(file1, {
+// create: true
+// }, function () {
+// // move srcDir to dstDir
+// directory.moveTo(root, dstDir, function (dirEntry) {
+// expect(dirEntry).toBeDefined();
+// expect(dirEntry.isFile).toBe(false);
+// expect(dirEntry.isDirectory).toBe(true);
+// expect(dirEntry.fullPath).toCanonicallyMatch(dstPath);
+// expect(dirEntry.name).toCanonicallyMatch(dstDir);
+// // test that moved file exists in destination dir
+// dirEntry.getFile(file1, {
+// create: false
+// }, function (fileEntry) {
+// expect(fileEntry).toBeDefined();
+// expect(fileEntry.fullPath).toCanonicallyMatch(filePath);
+// // test that the moved file no longer exists in original dir
+// root.getFile(file1, {
+// create: false
+// }, succeed.bind(null, done, 'root.getFile - Unexpected success callback, it should not get invalid or moved file: ' + file1), function (error) {
+// expect(error).toBeDefined();
+// if (isChrome) {
+// expect(error).toBeFileError(FileError.SYNTAX_ERR); // eslint-disable-line no-undef
+// } else {
+// expect(error).toBeFileError(FileError.NOT_FOUND_ERR); // eslint-disable-line no-undef
+// }
+// // cleanup
+// deleteEntry(srcDir, function () {
+// deleteEntry(dstDir, done);
+// });
+// });
+// }, failed.bind(null, done, 'directory.getFile - Error getting file : ' + file1 + ' from: ' + dstDir));
+// }, failed.bind(null, done, 'directory.moveTo - Error moving directory : ' + srcDir + ' to root as: ' + dstDir));
+// }, failed.bind(null, done, 'directory.getFile - Error creating file : ' + file1));
+// }, failed.bind(null, done, 'createDirectory - Error creating directory : ' + srcDir));
+// }, failed.bind(null, done, 'deleteEntry - Error removing directory : ' + dstDir));
+// });
- expect(evt.total >= largeText.length).toBe(true);
- expect(evt.total <= largeText.length + 5).toBe(true);
- expect(evt.loaded > lastProgressValue).toBe(true);
- expect(evt.loaded <= evt.total).toBe(true);
+// it('file.spec.131 moveTo: directories tree to new parent', function (done) {
+// if (isIndexedDBShim) {
+// /* `copyTo` and `moveTo` functions do not support directories (Firefox, IE) */
+// pending();
+// }
- lastProgressValue = evt.loaded;
- chunkCount++;
- };
+// var srcDir = 'entry.move.dnp.srcDir';
+// var srcDirNestedFirst = 'entry.move.dnp.srcDir.Nested1';
+// var srcDirNestedSecond = 'entry.move.dnp.srcDir.Nested2';
+// var dstDir = 'entry.move.dnp.dstDir';
- runReaderTest(
- 'readAsArrayBuffer', true, done, progressFunc,
- function (evt, fileData, fileDataAsBinaryString) {
- expect(arrayBufferEqualsString(evt.target.result, fileDataAsBinaryString.slice(0, -1))).toBe(true);
- expect(lastProgressValue >= largeText.length).toBe(true);
- expect(lastProgressValue <= largeText.length + 5).toBe(true);
- if (!isChrome) {
- // chrome downloads it in one chunk -.-
- expect(chunkCount).toBe(5);
- }
- done();
- },
- 0, -1, largeText);
- });
- it('file.spec.94.6 should read large file in multiple chunks, readAsDataURL', function (done) {
- var largeText = '';
- for (var i = 0; i < 10; i++) {
- largeText += 'Test ' + i + '\n';
- }
+// createDirectory(dstDir, function (dstDirectory) {
+// createDirectory(srcDir, function (srcDirectory) {
+// srcDirectory.getDirectory(srcDirNestedFirst, { create: true }, function () {
+// srcDirectory.getDirectory(srcDirNestedSecond, { create: true }, function () {
+// srcDirectory.moveTo(dstDirectory, srcDir, function successMove (transferredDirectory) {
+// var directoryReader = transferredDirectory.createReader();
+// directoryReader.readEntries(function successRead (entries) {
+// expect(entries.length).toBe(2);
+// if (!isChrome) {
+// expect(entries[0].name).toBe(srcDirNestedFirst);
+// expect(entries[1].name).toBe(srcDirNestedSecond);
+// }
+// deleteEntry(dstDir, done);
+// }, failed.bind(null, done, 'Error getting entries from: ' + transferredDirectory));
+// }, failed.bind(null, done, 'directory.moveTo - Error moving directory : ' + srcDir + ' to root as: ' + dstDir));
+// }, failed.bind(null, done, 'directory.getDirectory - Error creating directory : ' + srcDirNestedSecond));
+// }, failed.bind(null, done, 'directory.getDirectory - Error creating directory : ' + srcDirNestedFirst));
+// }, failed.bind(null, done, 'createDirectory - Error creating source directory : ' + srcDir));
+// }, failed.bind(null, done, 'createDirectory - Error creating dest directory : ' + dstDir));
+// });
- // Set the chunk size so that the read will take 5 chunks
- FileReader.READ_CHUNK_SIZE = Math.floor(largeText.length / 4) + 1; // eslint-disable-line no-undef
+// it('file.spec.70 moveTo: directory onto itself', function (done) {
+// if (isIndexedDBShim) {
+// /* `copyTo` and `moveTo` functions do not support directories (Firefox, IE) */
+// pending();
+// }
- var lastProgressValue = 0;
- var progressFunc = function (evt) {
- expect(evt.total).toBeDefined();
- expect(evt.total).toEqual(largeText.length);
+// var file1 = 'file1';
+// var srcDir = 'entry.move.dos.srcDir';
+// var srcPath = joinURL(root.fullPath, srcDir);
+// var filePath = joinURL(srcPath, file1);
+// // create a new directory entry to kick off it
+// createDirectory(srcDir, function (directory) {
+// // create a file within new directory
+// directory.getFile(file1, {
+// create: true
+// }, function () {
+// // move srcDir onto itself
+// directory.moveTo(root, null, succeed.bind(null, done, 'directory.moveTo - Unexpected success callback, it should not move directory to invalid path'), function (error) {
+// expect(error).toBeDefined();
+// if (isChrome) {
+// // chrome returns unknown error with code 13
+// } else {
+// expect(error).toBeFileError(FileError.INVALID_MODIFICATION_ERR); // eslint-disable-line no-undef
+// }
+// // test that original dir still exists
+// root.getDirectory(srcDir, {
+// create: false
+// }, function (dirEntry) {
+// // returning confirms existence so just check fullPath entry
+// expect(dirEntry).toBeDefined();
+// expect(dirEntry.fullPath).toCanonicallyMatch(srcPath);
+// dirEntry.getFile(file1, {
+// create: false
+// }, function (fileEntry) {
+// expect(fileEntry).toBeDefined();
+// expect(fileEntry.fullPath).toCanonicallyMatch(filePath);
+// // cleanup
+// deleteEntry(srcDir, done);
+// }, failed.bind(null, done, 'dirEntry.getFile - Error getting file : ' + file1 + ' from: ' + srcDir));
+// }, failed.bind(null, done, 'root.getDirectory - Error getting directory : ' + srcDir));
+// });
+// }, failed.bind(null, done, 'directory.getFile - Error creating file : ' + file1));
+// }, failed.bind(null, done, 'createDirectory - Error creating directory : ' + srcDir));
+// });
+// it('file.spec.71 moveTo: directory into itself', function (done) {
+// if (isIndexedDBShim) {
+// /* `copyTo` and `moveTo` functions do not support directories (Firefox, IE) */
+// pending();
+// }
- expect(evt.loaded).toBeDefined();
- expect(evt.loaded).toBeGreaterThan(lastProgressValue);
- expect(evt.loaded).toBeLessThan(evt.total + 1);
+// var srcDir = 'entry.move.dis.srcDir';
+// var dstDir = 'entry.move.dis.dstDir';
+// var srcPath = joinURL(root.fullPath, srcDir);
+// // create a new directory entry to kick off it
+// createDirectory(srcDir, function (directory) {
+// // move source directory into itself
+// directory.moveTo(directory, dstDir, succeed.bind(null, done, 'directory.moveTo - Unexpected success callback, it should not move a directory into itself: ' + srcDir), function (error) {
+// expect(error).toBeDefined();
+// if (isChrome) {
+// // chrome returns unknown error with code 13
+// } else {
+// expect(error).toBeFileError(FileError.INVALID_MODIFICATION_ERR); // eslint-disable-line no-undef
+// }
+// // make sure original directory still exists
+// root.getDirectory(srcDir, {
+// create: false
+// }, function (entry) {
+// expect(entry).toBeDefined();
+// expect(entry.fullPath).toCanonicallyMatch(srcPath);
+// // cleanup
+// deleteEntry(srcDir, done);
+// }, failed.bind(null, done, 'root.getDirectory - Error getting directory, making sure that original directory still exists: ' + srcDir));
+// });
+// }, failed.bind(null, done, 'createDirectory - Error creating directory : ' + srcDir));
+// });
+// it('file.spec.130 moveTo: directory into similar directory', function (done) {
+// if (isIndexedDBShim) {
+// /* `copyTo` and `moveTo` functions do not support directories (Firefox, IE) */
+// pending();
+// }
- lastProgressValue = evt.loaded;
- };
+// var srcDir = 'entry.move.dis.srcDir';
+// var dstDir = 'entry.move.dis.srcDir-backup';
+// // create a new directory entry to kick off it
+// createDirectory(srcDir, function (srcDirEntry) {
+// deleteEntry(dstDir, function () {
+// createDirectory(dstDir, function (dstDirEntry) {
+// // move source directory into itself
+// srcDirEntry.moveTo(dstDirEntry, 'file', function (newDirEntry) {
+// expect(newDirEntry).toBeDefined();
+// deleteEntry(dstDir, done);
+// }, failed.bind(null, done, 'directory.moveTo - Error moving a directory into a similarly-named directory: ' + srcDir));
+// }, failed.bind(null, done, 'createDirectory - Error creating directory : ' + dstDir));
+// }, failed.bind(null, done, 'deleteEntry - Error deleting directory : ' + dstDir));
+// }, failed.bind(null, done, 'createDirectory - Error creating directory : ' + srcDir));
+// });
+// it('file.spec.72 moveTo: file onto itself', function (done) {
+// var file1 = 'entry.move.fos.file1';
+// var filePath = joinURL(root.fullPath, file1);
+// // create a new file entry to kick off it
+// createFile(file1, function (entry) {
+// // move file1 onto itself
+// entry.moveTo(root, null, succeed.bind(null, done, 'entry.moveTo - Unexpected success callback, it should not move a file: ' + file1 + ' into the same parent'), function (error) {
+// expect(error).toBeDefined();
+// if (isChrome) {
+// // chrome returns unknown error with code 13
+// } else {
+// expect(error).toBeFileError(FileError.INVALID_MODIFICATION_ERR); // eslint-disable-line no-undef
+// }
+// // test that original file still exists
+// root.getFile(file1, {
+// create: false
+// }, function (fileEntry) {
+// expect(fileEntry).toBeDefined();
+// expect(fileEntry.fullPath).toCanonicallyMatch(filePath);
+// // cleanup
+// deleteEntry(file1, done);
+// }, failed.bind(null, done, 'root.getFile - Error getting file, making sure that original file still exists: ' + file1));
+// });
+// }, failed.bind(null, done, 'createFile - Error creating file : ' + file1));
+// });
+// it('file.spec.73 moveTo: file onto existing directory', function (done) {
+// var file1 = 'entry.move.fod.file1';
+// var dstDir = 'entry.move.fod.dstDir';
+// var subDir = 'subDir';
+// var dirPath = joinURL(joinURL(root.fullPath, dstDir), subDir);
+// var filePath = joinURL(root.fullPath, file1);
+// // ensure destination directory is cleaned up before it
+// deleteEntry(dstDir, function () {
+// // create a new file entry to kick off it
+// createFile(file1, function (entry) {
+// // create top level directory
+// root.getDirectory(dstDir, {
+// create: true
+// }, function (directory) {
+// // create sub-directory
+// directory.getDirectory(subDir, {
+// create: true
+// }, function (subDirectory) {
+// // move file1 onto sub-directory
+// entry.moveTo(directory, subDir, succeed.bind(null, done, 'entry.moveTo - Unexpected success callback, it should not move a file: ' + file1 + ' into directory: ' + dstDir + '\n' + subDir + ' directory already exists'), function (error) {
+// expect(error).toBeDefined();
+// if (isChrome) {
+// // chrome returns unknown error with code 13
+// } else {
+// expect(error).toBeFileError(FileError.INVALID_MODIFICATION_ERR); // eslint-disable-line no-undef
+// }
+// // check that original dir still exists
+// directory.getDirectory(subDir, {
+// create: false
+// }, function (dirEntry) {
+// expect(dirEntry).toBeDefined();
+// expect(dirEntry.fullPath).toCanonicallyMatch(dirPath);
+// // check that original file still exists
+// root.getFile(file1, {
+// create: false
+// }, function (fileEntry) {
+// expect(fileEntry).toBeDefined();
+// expect(fileEntry.fullPath).toCanonicallyMatch(filePath);
+// // cleanup
+// deleteEntry(file1, function () {
+// deleteEntry(dstDir, done);
+// });
+// }, failed.bind(null, done, 'root.getFile - Error getting file, making sure that original file still exists: ' + file1));
+// }, failed.bind(null, done, 'directory.getDirectory - Error getting directory, making sure that original directory still exists: ' + subDir));
+// });
+// }, failed.bind(null, done, 'directory.getDirectory - Error creating directory : ' + subDir));
+// }, failed.bind(null, done, 'root.getDirectory - Error creating directory : ' + dstDir));
+// }, failed.bind(null, done, 'createFile - Error creating file : ' + file1));
+// }, failed.bind(null, done, 'deleteEntry - Error removing directory : ' + dstDir));
+// });
+// it('file.spec.74 moveTo: directory onto existing file', function (done) {
+// if (isIndexedDBShim) {
+// /* `copyTo` and `moveTo` functions do not support directories (Firefox, IE) */
+// pending();
+// }
- runReaderTest('readAsDataURL', false, done, progressFunc,
- function (evt, fileData, fileDataAsBinaryString) {
- expect(function () {
- // Cut off data uri prefix
- var base64Data = evt.target.result.substring(evt.target.result.indexOf(',') + 1);
- expect(window.atob(base64Data)).toEqual(fileData);
- }).not.toThrow();
+// var file1 = 'entry.move.dof.file1';
+// var srcDir = 'entry.move.dof.srcDir';
+// var dirPath = joinURL(root.fullPath, srcDir);
+// var filePath = joinURL(root.fullPath, file1);
+// // create a new directory entry to kick off it
+// createDirectory(srcDir, function (entry) {
+// // create file
+// root.getFile(file1, {
+// create: true
+// }, function (fileEntry) {
+// // move directory onto file
+// entry.moveTo(root, file1, succeed.bind(null, done, 'entry.moveTo - Unexpected success callback, it should not move : \n' + srcDir + ' into root directory renamed as ' + file1 + '\n' + file1 + ' file already exists'), function (error) {
+// expect(error).toBeDefined();
+// if (isChrome) {
+// // chrome returns unknown error with code 13
+// } else {
+// expect(error).toBeFileError(FileError.INVALID_MODIFICATION_ERR); // eslint-disable-line no-undef
+// }
+// // test that original directory exists
+// root.getDirectory(srcDir, {
+// create: false
+// }, function (dirEntry) {
+// // returning confirms existence so just check fullPath entry
+// expect(dirEntry).toBeDefined();
+// expect(dirEntry.fullPath).toCanonicallyMatch(dirPath);
+// // test that original file exists
+// root.getFile(file1, {
+// create: false
+// }, function (fileEntry) {
+// expect(fileEntry).toBeDefined();
+// expect(fileEntry.fullPath).toCanonicallyMatch(filePath);
+// // cleanup
+// deleteEntry(file1, function () {
+// deleteEntry(srcDir, done);
+// });
+// }, failed.bind(null, done, 'root.getFile - Error getting file, making sure that original file still exists: ' + file1));
+// }, failed.bind(null, done, 'directory.getDirectory - Error getting directory, making sure that original directory still exists: ' + srcDir));
+// });
+// }, failed.bind(null, done, 'root.getFile - Error creating file : ' + file1));
+// }, failed.bind(null, done, 'createDirectory - Error creating directory : ' + srcDir));
+// });
+// it('file.spec.75 copyTo: directory onto existing file', function (done) {
+// if (isIndexedDBShim) {
+// /* `copyTo` and `moveTo` functions do not support directories (Firefox, IE) */
+// pending();
+// }
- expect(lastProgressValue).toEqual(largeText.length);
- done();
- },
- undefined, undefined, largeText);
- });
- });
- // Read method
- describe('FileWriter', function () {
- it('file.spec.95 should have correct methods', function (done) {
- // retrieve a FileWriter object
- var fileName = 'writer.methods';
- // FileWriter
- root.getFile(fileName, {
- create: true
- }, function (fileEntry) {
- fileEntry.createWriter(function (writer) {
- expect(writer).toBeDefined();
- expect(typeof writer.write).toBe('function');
- expect(typeof writer.seek).toBe('function');
- expect(typeof writer.truncate).toBe('function');
- expect(typeof writer.abort).toBe('function');
- // cleanup
- deleteFile(fileName, done);
- }, failed.bind(null, done, 'fileEntry.createWriter - Error creating writer using fileEntry: ' + fileEntry.name));
- }, failed.bind(null, done, 'root.getFile - Error creating file: ' + fileName));
- });
- it('file.spec.96 should be able to write and append to file, createWriter', function (done) {
- var fileName = 'writer.append.createWriter'; // file content
- var content = 'There is an exception to every rule.'; // for checkin file length
- var exception = ' Except this one.';
- var length = content.length;
- // create file, then write and append to it
- createFile(fileName, function (fileEntry) {
- // writes initial file content
- fileEntry.createWriter(function (writer) {
- // Verifiers declaration
- function verifier (evt) {
- expect(writer.length).toBe(length);
- expect(writer.position).toBe(length);
- // Append some more data
- writer.onwriteend = secondVerifier;
- length += exception.length;
- writer.seek(writer.length);
- writer.write(exception);
- }
- function secondVerifier (evt) {
- expect(writer.length).toBe(length);
- expect(writer.position).toBe(length);
- var reader = new FileReader(); // eslint-disable-line no-undef
- reader.onloadend = thirdVerifier;
- reader.onerror = failed.bind(null, done, 'reader.onerror - Error reading file: ' + fileName);
- fileEntry.file(function (f) { reader.readAsText(f); });
- }
- function thirdVerifier (evt) {
- expect(evt.target.result).toBe(content + exception);
- // cleanup
- deleteFile(fileName, done);
- }
-
- // Write process
- writer.onwriteend = verifier;
- writer.write(content);
- }, failed.bind(null, done, 'fileEntry.createWriter - Error creating writer using fileEntry: ' + fileEntry.name));
- }, failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
- });
- it('file.spec.97 should be able to write and append to file, File object', function (done) {
- var fileName = 'writer.append.File'; // file content
- var content = 'There is an exception to every rule.'; // for checkin file length
- var exception = ' Except this one.';
- var length = content.length;
- root.getFile(fileName, {
- create: true
- }, function (fileEntry) {
- fileEntry.createWriter(function (writer) {
- // Verifiers declaration
- function verifier () {
- expect(writer.length).toBe(length);
- expect(writer.position).toBe(length);
- // Append some more data
- writer.onwriteend = secondVerifier;
- length += exception.length;
- writer.seek(writer.length);
- writer.write(exception);
- }
- function secondVerifier () {
- expect(writer.length).toBe(length);
- expect(writer.position).toBe(length);
- var reader = new FileReader(); // eslint-disable-line no-undef
- reader.onloadend = thirdVerifier;
- reader.onerror = failed.bind(null, done, 'reader.onerror - Error reading file: ' + fileName);
- fileEntry.file(function (f) { reader.readAsText(f); });
- }
- function thirdVerifier (evt) {
- expect(evt.target.result).toBe(content + exception);
- // cleanup
- deleteFile(fileName, done);
- }
-
- // Write process
- writer.onwriteend = verifier;
- writer.write(content);
- }, failed.bind(null, done, 'fileEntry.createWriter - Error creating writer using fileEntry: ' + fileEntry.name));
- }, failed.bind(null, done, 'root.getFile - Error creating file: ' + fileName));
- });
- it('file.spec.98 should be able to seek to the middle of the file and write more data than file.length', function (done) {
- var fileName = 'writer.seek.write'; // file content
- var content = 'This is our sentence.'; // for checking file length
- var exception = 'newer sentence.';
- var length = content.length;
- // create file, then write and append to it
- createFile(fileName, function (fileEntry) {
- fileEntry.createWriter(function (writer) {
- // Verifiers declaration
- function verifier (evt) {
- expect(writer.length).toBe(length);
- expect(writer.position).toBe(length);
- // Append some more data
- writer.onwriteend = secondVerifier;
- length = 12 + exception.length;
- writer.seek(12);
- writer.write(exception);
- }
- function secondVerifier (evt) {
- expect(writer.length).toBe(length);
- expect(writer.position).toBe(length);
- var reader = new FileReader(); // eslint-disable-line no-undef
- reader.onloadend = thirdVerifier;
- reader.onerror = failed.bind(null, done, 'reader.onerror - Error reading file: ' + fileName);
- fileEntry.file(function (f) { reader.readAsText(f); });
- }
- function thirdVerifier (evt) {
- expect(evt.target.result).toBe(content.substr(0, 12) + exception);
- // cleanup
- deleteFile(fileName, done);
- }
-
- // Write process
- writer.onwriteend = verifier;
- writer.write(content);
- }, failed.bind(null, done, 'fileEntry.createWriter - Error creating writer using fileEntry: ' + fileEntry.name));
- }, failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
- });
- it('file.spec.99 should be able to seek to the middle of the file and write less data than file.length', function (done) {
- if (isBrowser) {
- /* Browser (re)writes as follows: "This is our sentence." -> "This is new.sentence.",
- i.e. the length is not being changed from content.length and writer length will be equal 21 */
- pending();
- }
+// var file1 = 'entry.copy.dof.file1';
+// var srcDir = 'entry.copy.dof.srcDir';
+// var dirPath = joinURL(root.fullPath, srcDir);
+// var filePath = joinURL(root.fullPath, file1);
+// // create a new directory entry to kick off it
+// createDirectory(srcDir, function (entry) {
+// // create file
+// root.getFile(file1, {
+// create: true
+// }, function () {
+// // copy directory onto file
+// entry.copyTo(root, file1, succeed.bind(null, done, 'entry.copyTo - Unexpected success callback, it should not copy : \n' + srcDir + ' into root directory renamed as ' + file1 + '\n' + file1 + ' file already exists'), function (error) {
+// expect(error).toBeDefined();
+// if (isChrome) {
+// // chrome returns unknown error with code 13
+// } else {
+// expect(error).toBeFileError(FileError.INVALID_MODIFICATION_ERR); // eslint-disable-line no-undef
+// }
+// // check that original dir still exists
+// root.getDirectory(srcDir, {
+// create: false
+// }, function (dirEntry) {
+// // returning confirms existence so just check fullPath entry
+// expect(dirEntry).toBeDefined();
+// expect(dirEntry.fullPath).toCanonicallyMatch(dirPath);
+// // test that original file still exists
+// root.getFile(file1, {
+// create: false
+// }, function (fileEntry) {
+// expect(fileEntry).toBeDefined();
+// expect(fileEntry.fullPath).toCanonicallyMatch(filePath);
+// // cleanup
+// deleteEntry(file1, function () {
+// deleteEntry(srcDir, done);
+// });
+// }, failed.bind(null, done, 'root.getFile - Error getting file, making sure that original file still exists: ' + file1));
+// }, failed.bind(null, done, 'root.getDirectory - Error getting directory, making sure that original directory still exists: ' + srcDir));
+// });
+// }, failed.bind(null, done, 'root.getFile - Error creating file : ' + file1));
+// }, failed.bind(null, done, 'createDirectory - Error creating directory : ' + srcDir));
+// });
+// it('file.spec.76 moveTo: directory onto directory that is not empty', function (done) {
+// if (isIndexedDBShim) {
+// /* `copyTo` and `moveTo` functions do not support directories (Firefox, IE) */
+// pending();
+// }
- var fileName = 'writer.seek.write2'; // file content
- var content = 'This is our sentence.'; // for checking file length
- var exception = 'new.';
- var length = content.length;
- // create file, then write and append to it
- createFile(fileName, function (fileEntry) {
- fileEntry.createWriter(function (writer) {
- // Verifiers declaration
- function verifier (evt) {
- expect(writer.length).toBe(length);
- expect(writer.position).toBe(length);
- // Append some more data
- writer.onwriteend = secondVerifier;
- length = 8 + exception.length;
- writer.seek(8);
- writer.write(exception);
- }
- function secondVerifier (evt) {
- expect(writer.length).toBe(length);
- expect(writer.position).toBe(length);
- var reader = new FileReader(); // eslint-disable-line no-undef
- reader.onloadend = thirdVerifier;
- reader.onerror = failed.bind(null, done, 'reader.onerror - Error reading file: ' + fileName);
- fileEntry.file(function (f) { reader.readAsText(f); });
- }
- function thirdVerifier (evt) {
- expect(evt.target.result).toBe(content.substr(0, 8) + exception);
- // cleanup
- deleteFile(fileName, done);
- }
-
- // Write process
- writer.onwriteend = verifier;
- writer.write(content);
- }, failed.bind(null, done, 'fileEntry.createWriter - Error creating writer using fileEntry: ' + fileEntry.name));
- }, failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
- });
- it('file.spec.100 should be able to write XML data', function (done) {
- var fileName = 'writer.xml'; // file content
- var content = '<?xml version="1.0" encoding="UTF-8"?>\n<test prop="ack">\nData\n</test>\n'; // for testing file length
- var length = content.length;
- // creates file, then write XML data
- createFile(fileName, function (fileEntry) {
- fileEntry.createWriter(function (writer) {
- // Verifier content
- var verifier = function (evt) {
- expect(writer.length).toBe(length);
- expect(writer.position).toBe(length);
- // cleanup
- deleteFile(fileName, done);
- };
- // Write process
- writer.onwriteend = verifier;
- writer.write(content);
- }, failed.bind(null, done, 'fileEntry.createWriter - Error creating writer using fileEntry: ' + fileEntry.name));
- }, failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
- });
- it('file.spec.101 should be able to write JSON data', function (done) {
- var fileName = 'writer.json'; // file content
- var content = '{ "name": "Guy Incognito", "email": "here@there.com" }'; // for testing file length
- var length = content.length;
- // creates file, then write JSON content
- createFile(fileName, function (fileEntry) {
- fileEntry.createWriter(function (writer) {
- // Verifier declaration
- var verifier = function (evt) {
- expect(writer.length).toBe(length);
- expect(writer.position).toBe(length);
- // cleanup
- deleteFile(fileName, done);
- };
- // Write process
- writer.onwriteend = verifier;
- writer.write(content);
- }, failed.bind(null, done, 'fileEntry.createWriter - Error creating writer using fileEntry: ' + fileEntry.name));
- }, failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
- });
- it('file.spec.102 should be able to seek', function (done) {
- var fileName = 'writer.seek'; // file content
- var content = 'There is an exception to every rule. Except this one.'; // for testing file length
- var length = content.length;
- // creates file, then write JSON content
- createFile(fileName, function (fileEntry) {
- // writes file content and tests writer.seek
- fileEntry.createWriter(function (writer) {
- // Verifier declaration
- var verifier = function () {
- expect(writer.position).toBe(length);
- writer.seek(-5);
- expect(writer.position).toBe(length - 5);
- writer.seek(length + 100);
- expect(writer.position).toBe(length);
- writer.seek(10);
- expect(writer.position).toBe(10);
- // cleanup
- deleteFile(fileName, done);
- };
- // Write process
- writer.onwriteend = verifier;
- writer.seek(-100);
- expect(writer.position).toBe(0);
- writer.write(content);
- }, failed.bind(null, done, 'fileEntry.createWriter - Error creating writer using fileEntry: ' + fileEntry.name));
- }, failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
- });
- it('file.spec.103 should be able to truncate', function (done) {
- if (isIndexedDBShim) {
- /* `abort` and `truncate` functions are not supported (Firefox, IE) */
- pending();
- }
+// var srcDir = 'entry.move.dod.srcDir';
+// var dstDir = 'entry.move.dod.dstDir';
+// var subDir = 'subDir';
+// var srcPath = joinURL(root.fullPath, srcDir);
+// var dstPath = joinURL(joinURL(root.fullPath, dstDir), subDir);
+// // ensure destination directory is cleaned up before it
+// deleteEntry(dstDir, function () {
+// // create a new file entry to kick off it
+// createDirectory(srcDir, function (entry) {
+// // create top level directory
+// root.getDirectory(dstDir, {
+// create: true
+// }, function (directory) {
+// // create sub-directory
+// directory.getDirectory(subDir, {
+// create: true
+// }, function () {
+// // move srcDir onto dstDir (not empty)
+// entry.moveTo(root, dstDir, succeed.bind(null, done, 'entry.moveTo - Unexpected success callback, it should not copy : \n' + srcDir + ' into root directory renamed as ' + dstDir + '\n' + dstDir + ' directory already exists'), function (error) {
+// expect(error).toBeDefined();
+// if (isChrome) {
+// // chrome returns unknown error with code 13
+// } else {
+// expect(error).toBeFileError(FileError.INVALID_MODIFICATION_ERR); // eslint-disable-line no-undef
+// }
+// // making sure destination directory still exists
+// directory.getDirectory(subDir, {
+// create: false
+// }, function (dirEntry) {
+// // returning confirms existence so just check fullPath entry
+// expect(dirEntry).toBeDefined();
+// expect(dirEntry.fullPath).toCanonicallyMatch(dstPath);
+// // making sure source directory exists
+// root.getDirectory(srcDir, {
+// create: false
+// }, function (srcEntry) {
+// expect(srcEntry).toBeDefined();
+// expect(srcEntry.fullPath).toCanonicallyMatch(srcPath);
+// // cleanup
+// deleteEntry(srcDir, function () {
+// deleteEntry(dstDir, done);
+// });
+// }, failed.bind(null, done, 'root.getDirectory - Error getting directory, making sure that original directory still exists: ' + srcDir));
+// }, failed.bind(null, done, 'directory.getDirectory - Error getting directory, making sure that original directory still exists: ' + subDir));
+// });
+// }, failed.bind(null, done, 'directory.getDirectory - Error creating directory : ' + subDir));
+// }, failed.bind(null, done, 'directory.getDirectory - Error creating directory : ' + subDir));
+// }, failed.bind(null, done, 'createDirectory - Error creating directory : ' + srcDir));
+// }, failed.bind(null, done, 'deleteEntry - Error removing directory : ' + dstDir));
+// });
+// it('file.spec.77 moveTo: file replace existing file', function (done) {
+// var file1 = 'entry.move.frf.file1';
+// var file2 = 'entry.move.frf.file2';
+// var file2Path = joinURL(root.fullPath, file2);
+// // create a new directory entry to kick off it
+// createFile(file1, function (entry) {
+// // create file
+// root.getFile(file2, {
+// create: true
+// }, function () {
+// // replace file2 with file1
+// entry.moveTo(root, file2, function (entry2) {
+// expect(entry2).toBeDefined();
+// expect(entry2.isFile).toBe(true);
+// expect(entry2.isDirectory).toBe(false);
+// expect(entry2.fullPath).toCanonicallyMatch(file2Path);
+// expect(entry2.name).toCanonicallyMatch(file2);
+// // old file should not exists
+// root.getFile(file1, {
+// create: false
+// }, succeed.bind(null, done, 'root.getFile - Unexpected success callback, file: ' + file1 + ' should not exists'), function (error) {
+// expect(error).toBeDefined();
+// if (isChrome) {
+// expect(error).toBeFileError(FileError.SYNTAX_ERR); // eslint-disable-line no-undef
+// } else {
+// expect(error).toBeFileError(FileError.NOT_FOUND_ERR); // eslint-disable-line no-undef
+// }
+// // test that new file exists
+// root.getFile(file2, {
+// create: false
+// }, function (fileEntry) {
+// expect(fileEntry).toBeDefined();
+// expect(fileEntry.fullPath).toCanonicallyMatch(file2Path);
+// // cleanup
+// deleteEntry(file1, function () {
+// deleteEntry(file2, done);
+// });
+// }, failed.bind(null, done, 'root.getFile - Error getting moved file: ' + file2));
+// });
+// }, failed.bind(null, done, 'entry.moveTo - Error moving file : ' + file1 + ' to root as: ' + file2));
+// }, failed.bind(null, done, 'root.getFile - Error creating file: ' + file2));
+// }, failed.bind(null, done, 'createFile - Error creating file: ' + file1));
+// });
+// it('file.spec.78 moveTo: directory replace empty directory', function (done) {
+// if (isIndexedDBShim) {
+// /* `copyTo` and `moveTo` functions do not support directories (Firefox, IE) */
+// pending();
+// }
- var fileName = 'writer.truncate';
- var content = 'There is an exception to every rule. Except this one.';
- // creates file, writes to it, then truncates it
- createFile(fileName, function (fileEntry) {
- fileEntry.createWriter(function (writer) {
- // Verifier declaration
- var verifier = function () {
- expect(writer.length).toBe(36);
- expect(writer.position).toBe(36);
- // cleanup
- deleteFile(fileName, done);
- };
- // Write process
- writer.onwriteend = function () {
- // Truncate process after write
- writer.onwriteend = verifier;
- writer.truncate(36);
- };
- writer.write(content);
- }, failed.bind(null, done, 'fileEntry.createWriter - Error creating writer using fileEntry: ' + fileEntry.name));
- }, failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
- });
- it('file.spec.104 should be able to write binary data from an ArrayBuffer', function (done) {
- // Skip test if ArrayBuffers are not supported (e.g.: Android 2.3).
- if (typeof window.ArrayBuffer === 'undefined') {
- expect(true).toFailWithMessage('Platform does not supported this feature');
- done();
- return;
- }
- var fileName = 'bufferwriter.bin'; // file content
- var data = new ArrayBuffer(32);
- var dataView = new Int8Array(data); // for verifying file length
- var length = 32;
- for (var i = 0; i < dataView.length; i++) {
- dataView[i] = i;
- }
- // creates file, then write content
- createFile(fileName, function (fileEntry) {
- // writes file content
- fileEntry.createWriter(function (writer) {
- // Verifier declaration
- var verifier = function () {
- expect(writer.length).toBe(length);
- expect(writer.position).toBe(length);
- // cleanup
- deleteFile(fileName, done);
- };
- // Write process
- writer.onwriteend = verifier;
- writer.write(data);
- }, failed.bind(null, done, 'fileEntry.createWriter - Error creating writer using fileEntry: ' + fileEntry.name));
- }, failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
- });
- it('file.spec.105 should be able to write binary data from a Blob', function (done) {
- // Skip test if Blobs are not supported (e.g.: Android 2.3).
- if ((typeof window.Blob === 'undefined' && typeof window.WebKitBlobBuilder === 'undefined') || typeof window.ArrayBuffer === 'undefined') {
- expect(true).toFailWithMessage('Platform does not supported this feature');
- done();
- return;
- }
- var fileName = 'blobwriter.bin'; // file content
- var data = new ArrayBuffer(32);
- var dataView = new Int8Array(data);
- var blob; // for verifying file length
- var length = 32;
- for (var i = 0; i < dataView.length; i++) {
- dataView[i] = i;
- }
- try {
- // Mobile Safari: Use Blob constructor
- blob = new Blob([data], { // eslint-disable-line no-undef
- 'type': 'application/octet-stream'
- });
- } catch (e) {
- if (window.WebKitBlobBuilder) {
- // Android Browser: Use deprecated BlobBuilder
- var builder = new WebKitBlobBuilder();
- builder.append(data);
- blob = builder.getBlob('application/octet-stream');
- } else {
- // We have no way defined to create a Blob, so fail
- fail();
- }
- }
- if (typeof blob !== 'undefined') {
- // creates file, then write content
- createFile(fileName, function (fileEntry) {
- fileEntry.createWriter(function (writer) {
- // Verifier declaration
- var verifier = function () {
- expect(writer.length).toBe(length);
- expect(writer.position).toBe(length);
- // cleanup
- deleteFile(fileName, done);
- };
- // Write process
- writer.onwriteend = verifier;
- writer.write(blob);
- }, failed.bind(null, done, 'fileEntry.createWriter - Error creating writer using fileEntry: ' + fileEntry.name));
- }, failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
- }
- });
- it('file.spec.106 should be able to write a File to a FileWriter', function (done) {
- var dummyFileName = 'dummy.txt';
- var outputFileName = 'verify.txt';
- var dummyFileText = 'This text should be written to two files';
- var verifier = function (outputFileWriter) {
- expect(outputFileWriter.length).toBe(dummyFileText.length);
- expect(outputFileWriter.position).toBe(dummyFileText.length);
- deleteFile(outputFileName, done);
- };
- var writeFile = function (fileName, fileData, win) {
- var theWriter;
- var write_file = function (fileEntry) {
- // writes file content to new file
- fileEntry.createWriter(function (writer) {
- theWriter = writer;
- writer.onwriteend = function (ev) {
- if (typeof fileData.length !== 'undefined') {
- expect(theWriter.length).toBe(fileData.length);
- expect(theWriter.position).toBe(fileData.length);
- }
- win(theWriter);
- };
- writer.onerror = failed.bind(null, done, 'writer.onerror - Error writing content on file: ' + fileName);
- writer.write(fileData);
- }, failed.bind(null, done, 'fileEntry.createWriter - Error creating writer using fileEntry: ' + fileEntry.name));
- };
- createFile(fileName, write_file, failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
- };
- var openFile = function (fileName, callback) {
- root.getFile(fileName, {
- create: false
- }, function (fileEntry) {
- fileEntry.file(callback, failed.bind(null, done, 'fileEntry.file - Error reading file using fileEntry: ' + fileEntry.name));
- }, failed.bind(null, done, 'root.getFile - Error getting file: ' + fileName));
- };
- writeFile(dummyFileName, dummyFileText, function (dummyFileWriter) {
- openFile(dummyFileName, function (file) {
- writeFile(outputFileName, file, verifier);
- });
- });
- });
- it('file.spec.107 should be able to write a sliced File to a FileWriter', function (done) {
- var dummyFileName = 'dummy2.txt';
- var outputFileName = 'verify2.txt';
- var dummyFileText = 'This text should be written to two files';
- var verifier = function (outputFileWriter) {
- expect(outputFileWriter.length).toBe(10);
- expect(outputFileWriter.position).toBe(10);
- deleteFile(outputFileName, done);
- };
- var writeFile = function (fileName, fileData, win) {
- var theWriter;
- var write_file = function (fileEntry) {
- // writes file content to new file
- fileEntry.createWriter(function (writer) {
- theWriter = writer;
- writer.onwriteend = function (ev) {
- if (typeof fileData.length !== 'undefined') {
- expect(theWriter.length).toBe(fileData.length);
- expect(theWriter.position).toBe(fileData.length);
- }
- win(theWriter);
- };
- writer.onerror = failed.bind(null, done, 'writer.onerror - Error writing content on file: ' + fileName);
- writer.write(fileData);
- }, failed.bind(null, done, 'fileEntry.createWriter - Error creating writer using fileEntry: ' + fileEntry.name));
- };
- createFile(fileName, write_file, failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
- };
- var openFile = function (fileName, callback) {
- root.getFile(fileName, {
- create: false
- }, function (fileEntry) {
- fileEntry.file(callback, failed.bind(null, done, 'fileEntry.file - Error reading file using fileEntry: ' + fileEntry.name));
- }, failed.bind(null, done, 'root.getFile - Error getting file: ' + fileName));
- };
- writeFile(dummyFileName, dummyFileText, function (dummyFileWriter) {
- openFile(dummyFileName, function (file) {
- writeFile(outputFileName, file.slice(10, 20), verifier);
- });
- });
- });
- it('file.spec.108 should be able to write binary data from a File', function (done) {
- // Skip test if Blobs are not supported (e.g.: Android 2.3).
- if (typeof window.Blob === 'undefined' && typeof window.WebKitBlobBuilder === 'undefined') {
- expect(true).toFailWithMessage('Platform does not supported this feature');
- done();
- }
- var dummyFileName = 'blobwriter.bin';
- var outputFileName = 'verify.bin'; // file content
- var data = new ArrayBuffer(32);
- var dataView = new Int8Array(data);
- var blob; // for verifying file length
- var length = 32;
- var verifier = function (outputFileWriter) {
- expect(outputFileWriter.length).toBe(length);
- expect(outputFileWriter.position).toBe(length);
- // cleanup
- deleteFile(outputFileName);
- done();
- };
- var writeFile = function (fileName, fileData, win) {
- var theWriter;
- var write_file = function (fileEntry) {
- // writes file content to new file
- fileEntry.createWriter(function (writer) {
- theWriter = writer;
- writer.onwriteend = function (ev) {
- if (typeof fileData.length !== 'undefined') {
- expect(theWriter.length).toBe(fileData.length);
- expect(theWriter.position).toBe(fileData.length);
- }
- win(theWriter);
- };
- writer.onerror = failed.bind(null, done, 'writer.onerror - Error writing content on file: ' + fileName);
- writer.write(fileData);
- }, failed.bind(null, done, 'fileEntry.createWriter - Error creating writer using fileEntry: ' + fileEntry.name));
- };
- createFile(fileName, write_file, failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
- };
- var openFile = function (fileName, callback) {
- root.getFile(fileName, {
- create: false
- }, function (fileEntry) {
- fileEntry.file(callback, failed.bind(null, done, 'fileEntry.file - Error reading file using fileEntry: ' + fileEntry.name));
- }, failed.bind(null, done, 'root.getFile - Error getting file: ' + fileName));
- };
- for (var i = 0; i < dataView.length; i++) {
- dataView[i] = i;
- }
- try {
- // Mobile Safari: Use Blob constructor
- blob = new Blob([data], { // eslint-disable-line no-undef
- 'type': 'application/octet-stream'
- });
- } catch (e) {
- if (window.WebKitBlobBuilder) {
- // Android Browser: Use deprecated BlobBuilder
- var builder = new WebKitBlobBuilder();
- builder.append(data);
- blob = builder.getBlob('application/octet-stream');
- } else {
- // We have no way defined to create a Blob, so fail
- fail();
- }
- }
- if (typeof blob !== 'undefined') {
- // creates file, then write content
- writeFile(dummyFileName, blob, function (dummyFileWriter) {
- openFile(dummyFileName, function (file) {
- writeFile(outputFileName, file, verifier);
- });
- });
- }
- });
- });
- // FileWritter
- describe('Backwards compatibility', function () {
- /* These specs exist to test that the File plugin can still recognize file:///
- * URLs, and can resolve them to FileEntry and DirectoryEntry objects.
- * They rely on an undocumented interface to File which provides absolute file
- * paths, which are not used internally anymore.
- * If that interface is not present, then these tests will silently succeed.
- */
- it('file.spec.109 should be able to resolve a file:/// URL', function (done) {
- var localFilename = 'file.txt';
- var originalEntry;
- root.getFile(localFilename, {
- create: true
- }, function (entry) {
- originalEntry = entry;
- /* This is an undocumented interface to File which exists only for testing
- * backwards compatibilty. By obtaining the raw filesystem path of the download
- * location, we can pass that to ft.download() to make sure that previously-stored
- * paths are still valid.
- */
- cordova.exec(function (localPath) { // eslint-disable-line no-undef
- window.resolveLocalFileSystemURL('file://' + encodeURI(localPath), function (fileEntry) {
- expect(fileEntry.toURL()).toEqual(originalEntry.toURL());
- // cleanup
- deleteFile(localFilename);
- done();
- }, failed.bind(null, done, 'window.resolveLocalFileSystemURL - Error resolving URI: file://' + encodeURI(localPath)));
- }, done, 'File', '_getLocalFilesystemPath', [entry.toURL()]);
- }, failed.bind(null, done, 'root.getFile - Error creating file: ' + localFilename));
- });
- });
- // Backwards Compatibility
- describe('Parent References', function () {
- /* These specs verify that paths with parent references i("..") in them
- * work correctly, and do not cause the application to crash.
- */
- it('file.spec.110 should not throw exception resolving parent refefences', function (done) {
- /* This is a direct copy of file.spec.9, with the filename changed, * as reported in CB-5721.
- */
- var fileName = 'resolve.file.uri';
- var dirName = 'resolve.dir.uri';
- // create a new file entry
- createDirectory(dirName, function () {
- createFile(dirName + '/../' + fileName, function (entry) {
- // lookup file system entry
- window.resolveLocalFileSystemURL(entry.toURL(), function (fileEntry) {
- expect(fileEntry).toBeDefined();
- expect(fileEntry.name).toCanonicallyMatch(fileName);
- // cleanup
- deleteEntry(fileName, done);
- }, failed.bind(null, done, 'window.resolveLocalFileSystemURL - Error resolving URI: ' + entry.toURL()));
- }, failed.bind(null, done, 'createFile - Error creating file: ../' + fileName));
- }, failed.bind(null, done, 'createDirectory - Error creating directory: ' + dirName));
- });
- it('file.spec.111 should not traverse above above the root directory', function (done) {
- var fileName = 'traverse.file.uri';
- // create a new file entry
- createFile(fileName, function (entry) {
- // lookup file system entry
- root.getFile('../' + fileName, {
- create: false
- }, function (fileEntry) {
- // Note: we expect this to still resolve, as the correct behaviour is to ignore the ../, not to fail out.
- expect(fileEntry).toBeDefined();
- expect(fileEntry.name).toBe(fileName);
- expect(fileEntry.fullPath).toCanonicallyMatch(root.fullPath + '/' + fileName);
- // cleanup
- deleteEntry(fileName, done);
- }, failed.bind(null, done, 'root.getFile - Error getting file: ../' + fileName));
- }, failed.bind(null, done, 'createFile - Error creating file: ../' + fileName));
- });
- it('file.spec.112 should traverse above above the current directory', function (done) {
- var fileName = 'traverse2.file.uri';
- var dirName = 'traverse2.subdir';
- // create a new directory and a file entry
- createFile(fileName, function () {
- createDirectory(dirName, function (entry) {
- // lookup file system entry
- entry.getFile('../' + fileName, {
- create: false
- }, function (fileEntry) {
- expect(fileEntry).toBeDefined();
- expect(fileEntry.name).toBe(fileName);
- expect(fileEntry.fullPath).toCanonicallyMatch('/' + fileName);
- // cleanup
- deleteEntry(fileName, function () {
- deleteEntry(dirName, done);
- });
- }, failed.bind(null, done, 'entry.getFile - Error getting file: ' + fileName + ' recently created above: ' + dirName));
- }, failed.bind(null, done, 'createDirectory - Error creating directory: ' + dirName));
- }, failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
- });
- it('file.spec.113 getFile: get Entry should error for missing file above root directory', function (done) {
- var fileName = '../missing.file';
- // create:false, exclusive:false, file does not exist
- root.getFile(fileName, {
- create: false
- }, succeed.bind(null, done, 'root.getFile - Unexpected success callback, it should not locate nonexistent file: ' + fileName), function (error) {
- expect(error).toBeDefined();
- if (isChrome) {
- expect(error).toBeFileError(FileError.SYNTAX_ERR); // eslint-disable-line no-undef
- } else {
- expect(error).toBeFileError(FileError.NOT_FOUND_ERR); // eslint-disable-line no-undef
- }
- done();
- });
- });
- });
- // Parent References
- describe('toNativeURL interface', function () {
- /* These specs verify that FileEntries have a toNativeURL method
- * which appears to be sane.
- */
- var pathExpect = cordova.platformId === 'windowsphone' ? '//nativ' : 'file://'; // eslint-disable-line no-undef
- if (isChrome) {
- pathExpect = 'filesystem:http://';
- }
- it('file.spec.114 fileEntry should have a toNativeURL method', function (done) {
- var fileName = 'native.file.uri';
- if (isWindows) {
- var rootPath = root.fullPath;
- pathExpect = rootPath.substr(0, rootPath.indexOf(':'));
- }
- // create a new file entry
- createFile(fileName, function (entry) {
- expect(entry.toNativeURL).toBeDefined();
- expect(entry.name).toCanonicallyMatch(fileName);
- expect(typeof entry.toNativeURL).toBe('function');
- var nativeURL = entry.toNativeURL();
- expect(typeof nativeURL).toBe('string');
- expect(nativeURL.substring(0, pathExpect.length)).toEqual(pathExpect);
- expect(nativeURL.substring(nativeURL.length - fileName.length)).toEqual(fileName);
- // cleanup
- deleteEntry(fileName, done);
- }, failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
- });
- it('file.spec.115 DirectoryReader should return entries with toNativeURL method', function (done) {
- var dirName = 'nativeEntries.dir';
- var fileName = 'nativeEntries.file';
- var directory;
- var checkEntries = function (entries) {
- expect(entries).toBeDefined();
- expect(entries instanceof Array).toBe(true);
- expect(entries.length).toBe(1);
- expect(entries[0].toNativeURL).toBeDefined();
- expect(typeof entries[0].toNativeURL).toBe('function');
- var nativeURL = entries[0].toNativeURL();
- expect(typeof nativeURL).toBe('string');
- expect(nativeURL.substring(0, pathExpect.length)).toEqual(pathExpect);
- expect(nativeURL.substring(nativeURL.length - fileName.length)).toEqual(fileName);
- // cleanup
- directory.removeRecursively(function () {}, null);
- done();
- };
- // create a new file entry
- root.getDirectory(dirName, {
- create: true
- }, function (dir) {
- directory = dir;
- directory.getFile(fileName, {
- create: true
- }, function (fileEntry) {
- var reader = directory.createReader();
- reader.readEntries(checkEntries, failed.bind(null, done, 'reader.readEntries - Error reading entries from directory: ' + dirName));
- }, failed.bind(null, done, 'directory.getFile - Error creating file: ' + fileName));
- }, failed.bind(null, done, 'root.getDirectory - Error creating directory: ' + dirName));
- });
- it('file.spec.116 resolveLocalFileSystemURL should return entries with toNativeURL method', function (done) {
- var fileName = 'native.resolve.uri';
- // create a new file entry
- createFile(fileName, function (entry) {
- resolveLocalFileSystemURL(entry.toURL(), function (entry) { // eslint-disable-line no-undef
- expect(entry.toNativeURL).toBeDefined();
- expect(entry.name).toCanonicallyMatch(fileName);
- expect(typeof entry.toNativeURL).toBe('function');
- var nativeURL = entry.toNativeURL();
- expect(typeof nativeURL).toBe('string');
- expect(nativeURL.substring(0, pathExpect.length)).toEqual(pathExpect);
- expect(nativeURL.substring(nativeURL.length - fileName.length)).toEqual(fileName);
- // cleanup
- deleteEntry(fileName, done);
- }, failed.bind(null, done, 'resolveLocalFileSystemURL - Error resolving file URL: ' + entry.toURL()));
- }, failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
- });
- });
- // toNativeURL interface
- describe('resolveLocalFileSystemURL on file://', function () {
- /* These specs verify that window.resolveLocalFileSystemURL works correctly on file:// URLs
- */
- it('file.spec.117 should not resolve native URLs outside of FS roots', function (done) {
- // lookup file system entry
- window.resolveLocalFileSystemURL('file:///this.is.an.invalid.url', succeed.bind(null, done, 'window.resolveLocalFileSystemURL - Unexpected success callback, it should not resolve invalid URL: file:///this.is.an.invalid.url'), function (error) {
- expect(error).toBeDefined();
- done();
- });
- });
- it('file.spec.118 should not resolve native URLs outside of FS roots', function (done) {
- // lookup file system entry
- window.resolveLocalFileSystemURL('file://localhost/this.is.an.invalid.url', succeed.bind(null, done, 'window.resolveLocalFileSystemURL - Unexpected success callback, it should not resolve invalid URL: file://localhost/this.is.an.invalid.url'), function (error) {
- expect(error).toBeDefined();
- done();
- });
- });
- it('file.spec.119 should not resolve invalid native URLs', function (done) {
- // lookup file system entry
- window.resolveLocalFileSystemURL('file://localhost', succeed.bind(null, done, 'window.resolveLocalFileSystemURL - Unexpected success callback, it should not resolve invalid URL: file://localhost'), function (error) {
- expect(error).toBeDefined();
- done();
- });
- });
- it('file.spec.120 should not resolve invalid native URLs with query strings', function (done) {
- // lookup file system entry
- window.resolveLocalFileSystemURL('file://localhost?test/test', succeed.bind(null, done, 'window.resolveLocalFileSystemURL - Unexpected success callback, it should not resolve invalid URL: file://localhost?test/test'), function (error) {
- expect(error).toBeDefined();
- done();
- });
- });
- it('file.spec.121 should resolve native URLs returned by API', function (done) {
- var fileName = 'native.resolve.uri1';
- // create a new file entry
- createFile(fileName, function (entry) {
- /* eslint-disable no-undef */
- resolveLocalFileSystemURL(entry.toNativeURL(), function (fileEntry) {
- expect(fileEntry.fullPath).toCanonicallyMatch(root.fullPath + '/' + fileName);
- // cleanup
- deleteEntry(fileName, done);
- }, failed.bind(null, done, 'resolveLocalFileSystemURL - Error resolving file URL: ' + entry.toNativeURL()));
- }, failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
- });
- it('file.spec.122 should resolve native URLs returned by API with localhost', function (done) {
- var fileName = 'native.resolve.uri2';
- // create a new file entry
- createFile(fileName, function (entry) {
- var url = entry.toNativeURL();
- url = url.replace('///', '//localhost/');
- resolveLocalFileSystemURL(url, function (fileEntry) {
- expect(fileEntry.fullPath).toCanonicallyMatch(root.fullPath + '/' + fileName);
- // cleanup
- deleteEntry(fileName, done);
- }, failed.bind(null, done, 'resolveLocalFileSystemURL - Error resolving file URL: ' + url));
- }, failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
- });
- it('file.spec.123 should resolve native URLs returned by API with query string', function (done) {
- var fileName = 'native.resolve.uri3';
- // create a new file entry
- createFile(fileName, function (entry) {
- var url = entry.toNativeURL();
- url = url + '?test/test';
- resolveLocalFileSystemURL(url, function (fileEntry) {
- expect(fileEntry.fullPath).toCanonicallyMatch(root.fullPath + '/' + fileName);
- // cleanup
- deleteEntry(fileName, done);
- }, failed.bind(null, done, 'resolveLocalFileSystemURL - Error resolving file URL: ' + url));
- }, failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
- });
- it('file.spec.124 should resolve native URLs returned by API with localhost and query string', function (done) {
- var fileName = 'native.resolve.uri4';
- // create a new file entry
- createFile(fileName, function (entry) {
- var url = entry.toNativeURL();
- url = url.replace('///', '//localhost/') + '?test/test';
- resolveLocalFileSystemURL(url, function (fileEntry) {
- /* eslint-enable no-undef */
- expect(fileEntry.fullPath).toCanonicallyMatch(root.fullPath + '/' + fileName);
- // cleanup
- deleteEntry(fileName, done);
- }, failed.bind(null, done, 'resolveLocalFileSystemURL - Error resolving file URL: ' + url));
- }, failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
- });
- });
- // resolveLocalFileSystemURL on file://
- describe('cross-file-system copy and move', function () {
- /* These specs verify that Entry.copyTo and Entry.moveTo work correctly
- * when crossing filesystem boundaries.
- */
- it('file.spec.125 copyTo: temporary -> persistent', function (done) {
- var file1 = 'entry.copy.file1a';
- var file2 = 'entry.copy.file2a';
- var sourceEntry;
- var fullPath = joinURL(root.fullPath, file2);
- var validateFile = function (entry) {
- // a bit redundant since copy returned this entry already
- expect(entry).toBeDefined();
- expect(entry.isFile).toBe(true);
- expect(entry.isDirectory).toBe(false);
- expect(entry.name).toCanonicallyMatch(file2);
- expect(entry.fullPath).toCanonicallyMatch(fullPath);
- expect(entry.filesystem).toBeDefined();
- if (isChrome) {
- expect(entry.filesystem.name).toContain('Persistent');
- } else {
- expect(entry.filesystem.name).toEqual('persistent');
- }
- // cleanup
- deleteEntry(entry.name);
- deleteEntry(sourceEntry.name, done);
- };
- var createSourceAndTransfer = function () {
- temp_root.getFile(file1, {
- create: true
- }, function (entry) {
- expect(entry.filesystem).toBeDefined();
- if (isChrome) {
- expect(entry.filesystem.name).toContain('Temporary');
- } else {
- expect(entry.filesystem.name).toEqual('temporary');
- }
- sourceEntry = entry;
- // Save for later cleanup
- entry.copyTo(persistent_root, file2, validateFile, failed.bind(null, done, 'entry.copyTo - Error copying file: ' + file1 + ' to PERSISTENT root as: ' + file2));
- }, failed.bind(null, done, 'temp_root.getFile - Error creating file: ' + file1 + 'at TEMPORAL root'));
- };
- // Delete any existing file to start things off
- persistent_root.getFile(file2, {}, function (entry) {
- entry.remove(createSourceAndTransfer, failed.bind(null, done, 'entry.remove - Error removing file: ' + file2));
- }, createSourceAndTransfer);
- });
- it('file.spec.126 copyTo: persistent -> temporary', function (done) {
- var file1 = 'entry.copy.file1b';
- var file2 = 'entry.copy.file2b';
- var sourceEntry;
- var fullPath = joinURL(temp_root.fullPath, file2);
- var validateFile = function (entry) {
- expect(entry).toBeDefined();
- expect(entry.isFile).toBe(true);
- expect(entry.isDirectory).toBe(false);
- expect(entry.name).toCanonicallyMatch(file2);
- expect(entry.fullPath).toCanonicallyMatch(fullPath);
- if (isChrome) {
- expect(entry.filesystem.name).toContain('Temporary');
- } else {
- expect(entry.filesystem.name).toEqual('temporary');
- }
- // cleanup
- deleteEntry(entry.name);
- deleteEntry(sourceEntry.name, done);
- };
- var createSourceAndTransfer = function () {
- persistent_root.getFile(file1, {
- create: true
- }, function (entry) {
- expect(entry).toBeDefined();
- expect(entry.filesystem).toBeDefined();
- if (isChrome) {
- expect(entry.filesystem.name).toContain('Persistent');
- } else {
- expect(entry.filesystem.name).toEqual('persistent');
- }
- sourceEntry = entry;
- // Save for later cleanup
- entry.copyTo(temp_root, file2, validateFile, failed.bind(null, done, 'entry.copyTo - Error copying file: ' + file1 + ' to TEMPORAL root as: ' + file2));
- }, failed.bind(null, done, 'persistent_root.getFile - Error creating file: ' + file1 + 'at PERSISTENT root'));
- };
- // Delete any existing file to start things off
- temp_root.getFile(file2, {}, function (entry) {
- entry.remove(createSourceAndTransfer, failed.bind(null, done, 'entry.remove - Error removing file: ' + file2));
- }, createSourceAndTransfer);
- });
- it('file.spec.127 moveTo: temporary -> persistent', function (done) {
- var file1 = 'entry.copy.file1a';
- var file2 = 'entry.copy.file2a';
- var sourceEntry;
- var fullPath = joinURL(root.fullPath, file2);
- var validateFile = function (entry) {
- // a bit redundant since copy returned this entry already
- expect(entry).toBeDefined();
- expect(entry.isFile).toBe(true);
- expect(entry.isDirectory).toBe(false);
- expect(entry.name).toCanonicallyMatch(file2);
- expect(entry.fullPath).toCanonicallyMatch(fullPath);
- expect(entry.filesystem).toBeDefined();
- if (isChrome) {
- expect(entry.filesystem.name).toContain('Persistent');
- } else {
- expect(entry.filesystem.name).toEqual('persistent');
- }
- // cleanup
- deleteEntry(entry.name);
- deleteEntry(sourceEntry.name, done);
- };
- var createSourceAndTransfer = function () {
- temp_root.getFile(file1, {
- create: true
- }, function (entry) {
- expect(entry.filesystem).toBeDefined();
- if (isChrome) {
- expect(entry.filesystem.name).toContain('Temporary');
- } else {
- expect(entry.filesystem.name).toEqual('temporary');
- }
- sourceEntry = entry;
- // Save for later cleanup
- entry.moveTo(persistent_root, file2, validateFile, failed.bind(null, done, 'entry.moveTo - Error moving file: ' + file1 + ' to PERSISTENT root as: ' + file2));
- }, failed.bind(null, done, 'temp_root.getFile - Error creating file: ' + file1 + 'at TEMPORAL root'));
- };
- // Delete any existing file to start things off
- persistent_root.getFile(file2, {}, function (entry) {
- entry.remove(createSourceAndTransfer, failed.bind(null, done, 'entry.remove - Error removing file: ' + file2));
- }, createSourceAndTransfer);
- });
- it('file.spec.128 moveTo: persistent -> temporary', function (done) {
- var file1 = 'entry.copy.file1b';
- var file2 = 'entry.copy.file2b';
- var sourceEntry;
- var fullPath = joinURL(temp_root.fullPath, file2);
- var validateFile = function (entry) {
- expect(entry).toBeDefined();
- expect(entry.isFile).toBe(true);
- expect(entry.isDirectory).toBe(false);
- expect(entry.name).toCanonicallyMatch(file2);
- expect(entry.fullPath).toCanonicallyMatch(fullPath);
- if (isChrome) {
- expect(entry.filesystem.name).toContain('Temporary');
- } else {
- expect(entry.filesystem.name).toEqual('temporary');
- }
- // cleanup
- deleteEntry(entry.name);
- deleteEntry(sourceEntry.name, done);
- };
- var createSourceAndTransfer = function () {
- persistent_root.getFile(file1, {
- create: true
- }, function (entry) {
- expect(entry).toBeDefined();
- expect(entry.filesystem).toBeDefined();
- if (isChrome) {
- expect(entry.filesystem.name).toContain('Persistent');
- } else {
- expect(entry.filesystem.name).toEqual('persistent');
- }
- sourceEntry = entry;
- // Save for later cleanup
- entry.moveTo(temp_root, file2, validateFile, failed.bind(null, done, 'entry.moveTo - Error moving file: ' + file1 + ' to TEMPORAL root as: ' + file2));
- }, failed.bind(null, done, 'persistent_root.getFile - Error creating file: ' + file1 + 'at PERSISTENT root'));
- };
- // Delete any existing file to start things off
- temp_root.getFile(file2, {}, function (entry) {
- entry.remove(createSourceAndTransfer, failed.bind(null, done, 'entry.remove - Error removing file: ' + file2));
- }, createSourceAndTransfer);
- });
- it('file.spec.129 cordova.file.*Directory are set', function () {
- var expectedPaths = ['applicationDirectory', 'applicationStorageDirectory', 'dataDirectory', 'cacheDirectory'];
- /* eslint-disable no-undef */
- if (cordova.platformId === 'android' || cordova.platformId === 'amazon-fireos') {
- if (cordova.file.externalApplicationStorageDirectory !== null) {
- // https://issues.apache.org/jira/browse/CB-10411
- // If external storage can't be mounted, the cordova.file.external* properties are null.
- expectedPaths.push('externalApplicationStorageDirectory', 'externalRootDirectory', 'externalCacheDirectory', 'externalDataDirectory');
- }
- } else if (cordova.platformId === 'blackberry10') {
- expectedPaths.push('externalRootDirectory', 'sharedDirectory');
- } else if (cordova.platformId === 'ios') {
- expectedPaths.push('syncedDataDirectory', 'documentsDirectory', 'tempDirectory');
- } else if (cordova.platformId === 'osx') {
- expectedPaths.push('documentsDirectory', 'tempDirectory', 'rootDirectory');
- } else {
- console.log('Skipping test due on unsupported platform.');
- return;
- }
- for (var i = 0; i < expectedPaths.length; ++i) {
- expect(typeof cordova.file[expectedPaths[i]]).toBe('string');
- expect(cordova.file[expectedPaths[i]]).toMatch(/\/$/, 'Path should end with a slash');
- }
- });
- });
- describe('resolveLocalFileSystemURL on cdvfile://', function () {
- it('file.spec.147 should be able to resolve cdvfile applicationDirectory fs root', function (done) {
- var cdvfileApplicationDirectoryFsRootName;
- if (cordova.platformId === 'android') {
- cdvfileApplicationDirectoryFsRootName = 'assets';
- } else if (cordova.platformId === 'ios') {
- cdvfileApplicationDirectoryFsRootName = 'bundle';
- } else {
- pending();
- }
+// var file1 = 'file1';
+// var srcDir = 'entry.move.drd.srcDir';
+// var dstDir = 'entry.move.drd.dstDir';
+// var dstPath = joinURL(root.fullPath, dstDir);
+// var filePath = dstPath + '/' + file1;
+// // ensure destination directory is cleaned up before it
+// deleteEntry(dstDir, function () {
+// // create a new directory entry to kick off it
+// createDirectory(srcDir, function (directory) {
+// // create a file within source directory
+// directory.getFile(file1, {
+// create: true
+// }, function () {
+// // create destination directory
+// root.getDirectory(dstDir, {
+// create: true
+// }, function () {
+// // move srcDir to dstDir
+// directory.moveTo(root, dstDir, function (dirEntry) {
+// expect(dirEntry).toBeDefined();
+// expect(dirEntry.isFile).toBe(false);
+// expect(dirEntry.isDirectory).toBe(true);
+// expect(dirEntry.fullPath).toCanonicallyMatch(dstPath);
+// expect(dirEntry.name).toCanonicallyMatch(dstDir);
+// // check that old directory contents have been moved
+// dirEntry.getFile(file1, {
+// create: false
+// }, function (fileEntry) {
+// expect(fileEntry).toBeDefined();
+// expect(fileEntry.fullPath).toCanonicallyMatch(filePath);
+// // check that old directory no longer exists
+// root.getDirectory(srcDir, {
+// create: false
+// }, succeed.bind(null, done, 'root.getDirectory - Unexpected success callback, directory: ' + srcDir + ' should not exists'), function (error) {
+// expect(error).toBeDefined();
+// if (isChrome) {
+// expect(error).toBeFileError(FileError.SYNTAX_ERR); // eslint-disable-line no-undef
+// } else {
+// expect(error).toBeFileError(FileError.NOT_FOUND_ERR); // eslint-disable-line no-undef
+// }
+// // cleanup
+// deleteEntry(srcDir, function () {
+// deleteEntry(dstDir, done);
+// });
+// });
+// }, failed.bind(null, done, 'dirEntry.getFile - Error getting moved file: ' + file1));
+// }, failed.bind(null, done, 'entry.moveTo - Error moving directory : ' + srcDir + ' to root as: ' + dstDir));
+// }, failed.bind(null, done, 'root.getDirectory - Error creating directory: ' + dstDir));
+// }, failed.bind(null, done, 'root.getFile - Error creating file: ' + file1));
+// }, failed.bind(null, done, 'createDirectory - Error creating directory: ' + srcDir));
+// }, failed.bind(null, done, 'deleteEntry - Error removing directory : ' + dstDir));
+// });
+// it('file.spec.79 moveTo: directory that does not exist', function (done) {
+// if (isChrome) {
+// pending('chrome freak out about non-existend dir not being a DirectoryEntry');
+// }
+// var file1 = 'entry.move.dnf.file1';
+// var dstDir = 'entry.move.dnf.dstDir';
+// var dstPath = joinURL(root.fullPath, dstDir);
+// // create a new file entry to kick off it
+// createFile(file1, function (entry) {
+// // move file to directory that does not exist
+// var directory = new DirectoryEntry(); // eslint-disable-line no-undef
+// directory.filesystem = root.filesystem;
+// directory.fullPath = dstPath;
+// entry.moveTo(directory, null, succeed.bind(null, done, 'entry.moveTo - Unexpected success callback, parent directory: ' + dstPath + ' should not exists'), function (error) {
+// expect(error).toBeDefined();
+// if (isChrome) {
+// /* INVALID_MODIFICATION_ERR (code: 9) is thrown instead of NOT_FOUND_ERR(code: 1)
+// on trying to moveTo directory that does not exist. */
+// expect(error).toBeFileError(FileError.INVALID_MODIFICATION_ERR); // eslint-disable-line no-undef
+// } else {
+// expect(error).toBeFileError(FileError.NOT_FOUND_ERR); // eslint-disable-line no-undef
+// }
+// // cleanup
+// deleteEntry(file1, done);
+// });
+// }, failed.bind(null, done, 'createFile - Error creating file: ' + file1));
+// });
+// it('file.spec.80 moveTo: invalid target name', function (done) {
+// if (isBrowser) {
+// /* The plugin does not follow ["8.3 Naming restrictions"]
+// (http://www.w3.org/TR/2011/WD-file-system-api-20110419/#naming-restrictions */
+// pending();
+// }
- resolveLocalFileSystemURL('cdvfile://localhost/' + cdvfileApplicationDirectoryFsRootName + '/', function (applicationDirectoryRoot) {
- expect(applicationDirectoryRoot.isFile).toBe(false);
- expect(applicationDirectoryRoot.isDirectory).toBe(true);
- expect(applicationDirectoryRoot.name).toCanonicallyMatch('');
- expect(applicationDirectoryRoot.fullPath).toCanonicallyMatch('/');
- expect(applicationDirectoryRoot.filesystem.name).toEqual(cdvfileApplicationDirectoryFsRootName);
-
- // Requires HelloCordova www assets, <allow-navigation href="cdvfile:*" /> in config.xml or
- // cdvfile: in CSP and <access origin="cdvfile://*" /> in config.xml
- resolveLocalFileSystemURL('cdvfile://localhost/' + cdvfileApplicationDirectoryFsRootName + '/www/img/logo.png', function (entry) {
- /* eslint-enable no-undef */
- expect(entry.isFile).toBe(true);
- expect(entry.isDirectory).toBe(false);
- expect(entry.name).toCanonicallyMatch('logo.png');
- expect(entry.fullPath).toCanonicallyMatch('/www/img/logo.png');
- expect(entry.filesystem.name).toEqual(cdvfileApplicationDirectoryFsRootName);
-
- var img = new Image(); // eslint-disable-line no-undef
- img.onerror = function (err) {
- expect(err).not.toBeDefined();
- done();
- };
- img.onload = function () {
- done();
- };
- img.src = entry.toInternalURL();
- }, failed.bind(null, done, 'resolveLocalFileSystemURL failed for cdvfile applicationDirectory'));
- }, failed.bind(null, done, 'resolveLocalFileSystemURL failed for cdvfile applicationDirectory'));
- });
- });
- // cross-file-system copy and move
- describe('IndexedDB-based impl', function () {
- it('file.spec.131 Nested file or nested directory should be removed when removing a parent directory', function (done) {
- var parentDirName = 'deletedDir131';
- var nestedDirName = 'nestedDir131';
- var nestedFileName = 'nestedFile131.txt';
-
- createDirectory(parentDirName, function (parent) {
- parent.getDirectory(nestedDirName, { create: true }, function () {
- parent.getFile(nestedFileName, { create: true }, function () {
- parent.removeRecursively(function () {
- root.getDirectory(parentDirName, { create: false }, failed.bind(this, done, 'root.getDirectory - unexpected success callback : ' + parentDirName), function () {
- parent.getFile(nestedFileName, { create: false }, failed.bind(this, done, 'getFile - unexpected success callback : ' + nestedFileName), function () {
- parent.getDirectory(nestedDirName, { create: false }, failed.bind(this, done, 'getDirectory - unexpected success callback : ' + nestedDirName), done);
- });
- });
- }, failed.bind(this, done, 'removeRecursively - Error removing directory : ' + parentDirName));
- }, failed.bind(this, done, 'getFile - Error creating file : ' + nestedFileName));
- }, failed.bind(this, done, 'getDirectory - Error creating directory : ' + nestedDirName));
- }, failed.bind(this, done, 'root.getDirectory - Error creating directory : ' + parentDirName));
- });
- it('file.spec.132 Entry should be created succesfully when using relative paths if its parent directory exists', function (done) {
- /* Directory entries have to be created successively.
- For example, the call `fs.root.getDirectory('dir1/dir2', {create:true}, successCallback, errorCallback)`
- will fail if dir1 did not exist. */
- var parentName = 'parentName132';
- var nestedName = 'nestedName132';
- var path = parentName + '/' + nestedName;
-
- var win = function (directory) {
- expect(directory).toBeDefined();
- expect(directory.isFile).toBe(false);
- expect(directory.isDirectory).toBe(true);
- expect(directory.name).toCanonicallyMatch(nestedName);
- expect(directory.fullPath).toCanonicallyMatch('/' + path + '/');
- deleteEntry(directory.name);
- deleteEntry(parentName, done);
- };
+// var file1 = 'entry.move.itn.file1';
+// var file2 = 'bad:file:name';
+// // create a new file entry to kick off it
+// createFile(file1, function (entry) {
+// // move file1 to file2
+// entry.moveTo(root, file2, succeed.bind(null, done, 'entry.moveTo - Unexpected success callback, : ' + file1 + ' to root as: ' + file2), function (error) {
+// expect(error).toBeDefined();
+// expect(error).toBeFileError(FileError.ENCODING_ERR); // eslint-disable-line no-undef
+// // cleanup
+// deleteEntry(file1, done);
+// });
+// }, failed.bind(null, done, 'createFile - Error creating file: ' + file1));
+// });
+// });
+// // Entry
+// describe('FileReader', function () {
+// it('file.spec.81 should have correct methods', function () {
+// var reader = new FileReader(); // eslint-disable-line no-undef
+// expect(reader).toBeDefined();
+// expect(typeof reader.readAsBinaryString).toBe('function');
+// expect(typeof reader.readAsDataURL).toBe('function');
+// expect(typeof reader.readAsText).toBe('function');
+// expect(typeof reader.readAsArrayBuffer).toBe('function');
+// expect(typeof reader.abort).toBe('function');
+// expect(reader.result).toBe(null);
+// });
+// });
+// // FileReader
+// describe('Read method', function () {
+// it('file.spec.82 should error out on non-existent file', function (done) {
+// var fileName = cordova.platformId === 'windowsphone' ? root.toURL() + '/' + 'somefile.txt' : 'somefile.txt'; // eslint-disable-line no-undef
+// var verifier = function (evt) {
+// expect(evt).toBeDefined();
+// if (isChrome) {
+// expect(evt.target.error).toBeFileError(FileError.SYNTAX_ERR); // eslint-disable-line no-undef
+// } else {
+// expect(evt.target.error).toBeFileError(FileError.NOT_FOUND_ERR); // eslint-disable-line no-undef
+// }
+// done();
+// };
+// root.getFile(fileName, {
+// create: true
+// }, function (entry) {
+// entry.file(function (file) {
+// deleteEntry(fileName, function () {
+// // Create FileReader
+// var reader = new FileReader(); // eslint-disable-line no-undef
+// reader.onerror = verifier;
+// reader.onload = succeed.bind(null, done, 'reader.onload - Unexpected success callback, file: ' + fileName + ' it should not exists');
+// reader.readAsText(file);
+// }, failed.bind(null, done, 'deleteEntry - Error removing file: ' + fileName));
+// }, failed.bind(null, done, 'entry.file - Error reading file: ' + fileName));
+// }, failed.bind(null, done, 'root.getFile - Error creating file: ' + fileName));
+// });
+// it('file.spec.83 should be able to read native blob objects', function (done) {
+// // Skip test if blobs are not supported (e.g.: Android 2.3).
+// if (typeof window.Blob === 'undefined' || typeof window.Uint8Array === 'undefined') {
+// expect(true).toFailWithMessage('Platform does not supported this feature');
+// done();
+// }
+// var contents = 'asdf';
+// var uint8Array = new Uint8Array(contents.length);
+// for (var i = 0; i < contents.length; ++i) {
+// uint8Array[i] = contents.charCodeAt(i);
+// }
+// var Builder = window.BlobBuilder || window.WebKitBlobBuilder;
+// var blob;
+// if (Builder) {
+// var builder = new Builder();
+// builder.append(uint8Array.buffer);
+// builder.append(contents);
+// blob = builder.getBlob('text/plain');
+// } else {
+// try {
+// // iOS 6 does not support Views, so pass in the buffer.
+// blob = new Blob([uint8Array.buffer, contents]); // eslint-disable-line no-undef
+// } catch (e) {
+// // Skip the test if we can't create a blob (e.g.: iOS 5).
+// if (e instanceof TypeError) {
+// expect(true).toFailWithMessage('Platform does not supported this feature');
+// done();
+// }
+// throw e;
+// }
+// }
+// var verifier = function (evt) {
+// expect(evt).toBeDefined();
+// expect(evt.target.result).toBe('asdfasdf');
+// done();
+// };
+// var reader = new FileReader(); // eslint-disable-line no-undef
+// reader.onloadend = verifier;
+// reader.readAsText(blob);
+// });
+// function writeDummyFile (writeBinary, callback, done, fileContents) {
+// var fileName = 'dummy.txt';
+// var fileEntry = null;
+// // use default string if file data is not provided
+// var fileData = fileContents !== undefined ? fileContents :
+// '\u20AC\xEB - There is an exception to every rule. Except this one.';
+// var fileDataAsBinaryString = fileContents !== undefined ? fileContents :
+// '\xe2\x82\xac\xc3\xab - There is an exception to every rule. Except this one.';
- createDirectory(parentName, function () {
- root.getDirectory(parentName + '/' + nestedName, {create: true}, win,
- failed.bind(this, done, 'root.getDirectory - Error getting directory : ' + path));
- }, failed.bind(this, done, 'root.getDirectory - Error getting directory : ' + parentName));
- });
- it('file.spec.133 A file being removed should not affect another file with name being a prefix of the removed file name.', function (done) {
-
- // Names include special symbols so that we check the IndexedDB range used
- var deletedFileName = 'deletedFile.0';
- var secondFileName = 'deletedFile.0.1';
-
- var win = function (fileEntry) {
- expect(fileEntry).toBeDefined();
- expect(fileEntry.isFile).toBe(true);
- expect(fileEntry.isDirectory).toBe(false);
- expect(fileEntry.name).toCanonicallyMatch(secondFileName);
- deleteEntry(fileEntry.name, done);
- };
+// function createWriter (fe) {
+// fileEntry = fe;
+// fileEntry.createWriter(writeFile, failed.bind(null, done, 'fileEntry.createWriter - Error reading file: ' + fileName));
+// }
- createFile(deletedFileName, function (deletedFile) {
- createFile(secondFileName, function () {
- deletedFile.remove(function () {
- root.getFile(deletedFileName, {create: false}, failed.bind(this, done, 'getFile - unexpected success callback getting deleted file : ' + deletedFileName), function () {
- root.getFile(secondFileName, {create: false}, win, failed.bind(this, done, 'getFile - Error getting file after deleting deletedFile : ' + secondFileName));
- });
- }, failed.bind(this, done, 'remove - Error removing file : ' + deletedFileName));
- }, failed.bind(this, done, 'getFile - Error creating file : ' + secondFileName));
- }, failed.bind(this, done, 'getFile - Error creating file : ' + deletedFileName));
- });
- it('file.spec.134 A directory being removed should not affect another directory with name being a prefix of the removed directory name.', function (done) {
-
- // Names include special symbols so that we check the IndexedDB range used
- var deletedDirName = 'deletedDir.0';
- var secondDirName = 'deletedDir.0.1';
-
- var win = function (directory) {
- expect(directory).toBeDefined();
- expect(directory.isFile).toBe(false);
- expect(directory.isDirectory).toBe(true);
- expect(directory.name).toCanonicallyMatch(secondDirName);
- deleteEntry(directory.name, done);
- };
+// // writes file and reads it back in
+// function writeFile (writer) {
+// writer.onwriteend = function () {
+// fileEntry.file(function (f) {
+// callback(fileEntry, f, fileData, fileDataAsBinaryString);
+// }, failed.bind(null, done, 'writer.onwriteend - Error writing data on file: ' + fileName));
+// };
+// writer.write(fileData);
+// }
- createDirectory(deletedDirName, function (deletedDir) {
- createDirectory(secondDirName, function () {
- deletedDir.remove(function () {
- root.getDirectory(deletedDirName, {create: false}, failed.bind(this, done, 'getDirectory - unexpected success callback getting deleted directory : ' + deletedDirName), function () {
- root.getDirectory(secondDirName, {create: false}, win, failed.bind(this, done, 'getDirectory - Error getting directory after deleting deletedDirectory : ' + secondDirName));
- });
- }, failed.bind(this, done, 'remove - Error removing directory : ' + deletedDirName));
- }, failed.bind(this, done, 'root.getDirectory - Error creating directory : ' + secondDirName));
- }, failed.bind(this, done, 'root.getDirectory - Error creating directory : ' + deletedDirName));
- });
- it('file.spec.135 Deletion of a child directory should not affect the parent directory.', function (done) {
+// fileData += writeBinary ? 'bin:\x01\x00' : '';
+// fileDataAsBinaryString += writeBinary ? 'bin:\x01\x00' : '';
+// // create a file, write to it, and read it in again
+// createFile(fileName, createWriter, failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
+// }
+// function runReaderTest (funcName, writeBinary, done, progressFunc, verifierFunc, sliceStart, sliceEnd, fileContents) {
+// writeDummyFile(writeBinary, function (fileEntry, file, fileData, fileDataAsBinaryString) {
+// var verifier = function (evt) {
+// expect(evt).toBeDefined();
+// verifierFunc(evt, fileData, fileDataAsBinaryString);
+// };
+// var reader = new FileReader(); // eslint-disable-line no-undef
+// reader.onprogress = progressFunc;
+// reader.onload = verifier;
+// reader.onerror = failed.bind(null, done, 'reader.onerror - Error reading file: ' + file + ' using function: ' + funcName);
+// if (sliceEnd !== undefined) {
+// // 'type' is specified so that is will be preserved in the resulting file:
+// // http://www.w3.org/TR/FileAPI/#slice-method-algo -> "6.4.1. The slice method" -> 4. A), 6. c)
+// file = file.slice(sliceStart, sliceEnd, file.type);
+// } else if (sliceStart !== undefined) {
+// file = file.slice(sliceStart, file.size, file.type);
+// }
+// reader[funcName](file);
+// }, done, fileContents);
+// }
+// function arrayBufferEqualsString (ab, str) {
+// var buf = new Uint8Array(ab);
+// var match = buf.length === str.length;
+// for (var i = 0; match && i < buf.length; i++) {
+// match = buf[i] === str.charCodeAt(i);
+// }
+// return match;
+// }
+// it('file.spec.84 should read file properly, readAsText', function (done) {
+// runReaderTest('readAsText', false, done, null, function (evt, fileData, fileDataAsBinaryString) {
+// expect(evt.target.result).toBe(fileData);
+// done();
+// });
+// });
+// it('file.spec.84.1 should read JSON file properly, readAsText', function (done) {
+// var testObject = {key1: 'value1', key2: 2};
+// runReaderTest('readAsText', false, done, null, function (evt, fileData, fileDataAsBinaryString) {
+// expect(evt.target.result).toEqual(JSON.stringify(testObject));
+// done();
+// }, undefined, undefined, JSON.stringify(testObject));
+// });
+// it('file.spec.85 should read file properly, Data URI', function (done) {
+// runReaderTest('readAsDataURL', true, done, null, function (evt, fileData, fileDataAsBinaryString) {
+// /* `readAsDataURL` function is supported, but the mediatype in Chrome depends on entry name extension,
+// mediatype in IE is always empty (which is the same as `text-plain` according the specification),
+// the mediatype in Firefox is always `application/octet-stream`.
+// For example, if the content is `abcdefg` then Firefox returns `data:application/octet-stream;base64,YWJjZGVmZw==`,
+// IE returns `data:;base64,YWJjZGVmZw==`, Chrome returns `data:<mediatype depending on extension of entry name>;base64,YWJjZGVmZw==`. */
+// expect(evt.target.result).toBeDataUrl();
- var parentName = 'parentName135';
- var childName = 'childName135';
+// // The atob function it is completely ignored during mobilespec execution, besides the returned object: evt
+// // it is encoded and the atob function is aimed to decode a string. Even with btoa (encode) the function it gets stucked
+// // because of the Unicode characters that contains the fileData object.
+// // Issue reported at JIRA with all the details: CB-7095
- var win = function (directory) {
- expect(directory).toBeDefined();
- expect(directory.isFile).toBe(false);
- expect(directory.isDirectory).toBe(true);
- expect(directory.name).toCanonicallyMatch(parentName);
- deleteEntry(directory.name, done);
- };
+// // expect(evt.target.result.slice(23)).toBe(atob(fileData));
- createDirectory(parentName, function (parent) {
- parent.getDirectory(childName, {create: true}, function (child) {
- child.removeRecursively(function () {
- root.getDirectory(parentName, {create: false}, win, failed.bind(this, done, 'root.getDirectory - Error getting parent directory : ' + parentName));
- },
- failed.bind(this, done, 'getDirectory - Error removing directory : ' + childName));
- }, failed.bind(this, done, 'getDirectory - Error creating directory : ' + childName));
- }, failed.bind(this, done, 'root.getDirectory - Error creating directory : ' + parentName));
- });
- it('file.spec.136 Paths should support Unicode symbols.', function (done) {
+// done();
+// });
+// });
+// it('file.spec.86 should read file properly, readAsBinaryString', function (done) {
+// if (isIE) {
+// /* `readAsBinaryString` function is not supported by IE and has not the stub. */
+// pending();
+// }
- var dirName = '文件插件';
+// runReaderTest('readAsBinaryString', true, done, null, function (evt, fileData, fileDataAsBinaryString) {
+// expect(evt.target.result).toBe(fileDataAsBinaryString);
+// done();
+// });
+// });
+// it('file.spec.87 should read file properly, readAsArrayBuffer', function (done) {
+// // Skip test if ArrayBuffers are not supported (e.g.: Android 2.3).
+// if (typeof window.ArrayBuffer === 'undefined') {
+// expect(true).toFailWithMessage('Platform does not supported this feature');
+// done();
+// }
+// runReaderTest('readAsArrayBuffer', true, done, null, function (evt, fileData, fileDataAsBinaryString) {
+// expect(arrayBufferEqualsString(evt.target.result, fileDataAsBinaryString)).toBe(true);
+// done();
+// });
+// });
+// it('file.spec.88 should read sliced file: readAsText', function (done) {
+// runReaderTest('readAsText', false, done, null, function (evt, fileData, fileDataAsBinaryString) {
+// expect(evt.target.result).toBe(fileDataAsBinaryString.slice(10, 40));
+// done();
+// }, 10, 40);
+// });
+// it('file.spec.89 should read sliced file: slice past eof', function (done) {
+// runReaderTest('readAsText', false, done, null, function (evt, fileData, fileDataAsBinaryString) {
+// expect(evt.target.result).toBe(fileData.slice(-5, 9999));
+// done();
+// }, -5, 9999);
+// });
+// it('file.spec.90 should read sliced file: slice to eof', function (done) {
+// runReaderTest('readAsText', false, done, null, function (evt, fileData, fileDataAsBinaryString) {
+// expect(evt.target.result).toBe(fileData.slice(-5));
+// done();
+// }, -5);
+// });
+// it('file.spec.91 should read empty slice', function (done) {
+// runReaderTest('readAsText', false, done, null, function (evt, fileData, fileDataAsBinaryString) {
+// expect(evt.target.result).toBe('');
+// done();
+// }, 0, 0);
+// });
+// it('file.spec.92 should read sliced file properly, readAsDataURL', function (done) {
+// runReaderTest('readAsDataURL', true, done, null, function (evt, fileData, fileDataAsBinaryString) {
+// /* `readAsDataURL` function is supported, but the mediatype in Chrome depends on entry name extension,
+// mediatype in IE is always empty (which is the same as `text-plain` according the specification),
+// the mediatype in Firefox is always `application/octet-stream`.
+// For example, if the content is `abcdefg` then Firefox returns `data:application/octet-stream;base64,YWJjZGVmZw==`,
+// IE returns `data:;base64,YWJjZGVmZw==`, Chrome returns `data:<mediatype depending on extension of entry name>;base64,YWJjZGVmZw==`. */
+// expect(evt.target.result).toBeDataUrl();
- var win = function (directory) {
- expect(directory).toBeDefined();
- expect(directory.isFile).toBe(false);
- expect(directory.isDirectory).toBe(true);
- expect(directory.name).toCanonicallyMatch(dirName);
- deleteEntry(directory.name, done);
- };
+// // The atob function it is completely ignored during mobilespec execution, besides the returned object: evt
+// // it is encoded and the atob function is aimed to decode a string. Even with btoa (encode) the function it gets stucked
+// // because of the Unicode characters that contains the fileData object.
+// // Issue reported at JIRA with all the details: CB-7095
- createDirectory(dirName, function () {
- root.getDirectory(dirName, {create: false}, win,
- failed.bind(this, done, 'root.getDirectory - Error getting directory : ' + dirName));
- }, failed.bind(this, done, 'root.getDirectory - Error creating directory : ' + dirName));
- });
- });
- // Content and Asset URLs
- if (cordova.platformId === 'android') { // eslint-disable-line no-undef
- describe('content: URLs', function () {
- // Warning: Default HelloWorld www directory structure is required for these tests (www/index.html at least)
- function testContentCopy (src, done) {
- var file2 = 'entry.copy.file2b';
- var fullPath = joinURL(temp_root.fullPath, file2);
- var validateFile = function (entry) {
- expect(entry.isFile).toBe(true);
- expect(entry.isDirectory).toBe(false);
- expect(entry.name).toCanonicallyMatch(file2);
- expect(entry.fullPath).toCanonicallyMatch(fullPath);
- expect(entry.filesystem.name).toEqual('temporary');
- // cleanup
- deleteEntry(entry.name, done);
- };
- var transfer = function () {
- resolveLocalFileSystemURL(src, function (entry) { // eslint-disable-line no-undef
- expect(entry).toBeDefined();
- expect(entry.filesystem.name).toEqual('content');
- entry.copyTo(temp_root, file2, validateFile, failed.bind(null, done, 'entry.copyTo - Error copying file: ' + entry.toURL() + ' to TEMPORAL root as: ' + file2));
- }, failed.bind(null, done, 'resolveLocalFileSystemURL failed for content provider'));
- };
- // Delete any existing file to start things off
- temp_root.getFile(file2, {}, function (entry) {
- entry.remove(transfer, failed.bind(null, done, 'entry.remove - Error removing file: ' + file2));
- }, transfer);
- }
- it('file.spec.138 copyTo: content', function (done) {
- testContentCopy('content://org.apache.cordova.file.testprovider/www/index.html', done);
- });
- it('file.spec.139 copyTo: content /w space and query', function (done) {
- testContentCopy('content://org.apache.cordova.file.testprovider/?name=foo%20bar&realPath=%2Fwww%2Findex.html', done);
- });
- it('file.spec.140 delete: content should fail', function (done) {
- resolveLocalFileSystemURL('content://org.apache.cordova.file.testprovider/www/index.html', function (entry) { // eslint-disable-line no-undef
- entry.remove(failed.bind(null, done, 'expected delete to fail'), done);
- }, failed.bind(null, done, 'resolveLocalFileSystemURL failed for content provider'));
- });
- });
+// // expect(evt.target.result.slice(23)).toBe(atob(fileDataAsBinaryString.slice(10, -3)));
- // these tests ensure that you can read and copy from android_asset folder
- // for details see https://issues.apache.org/jira/browse/CB-6428
- // and https://mail-archives.apache.org/mod_mbox/cordova-dev/201508.mbox/%3C782154441.8406572.1440182722528.JavaMail.yahoo%40mail.yahoo.com%3E
- describe('asset: URLs', function () {
- it('file.spec.141 filePaths.applicationStorage', function () {
- expect(cordova.file.applicationDirectory).toEqual('file:///android_asset/'); // eslint-disable-line no-undef
- }, MEDIUM_TIMEOUT);
- it('file.spec.142 assets should be enumerable', function (done) {
- resolveLocalFileSystemURL('file:///android_asset/www/fixtures/asset-test', function (entry) { // eslint-disable-line no-undef
- var reader = entry.createReader();
- reader.readEntries(function (entries) {
- expect(entries.length).not.toBe(0);
- done();
- }, failed.bind(null, done, 'reader.readEntries - Error during reading of entries from assets directory'));
- }, failed.bind(null, done, 'resolveLocalFileSystemURL failed for assets'));
- }, MEDIUM_TIMEOUT);
- it('file.spec.145 asset subdirectories should be obtainable', function (done) {
- resolveLocalFileSystemURL('file:///android_asset/www/fixtures', function (entry) { // eslint-disable-line no-undef
- entry.getDirectory('asset-test', { create: false }, function (subDir) {
- expect(subDir).toBeDefined();
- expect(subDir.isFile).toBe(false);
- expect(subDir.isDirectory).toBe(true);
- expect(subDir.name).toCanonicallyMatch('asset-test');
- done();
- }, failed.bind(null, done, 'entry.getDirectory - Error getting asset subdirectory'));
- }, failed.bind(null, done, 'resolveLocalFileSystemURL failed for assets'));
- }, MEDIUM_TIMEOUT);
- it('file.spec.146 asset files should be readable', function (done) {
- resolveLocalFileSystemURL('file:///android_asset/www/fixtures/asset-test/asset-test.txt', function (entry) { // eslint-disable-line no-undef
- expect(entry.isFile).toBe(true);
- entry.file(function (file) {
- expect(file).toBeDefined();
- var reader = new FileReader(); // eslint-disable-line no-undef
- reader.onerror = failed.bind(null, done, 'reader.readAsText - Error reading asset text file');
- reader.onloadend = function () {
- expect(this.result).toBeDefined();
- expect(this.result.length).not.toBe(0);
- done();
- };
- reader.readAsText(file);
- }, failed.bind(null, done, 'entry.file - Error reading asset file'));
- }, failed.bind(null, done, 'resolveLocalFileSystemURL failed for assets'));
- }, MEDIUM_TIMEOUT);
- it('file.spec.143 copyTo: asset -> temporary', function (done) {
- var file2 = 'entry.copy.file2b';
- var fullPath = joinURL(temp_root.fullPath, file2);
- var validateFile = function (entry) {
- expect(entry.isFile).toBe(true);
- expect(entry.isDirectory).toBe(false);
- expect(entry.name).toCanonicallyMatch(file2);
- expect(entry.fullPath).toCanonicallyMatch(fullPath);
- expect(entry.filesystem.name).toEqual('temporary');
- // cleanup
- deleteEntry(entry.name, done);
- };
- var transfer = function () {
- resolveLocalFileSystemURL('file:///android_asset/www/index.html', function (entry) { // eslint-disable-line no-undef
- expect(entry.filesystem.name).toEqual('assets');
- entry.copyTo(temp_root, file2, validateFile, failed.bind(null, done, 'entry.copyTo - Error copying file: ' + entry.toURL() + ' to TEMPORAL root as: ' + file2));
- }, failed.bind(null, done, 'resolveLocalFileSystemURL failed for assets'));
- };
- // Delete any existing file to start things off
- temp_root.getFile(file2, {}, function (entry) {
- entry.remove(transfer, failed.bind(null, done, 'entry.remove - Error removing file: ' + file2));
- }, transfer);
- }, MEDIUM_TIMEOUT);
- });
- it('file.spec.144 copyTo: asset directory', function (done) {
- var srcUrl = 'file:///android_asset/www/fixtures/asset-test';
- var dstDir = 'entry.copy.dstDir';
- var dstPath = joinURL(root.fullPath, dstDir);
- // create a new directory entry to kick off it
- deleteEntry(dstDir, function () {
- resolveLocalFileSystemURL(srcUrl, function (directory) { // eslint-disable-line no-undef
- directory.copyTo(root, dstDir, function (directory) {
- expect(directory).toBeDefined();
- expect(directory.isFile).toBe(false);
- expect(directory.isDirectory).toBe(true);
- expect(directory.fullPath).toCanonicallyMatch(dstPath);
- expect(directory.name).toCanonicallyMatch(dstDir);
- root.getDirectory(dstDir, {
- create: false
- }, function (dirEntry) {
- expect(dirEntry).toBeDefined();
- expect(dirEntry.isFile).toBe(false);
- expect(dirEntry.isDirectory).toBe(true);
- expect(dirEntry.fullPath).toCanonicallyMatch(dstPath);
- expect(dirEntry.name).toCanonicallyMatch(dstDir);
- dirEntry.getFile('asset-test.txt', {
- create: false
- }, function (fileEntry) {
- expect(fileEntry).toBeDefined();
- expect(fileEntry.isFile).toBe(true);
- // cleanup
- deleteEntry(dstDir, done);
- }, failed.bind(null, done, 'dirEntry.getFile - Error getting subfile'));
- }, failed.bind(null, done, 'root.getDirectory - Error getting copied directory'));
- }, failed.bind(null, done, 'directory.copyTo - Error copying directory'));
- }, failed.bind(null, done, 'resolving src dir'));
- }, failed.bind(null, done, 'deleteEntry - Error removing directory : ' + dstDir));
- }, MEDIUM_TIMEOUT);
- }
- });
+// done();
+// }, 10, -3);
+// });
+// it('file.spec.93 should read sliced file properly, readAsBinaryString', function (done) {
+// if (isIE) {
+// /* `readAsBinaryString` function is not supported by IE and has not the stub. */
+// pending();
+// }
-};
-//* *****************************************************************************************
-//* **************************************Manual Tests***************************************
-//* *****************************************************************************************
-
-exports.defineManualTests = function (contentEl, createActionButton) {
-
- function resolveFs (fsname) {
- var fsURL = 'cdvfile://localhost/' + fsname + '/';
- logMessage('Resolving URL: ' + fsURL);
- /* eslint-disable no-undef */
- resolveLocalFileSystemURL(fsURL, function (entry) {
- logMessage('Success', 'green');
- logMessage(entry.toURL(), 'blue');
- logMessage(entry.toInternalURL(), 'blue');
- logMessage('Resolving URL: ' + entry.toURL());
- resolveLocalFileSystemURL(entry.toURL(), function (entry2) {
- logMessage('Success', 'green');
- logMessage(entry2.toURL(), 'blue');
- logMessage(entry2.toInternalURL(), 'blue');
- }, logError('resolveLocalFileSystemURL'));
- }, logError('resolveLocalFileSystemURL'));
- }
-
- function testPrivateURL () {
- requestFileSystem(LocalFileSystem.TEMPORARY, 0, function (fileSystem) {
- logMessage('Temporary root is at ' + fileSystem.root.toNativeURL());
- fileSystem.root.getFile('testfile', {
- create: true
- }, function (entry) {
- logMessage('Temporary file is at ' + entry.toNativeURL());
- if (entry.toNativeURL().substring(0, 12) === 'file:///var/') {
- logMessage('File starts with /var/, trying /private/var');
- var newURL = 'file://localhost/private/var/' + entry.toNativeURL().substring(12) + '?and=another_thing';
- // var newURL = entry.toNativeURL();
- logMessage(newURL, 'blue');
- resolveLocalFileSystemURL(newURL, function (newEntry) {
- logMessage('Successfully resolved.', 'green');
- logMessage(newEntry.toURL(), 'blue');
- logMessage(newEntry.toNativeURL(), 'blue');
- }, logError('resolveLocalFileSystemURL'));
- }
- }, logError('getFile'));
- }, logError('requestFileSystem'));
- }
-
- function resolveFsContactImage () {
- navigator.contacts.pickContact(function (contact) {
- var logBox = document.getElementById('logContactBox');
- logBox.innerHTML = '';
- var resolveResult = document.createElement('p');
- if (contact.photos) {
- var photoURL = contact.photos[0].value;
- resolveLocalFileSystemURL(photoURL, function (entry) {
- /* eslint-enable no-undef */
- var contactImage = document.createElement('img');
- var contactLabelImage = document.createElement('p');
- contactLabelImage.innerHTML = 'Result contact image';
- contactImage.setAttribute('src', entry.toURL());
- resolveResult.innerHTML = 'Success resolve\n' + entry.toURL();
- logBox.appendChild(contactLabelImage);
- logBox.appendChild(contactImage);
- logBox.appendChild(resolveResult);
- },
- function (err) {
- console.log('resolve error' + err);
- });
- } else {
- resolveResult.innerHTML = 'Contact has no photos';
- logBox.appendChild(resolveResult);
- }
- },
- function (err) {
- console.log('contact pick error' + err);
- });
- }
-
- function clearLog () {
- var log = document.getElementById('info');
- log.innerHTML = '';
- }
-
- function logMessage (message, color) {
- var log = document.getElementById('info');
- var logLine = document.createElement('div');
- if (color) {
- logLine.style.color = color;
- }
- logLine.innerHTML = message;
- log.appendChild(logLine);
- }
-
- function logError (serviceName) {
- return function (err) {
- logMessage('ERROR: ' + serviceName + ' ' + JSON.stringify(err), 'red');
- };
- }
-
- var fsRoots = {
- 'ios': 'library,library-nosync,documents,documents-nosync,cache,bundle,root,private',
- 'osx': 'library,library-nosync,documents,documents-nosync,cache,bundle,root,private',
- 'android': 'files,files-external,documents,sdcard,cache,cache-external,assets,root',
- 'amazon-fireos': 'files,files-external,documents,sdcard,cache,cache-external,root',
- 'windows': 'temporary,persistent'
- };
+// runReaderTest('readAsBinaryString', true, done, null, function (evt, fileData, fileDataAsBinaryString) {
+// expect(evt.target.result).toBe(fileDataAsBinaryString.slice(-10, -5));
+// done();
+// }, -10, -5);
+// });
+// it('file.spec.94 should read sliced file properly, readAsArrayBuffer', function (done) {
+// // Skip test if ArrayBuffers are not supported (e.g.: Android 2.3).
+// if (typeof window.ArrayBuffer === 'undefined') {
+// expect(true).toFailWithMessage('Platform does not supported this feature');
+// done();
+// }
+// runReaderTest('readAsArrayBuffer', true, done, null, function (evt, fileData, fileDataAsBinaryString) {
+// expect(arrayBufferEqualsString(evt.target.result, fileDataAsBinaryString.slice(0, -1))).toBe(true);
+// done();
+// }, 0, -1);
+// });
+// it('file.spec.94.5 should read large file in multiple chunks, readAsArrayBuffer', function (done) {
+// // Skip test if ArrayBuffers are not supported (e.g.: Android 2.3).
+// if (typeof window.ArrayBuffer === 'undefined') {
+// expect(true).toFailWithMessage('Platform does not supported this feature');
+// done();
+// }
- // Add title and align to content
- var div = document.createElement('h2');
- div.appendChild(document.createTextNode('File Systems'));
- div.setAttribute('align', 'center');
- contentEl.appendChild(div);
-
- div = document.createElement('h3');
- div.appendChild(document.createTextNode('Results are displayed in yellow status box below with expected results noted under that'));
- div.setAttribute('align', 'center');
- contentEl.appendChild(div);
-
- div = document.createElement('div');
- div.setAttribute('id', 'button');
- div.setAttribute('align', 'center');
- contentEl.appendChild(div);
- /* eslint-disable no-undef */
- if (fsRoots.hasOwnProperty(cordova.platformId)) {
- (fsRoots[cordova.platformId].split(',')).forEach(function (fs) {
- if (cordova.platformId === 'ios' && fs === 'private') {
- /* eslint-enable no-undef */
- createActionButton('Test private URL (iOS)', function () {
- clearLog();
- testPrivateURL();
- }, 'button');
- } else {
- createActionButton(fs, function () {
- clearLog();
- resolveFs(fs);
- }, 'button');
- }
- });
- }
-
- div = document.createElement('div');
- div.setAttribute('id', 'info');
- div.setAttribute('align', 'center');
- contentEl.appendChild(div);
-
- div = document.createElement('h3');
- div.appendChild(document.createTextNode('For each test above, file or directory should be successfully found. ' +
- 'Status box should say Resolving URL was Success. The first URL resolved is the internal URL. ' +
- 'The second URL resolved is the absolute URL. Blue URLs must match.'));
- contentEl.appendChild(div);
-
- div = document.createElement('h3');
- div.appendChild(document.createTextNode('For Test private URL (iOS), the private URL (first blue URL in status box) ' +
- 'should be successfully resolved. Status box should say Successfully resolved. Both blue URLs below ' +
- 'that should match.'));
- contentEl.appendChild(div);
-
- div = document.createElement('h2');
- div.appendChild(document.createTextNode('Resolving content urls'));
- div.setAttribute('align', 'center');
- contentEl.appendChild(div);
-
- div = document.createElement('div');
- div.setAttribute('id', 'contactButton');
- div.setAttribute('align', 'center');
- contentEl.appendChild(div);
-
- div = document.createElement('div');
- div.setAttribute('id', 'logContactBox');
- div.setAttribute('align', 'center');
- contentEl.appendChild(div);
-
- createActionButton('show-contact-image', function () {
- resolveFsContactImage();
- }, 'contactButton');
+// var largeText = '';
+// for (var i = 0; i < 1000; i++) {
+// largeText += 'Test ' + i + '\n';
+// }
+
+// // Set the chunk size so that the read will take 5 chunks
+// FileReader.READ_CHUNK_SIZE = Math.floor(largeText.length / 4) + 1; // eslint-disable-line no-undef
+
+// var chunkCount = 0;
+// var lastProgressValue = -1;
+// var progressFunc = function (evt) {
+// expect(evt.loaded).toBeDefined();
+// expect(evt.total).toBeDefined();
+
+// expect(evt.total >= largeText.length).toBe(true);
+// expect(evt.total <= largeText.length + 5).toBe(true);
+// expect(evt.loaded > lastProgressValue).toBe(true);
+// expect(evt.loaded <= evt.total).toBe(true);
+
+// lastProgressValue = evt.loaded;
+// chunkCount++;
+// };
+
+// runReaderTest(
+// 'readAsArrayBuffer', true, done, progressFunc,
+// function (evt, fileData, fileDataAsBinaryString) {
+// expect(arrayBufferEqualsString(evt.target.result, fileDataAsBinaryString.slice(0, -1))).toBe(true);
+// expect(lastProgressValue >= largeText.length).toBe(true);
+// expect(lastProgressValue <= largeText.length + 5).toBe(true);
+// if (!isChrome) {
+// // chrome downloads it in one chunk -.-
+// expect(chunkCount).toBe(5);
+// }
+// done();
+// },
+// 0, -1, largeText);
+// });
+// it('file.spec.94.6 should read large file in multiple chunks, readAsDataURL', function (done) {
+// var largeText = '';
+// for (var i = 0; i < 10; i++) {
+// largeText += 'Test ' + i + '\n';
+// }
+
+// // Set the chunk size so that the read will take 5 chunks
+// FileReader.READ_CHUNK_SIZE = Math.floor(largeText.length / 4) + 1; // eslint-disable-line no-undef
+
+// var lastProgressValue = 0;
+// var progressFunc = function (evt) {
+// expect(evt.total).toBeDefined();
+// expect(evt.total).toEqual(largeText.length);
+
+// expect(evt.loaded).toBeDefined();
+// expect(evt.loaded).toBeGreaterThan(lastProgressValue);
+// expect(evt.loaded).toBeLessThan(evt.total + 1);
+
+// lastProgressValue = evt.loaded;
+// };
+
+// runReaderTest('readAsDataURL', false, done, progressFunc,
+// function (evt, fileData, fileDataAsBinaryString) {
+// expect(function () {
+// // Cut off data uri prefix
+// var base64Data = evt.target.result.substring(evt.target.result.indexOf(',') + 1);
+// expect(window.atob(base64Data)).toEqual(fileData);
+// }).not.toThrow();
+
+// expect(lastProgressValue).toEqual(largeText.length);
+// done();
+// },
+// undefined, undefined, largeText);
+// });
+// });
+// // Read method
+// describe('FileWriter', function () {
+// it('file.spec.95 should have correct methods', function (done) {
+// // retrieve a FileWriter object
+// var fileName = 'writer.methods';
+// // FileWriter
+// root.getFile(fileName, {
+// create: true
+// }, function (fileEntry) {
+// fileEntry.createWriter(function (writer) {
+// expect(writer).toBeDefined();
+// expect(typeof writer.write).toBe('function');
+// expect(typeof writer.seek).toBe('function');
+// expect(typeof writer.truncate).toBe('function');
+// expect(typeof writer.abort).toBe('function');
+// // cleanup
+// deleteFile(fileName, done);
+// }, failed.bind(null, done, 'fileEntry.createWriter - Error creating writer using fileEntry: ' + fileEntry.name));
+// }, failed.bind(null, done, 'root.getFile - Error creating file: ' + fileName));
+// });
+// it('file.spec.96 should be able to write and append to file, createWriter', function (done) {
+// var fileName = 'writer.append.createWriter'; // file content
+// var content = 'There is an exception to every rule.'; // for checkin file length
+// var exception = ' Except this one.';
+// var length = content.length;
+// // create file, then write and append to it
+// createFile(fileName, function (fileEntry) {
+// // writes initial file content
+// fileEntry.createWriter(function (writer) {
+// // Verifiers declaration
+// function verifier (evt) {
+// expect(writer.length).toBe(length);
+// expect(writer.position).toBe(length);
+// // Append some more data
+// writer.onwriteend = secondVerifier;
+// length += exception.length;
+// writer.seek(writer.length);
+// writer.write(exception);
+// }
+// function secondVerifier (evt) {
+// expect(writer.length).toBe(length);
+// expect(writer.position).toBe(length);
+// var reader = new FileReader(); // eslint-disable-line no-undef
+// reader.onloadend = thirdVerifier;
+// reader.onerror = failed.bind(null, done, 'reader.onerror - Error reading file: ' + fileName);
+// fileEntry.file(function (f) { reader.readAsText(f); });
+// }
+// function thirdVerifier (evt) {
+// expect(evt.target.result).toBe(content + exception);
+// // cleanup
+// deleteFile(fileName, done);
+// }
+
+// // Write process
+// writer.onwriteend = verifier;
+// writer.write(content);
+// }, failed.bind(null, done, 'fileEntry.createWriter - Error creating writer using fileEntry: ' + fileEntry.name));
+// }, failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
+// });
+// it('file.spec.97 should be able to write and append to file, File object', function (done) {
+// var fileName = 'writer.append.File'; // file content
+// var content = 'There is an exception to every rule.'; // for checkin file length
+// var exception = ' Except this one.';
+// var length = content.length;
+// root.getFile(fileName, {
+// create: true
+// }, function (fileEntry) {
+// fileEntry.createWriter(function (writer) {
+// // Verifiers declaration
+// function verifier () {
+// expect(writer.length).toBe(length);
+// expect(writer.position).toBe(length);
+// // Append some more data
+// writer.onwriteend = secondVerifier;
+// length += exception.length;
+// writer.seek(writer.length);
+// writer.write(exception);
+// }
+// function secondVerifier () {
+// expect(writer.length).toBe(length);
+// expect(writer.position).toBe(length);
+// var reader = new FileReader(); // eslint-disable-line no-undef
+// reader.onloadend = thirdVerifier;
+// reader.onerror = failed.bind(null, done, 'reader.onerror - Error reading file: ' + fileName);
+// fileEntry.file(function (f) { reader.readAsText(f); });
+// }
+// function thirdVerifier (evt) {
+// expect(evt.target.result).toBe(content + exception);
+// // cleanup
+// deleteFile(fileName, done);
+// }
+
+// // Write process
+// writer.onwriteend = verifier;
+// writer.write(content);
+// }, failed.bind(null, done, 'fileEntry.createWriter - Error creating writer using fileEntry: ' + fileEntry.name));
+// }, failed.bind(null, done, 'root.getFile - Error creating file: ' + fileName));
+// });
+// it('file.spec.98 should be able to seek to the middle of the file and write more data than file.length', function (done) {
+// var fileName = 'writer.seek.write'; // file content
+// var content = 'This is our sentence.'; // for checking file length
+// var exception = 'newer sentence.';
+// var length = content.length;
+// // create file, then write and append to it
+// createFile(fileName, function (fileEntry) {
+// fileEntry.createWriter(function (writer) {
+// // Verifiers declaration
+// function verifier (evt) {
+// expect(writer.length).toBe(length);
+// expect(writer.position).toBe(length);
+// // Append some more data
+// writer.onwriteend = secondVerifier;
+// length = 12 + exception.length;
+// writer.seek(12);
+// writer.write(exception);
+// }
+// function secondVerifier (evt) {
+// expect(writer.length).toBe(length);
+// expect(writer.position).toBe(length);
+// var reader = new FileReader(); // eslint-disable-line no-undef
+// reader.onloadend = thirdVerifier;
+// reader.onerror = failed.bind(null, done, 'reader.onerror - Error reading file: ' + fileName);
+// fileEntry.file(function (f) { reader.readAsText(f); });
+// }
+// function thirdVerifier (evt) {
+// expect(evt.target.result).toBe(content.substr(0, 12) + exception);
+// // cleanup
+// deleteFile(fileName, done);
+// }
+
+// // Write process
+// writer.onwriteend = verifier;
+// writer.write(content);
+// }, failed.bind(null, done, 'fileEntry.createWriter - Error creating writer using fileEntry: ' + fileEntry.name));
+// }, failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
+// });
+// it('file.spec.99 should be able to seek to the middle of the file and write less data than file.length', function (done) {
+// if (isBrowser) {
+// /* Browser (re)writes as follows: "This is our sentence." -> "This is new.sentence.",
+// i.e. the length is not being changed from content.length and writer length will be equal 21 */
+// pending();
+// }
+
+// var fileName = 'writer.seek.write2'; // file content
+// var content = 'This is our sentence.'; // for checking file length
+// var exception = 'new.';
+// var length = content.length;
+// // create file, then write and append to it
+// createFile(fileName, function (fileEntry) {
+// fileEntry.createWriter(function (writer) {
+// // Verifiers declaration
+// function verifier (evt) {
+// expect(writer.length).toBe(length);
+// expect(writer.position).toBe(length);
+// // Append some more data
+// writer.onwriteend = secondVerifier;
+// length = 8 + exception.length;
+// writer.seek(8);
+// writer.write(exception);
+// }
+// function secondVerifier (evt) {
+// expect(writer.length).toBe(length);
+// expect(writer.position).toBe(length);
+// var reader = new FileReader(); // eslint-disable-line no-undef
+// reader.onloadend = thirdVerifier;
+// reader.onerror = failed.bind(null, done, 'reader.onerror - Error reading file: ' + fileName);
+// fileEntry.file(function (f) { reader.readAsText(f); });
+// }
+// function thirdVerifier (evt) {
+// expect(evt.target.result).toBe(content.substr(0, 8) + exception);
+// // cleanup
+// deleteFile(fileName, done);
+// }
+
+// // Write process
+// writer.onwriteend = verifier;
+// writer.write(content);
+// }, failed.bind(null, done, 'fileEntry.createWriter - Error creating writer using fileEntry: ' + fileEntry.name));
+// }, failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
+// });
+// it('file.spec.100 should be able to write XML data', function (done) {
+// var fileName = 'writer.xml'; // file content
+// var content = '<?xml version="1.0" encoding="UTF-8"?>\n<test prop="ack">\nData\n</test>\n'; // for testing file length
+// var length = content.length;
+// // creates file, then write XML data
+// createFile(fileName, function (fileEntry) {
+// fileEntry.createWriter(function (writer) {
+// // Verifier content
+// var verifier = function (evt) {
+// expect(writer.length).toBe(length);
+// expect(writer.position).toBe(length);
+// // cleanup
+// deleteFile(fileName, done);
+// };
+// // Write process
+// writer.onwriteend = verifier;
+// writer.write(content);
+// }, failed.bind(null, done, 'fileEntry.createWriter - Error creating writer using fileEntry: ' + fileEntry.name));
+// }, failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
+// });
+// it('file.spec.101 should be able to write JSON data', function (done) {
+// var fileName = 'writer.json'; // file content
+// var content = '{ "name": "Guy Incognito", "email": "here@there.com" }'; // for testing file length
+// var length = content.length;
+// // creates file, then write JSON content
+// createFile(fileName, function (fileEntry) {
+// fileEntry.createWriter(function (writer) {
+// // Verifier declaration
+// var verifier = function (evt) {
+// expect(writer.length).toBe(length);
+// expect(writer.position).toBe(length);
+// // cleanup
+// deleteFile(fileName, done);
+// };
+// // Write process
+// writer.onwriteend = verifier;
+// writer.write(content);
+// }, failed.bind(null, done, 'fileEntry.createWriter - Error creating writer using fileEntry: ' + fileEntry.name));
+// }, failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
+// });
+// it('file.spec.102 should be able to seek', function (done) {
+// var fileName = 'writer.seek'; // file content
+// var content = 'There is an exception to every rule. Except this one.'; // for testing file length
+// var length = content.length;
+// // creates file, then write JSON content
+// createFile(fileName, function (fileEntry) {
+// // writes file content and tests writer.seek
+// fileEntry.createWriter(function (writer) {
+// // Verifier declaration
+// var verifier = function () {
+// expect(writer.position).toBe(length);
+// writer.seek(-5);
+// expect(writer.position).toBe(length - 5);
+// writer.seek(length + 100);
+// expect(writer.position).toBe(length);
+// writer.seek(10);
+// expect(writer.position).toBe(10);
+// // cleanup
+// deleteFile(fileName, done);
+// };
+// // Write process
+// writer.onwriteend = verifier;
+// writer.seek(-100);
+// expect(writer.position).toBe(0);
+// writer.write(content);
+// }, failed.bind(null, done, 'fileEntry.createWriter - Error creating writer using fileEntry: ' + fileEntry.name));
+// }, failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
+// });
+// it('file.spec.103 should be able to truncate', function (done) {
+// if (isIndexedDBShim) {
+// /* `abort` and `truncate` functions are not supported (Firefox, IE) */
+// pending();
+// }
+
+// var fileName = 'writer.truncate';
+// var content = 'There is an exception to every rule. Except this one.';
+// // creates file, writes to it, then truncates it
+// createFile(fileName, function (fileEntry) {
+// fileEntry.createWriter(function (writer) {
+// // Verifier declaration
+// var verifier = function () {
+// expect(writer.length).toBe(36);
+// expect(writer.position).toBe(36);
+// // cleanup
+// deleteFile(fileName, done);
+// };
+// // Write process
+// writer.onwriteend = function () {
+// // Truncate process after write
+// writer.onwriteend = verifier;
+// writer.truncate(36);
+// };
+// writer.write(content);
+// }, failed.bind(null, done, 'fileEntry.createWriter - Error creating writer using fileEntry: ' + fileEntry.name));
+// }, failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
+// });
+// it('file.spec.104 should be able to write binary data from an ArrayBuffer', function (done) {
+// // Skip test if ArrayBuffers are not supported (e.g.: Android 2.3).
+// if (typeof window.ArrayBuffer === 'undefined') {
+// expect(true).toFailWithMessage('Platform does not supported this feature');
+// done();
+// return;
+// }
+// var fileName = 'bufferwriter.bin'; // file content
+// var data = new ArrayBuffer(32);
+// var dataView = new Int8Array(data); // for verifying file length
+// var length = 32;
+// for (var i = 0; i < dataView.length; i++) {
+// dataView[i] = i;
+// }
+// // creates file, then write content
+// createFile(fileName, function (fileEntry) {
+// // writes file content
+// fileEntry.createWriter(function (writer) {
+// // Verifier declaration
+// var verifier = function () {
+// expect(writer.length).toBe(length);
+// expect(writer.position).toBe(length);
+// // cleanup
+// deleteFile(fileName, done);
+// };
+// // Write process
+// writer.onwriteend = verifier;
+// writer.write(data);
+// }, failed.bind(null, done, 'fileEntry.createWriter - Error creating writer using fileEntry: ' + fileEntry.name));
+// }, failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
+// });
+// it('file.spec.105 should be able to write binary data from a Blob', function (done) {
+// // Skip test if Blobs are not supported (e.g.: Android 2.3).
+// if ((typeof window.Blob === 'undefined' && typeof window.WebKitBlobBuilder === 'undefined') || typeof window.ArrayBuffer === 'undefined') {
+// expect(true).toFailWithMessage('Platform does not supported this feature');
+// done();
+// return;
+// }
+// var fileName = 'blobwriter.bin'; // file content
+// var data = new ArrayBuffer(32);
+// var dataView = new Int8Array(data);
+// var blob; // for verifying file length
+// var length = 32;
+// for (var i = 0; i < dataView.length; i++) {
+// dataView[i] = i;
+// }
+// try {
+// // Mobile Safari: Use Blob constructor
+// blob = new Blob([data], { // eslint-disable-line no-undef
+// 'type': 'application/octet-stream'
+// });
+// } catch (e) {
+// if (window.WebKitBlobBuilder) {
+// // Android Browser: Use deprecated BlobBuilder
+// var builder = new WebKitBlobBuilder();
+// builder.append(data);
+// blob = builder.getBlob('application/octet-stream');
+// } else {
+// // We have no way defined to create a Blob, so fail
+// fail();
+// }
+// }
+// if (typeof blob !== 'undefined') {
+// // creates file, then write content
+// createFile(fileName, function (fileEntry) {
+// fileEntry.createWriter(function (writer) {
+// // Verifier declaration
+// var verifier = function () {
+// expect(writer.length).toBe(length);
+// expect(writer.position).toBe(length);
+// // cleanup
+// deleteFile(fileName, done);
+// };
+// // Write process
+// writer.onwriteend = verifier;
+// writer.write(blob);
+// }, failed.bind(null, done, 'fileEntry.createWriter - Error creating writer using fileEntry: ' + fileEntry.name));
+// }, failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
+// }
+// });
+// it('file.spec.106 should be able to write a File to a FileWriter', function (done) {
+// var dummyFileName = 'dummy.txt';
+// var outputFileName = 'verify.txt';
+// var dummyFileText = 'This text should be written to two files';
+// var verifier = function (outputFileWriter) {
+// expect(outputFileWriter.length).toBe(dummyFileText.length);
+// expect(outputFileWriter.position).toBe(dummyFileText.length);
+// deleteFile(outputFileName, done);
+// };
+// var writeFile = function (fileName, fileData, win) {
+// var theWriter;
+// var write_file = function (fileEntry) {
+// // writes file content to new file
+// fileEntry.createWriter(function (writer) {
+// theWriter = writer;
+// writer.onwriteend = function (ev) {
+// if (typeof fileData.length !== 'undefined') {
+// expect(theWriter.length).toBe(fileData.length);
+// expect(theWriter.position).toBe(fileData.length);
+// }
+// win(theWriter);
+// };
+// writer.onerror = failed.bind(null, done, 'writer.onerror - Error writing content on file: ' + fileName);
+// writer.write(fileData);
+// }, failed.bind(null, done, 'fileEntry.createWriter - Error creating writer using fileEntry: ' + fileEntry.name));
+// };
+// createFile(fileName, write_file, failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
+// };
+// var openFile = function (fileName, callback) {
+// root.getFile(fileName, {
+// create: false
+// }, function (fileEntry) {
+// fileEntry.file(callback, failed.bind(null, done, 'fileEntry.file - Error reading file using fileEntry: ' + fileEntry.name));
+// }, failed.bind(null, done, 'root.getFile - Error getting file: ' + fileName));
+// };
+// writeFile(dummyFileName, dummyFileText, function (dummyFileWriter) {
+// openFile(dummyFileName, function (file) {
+// writeFile(outputFileName, file, verifier);
+// });
+// });
+// });
+// it('file.spec.107 should be able to write a sliced File to a FileWriter', function (done) {
+// var dummyFileName = 'dummy2.txt';
+// var outputFileName = 'verify2.txt';
+// var dummyFileText = 'This text should be written to two files';
+// var verifier = function (outputFileWriter) {
+// expect(outputFileWriter.length).toBe(10);
+// expect(outputFileWriter.position).toBe(10);
+// deleteFile(outputFileName, done);
+// };
+// var writeFile = function (fileName, fileData, win) {
+// var theWriter;
+// var write_file = function (fileEntry) {
+// // writes file content to new file
+// fileEntry.createWriter(function (writer) {
+// theWriter = writer;
+// writer.onwriteend = function (ev) {
+// if (typeof fileData.length !== 'undefined') {
+// expect(theWriter.length).toBe(fileData.length);
+// expect(theWriter.position).toBe(fileData.length);
+// }
+// win(theWriter);
+// };
+// writer.onerror = failed.bind(null, done, 'writer.onerror - Error writing content on file: ' + fileName);
+// writer.write(fileData);
+// }, failed.bind(null, done, 'fileEntry.createWriter - Error creating writer using fileEntry: ' + fileEntry.name));
+// };
+// createFile(fileName, write_file, failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
+// };
+// var openFile = function (fileName, callback) {
+// root.getFile(fileName, {
+// create: false
+// }, function (fileEntry) {
+// fileEntry.file(callback, failed.bind(null, done, 'fileEntry.file - Error reading file using fileEntry: ' + fileEntry.name));
+// }, failed.bind(null, done, 'root.getFile - Error getting file: ' + fileName));
+// };
+// writeFile(dummyFileName, dummyFileText, function (dummyFileWriter) {
+// openFile(dummyFileName, function (file) {
+// writeFile(outputFileName, file.slice(10, 20), verifier);
+// });
+// });
+// });
+// it('file.spec.108 should be able to write binary data from a File', function (done) {
+// // Skip test if Blobs are not supported (e.g.: Android 2.3).
+// if (typeof window.Blob === 'undefined' && typeof window.WebKitBlobBuilder === 'undefined') {
+// expect(true).toFailWithMessage('Platform does not supported this feature');
+// done();
+// }
+// var dummyFileName = 'blobwriter.bin';
+// var outputFileName = 'verify.bin'; // file content
+// var data = new ArrayBuffer(32);
+// var dataView = new Int8Array(data);
+// var blob; // for verifying file length
+// var length = 32;
+// var verifier = function (outputFileWriter) {
+// expect(outputFileWriter.length).toBe(length);
+// expect(outputFileWriter.position).toBe(length);
+// // cleanup
+// deleteFile(outputFileName);
+// done();
+// };
+// var writeFile = function (fileName, fileData, win) {
+// var theWriter;
+// var write_file = function (fileEntry) {
+// // writes file content to new file
+// fileEntry.createWriter(function (writer) {
+// theWriter = writer;
+// writer.onwriteend = function (ev) {
+// if (typeof fileData.length !== 'undefined') {
+// expect(theWriter.length).toBe(fileData.length);
+// expect(theWriter.position).toBe(fileData.length);
+// }
+// win(theWriter);
+// };
+// writer.onerror = failed.bind(null, done, 'writer.onerror - Error writing content on file: ' + fileName);
+// writer.write(fileData);
+// }, failed.bind(null, done, 'fileEntry.createWriter - Error creating writer using fileEntry: ' + fileEntry.name));
+// };
+// createFile(fileName, write_file, failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
+// };
+// var openFile = function (fileName, callback) {
+// root.getFile(fileName, {
+// create: false
+// }, function (fileEntry) {
+// fileEntry.file(callback, failed.bind(null, done, 'fileEntry.file - Error reading file using fileEntry: ' + fileEntry.name));
+// }, failed.bind(null, done, 'root.getFile - Error getting file: ' + fileName));
+// };
+// for (var i = 0; i < dataView.length; i++) {
+// dataView[i] = i;
+// }
+// try {
+// // Mobile Safari: Use Blob constructor
+// blob = new Blob([data], { // eslint-disable-line no-undef
+// 'type': 'application/octet-stream'
+// });
+// } catch (e) {
+// if (window.WebKitBlobBuilder) {
+// // Android Browser: Use deprecated BlobBuilder
+// var builder = new WebKitBlobBuilder();
+// builder.append(data);
+// blob = builder.getBlob('application/octet-stream');
+// } else {
+// // We have no way defined to create a Blob, so fail
+// fail();
+// }
+// }
+// if (typeof blob !== 'undefined') {
+// // creates file, then write content
+// writeFile(dummyFileName, blob, function (dummyFileWriter) {
+// openFile(dummyFileName, function (file) {
+// writeFile(outputFileName, file, verifier);
+// });
+// });
+// }
+// });
+// });
+// // FileWritter
+// describe('Backwards compatibility', function () {
+// /* These specs exist to test that the File plugin can still recognize file:///
+// * URLs, and can resolve them to FileEntry and DirectoryEntry objects.
+// * They rely on an undocumented interface to File which provides absolute file
+// * paths, which are not used internally anymore.
+// * If that interface is not present, then these tests will silently succeed.
+// */
+// it('file.spec.109 should be able to resolve a file:/// URL', function (done) {
+// var localFilename = 'file.txt';
+// var originalEntry;
+// root.getFile(localFilename, {
+// create: true
+// }, function (entry) {
+// originalEntry = entry;
+// /* This is an undocumented interface to File which exists only for testing
+// * backwards compatibilty. By obtaining the raw filesystem path of the download
+// * location, we can pass that to ft.download() to make sure that previously-stored
+// * paths are still valid.
+// */
+// cordova.exec(function (localPath) { // eslint-disable-line no-undef
+// window.resolveLocalFileSystemURL('file://' + encodeURI(localPath), function (fileEntry) {
+// expect(fileEntry.toURL()).toEqual(originalEntry.toURL());
+// // cleanup
+// deleteFile(localFilename);
+// done();
+// }, failed.bind(null, done, 'window.resolveLocalFileSystemURL - Error resolving URI: file://' + encodeURI(localPath)));
+// }, done, 'File', '_getLocalFilesystemPath', [entry.toURL()]);
+// }, failed.bind(null, done, 'root.getFile - Error creating file: ' + localFilename));
+// });
+// });
+// // Backwards Compatibility
+// describe('Parent References', function () {
+// /* These specs verify that paths with parent references i("..") in them
+// * work correctly, and do not cause the application to crash.
+// */
+// it('file.spec.110 should not throw exception resolving parent refefences', function (done) {
+// /* This is a direct copy of file.spec.9, with the filename changed, * as reported in CB-5721.
+// */
+// var fileName = 'resolve.file.uri';
+// var dirName = 'resolve.dir.uri';
+// // create a new file entry
+// createDirectory(dirName, function () {
+// createFile(dirName + '/../' + fileName, function (entry) {
+// // lookup file system entry
+// window.resolveLocalFileSystemURL(entry.toURL(), function (fileEntry) {
+// expect(fileEntry).toBeDefined();
+// expect(fileEntry.name).toCanonicallyMatch(fileName);
+// // cleanup
+// deleteEntry(fileName, done);
+// }, failed.bind(null, done, 'window.resolveLocalFileSystemURL - Error resolving URI: ' + entry.toURL()));
+// }, failed.bind(null, done, 'createFile - Error creating file: ../' + fileName));
+// }, failed.bind(null, done, 'createDirectory - Error creating directory: ' + dirName));
+// });
+// it('file.spec.111 should not traverse above above the root directory', function (done) {
+// var fileName = 'traverse.file.uri';
+// // create a new file entry
+// createFile(fileName, function (entry) {
+// // lookup file system entry
+// root.getFile('../' + fileName, {
+// create: false
+// }, function (fileEntry) {
+// // Note: we expect this to still resolve, as the correct behaviour is to ignore the ../, not to fail out.
+// expect(fileEntry).toBeDefined();
+// expect(fileEntry.name).toBe(fileName);
+// expect(fileEntry.fullPath).toCanonicallyMatch(root.fullPath + '/' + fileName);
+// // cleanup
+// deleteEntry(fileName, done);
+// }, failed.bind(null, done, 'root.getFile - Error getting file: ../' + fileName));
+// }, failed.bind(null, done, 'createFile - Error creating file: ../' + fileName));
+// });
+// it('file.spec.112 should traverse above above the current directory', function (done) {
+// var fileName = 'traverse2.file.uri';
+// var dirName = 'traverse2.subdir';
+// // create a new directory and a file entry
+// createFile(fileName, function () {
+// createDirectory(dirName, function (entry) {
+// // lookup file system entry
+// entry.getFile('../' + fileName, {
+// create: false
+// }, function (fileEntry) {
+// expect(fileEntry).toBeDefined();
+// expect(fileEntry.name).toBe(fileName);
+// expect(fileEntry.fullPath).toCanonicallyMatch('/' + fileName);
+// // cleanup
+// deleteEntry(fileName, function () {
+// deleteEntry(dirName, done);
+// });
+// }, failed.bind(null, done, 'entry.getFile - Error getting file: ' + fileName + ' recently created above: ' + dirName));
+// }, failed.bind(null, done, 'createDirectory - Error creating directory: ' + dirName));
+// }, failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
+// });
+// it('file.spec.113 getFile: get Entry should error for missing file above root directory', function (done) {
+// var fileName = '../missing.file';
+// // create:false, exclusive:false, file does not exist
+// root.getFile(fileName, {
+// create: false
+// }, succeed.bind(null, done, 'root.getFile - Unexpected success callback, it should not locate nonexistent file: ' + fileName), function (error) {
+// expect(error).toBeDefined();
+// if (isChrome) {
+// expect(error).toBeFileError(FileError.SYNTAX_ERR); // eslint-disable-line no-undef
+// } else {
+// expect(error).toBeFileError(FileError.NOT_FOUND_ERR); // eslint-disable-line no-undef
+// }
+// done();
+// });
+// });
+// });
+// // Parent References
+// describe('toNativeURL interface', function () {
+// /* These specs verify that FileEntries have a toNativeURL method
+// * which appears to be sane.
+// */
+// var pathExpect = cordova.platformId === 'windowsphone' ? '//nativ' : 'file://'; // eslint-disable-line no-undef
+// if (isChrome) {
+// pathExpect = 'filesystem:http://';
+// }
+// it('file.spec.114 fileEntry should have a toNativeURL method', function (done) {
+// var fileName = 'native.file.uri';
+// if (isWindows) {
+// var rootPath = root.fullPath;
+// pathExpect = rootPath.substr(0, rootPath.indexOf(':'));
+// }
+// // create a new file entry
+// createFile(fileName, function (entry) {
+// expect(entry.toNativeURL).toBeDefined();
+// expect(entry.name).toCanonicallyMatch(fileName);
+// expect(typeof entry.toNativeURL).toBe('function');
+// var nativeURL = entry.toNativeURL();
+// expect(typeof nativeURL).toBe('string');
+// expect(nativeURL.substring(0, pathExpect.length)).toEqual(pathExpect);
+// expect(nativeURL.substring(nativeURL.length - fileName.length)).toEqual(fileName);
+// // cleanup
+// deleteEntry(fileName, done);
+// }, failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
+// });
+// it('file.spec.115 DirectoryReader should return entries with toNativeURL method', function (done) {
+// var dirName = 'nativeEntries.dir';
+// var fileName = 'nativeEntries.file';
+// var directory;
+// var checkEntries = function (entries) {
+// expect(entries).toBeDefined();
+// expect(entries instanceof Array).toBe(true);
+// expect(entries.length).toBe(1);
+// expect(entries[0].toNativeURL).toBeDefined();
+// expect(typeof entries[0].toNativeURL).toBe('function');
+// var nativeURL = entries[0].toNativeURL();
+// expect(typeof nativeURL).toBe('string');
+// expect(nativeURL.substring(0, pathExpect.length)).toEqual(pathExpect);
+// expect(nativeURL.substring(nativeURL.length - fileName.length)).toEqual(fileName);
+// // cleanup
+// directory.removeRecursively(function () {}, null);
+// done();
+// };
+// // create a new file entry
+// root.getDirectory(dirName, {
+// create: true
+// }, function (dir) {
+// directory = dir;
+// directory.getFile(fileName, {
+// create: true
+// }, function (fileEntry) {
+// var reader = directory.createReader();
+// reader.readEntries(checkEntries, failed.bind(null, done, 'reader.readEntries - Error reading entries from directory: ' + dirName));
+// }, failed.bind(null, done, 'directory.getFile - Error creating file: ' + fileName));
+// }, failed.bind(null, done, 'root.getDirectory - Error creating directory: ' + dirName));
+// });
+// it('file.spec.116 resolveLocalFileSystemURL should return entries with toNativeURL method', function (done) {
+// var fileName = 'native.resolve.uri';
+// // create a new file entry
+// createFile(fileName, function (entry) {
+// resolveLocalFileSystemURL(entry.toURL(), function (entry) { // eslint-disable-line no-undef
+// expect(entry.toNativeURL).toBeDefined();
+// expect(entry.name).toCanonicallyMatch(fileName);
+// expect(typeof entry.toNativeURL).toBe('function');
+// var nativeURL = entry.toNativeURL();
+// expect(typeof nativeURL).toBe('string');
+// expect(nativeURL.substring(0, pathExpect.length)).toEqual(pathExpect);
+// expect(nativeURL.substring(nativeURL.length - fileName.length)).toEqual(fileName);
+// // cleanup
+// deleteEntry(fileName, done);
+// }, failed.bind(null, done, 'resolveLocalFileSystemURL - Error resolving file URL: ' + entry.toURL()));
+// }, failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
+// });
+// });
+// // toNativeURL interface
+// describe('resolveLocalFileSystemURL on file://', function () {
+// /* These specs verify that window.resolveLocalFileSystemURL works correctly on file:// URLs
+// */
+// it('file.spec.117 should not resolve native URLs outside of FS roots', function (done) {
+// // lookup file system entry
+// window.resolveLocalFileSystemURL('file:///this.is.an.invalid.url', succeed.bind(null, done, 'window.resolveLocalFileSystemURL - Unexpected success callback, it should not resolve invalid URL: file:///this.is.an.invalid.url'), function (error) {
+// expect(error).toBeDefined();
+// done();
+// });
+// });
+// it('file.spec.118 should not resolve native URLs outside of FS roots', function (done) {
+// // lookup file system entry
+// window.resolveLocalFileSystemURL('file://localhost/this.is.an.invalid.url', succeed.bind(null, done, 'window.resolveLocalFileSystemURL - Unexpected success callback, it should not resolve invalid URL: file://localhost/this.is.an.invalid.url'), function (error) {
+// expect(error).toBeDefined();
+// done();
+// });
+// });
+// it('file.spec.119 should not resolve invalid native URLs', function (done) {
+// // lookup file system entry
+// window.resolveLocalFileSystemURL('file://localhost', succeed.bind(null, done, 'window.resolveLocalFileSystemURL - Unexpected success callback, it should not resolve invalid URL: file://localhost'), function (error) {
+// expect(error).toBeDefined();
+// done();
+// });
+// });
+// it('file.spec.120 should not resolve invalid native URLs with query strings', function (done) {
+// // lookup file system entry
+// window.resolveLocalFileSystemURL('file://localhost?test/test', succeed.bind(null, done, 'window.resolveLocalFileSystemURL - Unexpected success callback, it should not resolve invalid URL: file://localhost?test/test'), function (error) {
+// expect(error).toBeDefined();
+// done();
+// });
+// });
+// it('file.spec.121 should resolve native URLs returned by API', function (done) {
+// var fileName = 'native.resolve.uri1';
+// // create a new file entry
+// createFile(fileName, function (entry) {
+// /* eslint-disable no-undef */
+// resolveLocalFileSystemURL(entry.toNativeURL(), function (fileEntry) {
+// expect(fileEntry.fullPath).toCanonicallyMatch(root.fullPath + '/' + fileName);
+// // cleanup
+// deleteEntry(fileName, done);
+// }, failed.bind(null, done, 'resolveLocalFileSystemURL - Error resolving file URL: ' + entry.toNativeURL()));
+// }, failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
+// });
+// it('file.spec.122 should resolve native URLs returned by API with localhost', function (done) {
+// var fileName = 'native.resolve.uri2';
+// // create a new file entry
+// createFile(fileName, function (entry) {
+// var url = entry.toNativeURL();
+// url = url.replace('///', '//localhost/');
+// resolveLocalFileSystemURL(url, function (fileEntry) {
+// expect(fileEntry.fullPath).toCanonicallyMatch(root.fullPath + '/' + fileName);
+// // cleanup
+// deleteEntry(fileName, done);
+// }, failed.bind(null, done, 'resolveLocalFileSystemURL - Error resolving file URL: ' + url));
+// }, failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
+// });
+// it('file.spec.123 should resolve native URLs returned by API with query string', function (done) {
+// var fileName = 'native.resolve.uri3';
+// // create a new file entry
+// createFile(fileName, function (entry) {
+// var url = entry.toNativeURL();
+// url = url + '?test/test';
+// resolveLocalFileSystemURL(url, function (fileEntry) {
+// expect(fileEntry.fullPath).toCanonicallyMatch(root.fullPath + '/' + fileName);
+// // cleanup
+// deleteEntry(fileName, done);
+// }, failed.bind(null, done, 'resolveLocalFileSystemURL - Error resolving file URL: ' + url));
+// }, failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
+// });
+// it('file.spec.124 should resolve native URLs returned by API with localhost and query string', function (done) {
+// var fileName = 'native.resolve.uri4';
+// // create a new file entry
+// createFile(fileName, function (entry) {
+// var url = entry.toNativeURL();
+// url = url.replace('///', '//localhost/') + '?test/test';
+// resolveLocalFileSystemURL(url, function (fileEntry) {
+// /* eslint-enable no-undef */
+// expect(fileEntry.fullPath).toCanonicallyMatch(root.fullPath + '/' + fileName);
+// // cleanup
+// deleteEntry(fileName, done);
+// }, failed.bind(null, done, 'resolveLocalFileSystemURL - Error resolving file URL: ' + url));
+// }, failed.bind(null, done, 'createFile - Error creating file: ' + fileName));
+// });
+// });
+// // resolveLocalFileSystemURL on file://
+// describe('cross-file-system copy and move', function () {
+// /* These specs verify that Entry.copyTo and Entry.moveTo work correctly
+// * when crossing filesystem boundaries.
+// */
+// it('file.spec.125 copyTo: temporary -> persistent', function (done) {
+// var file1 = 'entry.copy.file1a';
+// var file2 = 'entry.copy.file2a';
+// var sourceEntry;
+// var fullPath = joinURL(root.fullPath, file2);
+// var validateFile = function (entry) {
+// // a bit redundant since copy returned this entry already
+// expect(entry).toBeDefined();
+// expect(entry.isFile).toBe(true);
+// expect(entry.isDirectory).toBe(false);
+// expect(entry.name).toCanonicallyMatch(file2);
+// expect(entry.fullPath).toCanonicallyMatch(fullPath);
+// expect(entry.filesystem).toBeDefined();
+// if (isChrome) {
+// expect(entry.filesystem.name).toContain('Persistent');
+// } else {
+// expect(entry.filesystem.name).toEqual('persistent');
+// }
+// // cleanup
+// deleteEntry(entry.name);
+// deleteEntry(sourceEntry.name, done);
+// };
+// var createSourceAndTransfer = function () {
+// temp_root.getFile(file1, {
+// create: true
+// }, function (entry) {
+// expect(entry.filesystem).toBeDefined();
+// if (isChrome) {
+// expect(entry.filesystem.name).toContain('Temporary');
+// } else {
+// expect(entry.filesystem.name).toEqual('temporary');
+// }
+// sourceEntry = entry;
+// // Save for later cleanup
+// entry.copyTo(persistent_root, file2, validateFile, failed.bind(null, done, 'entry.copyTo - Error copying file: ' + file1 + ' to PERSISTENT root as: ' + file2));
+// }, failed.bind(null, done, 'temp_root.getFile - Error creating file: ' + file1 + 'at TEMPORAL root'));
+// };
+// // Delete any existing file to start things off
+// persistent_root.getFile(file2, {}, function (entry) {
+// entry.remove(createSourceAndTransfer, failed.bind(null, done, 'entry.remove - Error removing file: ' + file2));
+// }, createSourceAndTransfer);
+// });
+// it('file.spec.126 copyTo: persistent -> temporary', function (done) {
+// var file1 = 'entry.copy.file1b';
+// var file2 = 'entry.copy.file2b';
+// var sourceEntry;
+// var fullPath = joinURL(temp_root.fullPath, file2);
+// var validateFile = function (entry) {
+// expect(entry).toBeDefined();
+// expect(entry.isFile).toBe(true);
+// expect(entry.isDirectory).toBe(false);
+// expect(entry.name).toCanonicallyMatch(file2);
+// expect(entry.fullPath).toCanonicallyMatch(fullPath);
+// if (isChrome) {
+// expect(entry.filesystem.name).toContain('Temporary');
+// } else {
+// expect(entry.filesystem.name).toEqual('temporary');
+// }
+// // cleanup
+// deleteEntry(entry.name);
+// deleteEntry(sourceEntry.name, done);
+// };
+// var createSourceAndTransfer = function () {
+// persistent_root.getFile(file1, {
+// create: true
+// }, function (entry) {
+// expect(entry).toBeDefined();
+// expect(entry.filesystem).toBeDefined();
+// if (isChrome) {
+// expect(entry.filesystem.name).toContain('Persistent');
+// } else {
+// expect(entry.filesystem.name).toEqual('persistent');
+// }
+// sourceEntry = entry;
+// // Save for later cleanup
+// entry.copyTo(temp_root, file2, validateFile, failed.bind(null, done, 'entry.copyTo - Error copying file: ' + file1 + ' to TEMPORAL root as: ' + file2));
+// }, failed.bind(null, done, 'persistent_root.getFile - Error creating file: ' + file1 + 'at PERSISTENT root'));
+// };
+// // Delete any existing file to start things off
+// temp_root.getFile(file2, {}, function (entry) {
+// entry.remove(createSourceAndTransfer, failed.bind(null, done, 'entry.remove - Error removing file: ' + file2));
+// }, createSourceAndTransfer);
+// });
+// it('file.spec.127 moveTo: temporary -> persistent', function (done) {
+// var file1 = 'entry.copy.file1a';
+// var file2 = 'entry.copy.file2a';
+// var sourceEntry;
+// var fullPath = joinURL(root.fullPath, file2);
+// var validateFile = function (entry) {
+// // a bit redundant since copy returned this entry already
+// expect(entry).toBeDefined();
+// expect(entry.isFile).toBe(true);
+// expect(entry.isDirectory).toBe(false);
+// expect(entry.name).toCanonicallyMatch(file2);
+// expect(entry.fullPath).toCanonicallyMatch(fullPath);
+// expect(entry.filesystem).toBeDefined();
+// if (isChrome) {
+// expect(entry.filesystem.name).toContain('Persistent');
+// } else {
+// expect(entry.filesystem.name).toEqual('persistent');
+// }
+// // cleanup
+// deleteEntry(entry.name);
+// deleteEntry(sourceEntry.name, done);
+// };
+// var createSourceAndTransfer = function () {
+// temp_root.getFile(file1, {
+// create: true
+// }, function (entry) {
+// expect(entry.filesystem).toBeDefined();
+// if (isChrome) {
+// expect(entry.filesystem.name).toContain('Temporary');
+// } else {
+// expect(entry.filesystem.name).toEqual('temporary');
+// }
+// sourceEntry = entry;
+// // Save for later cleanup
+// entry.moveTo(persistent_root, file2, validateFile, failed.bind(null, done, 'entry.moveTo - Error moving file: ' + file1 + ' to PERSISTENT root as: ' + file2));
+// }, failed.bind(null, done, 'temp_root.getFile - Error creating file: ' + file1 + 'at TEMPORAL root'));
+// };
+// // Delete any existing file to start things off
+// persistent_root.getFile(file2, {}, function (entry) {
+// entry.remove(createSourceAndTransfer, failed.bind(null, done, 'entry.remove - Error removing file: ' + file2));
+// }, createSourceAndTransfer);
+// });
+// it('file.spec.128 moveTo: persistent -> temporary', function (done) {
+// var file1 = 'entry.copy.file1b';
+// var file2 = 'entry.copy.file2b';
+// var sourceEntry;
+// var fullPath = joinURL(temp_root.fullPath, file2);
+// var validateFile = function (entry) {
+// expect(entry).toBeDefined();
+// expect(entry.isFile).toBe(true);
+// expect(entry.isDirectory).toBe(false);
+// expect(entry.name).toCanonicallyMatch(file2);
+// expect(entry.fullPath).toCanonicallyMatch(fullPath);
+// if (isChrome) {
+// expect(entry.filesystem.name).toContain('Temporary');
+// } else {
+// expect(entry.filesystem.name).toEqual('temporary');
+// }
+// // cleanup
+// deleteEntry(entry.name);
+// deleteEntry(sourceEntry.name, done);
+// };
+// var createSourceAndTransfer = function () {
+// persistent_root.getFile(file1, {
+// create: true
+// }, function (entry) {
+// expect(entry).toBeDefined();
+// expect(entry.filesystem).toBeDefined();
+// if (isChrome) {
+// expect(entry.filesystem.name).toContain('Persistent');
+// } else {
+// expect(entry.filesystem.name).toEqual('persistent');
+// }
+// sourceEntry = entry;
+// // Save for later cleanup
+// entry.moveTo(temp_root, file2, validateFile, failed.bind(null, done, 'entry.moveTo - Error moving file: ' + file1 + ' to TEMPORAL root as: ' + file2));
+// }, failed.bind(null, done, 'persistent_root.getFile - Error creating file: ' + file1 + 'at PERSISTENT root'));
+// };
+// // Delete any existing file to start things off
+// temp_root.getFile(file2, {}, function (entry) {
+// entry.remove(createSourceAndTransfer, failed.bind(null, done, 'entry.remove - Error removing file: ' + file2));
+// }, createSourceAndTransfer);
+// });
+// it('file.spec.129 cordova.file.*Directory are set', function () {
+// var expectedPaths = ['applicationDirectory', 'applicationStorageDirectory', 'dataDirectory', 'cacheDirectory'];
+// /* eslint-disable no-undef */
+// if (cordova.platformId === 'android' || cordova.platformId === 'amazon-fireos') {
+// if (cordova.file.externalApplicationStorageDirectory !== null) {
+// // https://issues.apache.org/jira/browse/CB-10411
+// // If external storage can't be mounted, the cordova.file.external* properties are null.
+// expectedPaths.push('externalApplicationStorageDirectory', 'externalRootDirectory', 'externalCacheDirectory', 'externalDataDirectory');
+// }
+// } else if (cordova.platformId === 'blackberry10') {
+// expectedPaths.push('externalRootDirectory', 'sharedDirectory');
+// } else if (cordova.platformId === 'ios') {
+// expectedPaths.push('syncedDataDirectory', 'documentsDirectory', 'tempDirectory');
+// } else if (cordova.platformId === 'osx') {
+// expectedPaths.push('documentsDirectory', 'tempDirectory', 'rootDirectory');
+// } else {
+// console.log('Skipping test due on unsupported platform.');
+// return;
+// }
+// for (var i = 0; i < expectedPaths.length; ++i) {
+// expect(typeof cordova.file[expectedPaths[i]]).toBe('string');
+// expect(cordova.file[expectedPaths[i]]).toMatch(/\/$/, 'Path should end with a slash');
+// }
+// });
+// });
+// describe('resolveLocalFileSystemURL on cdvfile://', function () {
+// it('file.spec.147 should be able to resolve cdvfile applicationDirectory fs root', function (done) {
+// var cdvfileApplicationDirectoryFsRootName;
+// if (cordova.platformId === 'android') {
+// cdvfileApplicationDirectoryFsRootName = 'assets';
+// } else if (cordova.platformId === 'ios') {
+// cdvfileApplicationDirectoryFsRootName = 'bundle';
+// } else {
+// pending();
+// }
+
+// resolveLocalFileSystemURL('cdvfile://localhost/' + cdvfileApplicationDirectoryFsRootName + '/', function (applicationDirectoryRoot) {
+// expect(applicationDirectoryRoot.isFile).toBe(false);
+// expect(applicationDirectoryRoot.isDirectory).toBe(true);
+// expect(applicationDirectoryRoot.name).toCanonicallyMatch('');
+// expect(applicationDirectoryRoot.fullPath).toCanonicallyMatch('/');
+// expect(applicationDirectoryRoot.filesystem.name).toEqual(cdvfileApplicationDirectoryFsRootName);
+
+// // Requires HelloCordova www assets, <allow-navigation href="cdvfile:*" /> in config.xml or
+// // cdvfile: in CSP and <access origin="cdvfile://*" /> in config.xml
+// resolveLocalFileSystemURL('cdvfile://localhost/' + cdvfileApplicationDirectoryFsRootName + '/www/img/logo.png', function (entry) {
+// /* eslint-enable no-undef */
+// expect(entry.isFile).toBe(true);
+// expect(entry.isDirectory).toBe(false);
+// expect(entry.name).toCanonicallyMatch('logo.png');
+// expect(entry.fullPath).toCanonicallyMatch('/www/img/logo.png');
+// expect(entry.filesystem.name).toEqual(cdvfileApplicationDirectoryFsRootName);
+
+// var img = new Image(); // eslint-disable-line no-undef
+// img.onerror = function (err) {
+// expect(err).not.toBeDefined();
+// done();
+// };
+// img.onload = function () {
+// done();
+// };
+// img.src = entry.toInternalURL();
+// }, failed.bind(null, done, 'resolveLocalFileSystemURL failed for cdvfile applicationDirectory'));
+// }, failed.bind(null, done, 'resolveLocalFileSystemURL failed for cdvfile applicationDirectory'));
+// });
+// });
+// // cross-file-system copy and move
+// describe('IndexedDB-based impl', function () {
+// it('file.spec.131 Nested file or nested directory should be removed when removing a parent directory', function (done) {
+// var parentDirName = 'deletedDir131';
+// var nestedDirName = 'nestedDir131';
+// var nestedFileName = 'nestedFile131.txt';
+
+// createDirectory(parentDirName, function (parent) {
+// parent.getDirectory(nestedDirName, { create: true }, function () {
+// parent.getFile(nestedFileName, { create: true }, function () {
+// parent.removeRecursively(function () {
+// root.getDirectory(parentDirName, { create: false }, failed.bind(this, done, 'root.getDirectory - unexpected success callback : ' + parentDirName), function () {
+// parent.getFile(nestedFileName, { create: false }, failed.bind(this, done, 'getFile - unexpected success callback : ' + nestedFileName), function () {
+// parent.getDirectory(nestedDirName, { create: false }, failed.bind(this, done, 'getDirectory - unexpected success callback : ' + nestedDirName), done);
+// });
+// });
+// }, failed.bind(this, done, 'removeRecursively - Error removing directory : ' + parentDirName));
+// }, failed.bind(this, done, 'getFile - Error creating file : ' + nestedFileName));
+// }, failed.bind(this, done, 'getDirectory - Error creating directory : ' + nestedDirName));
+// }, failed.bind(this, done, 'root.getDirectory - Error creating directory : ' + parentDirName));
+// });
+// it('file.spec.132 Entry should be created succesfully when using relative paths if its parent directory exists', function (done) {
+// /* Directory entries have to be created successively.
+// For example, the call `fs.root.getDirectory('dir1/dir2', {create:true}, successCallback, errorCallback)`
+// will fail if dir1 did not exist. */
+// var parentName = 'parentName132';
+// var nestedName = 'nestedName132';
+// var path = parentName + '/' + nestedName;
+
+// var win = function (directory) {
+// expect(directory).toBeDefined();
+// expect(directory.isFile).toBe(false);
+// expect(directory.isDirectory).toBe(true);
+// expect(directory.name).toCanonicallyMatch(nestedName);
+// expect(directory.fullPath).toCanonicallyMatch('/' + path + '/');
+// deleteEntry(directory.name);
+// deleteEntry(parentName, done);
+// };
+
+// createDirectory(parentName, function () {
+// root.getDirectory(parentName + '/' + nestedName, {create: true}, win,
+// failed.bind(this, done, 'root.getDirectory - Error getting directory : ' + path));
+// }, failed.bind(this, done, 'root.getDirectory - Error getting directory : ' + parentName));
+// });
+// it('file.spec.133 A file being removed should not affect another file with name being a prefix of the removed file name.', function (done) {
+
+// // Names include special symbols so that we check the IndexedDB range used
+// var deletedFileName = 'deletedFile.0';
+// var secondFileName = 'deletedFile.0.1';
+
+// var win = function (fileEntry) {
+// expect(fileEntry).toBeDefined();
+// expect(fileEntry.isFile).toBe(true);
+// expect(fileEntry.isDirectory).toBe(false);
+// expect(fileEntry.name).toCanonicallyMatch(secondFileName);
+// deleteEntry(fileEntry.name, done);
+// };
+
+// createFile(deletedFileName, function (deletedFile) {
+// createFile(secondFileName, function () {
+// deletedFile.remove(function () {
+// root.getFile(deletedFileName, {create: false}, failed.bind(this, done, 'getFile - unexpected success callback getting deleted file : ' + deletedFileName), function () {
+// root.getFile(secondFileName, {create: false}, win, failed.bind(this, done, 'getFile - Error getting file after deleting deletedFile : ' + secondFileName));
+// });
+// }, failed.bind(this, done, 'remove - Error removing file : ' + deletedFileName));
+// }, failed.bind(this, done, 'getFile - Error creating file : ' + secondFileName));
+// }, failed.bind(this, done, 'getFile - Error creating file : ' + deletedFileName));
+// });
+// it('file.spec.134 A directory being removed should not affect another directory with name being a prefix of the removed directory name.', function (done) {
+
+// // Names include special symbols so that we check the IndexedDB range used
+// var deletedDirName = 'deletedDir.0';
+// var secondDirName = 'deletedDir.0.1';
+
+// var win = function (directory) {
+// expect(directory).toBeDefined();
+// expect(directory.isFile).toBe(false);
+// expect(directory.isDirectory).toBe(true);
+// expect(directory.name).toCanonicallyMatch(secondDirName);
+// deleteEntry(directory.name, done);
+// };
+
+// createDirectory(deletedDirName, function (deletedDir) {
+// createDirectory(secondDirName, function () {
+// deletedDir.remove(function () {
+// root.getDirectory(deletedDirName, {create: false}, failed.bind(this, done, 'getDirectory - unexpected success callback getting deleted directory : ' + deletedDirName), function () {
+// root.getDirectory(secondDirName, {create: false}, win, failed.bind(this, done, 'getDirectory - Error getting directory after deleting deletedDirectory : ' + secondDirName));
+// });
+// }, failed.bind(this, done, 'remove - Error removing directory : ' + deletedDirName));
+// }, failed.bind(this, done, 'root.getDirectory - Error creating directory : ' + secondDirName));
+// }, failed.bind(this, done, 'root.getDirectory - Error creating directory : ' + deletedDirName));
+// });
+// it('file.spec.135 Deletion of a child directory should not affect the parent directory.', function (done) {
+
+// var parentName = 'parentName135';
+// var childName = 'childName135';
+
+// var win = function (directory) {
+// expect(directory).toBeDefined();
+// expect(directory.isFile).toBe(false);
+// expect(directory.isDirectory).toBe(true);
+// expect(directory.name).toCanonicallyMatch(parentName);
+// deleteEntry(directory.name, done);
+// };
+
+// createDirectory(parentName, function (parent) {
+// parent.getDirectory(childName, {create: true}, function (child) {
+// child.removeRecursively(function () {
+// root.getDirectory(parentName, {create: false}, win, failed.bind(this, done, 'root.getDirectory - Error getting parent directory : ' + parentName));
+// },
+// failed.bind(this, done, 'getDirectory - Error removing directory : ' + childName));
+// }, failed.bind(this, done, 'getDirectory - Error creating directory : ' + childName));
+// }, failed.bind(this, done, 'root.getDirectory - Error creating directory : ' + parentName));
+// });
+// it('file.spec.136 Paths should support Unicode symbols.', function (done) {
+
+// var dirName = '文件插件';
+
+// var win = function (directory) {
+// expect(directory).toBeDefined();
+// expect(directory.isFile).toBe(false);
+// expect(directory.isDirectory).toBe(true);
+// expect(directory.name).toCanonicallyMatch(dirName);
+// deleteEntry(directory.name, done);
+// };
+
+// createDirectory(dirName, function () {
+// root.getDirectory(dirName, {create: false}, win,
+// failed.bind(this, done, 'root.getDirectory - Error getting directory : ' + dirName));
+// }, failed.bind(this, done, 'root.getDirectory - Error creating directory : ' + dirName));
+// });
+// });
+// // Content and Asset URLs
+// if (cordova.platformId === 'android') { // eslint-disable-line no-undef
+// describe('content: URLs', function () {
+// // Warning: Default HelloWorld www directory structure is required for these tests (www/index.html at least)
+// function testContentCopy (src, done) {
+// var file2 = 'entry.copy.file2b';
+// var fullPath = joinURL(temp_root.fullPath, file2);
+// var validateFile = function (entry) {
+// expect(entry.isFile).toBe(true);
+// expect(entry.isDirectory).toBe(false);
+// expect(entry.name).toCanonicallyMatch(file2);
+// expect(entry.fullPath).toCanonicallyMatch(fullPath);
+// expect(entry.filesystem.name).toEqual('temporary');
+// // cleanup
+// deleteEntry(entry.name, done);
+// };
+// var transfer = function () {
+// resolveLocalFileSystemURL(src, function (entry) { // eslint-disable-line no-undef
+// expect(entry).toBeDefined();
+// expect(entry.filesystem.name).toEqual('content');
+// entry.copyTo(temp_root, file2, validateFile, failed.bind(null, done, 'entry.copyTo - Error copying file: ' + entry.toURL() + ' to TEMPORAL root as: ' + file2));
+// }, failed.bind(null, done, 'resolveLocalFileSystemURL failed for content provider'));
+// };
+// // Delete any existing file to start things off
+// temp_root.getFile(file2, {}, function (entry) {
+// entry.remove(transfer, failed.bind(null, done, 'entry.remove - Error removing file: ' + file2));
+// }, transfer);
+// }
+// it('file.spec.138 copyTo: content', function (done) {
+// testContentCopy('content://org.apache.cordova.file.testprovider/www/index.html', done);
+// });
+// it('file.spec.139 copyTo: content /w space and query', function (done) {
+// testContentCopy('content://org.apache.cordova.file.testprovider/?name=foo%20bar&realPath=%2Fwww%2Findex.html', done);
+// });
+// it('file.spec.140 delete: content should fail', function (done) {
+// resolveLocalFileSystemURL('content://org.apache.cordova.file.testprovider/www/index.html', function (entry) { // eslint-disable-line no-undef
+// entry.remove(failed.bind(null, done, 'expected delete to fail'), done);
+// }, failed.bind(null, done, 'resolveLocalFileSystemURL failed for content provider'));
+// });
+// });
+
+// // these tests ensure that you can read and copy from android_asset folder
+// // for details see https://issues.apache.org/jira/browse/CB-6428
+// // and https://mail-archives.apache.org/mod_mbox/cordova-dev/201508.mbox/%3C782154441.8406572.1440182722528.JavaMail.yahoo%40mail.yahoo.com%3E
+// describe('asset: URLs', function () {
+// it('file.spec.141 filePaths.applicationStorage', function () {
+// expect(cordova.file.applicationDirectory).toEqual('file:///android_asset/'); // eslint-disable-line no-undef
+// }, MEDIUM_TIMEOUT);
+// it('file.spec.142 assets should be enumerable', function (done) {
+// resolveLocalFileSystemURL('file:///android_asset/www/fixtures/asset-test', function (entry) { // eslint-disable-line no-undef
+// var reader = entry.createReader();
+// reader.readEntries(function (entries) {
+// expect(entries.length).not.toBe(0);
+// done();
+// }, failed.bind(null, done, 'reader.readEntries - Error during reading of entries from assets directory'));
+// }, failed.bind(null, done, 'resolveLocalFileSystemURL failed for assets'));
+// }, MEDIUM_TIMEOUT);
+// it('file.spec.145 asset subdirectories should be obtainable', function (done) {
+// resolveLocalFileSystemURL('file:///android_asset/www/fixtures', function (entry) { // eslint-disable-line no-undef
+// entry.getDirectory('asset-test', { create: false }, function (subDir) {
+// expect(subDir).toBeDefined();
+// expect(subDir.isFile).toBe(false);
+// expect(subDir.isDirectory).toBe(true);
+// expect(subDir.name).toCanonicallyMatch('asset-test');
+// done();
+// }, failed.bind(null, done, 'entry.getDirectory - Error getting asset subdirectory'));
+// }, failed.bind(null, done, 'resolveLocalFileSystemURL failed for assets'));
+// }, MEDIUM_TIMEOUT);
+// it('file.spec.146 asset files should be readable', function (done) {
+// resolveLocalFileSystemURL('file:///android_asset/www/fixtures/asset-test/asset-test.txt', function (entry) { // eslint-disable-line no-undef
+// expect(entry.isFile).toBe(true);
+// entry.file(function (file) {
+// expect(file).toBeDefined();
+// var reader = new FileReader(); // eslint-disable-line no-undef
+// reader.onerror = failed.bind(null, done, 'reader.readAsText - Error reading asset text file');
+// reader.onloadend = function () {
+// expect(this.result).toBeDefined();
+// expect(this.result.length).not.toBe(0);
+// done();
+// };
+// reader.readAsText(file);
+// }, failed.bind(null, done, 'entry.file - Error reading asset file'));
+// }, failed.bind(null, done, 'resolveLocalFileSystemURL failed for assets'));
+// }, MEDIUM_TIMEOUT);
+// it('file.spec.143 copyTo: asset -> temporary', function (done) {
+// var file2 = 'entry.copy.file2b';
+// var fullPath = joinURL(temp_root.fullPath, file2);
+// var validateFile = function (entry) {
+// expect(entry.isFile).toBe(true);
+// expect(entry.isDirectory).toBe(false);
+// expect(entry.name).toCanonicallyMatch(file2);
+// expect(entry.fullPath).toCanonicallyMatch(fullPath);
+// expect(entry.filesystem.name).toEqual('temporary');
+// // cleanup
+// deleteEntry(entry.name, done);
+// };
+// var transfer = function () {
+// resolveLocalFileSystemURL('file:///android_asset/www/index.html', function (entry) { // eslint-disable-line no-undef
+// expect(entry.filesystem.name).toEqual('assets');
+// entry.copyTo(temp_root, file2, validateFile, failed.bind(null, done, 'entry.copyTo - Error copying file: ' + entry.toURL() + ' to TEMPORAL root as: ' + file2));
+// }, failed.bind(null, done, 'resolveLocalFileSystemURL failed for assets'));
+// };
+// // Delete any existing file to start things off
+// temp_root.getFile(file2, {}, function (entry) {
+// entry.remove(transfer, failed.bind(null, done, 'entry.remove - Error removing file: ' + file2));
+// }, transfer);
+// }, MEDIUM_TIMEOUT);
+// });
+// it('file.spec.144 copyTo: asset directory', function (done) {
+// var srcUrl = 'file:///android_asset/www/fixtures/asset-test';
+// var dstDir = 'entry.copy.dstDir';
+// var dstPath = joinURL(root.fullPath, dstDir);
+// // create a new directory entry to kick off it
+// deleteEntry(dstDir, function () {
+// resolveLocalFileSystemURL(srcUrl, function (directory) { // eslint-disable-line no-undef
+// directory.copyTo(root, dstDir, function (directory) {
+// expect(directory).toBeDefined();
+// expect(directory.isFile).toBe(false);
+// expect(directory.isDirectory).toBe(true);
+// expect(directory.fullPath).toCanonicallyMatch(dstPath);
+// expect(directory.name).toCanonicallyMatch(dstDir);
+// root.getDirectory(dstDir, {
+// create: false
+// }, function (dirEntry) {
+// expect(dirEntry).toBeDefined();
+// expect(dirEntry.isFile).toBe(false);
+// expect(dirEntry.isDirectory).toBe(true);
+// expect(dirEntry.fullPath).toCanonicallyMatch(dstPath);
+// expect(dirEntry.name).toCanonicallyMatch(dstDir);
+// dirEntry.getFile('asset-test.txt', {
+// create: false
+// }, function (fileEntry) {
+// expect(fileEntry).toBeDefined();
+// expect(fileEntry.isFile).toBe(true);
+// // cleanup
+// deleteEntry(dstDir, done);
+// }, failed.bind(null, done, 'dirEntry.getFile - Error getting subfile'));
+// }, failed.bind(null, done, 'root.getDirectory - Error getting copied directory'));
+// }, failed.bind(null, done, 'directory.copyTo - Error copying directory'));
+// }, failed.bind(null, done, 'resolving src dir'));
+// }, failed.bind(null, done, 'deleteEntry - Error removing directory : ' + dstDir));
+// }, MEDIUM_TIMEOUT);
+// }
+// });
+
+// };
+// //* *****************************************************************************************
+// //* **************************************Manual Tests***************************************
+// //* *****************************************************************************************
+
+// exports.defineManualTests = function (contentEl, createActionButton) {
+
+// function resolveFs (fsname) {
+// var fsURL = 'cdvfile://localhost/' + fsname + '/';
+// logMessage('Resolving URL: ' + fsURL);
+// /* eslint-disable no-undef */
+// resolveLocalFileSystemURL(fsURL, function (entry) {
+// logMessage('Success', 'green');
+// logMessage(entry.toURL(), 'blue');
+// logMessage(entry.toInternalURL(), 'blue');
+// logMessage('Resolving URL: ' + entry.toURL());
+// resolveLocalFileSystemURL(entry.toURL(), function (entry2) {
+// logMessage('Success', 'green');
+// logMessage(entry2.toURL(), 'blue');
+// logMessage(entry2.toInternalURL(), 'blue');
+// }, logError('resolveLocalFileSystemURL'));
+// }, logError('resolveLocalFileSystemURL'));
+// }
+
+// function testPrivateURL () {
+// requestFileSystem(LocalFileSystem.TEMPORARY, 0, function (fileSystem) {
+// logMessage('Temporary root is at ' + fileSystem.root.toNativeURL());
+// fileSystem.root.getFile('testfile', {
+// create: true
+// }, function (entry) {
+// logMessage('Temporary file is at ' + entry.toNativeURL());
+// if (entry.toNativeURL().substring(0, 12) === 'file:///var/') {
+// logMessage('File starts with /var/, trying /private/var');
+// var newURL = 'file://localhost/private/var/' + entry.toNativeURL().substring(12) + '?and=another_thing';
+// // var newURL = entry.toNativeURL();
+// logMessage(newURL, 'blue');
+// resolveLocalFileSystemURL(newURL, function (newEntry) {
+// logMessage('Successfully resolved.', 'green');
+// logMessage(newEntry.toURL(), 'blue');
+// logMessage(newEntry.toNativeURL(), 'blue');
+// }, logError('resolveLocalFileSystemURL'));
+// }
+// }, logError('getFile'));
+// }, logError('requestFileSystem'));
+// }
+
+// function resolveFsContactImage () {
+// navigator.contacts.pickContact(function (contact) {
+// var logBox = document.getElementById('logContactBox');
+// logBox.innerHTML = '';
+// var resolveResult = document.createElement('p');
+// if (contact.photos) {
+// var photoURL = contact.photos[0].value;
+// resolveLocalFileSystemURL(photoURL, function (entry) {
+// /* eslint-enable no-undef */
+// var contactImage = document.createElement('img');
+// var contactLabelImage = document.createElement('p');
+// contactLabelImage.innerHTML = 'Result contact image';
+// contactImage.setAttribute('src', entry.toURL());
+// resolveResult.innerHTML = 'Success resolve\n' + entry.toURL();
+// logBox.appendChild(contactLabelImage);
+// logBox.appendChild(contactImage);
+// logBox.appendChild(resolveResult);
+// },
+// function (err) {
+// console.log('resolve error' + err);
+// });
+// } else {
+// resolveResult.innerHTML = 'Contact has no photos';
+// logBox.appendChild(resolveResult);
+// }
+// },
+// function (err) {
+// console.log('contact pick error' + err);
+// });
+// }
+
+// function clearLog () {
+// var log = document.getElementById('info');
+// log.innerHTML = '';
+// }
+
+// function logMessage (message, color) {
+// var log = document.getElementById('info');
+// var logLine = document.createElement('div');
+// if (color) {
+// logLine.style.color = color;
+// }
+// logLine.innerHTML = message;
+// log.appendChild(logLine);
+// }
+
+// function logError (serviceName) {
+// return function (err) {
+// logMessage('ERROR: ' + serviceName + ' ' + JSON.stringify(err), 'red');
+// };
+// }
+
+// var fsRoots = {
+// 'ios': 'library,library-nosync,documents,documents-nosync,cache,bundle,root,private',
+// 'osx': 'library,library-nosync,documents,documents-nosync,cache,bundle,root,private',
+// 'android': 'files,files-external,documents,sdcard,cache,cache-external,assets,root',
+// 'amazon-fireos': 'files,files-external,documents,sdcard,cache,cache-external,root',
+// 'windows': 'temporary,persistent'
+// };
+
+// // Add title and align to content
+// var div = document.createElement('h2');
+// div.appendChild(document.createTextNode('File Systems'));
+// div.setAttribute('align', 'center');
+// contentEl.appendChild(div);
+
+// div = document.createElement('h3');
+// div.appendChild(document.createTextNode('Results are displayed in yellow status box below with expected results noted under that'));
+// div.setAttribute('align', 'center');
+// contentEl.appendChild(div);
+
+// div = document.createElement('div');
+// div.setAttribute('id', 'button');
+// div.setAttribute('align', 'center');
+// contentEl.appendChild(div);
+// /* eslint-disable no-undef */
+// if (fsRoots.hasOwnProperty(cordova.platformId)) {
+// (fsRoots[cordova.platformId].split(',')).forEach(function (fs) {
+// if (cordova.platformId === 'ios' && fs === 'private') {
+// /* eslint-enable no-undef */
+// createActionButton('Test private URL (iOS)', function () {
+// clearLog();
+// testPrivateURL();
+// }, 'button');
+// } else {
+// createActionButton(fs, function () {
+// clearLog();
+// resolveFs(fs);
+// }, 'button');
+// }
+// });
+// }
+
+// div = document.createElement('div');
+// div.setAttribute('id', 'info');
+// div.setAttribute('align', 'center');
+// contentEl.appendChild(div);
+
+// div = document.createElement('h3');
+// div.appendChild(document.createTextNode('For each test above, file or directory should be successfully found. ' +
+// 'Status box should say Resolving URL was Success. The first URL resolved is the internal URL. ' +
+// 'The second URL resolved is the absolute URL. Blue URLs must match.'));
+// contentEl.appendChild(div);
+
+// div = document.createElement('h3');
+// div.appendChild(document.createTextNode('For Test private URL (iOS), the private URL (first blue URL in status box) ' +
+// 'should be successfully resolved. Status box should say Successfully resolved. Both blue URLs below ' +
+// 'that should match.'));
+// contentEl.appendChild(div);
+
+// div = document.createElement('h2');
+// div.appendChild(document.createTextNode('Resolving content urls'));
+// div.setAttribute('align', 'center');
+// contentEl.appendChild(div);
+
+// div = document.createElement('div');
+// div.setAttribute('id', 'contactButton');
+// div.setAttribute('align', 'center');
+// contentEl.appendChild(div);
+
+// div = document.createElement('div');
+// div.setAttribute('id', 'logContactBox');
+// div.setAttribute('align', 'center');
+// contentEl.appendChild(div);
+
+// createActionButton('show-contact-image', function () {
+// resolveFsContactImage();
+// }, 'contactButton');
};
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org