cordova-test.ts 3.58 KB
import { CordovaFileHandler } from '../src/file-handler/cordova-file-handler';

declare var cordova;

exports.defineAutoTests = function() {

    let createFilesHelper = (filenames:Array<string>, successCallback, errorCallback) => {
        let index = 0;

        let create = () => {               
            if (index < filenames.length) {
                console.log("try creating file: ", filenames[index]);         
                createFileHelper(filenames[index], create, errorCallback);
                index += 1;
            } else {
                successCallback();
            }
        };
        create();
    };

    let createFileHelper = (filename, successCallback, errorCallback) => {
        window['requestFileSystem'](window['LocalFileSystem'].TEMPORARY, 0, (fs) => {
            fs.root.getFile(filename, { create: true, exclusive: false },(fileEntry) => {
                fileEntry.createWriter((fileWriter) => {
                    fileWriter.onwriteend = function() {
                        console.log("file created", filename);
                        successCallback();
                    };
                    fileWriter.onerror = function (e) {
                        console.error("file error", e);
                        errorCallback(e);
                    };
                    fileWriter.write(new Blob(['some arbitrary file data'], { type: 'text/plain' }));
                });
            }, errorCallback);
        }, errorCallback);
    };

    jasmine.DEFAULT_TIMEOUT_INTERVAL = 100000;

    describe("Cordova downloader", () => {
        
        let handler = new CordovaFileHandler();

        it("should download sample image from https source and store with new name", (done) => {

            let source = "https://upload.wikimedia.org/wikipedia/commons/f/ff/Pizigani_1367_Chart_10MB.jpg";
            // let target = cordova.file.dataDirectory + "full-moon.jpg";
            let target = "cdvfile://localhost/temporary/full-moon.jpg";
            let lastProgress = 0;

            handler.download(source, target)
                .on('progress', (progress: number) => {
                    expect(progress).toBeGreaterThan(lastProgress);
                    lastProgress = progress;
                }).once('error', (error:any) => {
                    fail();
                }).once('complete', () => { 
                    expect(lastProgress).toEqual(1);

                    window['resolveLocalFileSystemURL'](target, (entry:any) => {
                        expect(entry.isFile).toBeTruthy();
                        expect(entry.name).toEqual("full-moon.jpg");
                        done();
                    });                       
                });
        });

        it('should cleanup successfully', (done) => {
            createFilesHelper(['file-1', 'file-2', 'file-3'], () => {
                console.log("files are created, now start with cleanup");
                
                handler.once('cleanup-complete', (files) => {
                    console.log(files);
                    expect(files.length).toBeGreaterThan(1);
                    done();
                });

                handler.once('cleanup-error', (files) => {
                    fail('cleanup error');
                });

                handler.cleanup([
                    { source: '', target: 'file-1' } ,
                    { source: '', target: 'file-2' }
                ], 'cdvfile://localhost/temporary/');    
            }, (error) => {
                console.error(error);
                fail('error while creating files');
            });
        });
        
    });    

};