-
Notifications
You must be signed in to change notification settings - Fork 1.2k
/
DragInfo.qunit.js
275 lines (214 loc) · 9.86 KB
/
DragInfo.qunit.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
/*global QUnit*/
sap.ui.define([
"sap/ui/thirdparty/jquery",
'./TestControl',
"sap/ui/core/dnd/DragInfo",
"sap/ui/base/ManagedObject",
"sap/ui/core/ElementMetadata",
"sap/base/Log"
], function(jQuery, TestControl, DragInfo, ManagedObject, ElementMetadata, Log) {
"use strict";
QUnit.module("");
QUnit.test("Default values", function(assert) {
var oDragInfo = new DragInfo();
assert.strictEqual(oDragInfo.getSourceAggregation(), "", "Default value of sourceAggregation is correct");
assert.strictEqual(oDragInfo.getGroupName(), "", "Default value of targetAggregation is correct");
assert.strictEqual(oDragInfo.getEnabled(), true, "Default value of enabled is correct");
assert.strictEqual(oDragInfo.isDroppable(), false, "DragInfo is not droppable.");
oDragInfo.destroy();
});
QUnit.test("invalidation", function(assert) {
var oDragInfo = new DragInfo();
var fnInvalidateSpy = this.spy(oDragInfo, "invalidate");
oDragInfo.setGroupName("abc");
assert.strictEqual(fnInvalidateSpy.callCount, 0, "Invalidation has not happened for groupName property");
oDragInfo.setEnabled(false);
assert.strictEqual(fnInvalidateSpy.callCount, 1, "Invalidation has happened for enabled property");
oDragInfo.destroy();
});
QUnit.test("isDraggable - An unrelated element", function(assert) {
var oDragInfo = new DragInfo();
var oManagedObject = new ManagedObject();
assert.notOk(oDragInfo.isDraggable(undefined), "Not draggable: Drag target is not specified");
assert.notOk(oDragInfo.isDraggable(oManagedObject), "Not draggable: Drag target is not an instanceof Element");
oManagedObject.destroy();
oDragInfo.destroy();
});
QUnit.test("isDraggable - Test control not known to the DragInfo", function(assert) {
var oDragInfo = new DragInfo();
var oControl = new TestControl();
assert.notOk(oDragInfo.isDraggable(oControl), "Not Draggable: The drag source is not known");
oDragInfo.destroy();
oControl.destroy();
});
QUnit.test("isDraggable - The control itself", function(assert) {
var oDragInfo = new DragInfo();
var oControl = new TestControl({
dragDropConfig: oDragInfo
});
assert.ok(oDragInfo.isDraggable(oControl), "Draggable: The drag source is the control itself");
oControl.isDragAllowed = function() { assert.equal(arguments[0], oDragInfo); return false; };
assert.notOk(oDragInfo.isDraggable(oControl), "Not Draggable: oControl.isDragAllowed method did not permit");
delete oControl.isDragAllowed;
oDragInfo.setSourceAggregation("children");
assert.notOk(oDragInfo.isDraggable(oControl), "Not Draggable: sourceAggregation is defined");
oControl.destroy();
});
QUnit.test("isDraggable - Aggregated child element", function(assert) {
var oDragInfo = new DragInfo({
sourceAggregation: "children"
});
var oControl = new TestControl();
var oParent = new TestControl({
dragDropConfig: oDragInfo,
children: oControl
});
oParent.placeAt("qunit-fixture");
sap.ui.getCore().applyChanges();
assert.ok(oDragInfo.isDraggable(oControl), "Draggable: Child control is in the defined sourceAggregation");
assert.ok(oControl.getDomRef().draggable, "Dom Draggable: Child control is in the defined sourceAggregation");
oControl.isDragAllowed = function() { assert.equal(arguments[0], oDragInfo); return false; };
assert.notOk(oDragInfo.isDraggable(oControl), "Not Draggable: oControl.isDragAllowed method did not permit");
oControl.rerender();
assert.notOk(oControl.getDomRef().draggable, "Dom Not Draggable: oControl.isDragAllowed method did not permit");
delete oControl.isDragAllowed;
oDragInfo.setSourceAggregation("thereIsNoSuchAnAggregationName");
sap.ui.getCore().applyChanges();
assert.notOk(oDragInfo.isDraggable(oControl), "Not Draggable: Child control is not in the defined sourceAggregation");
assert.notOk(oControl.getDomRef().draggable, "Dom Not Draggable: Child control is not in the defined sourceAggregation");
oDragInfo.setSourceAggregation("children");
sap.ui.getCore().applyChanges();
assert.ok(oDragInfo.isDraggable(oControl), "Draggable Again: Child control is in the defined sourceAggregation");
assert.ok(oControl.getDomRef().draggable, "Dom Draggable Again: Child control is in the defined sourceAggregation");
oDragInfo.setEnabled(false);
sap.ui.getCore().applyChanges();
assert.notOk(oDragInfo.isDraggable(oControl), "Not Draggable: DragInfo is disabled");
assert.notOk(oControl.getDomRef().draggable, "Dom Not Draggable: DragInfo is disabled");
oDragInfo.setEnabled(true);
sap.ui.getCore().applyChanges();
assert.ok(oDragInfo.isDraggable(oControl), "Draggable: DragInfo is enabled");
assert.ok(oControl.getDomRef().draggable, "Dom Draggable: DragInfo is enabled");
oDragInfo.setSourceAggregation();
sap.ui.getCore().applyChanges();
assert.notOk(oDragInfo.isDraggable(oControl), "Not Draggable: sourceAggregation is empty");
assert.notOk(oControl.getDomRef().draggable, "Dom Not Draggable: sourceAggregation is empty");
assert.ok(oDragInfo.isDraggable(oParent), "Parent Draggable: sourceAggregation is empty");
assert.ok(oParent.getDomRef().draggable, "Parent Dom Draggable: sourceAggregation is empty");
oParent.destroy();
});
QUnit.test("isDraggable - Enabled", function(assert) {
var oDragInfo = new DragInfo({
enabled: false
});
var oControl = new TestControl({
dragDropConfig: oDragInfo
});
oControl.placeAt("qunit-fixture");
sap.ui.getCore().applyChanges();
assert.notOk(oDragInfo.isDraggable(oControl), "Not draggable: DragInfo is not enabled");
assert.notOk(oControl.getDomRef().draggable, "Dom Not draggable: DragInfo is not enabled");
oDragInfo.setEnabled(true);
sap.ui.getCore().applyChanges();
assert.ok(oDragInfo.isDraggable(oControl), "Draggable: DragInfo is enabled and drag source is the control itself");
assert.ok(oControl.getDomRef().draggable, "Dom Draggable: DragInfo is enabled and drag source is the control itself");
oControl.destroy();
});
QUnit.test("isDraggable - metadata disallows", function(assert) {
var oDragInfo = new DragInfo();
var oChild = new TestControl();
var oParent = new TestControl({
dragDropConfig: oDragInfo,
children: oChild
});
var fnLogSpy = this.spy(Log, "warning");
this.stub(ElementMetadata.prototype, "getDragDropInfo").returns({draggable: false});
assert.notOk(oDragInfo.isDraggable(oParent), "Not draggable: Element metadata does not allow dragging");
assert.strictEqual(fnLogSpy.callCount, 1, "Not draggable is logged");
oDragInfo.setSourceAggregation("children");
assert.notOk(oDragInfo.isDraggable(oChild), "Not draggable: Aggregation metadata does not allow dragging");
assert.strictEqual(fnLogSpy.callCount, 2, "Not draggable is logged again");
oDragInfo.bIgnoreMetadataCheck = true;
assert.ok(oDragInfo.isDraggable(oChild), "Draggable: private flag ignores metadata check");
oParent.destroy();
});
QUnit.test("fireDragStart - invalid parameters", function(assert) {
var oDragStartEvent = new jQuery.Event("dragstart");
var fnDragStartSpy = this.spy();
var oDragInfo = new DragInfo({
dragStart: fnDragStartSpy
});
oDragInfo.fireDragStart();
assert.ok(fnDragStartSpy.notCalled, "dragStart event is not fired, there is no parameter");
oDragInfo.fireDragStart(oDragStartEvent);
assert.ok(fnDragStartSpy.notCalled, "dragStart event is not fired, dragSession does not exist");
oDragInfo.destroy();
});
QUnit.test("fireDragStart - event parameters", function(assert) {
var fnDragStartSpy = this.spy(function(oEvent) {
var mParameters = oEvent.getParameters();
assert.ok(mParameters.dragSession, "dragSession exists");
assert.strictEqual(mParameters.target, oControl, "target is valid");
assert.strictEqual(mParameters.browserEvent, oDragStartEvent.originalEvent, "browserEvent is valid");
});
var oDragInfo = new DragInfo({
dragStart: fnDragStartSpy
});
var oControl = new TestControl({
title: "Control",
dragDropConfig: oDragInfo
});
var oDragStartEvent = new jQuery.Event("dragstart");
oDragStartEvent.dragSession = {
getDragControl: function() {
return oControl;
}
};
var bEventValue = oDragInfo.fireDragStart(oDragStartEvent);
assert.ok(fnDragStartSpy.calledOnce, "dragStart event is fired once");
assert.ok(bEventValue, "dragStart event is returned true");
oDragInfo.detachDragStart(fnDragStartSpy);
oDragInfo.attachDragStart(function(oEvent) {
oEvent.preventDefault();
});
bEventValue = oDragInfo.fireDragStart(oDragStartEvent);
assert.notOk(bEventValue, "default is prevented for dragStart event");
oControl.destroy();
});
QUnit.test("fireDragEnd - invalid parameters", function(assert) {
var oDragEndEvent = new jQuery.Event("dragstart");
var fnDragEndSpy = this.spy();
var oDragInfo = new DragInfo({
dragEnd: fnDragEndSpy
});
oDragInfo.fireDragEnd();
assert.ok(fnDragEndSpy.notCalled, "dragEnd event is not fired, there is no parameter");
oDragInfo.fireDragEnd(oDragEndEvent);
assert.ok(fnDragEndSpy.notCalled, "dragEnd event is not fired, dragSession does not exist");
oDragInfo.destroy();
});
QUnit.test("fireDragEnd - event parameters", function(assert) {
var fnDragEndSpy = this.spy(function(oEvent) {
var mParameters = oEvent.getParameters();
assert.ok(mParameters.dragSession, "dragSession exists");
assert.strictEqual(mParameters.target, oControl, "target is valid");
assert.strictEqual(mParameters.browserEvent, oDragEndEvent.originalEvent, "browserEvent is valid");
});
var oDragInfo = new DragInfo({
dragEnd: fnDragEndSpy
});
var oControl = new TestControl({
title: "Control",
dragDropConfig: oDragInfo
});
var oDragEndEvent = new jQuery.Event("dragend");
oDragEndEvent.dragSession = {
getDragControl: function() {
return oControl;
}
};
var bEventValue = oDragInfo.fireDragEnd(oDragEndEvent);
assert.ok(fnDragEndSpy.calledOnce, "dragEnd event is fired once");
assert.ok(bEventValue, "dragEnd event is returned true");
oControl.destroy();
});
});