You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

241 lines
5.1 KiB

(function (Ply) {
module('Ply.effects');
test('core', function () {
Ply.effects.defaults = { duration: 300, open: {}, close: {} };
deepEqual(Ply.effects.get(), {
open: {
layer: { duration: 300 },
overlay: { duration: 300 }
},
close: {
layer: { duration: 300 },
overlay: { duration: 300 }
},
duration: 300
}, 'def');
deepEqual(Ply.effects.get(['fade-in', 'fade-out']), {
open: {
layer: { name: 'fade-in', duration: 300 },
overlay: { name: 'fade-in', duration: 300 }
},
close: {
layer: { name: 'fade-out', duration: 300 },
overlay: { name: 'fade-out', duration: 300 }
},
duration: 300
}, "['fade-in', 'fade-out']");
deepEqual(Ply.effects.get(['fade-in', 'fade-out:100']), {
open: {
layer: { name: 'fade-in', duration: 300 },
overlay: { name: 'fade-in', duration: 300 }
},
close: {
layer: { name: 'fade-out', duration: 100 },
overlay: { name: 'fade-out', duration: 100 }
},
duration: 300
}, "['fade-in', 'fade-out:100']");
deepEqual(Ply.effects.get('fade:100'), {
open: {
layer: { name: 'fade-in', duration: 100 * 0.8 },
overlay: { name: 'fade-in', duration: 100 }
},
close: {
layer: { name: 'fade-out', duration: 100 * 0.6 },
overlay: { name: 'fade-out', duration: 100 * 0.6 }
},
duration: 100
}, 'fade:100');
deepEqual(Ply.effects.get({
open: 'slide-in',
close: 'slide-out'
}), {
open: {
layer: { name: 'slide-in', duration: 300 },
overlay: { duration: 300 }
},
close: {
layer: { name: 'slide-out', duration: 300 },
overlay: { duration: 300 }
},
duration: 300
}, 'slide-in-out');
Ply.effects.setup({ open: 'fade-in' });
deepEqual(Ply.effects.get(), {
open: {
layer: { name: 'fade-in', duration: 300 },
overlay: { duration: 300 }
},
close: {
layer: { duration: 300 },
overlay: { duration: 300 }
},
duration: 300
}, 'open.fade-in');
Ply.effects.setup({ open: { overlay: 'fade-in' } });
deepEqual(Ply.effects.get({
open: 'slide-in',
close: 'slide-out'
}), {
open: {
layer: { name: 'slide-in', duration: 300 },
overlay: { name: 'fade-in', duration: 300 }
},
close: {
layer: { name: 'slide-out', duration: 300 },
overlay: { duration: 300 }
},
duration: 300
});
Ply.effects.setup('fade:400');
deepEqual(Ply.effects.get({
open: 'slide-in',
close: 'slide-out'
}), {
open: {
layer: { name: 'slide-in', duration: 400 },
overlay: { name: 'fade-in', duration: 400 }
},
close: {
layer: { name: 'slide-out', duration: 400 },
overlay: { name: 'fade-out', duration: 400 * 0.6 }
},
duration: 400
}, 'fade:400');
});
test('effects:args', function () {
Ply.effects.defaults = { duration: 300, open: {}, close: {} };
deepEqual(Ply.effects.get('scale[0.5,0.3]'), {
open: {
args: 0.5,
layer: { name: 'scale-in', duration: 300 },
overlay: { name: 'fade-in', duration: 300 }
},
close: {
args: 0.3,
layer: { name: 'scale-out', duration: 300 },
overlay: { name: 'fade-out', duration: 300 }
},
duration: 300
});
deepEqual(Ply.effects.get(['scale["foo"]', 'fall[{"bar":"baz"}]']), {
open: {
args: 'foo',
layer: { name: 'scale-in', duration: 300 },
overlay: { name: 'fade-in', duration: 300 }
},
close: {
args: {bar:'baz'},
layer: { name: 'fall-out', duration: 300 },
overlay: { name: 'fade-out', duration: 300 }
},
duration: 300
});
});
test('stress', function () {
try {
Ply.effects.get(null);
Ply.effects.get(void 0);
Ply.effects.get(Math.random());
Ply.effects.get('---');
Ply.effects.get(123);
Ply.effects.get('\n');
Ply.effects.get([null, null]);
Ply.effects.get([void 0, void 0]);
Ply.effects.get(['\n', '\t']);
ok(true);
} catch (err) {
equal([err, err.stack], null);
}
});
promiseTest('fade', function () {
var log = { open: [], close: [] },
type = 'open',
pid, i,
layer = new Ply('fade', { effect: 'fade' })
;
pid = setInterval(function () {
log[type].push( parseFloat(Ply.css(layer.overlayEl, 'opacity')) );
}, 50);
return layer.open().then(function () {
type = 'close';
ok(layer.layerEl.offsetHeight > 0, '> 0');
return layer.close();
}).then(function () {
ok(layer.layerEl.offsetHeight == 0, '== 0');
if (Ply.support.transition) {
ok(log.open.length > 2, 'open');
ok(log.close.length > 2, 'close');
for (i = 1; i < log.open.length; i++) {
if (log.open[i] < log.open[i-1]) {
equal(log.open, null, 'open: ' + i);
break;
}
}
for (i = 1; i < log.close.length; i++) {
if (log.close[i] > log.close[i-1]) {
equal(log.close, null, 'close: ' + i);
break;
}
}
}
clearInterval(pid);
});
});
promiseTest('other', function () {
expect(0);
var queue = Ply.promise(function (resolve) { resolve() });
Ply.each('scale fall slide 3d-flip 3d-sign'.split(' '), function (name) {
queue = queue.then(function () {
return new Ply(name, { effect: name + ':50' }).open().then(function (layer) {
return layer.close();
});
});
});
return queue;
});
})(Ply);