You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by ag...@apache.org on 2013/03/15 21:42:10 UTC

spec commit: Refactor FileReader / FileWriter tests to not use "new File"

Updated Branches:
  refs/heads/master 6edfe546c -> 6956592c6


Refactor FileReader / FileWriter tests to not use "new File"


Project: http://git-wip-us.apache.org/repos/asf/cordova-mobile-spec/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-mobile-spec/commit/6956592c
Tree: http://git-wip-us.apache.org/repos/asf/cordova-mobile-spec/tree/6956592c
Diff: http://git-wip-us.apache.org/repos/asf/cordova-mobile-spec/diff/6956592c

Branch: refs/heads/master
Commit: 6956592c6851ae1ac9a7b99cc2ee71ba474d21c1
Parents: 6edfe54
Author: Andrew Grieve <ag...@chromium.org>
Authored: Thu Mar 14 11:37:16 2013 -0400
Committer: Andrew Grieve <ag...@chromium.org>
Committed: Fri Mar 15 16:41:52 2013 -0400

----------------------------------------------------------------------
 autotest/tests/file.tests.js |  424 +++++++++----------------------------
 1 files changed, 101 insertions(+), 323 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-mobile-spec/blob/6956592c/autotest/tests/file.tests.js
----------------------------------------------------------------------
diff --git a/autotest/tests/file.tests.js b/autotest/tests/file.tests.js
index b13fa81..e56a887 100644
--- a/autotest/tests/file.tests.js
+++ b/autotest/tests/file.tests.js
@@ -2917,80 +2917,6 @@ describe('File API', function() {
     });
 
     describe('read method', function(){
-        it("should read file properly, File object", function() {
-            // path of file
-            var fileName = "reader.txt",
-                // file content
-                rule = "There is an exception to every rule.  Except this one.",
-                verifier = jasmine.createSpy().andCallFake(function(evt) {
-                    expect(evt).toBeDefined();
-                    expect(evt.target.result).toBe(rule);
-                }),
-                fail = createFail('FileReader'),
-                filePath = root.fullPath + '/' + fileName,
-                // creates a FileWriter object
-                create_writer = function(fileEntry) {
-                    fileEntry.createWriter(write_file, fail);
-                },
-                // writes file and reads it back in
-                write_file = function(writer) {
-                    writer.onwriteend = read_file;
-                    writer.write(rule);
-                },
-                // reads file and compares content to what was written
-                read_file = function(evt) {
-                    var reader = new FileReader();
-                    reader.onloadend = verifier;
-                    var myFile = new File();
-
-                    myFile.fullPath = filePath;
-                    reader.readAsText(myFile);
-                };
-
-            // create a file, write to it, and read it in again
-            runs(function() {
-                root.getFile(fileName, {create: true}, create_writer, fail);
-            });
-
-            waitsFor(function() { return verifier.wasCalled; }, "verifier never called", Tests.TEST_TIMEOUT);
-
-            runs(function() {
-                expect(fail).not.toHaveBeenCalled();
-                expect(verifier).toHaveBeenCalled();
-            });
-        });
-        it("should read empty file properly", function() {
-            // path of file
-            var fileName = "empty.txt",
-                filePath = root.fullPath + '/' + fileName,
-                // file content
-                rule = "",
-                fail = createFail('FileReader'),
-                verifier = jasmine.createSpy().andCallFake(function(evt) {
-                    expect(evt).toBeDefined();
-                    expect(evt.target.result).toBe(rule);
-                }),
-                // reads file and compares content to what was written
-                read_file = function(evt) {
-                    var reader = new FileReader();
-                    reader.onloadend = verifier;
-                    var myFile = new File();
-                    myFile.fullPath = filePath;
-                    reader.readAsText(myFile);
-                };
-
-            // create a file, write to it, and read it in again
-            runs(function() {
-                root.getFile(fileName, {create: true}, read_file, fail);
-            });
-
-            waitsFor(function() { return verifier.wasCalled; }, "verifier never called", Tests.TEST_TIMEOUT);
-
-            runs(function() {
-                expect(fail).not.toHaveBeenCalled();
-                expect(verifier).toHaveBeenCalled();
-            });
-        });
         it("should error out on non-existent file", function() {
             var reader = new FileReader();
             var verifier = jasmine.createSpy().andCallFake(function(evt) {
@@ -3044,229 +2970,125 @@ describe('File API', function() {
 
             waitsFor(function() { return verifier.wasCalled; }, "verifier never called", 300);
         });
-        it("should read file properly, Data URI", function() {
-            // path of file
-            var fileName = "reader.txt",
-                filePath = root.fullPath + '/' + fileName,
-                fail = createFail('FileReader'),
-                // file content
-                rule = "There is an exception to every rule.  Except this one.",
-                // creates a FileWriter object
-                create_writer = function(fileEntry) {
-                    fileEntry.createWriter(write_file, fail);
-                },
-                // writes file and reads it back in
-                write_file = function(writer) {
-                    writer.onwriteend = read_file;
-                    writer.write(rule);
-                },
-                verifier = jasmine.createSpy().andCallFake(function(evt) {
-                    expect(evt).toBeDefined();
-                    expect(evt.target.result.substr(0,23)).toBe("data:text/plain;base64,");
-                }),
-                // reads file and compares content to what was written
-                read_file = function(evt) {
-                    var reader = new FileReader();
-                    reader.onloadend = verifier;
-                    var myFile = new File();
-                    myFile.fullPath = filePath;
-                    reader.readAsDataURL(myFile);
-                };
-
-            // create a file, write to it, and read it in again
-            runs(function() {
-                root.getFile(fileName, {create: true}, create_writer, fail);
-            });
-
-            waitsFor(function() { return verifier.wasCalled; }, "verifier never called", Tests.TEST_TIMEOUT);
 
-            runs(function() {
-                expect(fail).not.toHaveBeenCalled();
-                expect(verifier).toHaveBeenCalled();
-            });
-        });
-        it("should read file properly, readAsBinaryString", function() {
-            // path of file
-            var fileName = "reader.txt",
-                filePath = root.fullPath + '/' + fileName,
-                fail = createFail('FileReader'),
-                // file content
-                rule = "There is an exception to every rule.  Except this one.",
-                // creates a FileWriter object
-                create_writer = function(fileEntry) {
-                    fileEntry.createWriter(write_file, fail);
+        function writeDummyFile(writeBinary, callback) {
+            var fileName = "dummy.txt",
+                fileEntry = null,
+                writerFail = createFail('createWriter'),
+                getFileFail = createFail('getFile'),
+                fileFail = createFail('file'),
+                callback = jasmine.createSpy().andCallFake(callback),
+                fileData = '\u20AC\xEB - There is an exception to every rule.  Except this one.',
+                fileDataAsBinaryString = '\xe2\x82\xac\xc3\xab - There is an exception to every rule.  Except this one.',
+                createWriter = function(fe) {
+                    fileEntry = fe;
+                    fileEntry.createWriter(writeFile, writerFail);
                 },
                 // writes file and reads it back in
-                write_file = function(writer) {
-                    writer.onwriteend = read_file;
-                    writer.write(rule);
-                },
-                verifier = jasmine.createSpy().andCallFake(function(evt) {
-                    expect(evt).toBeDefined();
-                    expect(evt.target.result).toBe(rule);
-                }),
-                // reads file and compares content to what was written
-                read_file = function(evt) {
-                    var reader = new FileReader();
-                    reader.onloadend = verifier;
-                    var myFile = new File();
-                    myFile.fullPath = filePath;
-                    reader.readAsBinaryString(myFile);
+                writeFile = function(writer) {
+                    writer.onwriteend = function() {
+                        fileEntry.file(function(f) {
+                            callback(fileEntry, f, fileData, fileDataAsBinaryString);
+                        }, fileFail);
+                    };
+                    writer.write(fileData);
                 };
-
+            fileData += writeBinary ? 'bin:\x01\x00' : '';
+            fileDataAsBinaryString += writeBinary ? 'bin:\x01\x00' : '';
             // create a file, write to it, and read it in again
-            runs(function() {
-                root.getFile(fileName, {create: true}, create_writer, fail);
-            });
+            root.getFile(fileName, {create: true}, createWriter, getFileFail);
+            waitsForAny(getFileFail, writerFail, fileFail, callback);
+        }
 
-            waitsFor(function() { return verifier.wasCalled; }, "verifier never called", Tests.TEST_TIMEOUT);
-
-            runs(function() {
-                expect(fail).not.toHaveBeenCalled();
-                expect(verifier).toHaveBeenCalled();
-            });
-        });
-        it("should read file properly, readAsArrayBuffer", function() {
-            // path of file
-            var fileName = "reader.txt",
-                filePath = root.fullPath + '/' + fileName,
-                fail = createFail('FileReader'),
-                // file content
-                rule = "There is an exception to every rule.  Except this one.",
-                // creates a FileWriter object
-                create_writer = function(fileEntry) {
-                    fileEntry.createWriter(write_file, fail);
-                },
-                // writes file and reads it back in
-                write_file = function(writer) {
-                    writer.onwriteend = read_file;
-                    writer.write(rule);
-                },
-                verifier = jasmine.createSpy().andCallFake(function(evt) {
+        function runReaderTest(funcName, writeBinary, verifierFunc, sliceStart, sliceEnd) {
+            writeDummyFile(writeBinary, function(fileEntry, file, fileData, fileDataAsBinaryString) {
+                var readWin = jasmine.createSpy().andCallFake(function(evt) {
                     expect(evt).toBeDefined();
+                    verifierFunc(evt, fileData, fileDataAsBinaryString);
+                });
 
-                    var buf = new Uint8Array(evt.target.result);
-                    var match = buf.length == rule.length;
-
-                    for (var i = 0; match && i < buf.length; i++) {
-                        match = buf[i] == rule.charCodeAt(i);
-                    }
-
-                    expect(match).toBe(true);
-                }),
-                // reads file and compares content to what was written
-                read_file = function(evt) {
-                    var reader = new FileReader();
-                    reader.onloadend = verifier;
-                    var myFile = new File();
-                    myFile.fullPath = filePath;
-                    reader.readAsArrayBuffer(myFile);
-                };
+                var reader = new FileReader();
+                var readFail = createFail(funcName);
+                reader.onload = readWin;
+                reader.onerror = readFail;
+                if (sliceEnd !== undefined) {
+                    file = file.slice(sliceStart, sliceEnd);
+                } else if (sliceStart !== undefined) {
+                    file = file.slice(sliceStart);
+                }
+                reader[funcName](file);
 
-            // create a file, write to it, and read it in again
-            runs(function() {
-                root.getFile(fileName, {create: true}, create_writer, fail);
+                waitsForAny(readWin, readFail);
             });
+        }
 
-            waitsFor(function() { return verifier.wasCalled; }, "verifier never called", Tests.TEST_TIMEOUT);
+        function arrayBufferEqualsString(buf, str) {
+            var buf = new Uint8Array(ab);
+            var match = buf.length == str.length;
 
-            runs(function() {
-                expect(fail).not.toHaveBeenCalled();
-                expect(verifier).toHaveBeenCalled();
-            });
-        });
-        it("should properly slice files, reading text", function() {
-            // path of file
-            var fileName = "reader.txt",
-                // file content
-                rule = "There is an exception to every rule.  Except this one.",
-                verifier = jasmine.createSpy().andCallFake(function(evt) {
-                    expect(evt).toBeDefined();
-                    expect(evt.target.result).toBe("exception to every rule");
-                }),
-                fail = createFail('FileReader'),
-                filePath = root.fullPath + '/' + fileName,
-                // creates a FileWriter object
-                create_writer = function(fileEntry) {
-                    fileEntry.createWriter(write_file, fail);
-                },
-                // writes file and reads it back in
-                write_file = function(writer) {
-                    writer.onwriteend = read_file;
-                    writer.write(rule);
-                },
-                // reads file and compares content to what was written
-                read_file = function(evt) {
-                    var reader = new FileReader();
-                    reader.onloadend = verifier;
-                    var myFile = new File();
-
-                    myFile.fullPath = filePath;
-                    myFile.size = 54;
-                    myFile.end = 54;
-                    var sliced = myFile.slice(10, 40); // "n exception to every rule.  Ex"
-                    var sliced2 = sliced.slice(2, -5); // "exception to every rule"
-                    reader.readAsText(sliced2);
-                };
+            for (var i = 0; match && i < buf.length; i++) {
+                match = buf[i] == str.charCodeAt(i);
+            }
+            return match;
+        }
 
-            // create a file, write to it, and read it in again
-            runs(function() {
-                root.getFile(fileName, {create: true}, create_writer, fail);
-            });
-
-            waitsFor(function() { return verifier.wasCalled; }, "verifier never called", Tests.TEST_TIMEOUT);
-
-            runs(function() {
-                expect(fail).not.toHaveBeenCalled();
-                expect(verifier).toHaveBeenCalled();
+        it("should read file properly, readAsText", function() {
+            runReaderTest('readAsText', false, function(evt, fileData, fileDataAsBinaryString) {
+                expect(evt.target.result).toBe(fileData);
             });
         });
-        it("should properly slice files, reading data URLs", function() {
-            // path of file
-            var fileName = "reader.txt",
-                // file content
-                rule = "There is an exception to every rule.  Except this one.",
-                verifier = jasmine.createSpy().andCallFake(function(evt) {
-                    expect(evt).toBeDefined();
-                    expect(evt.target.result).toBe("data:text/plain;base64,ZXhjZXB0aW9uIHRvIGV2ZXJ5IHJ1bGU=");
-                }),
-                fail = createFail('FileReader'),
-                filePath = root.fullPath + '/' + fileName,
-                // creates a FileWriter object
-                create_writer = function(fileEntry) {
-                    fileEntry.createWriter(write_file, fail);
-                },
-                // writes file and reads it back in
-                write_file = function(writer) {
-                    writer.onwriteend = read_file;
-                    writer.write(rule);
-                },
-                // reads file and compares content to what was written
-                read_file = function(evt) {
-                    var reader = new FileReader();
-                    reader.onloadend = verifier;
-                    var myFile = new File();
-
-                    myFile.fullPath = filePath;
-                    myFile.size = 54;
-                    myFile.end = 54;
-                    var sliced = myFile.slice(10, 40); // "n exception to every rule.  Ex"
-                    var sliced2 = sliced.slice(2, -5); // "exception to every rule"
-                    reader.readAsDataURL(sliced2);
-                };
-
-            // create a file, write to it, and read it in again
-            runs(function() {
-                root.getFile(fileName, {create: true}, create_writer, fail);
+        it("should read file properly, Data URI", function() {
+            runReaderTest('readAsDataURL', true, function(evt, fileData, fileDataAsBinaryString) {
+                expect(evt.target.result.substr(0,23)).toBe("data:text/plain;base64,");
+                expect(evt.target.result.slice(23)).toBe(atob(fileData));
             });
-
-            waitsFor(function() { return verifier.wasCalled; }, "verifier never called", Tests.TEST_TIMEOUT);
-
-            runs(function() {
-                expect(fail).not.toHaveBeenCalled();
-                expect(verifier).toHaveBeenCalled();
+        });
+        it("should read file properly, readAsBinaryString", function() {
+            runReaderTest('readAsBinaryString', true, function(evt, fileData, fileDataAsBinaryString) {
+                expect(evt.target.result).toBe(fileDataAsBinaryString);
             });
         });
+        it("should read file properly, readAsArrayBuffer", function() {
+            runReaderTest('readAsArrayBuffer', true, function(evt, fileData, fileDataAsBinaryString) {
+                expect(arrayBufferEqualsString(evt.target.result, fileDataAsBinaryString)).toBe(true);
+            });
+        });
+        it("should read sliced file: readAsText", function() {
+            runReaderTest('readAsText', false, function(evt, fileData, fileDataAsBinaryString) {
+                expect(evt.target.result).toBe(fileDataAsBinaryString.slice(10, 40));
+            }, 10, 40);
+        });
+        it("should read sliced file: slice past eof", function() {
+            runReaderTest('readAsText', false, function(evt, fileData, fileDataAsBinaryString) {
+                expect(evt.target.result).toBe(fileData.slice(-5, 9999));
+            }, -5, 9999);
+        });
+        it("should read sliced file: slice to eof", function() {
+            runReaderTest('readAsText', false, function(evt, fileData, fileDataAsBinaryString) {
+                expect(evt.target.result).toBe(fileData.slice(-5));
+            }, -5);
+        });
+        it("should read empty slice", function() {
+            runReaderTest('readAsText', false, function(evt, fileData, fileDataAsBinaryString) {
+                expect(evt.target.result).toBe('');
+            }, 0, 0);
+        });
+        it("should read sliced file properly, readAsDataURL", function() {
+            runReaderTest('readAsDataURL', true, function(evt, fileData, fileDataAsBinaryString) {
+                expect(evt.target.result.slice(0, 23)).toBe("data:text/plain;base64,");
+                expect(evt.target.result.slice(23)).toBe(atob(fileDataAsBinaryString.slice( 10, -3)));
+            }, 10, -3);
+        });
+        it("should read sliced file properly, readAsBinaryString", function() {
+            runReaderTest('readAsBinaryString', true, function(evt, fileData, fileDataAsBinaryString) {
+                expect(evt.target.result).toBe(fileDataAsBinaryString.slice(-10, -5));
+            }, -10, -5);
+        });
+        it("should read sliced file properly, readAsArrayBuffer", function() {
+            runReaderTest('readAsArrayBuffer', true, function(evt, fileData, fileDataAsBinaryString) {
+                expect(arrayBufferEqualsString(evt.target.result, fileDataAsBinaryString.slice(0, -1))).toBe(true);
+            }, 0, -1);
+        });
     });
 
     describe('FileWriter', function(){
@@ -3567,50 +3389,6 @@ describe('File API', function() {
                 expect(fail).not.toHaveBeenCalled();
             });
         });
-        it("should write and read special characters", function() {
-            var fileName = "reader.txt",
-                filePath = root.fullPath + '/' + fileName,
-                theWriter,
-                // file content
-                rule = "H\u00EBll\u00F5 Euro \u20AC\u00A1",
-                fail = createFail('FileWriter'),
-                // creates a FileWriter object
-                create_writer = function(fileEntry) {
-                    fileEntry.createWriter(write_file, fail);
-                },
-                verifier = jasmine.createSpy().andCallFake(function(evt) {
-                    expect(evt).toBeDefined();
-                    expect(evt.target.result).toBe(rule);
-                    // cleanup
-                    deleteFile(fileName);
-                }),
-                // writes file and reads it back in
-                write_file = function(writer) {
-                    theWriter = writer;
-                    theWriter.onwriteend = read_file;
-                    theWriter.write(rule);
-                },
-                // reads file and compares content to what was written
-                read_file = function(evt) {
-                    var reader = new FileReader();
-                    reader.onloadend = verifier;
-                    var myFile = new File();
-                    myFile.fullPath = filePath;
-                    reader.readAsText(myFile);
-                };
-
-            // create a file, write to it, and read it in again
-            runs(function() {
-                createFile(fileName, create_writer, fail);
-            });
-
-            waitsFor(function() { return verifier.wasCalled; }, "verifier never called", Tests.TEST_TIMEOUT);
-
-            runs(function() {
-                expect(verifier).toHaveBeenCalled();
-                expect(fail).not.toHaveBeenCalled();
-            });
-        });
         it("should be able to seek", function() {
             var fileName = "writer.seek",
                 // file content