Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
269 lines
6.4 KiB
JavaScript
Executable file
269 lines
6.4 KiB
JavaScript
Executable file
/*jshint maxlen:false, sub:true*/
|
|
/*global MockGetDeviceStorage, MockCropResizeRotate*/
|
|
/*global MocksHelper, LAYOUT_MODE, MediaDB, ImageEditor, Pick*/
|
|
'use strict';
|
|
|
|
require('/shared/test/unit/mocks/mock_lazy_loader.js');
|
|
require('/shared/test/unit/mocks/mock_mediadb.js');
|
|
require('/shared/test/unit/mocks/mock_crop_resize_rotate.js');
|
|
require('/shared/test/unit/mocks/mock_navigator_getdevicestorage.js');
|
|
require('/shared/js/media/jpeg-exif.js');
|
|
requireApp('/gallery/test/unit/mock_image_editor.js');
|
|
requireApp('/gallery/test/unit/mock_spinner.js');
|
|
requireApp('/gallery/js/pick.js');
|
|
|
|
var mocksHelper = new MocksHelper([
|
|
'LazyLoader',
|
|
'MediaDB',
|
|
'ImageEditor',
|
|
'Spinner'
|
|
]).init();
|
|
|
|
suite('pick', function() {
|
|
|
|
mocksHelper.attachTestHelpers();
|
|
|
|
var real$;
|
|
|
|
var selectors;
|
|
|
|
setup(function() {
|
|
selectors = {};
|
|
});
|
|
|
|
suiteSetup(function() {
|
|
window.cropResizeRotate = sinon.spy(MockCropResizeRotate);
|
|
navigator.getDeviceStorage = sinon.spy(MockGetDeviceStorage);
|
|
|
|
real$ = window.$;
|
|
|
|
window.$ = function(selector) {
|
|
return (selectors[selector] = selectors[selector] || {
|
|
addEventListener: sinon.spy()
|
|
});
|
|
};
|
|
|
|
window.LAYOUT_MODE = {
|
|
pick: 'pick',
|
|
crop: 'crop'
|
|
};
|
|
|
|
window.CONFIG_MAX_PICK_PIXEL_SIZE = 800 * 600;
|
|
|
|
window.setView = sinon.spy();
|
|
|
|
window.photodb = new MediaDB('pictures');
|
|
});
|
|
|
|
suiteTeardown(function() {
|
|
window.$ = real$;
|
|
});
|
|
|
|
suite('start', function() {
|
|
var activity = {
|
|
source: {
|
|
data: {
|
|
type: 'image/jpeg'
|
|
}
|
|
}
|
|
};
|
|
|
|
test('Should call `setView` with `LAYOUT_MODE.pick`', function() {
|
|
window.setView.reset();
|
|
|
|
Pick.start(activity);
|
|
assert.ok(window.setView.calledWith(LAYOUT_MODE.pick));
|
|
});
|
|
|
|
test('Should add "action" event listener to #pick-header', function() {
|
|
Pick.start(activity);
|
|
assert.ok(selectors['pick-header'].addEventListener.calledWith('action'));
|
|
});
|
|
|
|
test('Should add "action" event listener to #crop-top', function() {
|
|
Pick.start(activity);
|
|
assert.ok(selectors['crop-top'].addEventListener.calledWith('action'));
|
|
});
|
|
|
|
test('Should add "click" event listener to #crop-done-button', function() {
|
|
Pick.start(activity);
|
|
assert.ok(selectors['crop-done-button'].addEventListener.calledWith('click'));
|
|
});
|
|
});
|
|
|
|
suite('select', function() {
|
|
var activity = {
|
|
source: {
|
|
data: {
|
|
type: 'image/jpeg'
|
|
}
|
|
}
|
|
};
|
|
|
|
var fileinfo = {
|
|
name: '/foo/bar/baz.jpg',
|
|
metadata: {}
|
|
};
|
|
|
|
test('Should show file name in the title bar if `nocrop` flag is set', function() {
|
|
activity.source.data.nocrop = true;
|
|
|
|
Pick.start(activity);
|
|
Pick.select(fileinfo);
|
|
assert.equal(selectors['crop-header'].textContent, 'baz');
|
|
delete activity.source.data.nocrop;
|
|
});
|
|
|
|
test('Should call `setView` with `LAYOUT_MODE.crop`', function() {
|
|
window.setView.reset();
|
|
|
|
Pick.start(activity);
|
|
Pick.select(fileinfo);
|
|
assert.ok(window.setView.calledWith(LAYOUT_MODE.crop));
|
|
});
|
|
|
|
test('Should disable #crop-done-button', function() {
|
|
Pick.start(activity);
|
|
Pick.select(fileinfo);
|
|
assert.isTrue(selectors['crop-done-button'].disabled);
|
|
});
|
|
|
|
test('Should get file from MediaDB', function() {
|
|
window.photodb.getFile.reset();
|
|
|
|
Pick.start(activity);
|
|
Pick.select(fileinfo);
|
|
assert.ok(window.photodb.getFile.calledWith(fileinfo.name));
|
|
});
|
|
|
|
test('Should crop/resize/rotate file', function() {
|
|
window.cropResizeRotate.reset();
|
|
|
|
Pick.start(activity);
|
|
Pick.select(fileinfo);
|
|
assert.ok(window.cropResizeRotate.called);
|
|
});
|
|
|
|
test('Should use external preview file if specified', function() {
|
|
navigator.getDeviceStorage.reset();
|
|
|
|
fileinfo.metadata.preview = {
|
|
filename: '/foo/bar/baz_preview.jpg'
|
|
};
|
|
Pick.start(activity);
|
|
Pick.select(fileinfo);
|
|
assert.ok(navigator.getDeviceStorage.calledWith('pictures'));
|
|
});
|
|
});
|
|
|
|
suite('cancel', function() {
|
|
var activity = {
|
|
source: {
|
|
data: {
|
|
type: 'image/jpeg'
|
|
}
|
|
},
|
|
postError: sinon.spy()
|
|
};
|
|
|
|
var fileinfo = {
|
|
name: '/foo/bar/baz.jpg',
|
|
metadata: {}
|
|
};
|
|
|
|
test('Should post "pick cancelled" error', function() {
|
|
activity.postError.reset();
|
|
|
|
Pick.start(activity);
|
|
Pick.select(fileinfo);
|
|
Pick.cancel();
|
|
assert.ok(activity.postError.calledWith('pick cancelled'));
|
|
});
|
|
});
|
|
|
|
suite('restart', function() {
|
|
var activity = {
|
|
source: {
|
|
data: {
|
|
type: 'image/jpeg'
|
|
}
|
|
}
|
|
};
|
|
|
|
var fileinfo = {
|
|
name: '/foo/bar/baz.jpg',
|
|
metadata: {}
|
|
};
|
|
|
|
test('Should destroy `ImageEditor`', function(done) {
|
|
ImageEditor.prototype.destroy.reset();
|
|
|
|
Pick.start(activity);
|
|
Pick.select(fileinfo);
|
|
setTimeout(function() {
|
|
Pick.restart();
|
|
assert.ok(ImageEditor.prototype.destroy.called);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('Should call `setView` with `LAYOUT_MODE.pick`', function(done) {
|
|
window.setView.reset();
|
|
|
|
Pick.start(activity);
|
|
Pick.select(fileinfo);
|
|
setTimeout(function() {
|
|
Pick.restart();
|
|
assert.ok(window.setView.calledWith(LAYOUT_MODE.pick));
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
suite('end', function() {
|
|
var activity = {
|
|
source: {
|
|
data: {
|
|
type: 'image/jpeg'
|
|
}
|
|
},
|
|
postResult: sinon.spy()
|
|
};
|
|
|
|
var fileinfo = {
|
|
name: '/foo/bar/baz.jpg',
|
|
metadata: {}
|
|
};
|
|
|
|
test('Should call `getCropRegion` on `ImageEditor`', function() {
|
|
ImageEditor.prototype.getCropRegion.reset();
|
|
|
|
Pick.start(activity);
|
|
Pick.select(fileinfo);
|
|
Pick.end();
|
|
assert.ok(ImageEditor.prototype.getCropRegion.called);
|
|
});
|
|
|
|
test('Should *NOT* call `getCropRegion` on `ImageEditor` if `nocrop` specified',
|
|
function() {
|
|
ImageEditor.prototype.getCropRegion.reset();
|
|
activity.source.data.nocrop = true;
|
|
|
|
Pick.start(activity);
|
|
Pick.select(fileinfo);
|
|
Pick.end();
|
|
assert.ok(ImageEditor.prototype.getCropRegion.notCalled);
|
|
delete activity.source.data.nocrop;
|
|
});
|
|
|
|
test('Should call `postResult`', function() {
|
|
activity.postResult.reset();
|
|
|
|
Pick.start(activity);
|
|
Pick.select(fileinfo);
|
|
Pick.end();
|
|
assert.ok(activity.postResult.called);
|
|
});
|
|
});
|
|
|
|
});
|