Skip to content

Commit ebc9132

Browse files
committed
Merge branch 't/13346' into major
2 parents 68643de + f81468f commit ebc9132

File tree

4 files changed

+84
-63
lines changed

4 files changed

+84
-63
lines changed

tests/_benderjs/ckeditor/static/tools.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -811,11 +811,11 @@
811811

812812
/**
813813
* Returns an object to mock drop event with `dataTransfer` object and `preventDefault`
814-
* `getTarget` methods. To mock target new text mode is created with 'targetMock' string.
814+
* `getTarget` methods. To mock target new text node is created with 'targetMock' string.
815815
*/
816816
mockDropEvent: function() {
817817
var dataTransfer = this.mockNativeDataTransfer(),
818-
target = new CKEDITOR.dom.node( 'targetMock' );
818+
target = new CKEDITOR.dom.text( 'targetMock' );
819819

820820
target.isReadOnly = function() {
821821
return false;

tests/plugins/clipboard/drop.js

Lines changed: 46 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@ function drag( editor, evt ) {
2727

2828
assert.isInstanceOf( CKEDITOR.plugins.clipboard.dataTransfer, dragEvt.data.dataTransfer );
2929
assert.areSame( evt.$, dragEvt.data.$ );
30-
assert.areSame( 'targetMock', dragEvt.data.target.$ );
30+
// Check that it's the mocked dragstart target created by the mockDropEvent().
31+
assert.areSame( CKEDITOR.NODE_TEXT, dragEvt.data.target.type, 'drag target node type' );
32+
assert.areSame( 'targetMock', dragEvt.data.target.getText(), 'drag target node' );
3133
} );
3234

3335
dropTarget.fire( 'dragstart', evt );
@@ -43,7 +45,7 @@ function drop( editor, evt, config, onDrop, onFinish ) {
4345
expectedPasteEventCount = typeof config.expectedPasteEventCount !== 'undefined' ? config.expectedPasteEventCount : 1,
4446
expectedBeforePasteEventCount = typeof config.expectedBeforePasteEventCount !== 'undefined' ? config.expectedBeforePasteEventCount : expectedPasteEventCount;
4547

46-
range.setStart( config.element, config.offset );
48+
range.setStart( config.dropContainer, config.dropOffset );
4749
range.collapse( true );
4850
range.select();
4951

@@ -61,11 +63,11 @@ function drop( editor, evt, config, onDrop, onFinish ) {
6163
values.dropRangeStartContainerMatch = !!dropEvt.data.dropRange.startContainer;
6264
values.dropRangeStartOffsetMatch = !!dropEvt.data.dropRange.startOffset;
6365
} else {
64-
values.dropRangeStartContainerMatch = config.element == dropEvt.data.dropRange.startContainer;
65-
values.dropRangeStartOffsetMatch = config.offset == dropEvt.data.dropRange.startOffset;
66+
values.dropRangeStartContainerMatch = config.dropContainer == dropEvt.data.dropRange.startContainer;
67+
values.dropRangeStartOffsetMatch = config.dropOffset == dropEvt.data.dropRange.startOffset;
6668
}
6769
values.dropNativeEventMatch = evt.$ == dropEvt.data.$;
68-
values.dropTarget = dropEvt.data.target.$;
70+
values.dropTarget = dropEvt.data.target;
6971

7072
if ( onDrop ) {
7173
return onDrop( dropEvt );
@@ -102,7 +104,9 @@ function drop( editor, evt, config, onDrop, onFinish ) {
102104
assert.isTrue( values.dropRangeStartContainerMatch, 'On drop: drop range start offset should match.' );
103105

104106
assert.isTrue( values.dropNativeEventMatch, 'On drop: native event should match.' );
105-
assert.areSame( 'targetMock', values.dropTarget, 'On drop: drop target should match.' );
107+
// Check that it's the mocked drop target created by the mockDropEvent().
108+
assert.areSame( CKEDITOR.NODE_TEXT, values.dropTarget.type, 'On drop: drop target node type should match.' );
109+
assert.areSame( 'targetMock', values.dropTarget.getText(), 'On drop: drop target should match.' );
106110

107111
// Paste event asserts
108112
assert.areSame( expectedBeforePasteEventCount, values.beforePasteEventCounter, 'Before paste event should be called ' + expectedBeforePasteEventCount + ' time(s).' );
@@ -202,8 +206,8 @@ var testsForMultipleEditor = {
202206
drag( editor, evt );
203207

204208
drop( editor, evt, {
205-
element: editor.editable().findOne( '.h1' ).getChild( 0 ),
206-
offset: 7,
209+
dropContainer: editor.editable().findOne( '.h1' ).getChild( 0 ),
210+
dropOffset: 7,
207211
expectedTransferType: CKEDITOR.DATA_TRANSFER_INTERNAL,
208212
expectedText: 'dolor',
209213
expectedHtml: 'dolor',
@@ -228,8 +232,8 @@ var testsForMultipleEditor = {
228232
drag( editor, evt );
229233

230234
drop( editor, evt, {
231-
element: editor.editable().findOne( '.p' ).getChild( 0 ),
232-
offset: 6,
235+
dropContainer: editor.editable().findOne( '.p' ).getChild( 0 ),
236+
dropOffset: 6,
233237
expectedTransferType: CKEDITOR.DATA_TRANSFER_INTERNAL,
234238
expectedText: 'dolor',
235239
expectedHtml: 'dolor',
@@ -254,8 +258,8 @@ var testsForMultipleEditor = {
254258
drag( editor, evt );
255259

256260
drop( editor, evt, {
257-
element: editor.editable().findOne( '.p' ).getChild( 2 ),
258-
offset: 11,
261+
dropContainer: editor.editable().findOne( '.p' ).getChild( 2 ),
262+
dropOffset: 11,
259263
expectedTransferType: CKEDITOR.DATA_TRANSFER_INTERNAL,
260264
expectedText: 'ipsum',
261265
expectedHtml: 'ipsum',
@@ -280,10 +284,10 @@ var testsForMultipleEditor = {
280284

281285
drop( editor, evt, {
282286
// IE8 split text node anyway so we need different drop position there.
283-
element: CKEDITOR.env.ie && CKEDITOR.env.version == 8 ?
287+
dropContainer: CKEDITOR.env.ie && CKEDITOR.env.version == 8 ?
284288
editor.editable().findOne( '.p' ).getChild( 2 ) :
285289
editor.editable().findOne( '.p' ).getChild( 1 ),
286-
offset: CKEDITOR.env.ie && CKEDITOR.env.version == 8 ?
290+
dropOffset: CKEDITOR.env.ie && CKEDITOR.env.version == 8 ?
287291
11 :
288292
17,
289293
expectedTransferType: CKEDITOR.DATA_TRANSFER_INTERNAL,
@@ -310,8 +314,8 @@ var testsForMultipleEditor = {
310314
drag( editor, evt );
311315

312316
drop( editor, evt, {
313-
element: editor.editable().findOne( '.p' ).getChild( 2 ),
314-
offset: 16,
317+
dropContainer: editor.editable().findOne( '.p' ).getChild( 2 ),
318+
dropOffset: 16,
315319
expectedTransferType: CKEDITOR.DATA_TRANSFER_INTERNAL,
316320
expectedText: 'ipsum',
317321
expectedHtml: 'ipsum',
@@ -336,8 +340,8 @@ var testsForMultipleEditor = {
336340
drag( editor, evt );
337341

338342
drop( editor, evt, {
339-
element: editor.editable().findOne( '.p' ).getChild( 0 ),
340-
offset: 0,
343+
dropContainer: editor.editable().findOne( '.p' ).getChild( 0 ),
344+
dropOffset: 0,
341345
expectedTransferType: CKEDITOR.DATA_TRANSFER_INTERNAL,
342346
expectedText: 'ipsum',
343347
expectedHtml: 'ipsum',
@@ -363,8 +367,8 @@ var testsForMultipleEditor = {
363367
drag( editor, evt );
364368

365369
drop( editor, evt, {
366-
element: editor.editable().findOne( '.p' ).getChild( 1 ),
367-
offset: 4,
370+
dropContainer: editor.editable().findOne( '.p' ).getChild( 1 ),
371+
dropOffset: 4,
368372
expectedTransferType: CKEDITOR.DATA_TRANSFER_INTERNAL,
369373
expectedText: 'ipsum',
370374
expectedHtml: '<a href="foo">ipsum</a>',
@@ -388,8 +392,8 @@ var testsForMultipleEditor = {
388392
evt.$.dataTransfer.setData( 'Text', 'dolor' );
389393

390394
drop( editor, evt, {
391-
element: editor.editable().findOne( '.p' ).getChild( 0 ),
392-
offset: 6,
395+
dropContainer: editor.editable().findOne( '.p' ).getChild( 0 ),
396+
dropOffset: 6,
393397
expectedTransferType: CKEDITOR.DATA_TRANSFER_EXTERNAL,
394398
expectedText: 'dolor',
395399
expectedHtml: '',
@@ -421,8 +425,8 @@ var testsForMultipleEditor = {
421425
}
422426

423427
drop( editor, evt, {
424-
element: editor.editable().findOne( '.p' ).getChild( 0 ),
425-
offset: 6,
428+
dropContainer: editor.editable().findOne( '.p' ).getChild( 0 ),
429+
dropOffset: 6,
426430
expectedTransferType: CKEDITOR.DATA_TRANSFER_EXTERNAL,
427431
expectedText: !isCustomDataTypesSupported ? '<b>dolor</b>' : '',
428432
expectedHtml: !isCustomDataTypesSupported ? '' : '<b>dolor</b>',
@@ -451,8 +455,8 @@ var testsForMultipleEditor = {
451455
editor.resetUndo();
452456

453457
drop( editor, evt, {
454-
element: editor.editable().findOne( '.p' ).getChild( 0 ),
455-
offset: 6,
458+
dropContainer: editor.editable().findOne( '.p' ).getChild( 0 ),
459+
dropOffset: 6,
456460
expectedBeforePasteEventCount: 1,
457461
expectedPasteEventCount: 0
458462
}, null, function() {
@@ -477,8 +481,8 @@ var testsForMultipleEditor = {
477481
drag( editorCross, evt );
478482

479483
drop( editor, evt, {
480-
element: editor.editable().findOne( '.p' ).getChild( 0 ),
481-
offset: 6,
484+
dropContainer: editor.editable().findOne( '.p' ).getChild( 0 ),
485+
dropOffset: 6,
482486
expectedTransferType: CKEDITOR.DATA_TRANSFER_CROSS_EDITORS,
483487
expectedText: 'ipsum dolor ',
484488
expectedHtml: 'ipsum <b>dolor</b> ',
@@ -520,8 +524,8 @@ var testsForMultipleEditor = {
520524
drag( editor, evt );
521525

522526
drop( editor, evt, {
523-
element: editor.editable().findOne( '.drop1' ).getChild( 0 ),
524-
offset: 0,
527+
dropContainer: editor.editable().findOne( '.drop1' ).getChild( 0 ),
528+
dropOffset: 0,
525529
expectedTransferType: CKEDITOR.DATA_TRANSFER_INTERNAL,
526530
expectedText: 'drag1',
527531
expectedHtml: '<b class="drag1">drag1</b>',
@@ -557,8 +561,8 @@ var testsForMultipleEditor = {
557561
drag( editor, evt );
558562

559563
drop( editor, evt, {
560-
element: editor.editable().findOne( '.p' ).getChild( 0 ),
561-
offset: 0,
564+
dropContainer: editor.editable().findOne( '.p' ).getChild( 0 ),
565+
dropOffset: 0,
562566
expectedPasteEventCount: 0
563567
}, function() {
564568
return false;
@@ -775,7 +779,8 @@ var testsForMultipleEditor = {
775779

776780
assert.areSame( 'foo', dragendEvt.data.dataTransfer.getData( 'Text' ), 'cke/custom' );
777781
assert.areSame( evt.data.$, dragendEvt.data.$, 'nativeEvent' );
778-
assert.areSame( 'targetMock', dragendEvt.data.target.$, 'target' );
782+
assert.areSame( CKEDITOR.NODE_TEXT, dragendEvt.data.target.type, 'drag target node type' );
783+
assert.areSame( 'targetMock', dragendEvt.data.target.getText(), 'drag target node' );
779784
} );
780785

781786
editable.fire( 'dragend', evt.data );
@@ -856,8 +861,8 @@ var testsForMultipleEditor = {
856861
drag( editor, evt );
857862

858863
drop( editor, evt, {
859-
element: editor.editable().findOne( '.p' ).getChild( 0 ),
860-
offset: 0,
864+
dropContainer: editor.editable().findOne( '.p' ).getChild( 0 ),
865+
dropOffset: 0,
861866
expectedPasteEventCount: 0
862867
}, function() {
863868
return false;
@@ -884,8 +889,8 @@ var testsForMultipleEditor = {
884889

885890
drag( editor, evt );
886891
drop( editor, evt, {
887-
element: editor.editable(),
888-
offset: 2,
892+
dropContainer: editor.editable(),
893+
dropOffset: 2,
889894
expectedPasteEventCount: 0
890895
}, function() {
891896
return false;
@@ -923,8 +928,8 @@ var testsForMultipleEditor = {
923928
drag( editor, evt );
924929

925930
drop( editor, evt, {
926-
element: editor.editable().findOne( '.p' ).getChild( 0 ),
927-
offset: 0,
931+
dropContainer: editor.editable().findOne( '.p' ).getChild( 0 ),
932+
dropOffset: 0,
928933
expectedPasteEventCount: 0
929934
}, function() {
930935
return false;
@@ -953,8 +958,8 @@ var testsForMultipleEditor = {
953958
drag( editor, evt );
954959

955960
drop( editor, evt, {
956-
element: editor.editable().findOne( '.p' ).getChild( 0 ),
957-
offset: 0,
961+
dropContainer: editor.editable().findOne( '.p' ).getChild( 0 ),
962+
dropOffset: 0,
958963
expectedBeforePasteEventCount: 1,
959964
expectedPasteEventCount: 0
960965
} );

tests/plugins/widget/dnd.js

Lines changed: 31 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -45,21 +45,34 @@
4545
var getWidgetById = widgetTestsTools.getWidgetById,
4646
assertRelations = lineutilsTestsTools.assertRelations;
4747

48-
function dragstart( editor, evt ) {
48+
function dragstart( editor, evt, widget ) {
4949
var dropTarget = CKEDITOR.plugins.clipboard.getDropTarget( editor );
5050

51+
// Use realistic target which is the drag handler.
52+
evt.setTarget( widget.dragHandlerContainer.findOne( 'img' ) );
53+
5154
dropTarget.fire( 'dragstart', evt );
5255
}
5356

54-
function drop( editor, evt ) {
57+
function drop( editor, evt, dropRange ) {
5558
var dropTarget = CKEDITOR.env.ie && CKEDITOR.env.version < 9 ? editor.editable() : editor.document;
5659

60+
// If drop range is known use a realistic target. If no, then use a mock.
61+
if ( dropRange ) {
62+
evt.setTarget( dropRange.startContainer );
63+
} else {
64+
evt.setTarget( new CKEDITOR.dom.text( 'targetMock' ) );
65+
}
66+
5767
dropTarget.fire( 'drop', evt );
5868
}
5969

60-
function dragend( editor, evt ) {
70+
function dragend( editor, evt, widget ) {
6171
var dropTarget = CKEDITOR.env.ie && CKEDITOR.env.version < 9 ? editor.editable() : editor.document;
6272

73+
// Use realistic target which is the drag handler.
74+
evt.setTarget( widget.dragHandlerContainer.findOne( 'img' ) );
75+
6376
dropTarget.fire( 'dragend', evt );
6477
}
6578

@@ -239,7 +252,7 @@
239252
assert.areSame( CKEDITOR.DATA_TRANSFER_INTERNAL, dataTransfer.getTransferType( editor ), 'Source editor should equal this.editor' );
240253
} );
241254

242-
dragstart( editor, evt );
255+
dragstart( editor, evt, widget );
243256

244257
wait();
245258
} );
@@ -257,11 +270,11 @@
257270
widgetWasDestroyed += 1;
258271
} );
259272

260-
dragstart( editor, evt );
273+
dragstart( editor, evt, widget );
261274

262275
drop( editor, evt );
263276

264-
dragend( editor, evt );
277+
dragend( editor, evt, widget );
265278

266279
assert.areSame( '<p><span data-widget="testwidget" id="w1">foo</span></p>', editor.getData() );
267280
assert.areSame( 0, widgetWasDestroyed, 'Original widget should not be destroyed' );
@@ -285,8 +298,6 @@
285298

286299
drop( editor, evt.data );
287300

288-
dragend( editor, evt.data );
289-
290301
assert.areSame( '<p><span data-widget="testwidget" id="w1">foo</span></p>', editor.getData() );
291302
assert.areSame( 0, widgetWasDestroyed, 'Original widget should not be destroyed' );
292303
} );
@@ -309,11 +320,11 @@
309320
CKEDITOR.plugins.clipboard.initDragDataTransfer( evt );
310321
evt.data.dataTransfer.setData( 'cke/widget-id', -1 );
311322

312-
dragstart( editor, evt.data );
323+
dragstart( editor, evt.data, widget );
313324

314325
drop( editor, evt.data );
315326

316-
dragend( editor, evt.data );
327+
dragend( editor, evt.data, widget );
317328

318329
wait( function() {
319330
assert.areSame( '<p><span data-widget="testwidget" id="w1">foo</span></p>', editor.getData() );
@@ -359,18 +370,18 @@
359370

360371
// Ensure async.
361372
wait( function() {
362-
dragstart( editor, evt.data );
373+
dragstart( editor, evt.data, widget );
363374

364375
CKEDITOR.plugins.clipboard.initDragDataTransfer( evt );
365-
evt.data.dataTransfer.setData( 'cke/widget-id', getWidgetById( editor, 'w1' ).id );
376+
evt.data.dataTransfer.setData( 'cke/widget-id', widget.id );
366377

367378
range.setStart( editor.document.findOne( '.x' ).getFirst(), 1 );
368379
range.collapse( true );
369380
evt.data.testRange = range;
370381

371-
drop( editor, evt.data );
382+
drop( editor, evt.data, range );
372383

373-
dragend( editor, evt.data );
384+
dragend( editor, evt.data, widget );
374385
} );
375386
} );
376387
},
@@ -390,18 +401,20 @@
390401

391402
// Ensure async.
392403
wait( function() {
393-
dragstart( editor, evt.data );
404+
var widget = getWidgetById( editor, 'w1' );
405+
406+
dragstart( editor, evt.data, widget );
394407

395408
CKEDITOR.plugins.clipboard.initDragDataTransfer( evt );
396-
evt.data.dataTransfer.setData( 'cke/widget-id', getWidgetById( editor, 'w1' ).id );
409+
evt.data.dataTransfer.setData( 'cke/widget-id', widget.id );
397410

398411
range.setStart( editor.document.findOne( '.x' ).getFirst(), 1 );
399412
range.collapse( true );
400413
evt.data.testRange = range;
401414

402-
drop( editor, evt.data );
415+
drop( editor, evt.data, range );
403416

404-
dragend( editor, evt.data );
417+
dragend( editor, evt.data, widget );
405418
} );
406419
} );
407420
},

0 commit comments

Comments
 (0)