Skip to content
This repository was archived by the owner on Mar 13, 2018. It is now read-only.

Commit 2015c23

Browse files
committed
Touch event fixes
Fixes issue with nonEnumDescriptor Expands tests to cover the buggy parts Fixes #425
1 parent 68c2bfa commit 2015c23

File tree

2 files changed

+69
-13
lines changed

2 files changed

+69
-13
lines changed

src/wrappers/TouchEvent.js

+3
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
var UIEvent = scope.wrappers.UIEvent;
1111
var mixin = scope.mixin;
1212
var registerWrapper = scope.registerWrapper;
13+
var unwrap = scope.unwrap;
1314
var wrap = scope.wrap;
1415

1516
// TouchEvent is WebKit/Blink only.
@@ -26,6 +27,8 @@
2627
return;
2728
}
2829

30+
var nonEnumDescriptor = {enumerable: false};
31+
2932
function nonEnum(obj, prop) {
3033
Object.defineProperty(obj, prop, nonEnumDescriptor);
3134
}

test/js/TouchEvent.js

+66-13
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,8 @@ htmlSuite('Events', function() {
1616
return;
1717
}
1818

19-
test('TouchEvent', function() {
20-
var e = document.createEvent('TouchEvent');
21-
assert.instanceOf(e, TouchEvent);
22-
assert.instanceOf(e, UIEvent);
23-
assert.instanceOf(e, Event);
24-
});
25-
26-
test('Touch', function() {
27-
// There is no way to create a native Touch object so we use a mock impl.
28-
29-
var target = document.createElement('div');
30-
var impl = {
19+
function createMockTouch(nativeTarget) {
20+
return {
3121
clientX: 1,
3222
clientY: 2,
3323
screenX: 3,
@@ -39,8 +29,22 @@ htmlSuite('Events', function() {
3929
webkitRadiusY: 9,
4030
webkitRotationAngle: 10,
4131
webkitForce: 11,
42-
target: unwrap(target)
32+
target: nativeTarget
4333
};
34+
}
35+
36+
test('TouchEvent', function() {
37+
var e = document.createEvent('TouchEvent');
38+
assert.instanceOf(e, TouchEvent);
39+
assert.instanceOf(e, UIEvent);
40+
assert.instanceOf(e, Event);
41+
});
42+
43+
test('Touch', function() {
44+
// There is no way to create a native Touch object so we use a mock impl.
45+
46+
var target = document.createElement('div');
47+
var impl = createMockTouch(unwrap(target));
4448
var touch = new Touch(impl);
4549

4650
assert.equal(touch.clientX, 1);
@@ -57,4 +61,53 @@ htmlSuite('Events', function() {
5761
assert.equal(touch.target, target);
5862
});
5963

64+
test('TouchList', function() {
65+
66+
function createMockTouchList(elements) {
67+
var arr = [];
68+
for (var i = 0; i < elements.length; i++) {
69+
arr[i] = createMockTouch(unwrap(elements[i]));
70+
}
71+
return arr;
72+
}
73+
74+
var a = document.createElement('a');
75+
var b = document.createElement('b');
76+
var c = document.createElement('c');
77+
var d = document.createElement('d');
78+
var e = document.createElement('e');
79+
var f = document.createElement('f');
80+
81+
var mockEvent = {
82+
__proto__: unwrap(document.createEvent('TouchEvent')).__proto__,
83+
touches: createMockTouchList([a]),
84+
targetTouches: createMockTouchList([b, c]),
85+
changedTouches: createMockTouchList([d, e, f])
86+
};
87+
88+
var event = wrap(mockEvent);
89+
90+
assert.instanceOf(event.touches, TouchList);
91+
assert.instanceOf(event.targetTouches, TouchList);
92+
assert.instanceOf(event.changedTouches, TouchList);
93+
94+
assert.equal(event.touches.length, 1);
95+
assert.equal(event.targetTouches.length, 2);
96+
assert.equal(event.changedTouches.length, 3);
97+
98+
assert.instanceOf(event.touches[0], Touch);
99+
assert.instanceOf(event.targetTouches[0], Touch);
100+
assert.instanceOf(event.targetTouches[1], Touch);
101+
assert.instanceOf(event.changedTouches[0], Touch);
102+
assert.instanceOf(event.changedTouches[1], Touch);
103+
assert.instanceOf(event.changedTouches[2], Touch);
104+
105+
assert.equal(event.touches[0].target, a);
106+
assert.equal(event.targetTouches[0].target, b);
107+
assert.equal(event.targetTouches[1].target, c);
108+
assert.equal(event.changedTouches[0].target, d);
109+
assert.equal(event.changedTouches[1].target, e);
110+
assert.equal(event.changedTouches[2].target, f);
111+
});
112+
60113
});

0 commit comments

Comments
 (0)