blob: f366407cc7b391e1fc6e6712e214376e54617ce8 [file] [log] [blame]
var action_stack = require('../../src/util/action-stack'),
ios = require('../../src/platforms/ios');
describe('action-stack', function() {
var stack;
beforeEach(function() {
stack = new action_stack();
});
describe('processing of actions', function() {
it('should process actions one at a time until all are done', function() {
var first_spy = jasmine.createSpy();
var first_args = [1];
var second_spy = jasmine.createSpy();
var second_args = [2];
var third_spy = jasmine.createSpy();
var third_args = [3];
stack.push(stack.createAction(first_spy, first_args, function(){}, []));
stack.push(stack.createAction(second_spy, second_args, function(){}, []));
stack.push(stack.createAction(third_spy, third_args, function(){}, []));
stack.process('android', 'blah');
expect(first_spy).toHaveBeenCalledWith(first_args[0]);
expect(second_spy).toHaveBeenCalledWith(second_args[0]);
expect(third_spy).toHaveBeenCalledWith(third_args[0]);
});
it('should revert processed actions if an exception occurs', function() {
spyOn(console, 'log');
var first_spy = jasmine.createSpy();
var first_args = [1];
var first_reverter = jasmine.createSpy();
var first_reverter_args = [true];
var process_err = 'quit peein\' on my rug, man.';
var second_spy = jasmine.createSpy().andCallFake(function() {
throw new Error(process_err);
});
var second_args = [2];
var third_spy = jasmine.createSpy();
var third_args = [3];
stack.push(stack.createAction(first_spy, first_args, first_reverter, first_reverter_args));
stack.push(stack.createAction(second_spy, second_args, function(){}, []));
stack.push(stack.createAction(third_spy, third_args, function(){}, []));
// process should throw
expect(function() {
stack.process('android', 'blah');
}).toThrow('Uh oh!\n' + process_err);
// first two actions should have been called, but not the third
expect(first_spy).toHaveBeenCalledWith(first_args[0]);
expect(second_spy).toHaveBeenCalledWith(second_args[0]);
expect(third_spy).not.toHaveBeenCalledWith(third_args[0]);
// first reverter should have been called after second action exploded
expect(first_reverter).toHaveBeenCalledWith(first_reverter_args[0]);
});
});
});