mirror of
https://github.com/Hopiu/fabric.js.git
synced 2026-03-19 23:40:29 +00:00
152 lines
6.7 KiB
JavaScript
152 lines
6.7 KiB
JavaScript
(function(){
|
|
|
|
var canvas = new fabric.Canvas();
|
|
|
|
QUnit.module('iText click interaction', {
|
|
afterEach: function() {
|
|
canvas.clear();
|
|
canvas.cancelRequestedRender();
|
|
}
|
|
});
|
|
QUnit.test('_getNewSelectionStartFromOffset end of line', function(assert) {
|
|
var iText = new fabric.IText('test need some word\nsecond line');
|
|
var index = 10;
|
|
var jlen = 20;
|
|
var selection = iText._getNewSelectionStartFromOffset({ y: 1, x: 1000 }, 500, 520, index, jlen);
|
|
assert.equal(selection, index, 'index value did not change');
|
|
});
|
|
QUnit.test('_getNewSelectionStartFromOffset middle of line', function(assert) {
|
|
var iText = new fabric.IText('test need some word\nsecond line');
|
|
var index = 10;
|
|
var jlen = 20;
|
|
var selection = iText._getNewSelectionStartFromOffset({ y: 1, x: 519 }, 500, 520, index, jlen);
|
|
assert.equal(selection, index + 1, 'index value was moved to next char, since is very near');
|
|
});
|
|
QUnit.test('_getNewSelectionStartFromOffset middle of line', function(assert) {
|
|
var iText = new fabric.IText('test need some word\nsecond line');
|
|
var index = 10;
|
|
var jlen = 20;
|
|
var selection = iText._getNewSelectionStartFromOffset({ y: 1, x: 502 }, 500, 520, index, jlen);
|
|
assert.equal(selection, index, 'index value was NOT moved to next char, since is very near to first one');
|
|
});
|
|
QUnit.test('_getNewSelectionStartFromOffset middle of line', function(assert) {
|
|
var iText = new fabric.IText('test need some word\nsecond line');
|
|
var index = 10;
|
|
var jlen = 10;
|
|
var selection = iText._getNewSelectionStartFromOffset({ y: 1, x: 1000 }, 500, 520, index, jlen);
|
|
assert.equal(selection, index, 'index value was NOT moved to next char, since is already at end of text');
|
|
});
|
|
QUnit.test('_mouseDownHandlerBefore set up selected property', function(assert) {
|
|
var iText = new fabric.IText('test need some word\nsecond line');
|
|
assert.equal(iText.selected, undefined, 'iText has no selected property');
|
|
canvas.setActiveObject(iText);
|
|
iText.canvas = canvas;
|
|
iText._mouseDownHandlerBefore({ e: {} });
|
|
assert.equal(iText.selected, true, 'iText has selected property');
|
|
assert.equal(iText.__lastSelected, undefined, 'iText has no __lastSelected property');
|
|
});
|
|
QUnit.test('_mouseUpHandler set selected as true', function(assert) {
|
|
var iText = new fabric.IText('test');
|
|
iText.initDelayedCursor = function() {};
|
|
iText.renderCursorOrSelection = function() {};
|
|
assert.equal(iText.selected, undefined, 'iText has no selected property');
|
|
assert.equal(iText.__lastSelected, undefined, 'iText has no __lastSelected property');
|
|
canvas.setActiveObject(iText);
|
|
iText.canvas = canvas;
|
|
iText.mouseUpHandler({ e: {} });
|
|
assert.equal(iText.selected, true, 'iText has selected property');
|
|
});
|
|
QUnit.test('_mouseUpHandler on a selected object enter edit', function(assert) {
|
|
var iText = new fabric.IText('test');
|
|
iText.initDelayedCursor = function() {};
|
|
iText.renderCursorOrSelection = function() {};
|
|
assert.equal(iText.isEditing, false, 'iText not editing');
|
|
iText.canvas = canvas;
|
|
canvas._activeObject = null;
|
|
iText.selected = true;
|
|
iText.__lastSelected = true;
|
|
iText.mouseUpHandler({ e: {} });
|
|
assert.equal(iText.isEditing, true, 'iText entered editing');
|
|
iText.exitEditing();
|
|
});
|
|
QUnit.test('_mouseUpHandler on a selected object does enter edit if there is an activeObject', function(assert) {
|
|
var iText = new fabric.IText('test');
|
|
iText.initDelayedCursor = function() {};
|
|
iText.renderCursorOrSelection = function() {};
|
|
assert.equal(iText.isEditing, false, 'iText not editing');
|
|
iText.canvas = canvas;
|
|
canvas._activeObject = new fabric.IText('test2');
|
|
iText.selected = true;
|
|
iText.__lastSelected = true;
|
|
iText.mouseUpHandler({ e: {} });
|
|
assert.equal(iText.isEditing, false, 'iText did not enter editing');
|
|
iText.exitEditing();
|
|
});
|
|
QUnit.test('_mouseUpHandler on a selected text in a group DOES NOT enter edit', function(assert) {
|
|
var iText = new fabric.IText('test');
|
|
iText.initDelayedCursor = function() {};
|
|
iText.renderCursorOrSelection = function() {};
|
|
assert.equal(iText.isEditing, false, 'iText not editing');
|
|
iText.canvas = canvas;
|
|
iText.selected = true;
|
|
iText.__lastSelected = true;
|
|
iText.group = true;
|
|
iText.mouseUpHandler({ e: {} });
|
|
assert.equal(iText.isEditing, false, 'iText did not entered editing');
|
|
iText.exitEditing();
|
|
});
|
|
QUnit.test('_mouseUpHandler on a corner of selected text DOES NOT enter edit', function(assert) {
|
|
var iText = new fabric.IText('test');
|
|
iText.initDelayedCursor = function() {};
|
|
iText.renderCursorOrSelection = function() {};
|
|
assert.equal(iText.isEditing, false, 'iText not editing');
|
|
iText.canvas = canvas;
|
|
iText.selected = true;
|
|
iText.__lastSelected = true;
|
|
iText.__corner = 'mt';
|
|
iText.mouseUpHandler({ e: {} });
|
|
assert.equal(iText.isEditing, false, 'iText did not entered editing');
|
|
iText.exitEditing();
|
|
});
|
|
QUnit.test('click on editing itext make selection:changed fire', function(assert) {
|
|
var done = assert.async();
|
|
var eventData = {
|
|
which: 1,
|
|
target: canvas.upperCanvasEl,
|
|
clientX: 30,
|
|
clientY: 10
|
|
};
|
|
var count = 0;
|
|
var countCanvas = 0;
|
|
var iText = new fabric.IText('test test');
|
|
canvas.on('text:selection:changed', function() {
|
|
countCanvas++;
|
|
});
|
|
iText.on('selection:changed', function() {
|
|
count++;
|
|
});
|
|
canvas.add(iText);
|
|
assert.equal(canvas.getActiveObject(), null, 'no active object exist');
|
|
assert.equal(count, 0, 'no selection:changed fired yet');
|
|
assert.equal(countCanvas, 0, 'no text:selection:changed fired yet');
|
|
canvas._onMouseDown(eventData);
|
|
canvas._onMouseUp(eventData);
|
|
assert.equal(canvas.getActiveObject(), iText, 'Itext got selected');
|
|
assert.equal(iText.isEditing, false, 'Itext is not editing yet');
|
|
assert.equal(count, 0, 'no selection:changed fired yet');
|
|
assert.equal(countCanvas, 0, 'no text:selection:changed fired yet');
|
|
assert.equal(iText.selectionStart, 0, 'Itext did not set the selectionStart');
|
|
assert.equal(iText.selectionEnd, 0, 'Itext did not set the selectionend');
|
|
// make a little delay or it will act as double click and select everything
|
|
setTimeout(function() {
|
|
canvas._onMouseDown(eventData);
|
|
canvas._onMouseUp(eventData);
|
|
assert.equal(iText.isEditing, true, 'Itext entered editing');
|
|
assert.equal(iText.selectionStart, 2, 'Itext set the selectionStart');
|
|
assert.equal(iText.selectionEnd, 2, 'Itext set the selectionend');
|
|
assert.equal(count, 1, 'no selection:changed fired yet');
|
|
assert.equal(countCanvas, 1, 'no text:selection:changed fired yet');
|
|
done();
|
|
}, 500);
|
|
});
|
|
})();
|