188 lines
5.2 KiB
JavaScript
188 lines
5.2 KiB
JavaScript
|
var el, el2,
|
||
|
hammer, hammer2;
|
||
|
|
||
|
module('Tests', {
|
||
|
setup: function() {
|
||
|
el = utils.createHitArea();
|
||
|
el2 = utils.createHitArea();
|
||
|
},
|
||
|
|
||
|
teardown: function() {
|
||
|
if (hammer) {
|
||
|
hammer.destroy();
|
||
|
hammer = null;
|
||
|
}
|
||
|
if (hammer2) {
|
||
|
hammer2.destroy();
|
||
|
hammer2 = null;
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
|
||
|
test('hammer shortcut', function() {
|
||
|
expect(2);
|
||
|
|
||
|
Hammer.defaults.touchAction = 'pan-y';
|
||
|
hammer = Hammer(el);
|
||
|
|
||
|
ok(hammer instanceof Hammer.Manager, 'returns an instance of Manager');
|
||
|
ok(hammer.touchAction.actions == Hammer.defaults.touchAction, 'set the default touchAction');
|
||
|
});
|
||
|
|
||
|
test('hammer shortcut with options', function() {
|
||
|
expect(2);
|
||
|
|
||
|
hammer = Hammer(el, {
|
||
|
touchAction: 'none'
|
||
|
});
|
||
|
ok(hammer instanceof Hammer.Manager, 'returns an instance of Manager');
|
||
|
ok(hammer.touchAction.actions == 'none', 'set the default touchAction');
|
||
|
});
|
||
|
|
||
|
/* Creating a hammer instance does not work on the same way
|
||
|
* when using Hammer or Hammer.Manager.
|
||
|
*
|
||
|
* This can confuse developers who read tests to use the library when doc is missing.
|
||
|
*/
|
||
|
test('Hammer and Hammer.Manager constructors work exactly on the same way.', function() {
|
||
|
expect(2);
|
||
|
|
||
|
hammer = new Hammer(el, {});
|
||
|
equal(Hammer.defaults.preset.length, hammer.recognizers.length);
|
||
|
|
||
|
hammer2 = new Hammer.Manager(el, {});
|
||
|
equal(0, hammer2.recognizers.length);
|
||
|
});
|
||
|
|
||
|
/* DOC to disable default recognizers should be added.
|
||
|
*
|
||
|
* - Hammer(el). IMO: Currently, well done.
|
||
|
* - Hammer(el, {}) . IMO: should disable default recognizers
|
||
|
* - Hammer(el, {recognizers: null}). IMO: now, it fails.
|
||
|
* - Hammer(el, {recognizers: []}). It works, but it is likely not intuitive.
|
||
|
*/
|
||
|
test('A Hammer instance can be setup to not having default recognizers.', function() {
|
||
|
expect(1);
|
||
|
|
||
|
hammer = new Hammer(el, { recognizers: false });
|
||
|
equal(0, hammer.recognizers.length);
|
||
|
});
|
||
|
|
||
|
/* The case was when I added a custom tap event which was added to the default
|
||
|
* recognizers, and my custom tap gesture wasn't working (I do not know exactly the reason),
|
||
|
* but removing the default recognizers solved the issue.
|
||
|
*/
|
||
|
test('Adding the same recognizer type should remove the old recognizer', function() {
|
||
|
expect(4);
|
||
|
|
||
|
hammer = new Hammer(el);
|
||
|
|
||
|
ok(!!hammer.get('tap'));
|
||
|
equal(7, hammer.recognizers.length);
|
||
|
|
||
|
var newTap = new Hammer.Tap({time: 1337});
|
||
|
hammer.add(newTap);
|
||
|
|
||
|
equal(7, hammer.recognizers.length);
|
||
|
equal(1337, hammer.get('tap').options.time);
|
||
|
});
|
||
|
|
||
|
/*
|
||
|
* Swipe gesture:
|
||
|
* - in this tests, it does not update input.velocity ( always 0)
|
||
|
* - does not fire swipeleft or swiperight events
|
||
|
*/
|
||
|
asyncTest('Swiping to the left should fire swipeleft event', function() {
|
||
|
expect(2);
|
||
|
|
||
|
hammer = new Hammer(el, {recognizers: []});
|
||
|
hammer.add(new Hammer.Swipe());
|
||
|
hammer.on('swipe swipeleft', function() {
|
||
|
ok(true);
|
||
|
});
|
||
|
|
||
|
Simulator.gestures.swipe(el, {pos: [300, 300], deltaY: 0, deltaX: -200}, function() {
|
||
|
start();
|
||
|
});
|
||
|
});
|
||
|
|
||
|
/*
|
||
|
* Input target change
|
||
|
*/
|
||
|
asyncTest('Should detect input while on other element', function() {
|
||
|
expect(1);
|
||
|
|
||
|
hammer = new Hammer(el, { inputTarget: document.body });
|
||
|
hammer.on('tap', function() {
|
||
|
ok(true);
|
||
|
});
|
||
|
|
||
|
Simulator.gestures.tap(document.body, null, function() {
|
||
|
start();
|
||
|
});
|
||
|
});
|
||
|
|
||
|
/* Hammer.Manager constructor accepts a "recognizers" option in which each
|
||
|
* element is an array representation of a Recognizer.
|
||
|
*/
|
||
|
test('Hammer.Manager accepts recognizers as arrays.', function() {
|
||
|
expect(4);
|
||
|
|
||
|
hammer = new Hammer.Manager(el, {
|
||
|
recognizers: [
|
||
|
[Hammer.Swipe],
|
||
|
[Hammer.Pinch],
|
||
|
[Hammer.Rotate],
|
||
|
[Hammer.Pan, { direction: Hammer.DIRECTION_UP }, ['swipe', 'pinch'], ['rotate']]
|
||
|
]
|
||
|
});
|
||
|
equal(4, hammer.recognizers.length);
|
||
|
|
||
|
var recognizerActual = hammer.recognizers[3];
|
||
|
equal(recognizerActual.options.direction, Hammer.DIRECTION_UP);
|
||
|
equal(2, Object.keys(recognizerActual.simultaneous).length);
|
||
|
equal(1, recognizerActual.requireFail.length);
|
||
|
});
|
||
|
|
||
|
/*
|
||
|
* Removing a recognizer which cannot be found would errantly remove the last recognizer in the
|
||
|
* manager's list.
|
||
|
*/
|
||
|
test('Remove non-existent recognizer.', function() {
|
||
|
expect(1);
|
||
|
|
||
|
hammer = new Hammer(el, {recognizers: []});
|
||
|
hammer.add(new Hammer.Swipe());
|
||
|
hammer.remove('tap');
|
||
|
|
||
|
equal(1, hammer.recognizers.length);
|
||
|
});
|
||
|
|
||
|
test('check whether Hammer.defaults.cssProps is restored', function() {
|
||
|
var beforeCssProps = {
|
||
|
userSelect: 'text',
|
||
|
touchSelect: 'grippers',
|
||
|
touchCallout: 'default',
|
||
|
contentZooming: 'chained',
|
||
|
userDrag: 'element',
|
||
|
tapHighlightColor: 'rgba(0, 1, 0, 0)'
|
||
|
};
|
||
|
var prop;
|
||
|
Hammer.each(Hammer.defaults.cssProps, function(value, name) {
|
||
|
prop = Hammer.prefixed(el.style, name);
|
||
|
if (prop) {
|
||
|
el.style[prop] = beforeCssProps[name];
|
||
|
}
|
||
|
});
|
||
|
|
||
|
hammer = Hammer(el);
|
||
|
hammer.destroy();
|
||
|
hammer = null;
|
||
|
Hammer.each(Hammer.defaults.cssProps, function(value, name) {
|
||
|
prop = Hammer.prefixed(el.style, name);
|
||
|
if (prop) {
|
||
|
equal(el.style[prop], beforeCssProps[name], "check if " + name + " is restored");
|
||
|
}
|
||
|
});
|
||
|
});
|