Fanu2's picture
Deploy full app to HF Space
b456468
import { fabric } from 'fabric';
import Graphics from '@/graphics';
import Text from '@/component/text';
describe('Text', () => {
let canvas, graphics, mockImage, text;
beforeAll(() => {
graphics = new Graphics(document.createElement('canvas'));
canvas = graphics.getCanvas();
text = new Text(graphics);
});
beforeEach(() => {
mockImage = new fabric.Image();
graphics.setCanvasImage('mockImage', mockImage);
});
afterEach(() => {
canvas.forEachObject((obj) => {
canvas.remove(obj);
});
});
describe('add()', () => {
let activeObj;
beforeEach(() => {
text.add('', {});
activeObj = canvas.getActiveObject();
});
it('should make the blank text object when text parameter is empty string', () => {
const newText = activeObj.text;
expect(newText).toBe('');
});
it('should make the text object set default option when parameter has not "styles" property', () => {
const newTextStyle = activeObj.fontWeight;
expect(newTextStyle).toBe('normal');
});
it('should create the text object on center of canvas when parameter has not "position" property', () => {
const { x, y } = mockImage.getCenterPoint();
expect(activeObj).toMatchObject({ left: x, top: y });
});
it('should be true when adding text', async () => {
const info = await text.add('default', {});
const newText = graphics.getObject(info.id);
expect(newText.selectionStart).toBe(0);
expect(newText.selectionEnd).toBe(7);
expect(newText.isEditing).toBe(true);
});
});
it('should maintain consistent left and top positions after entering and exiting drawing mode', () => {
const left = 10;
const top = 20;
const newText = new fabric.IText('testString', {
left,
top,
width: 30,
height: 50,
angle: 40,
originX: 'center',
originY: 'center',
});
text.useItext = true;
canvas.add(newText);
text.start();
text.end();
expect(newText).toMatchSnapshot();
});
it('should change contents in the text object as input', () => {
text.add('text123', {});
const activeObj = canvas.getActiveObject();
text.change(activeObj, 'abc');
expect(activeObj.text).toBe('abc');
text.change(activeObj, 'def');
expect(activeObj.text).toBe('def');
});
describe('setStyle()', () => {
beforeEach(() => {
text.add('new text', { styles: { fontWeight: 'bold' } });
});
it('should unlock style when a selected style already apply on the activated text object', () => {
const activeObj = canvas.getActiveObject();
text.setStyle(activeObj, { fontWeight: 'bold' });
expect(activeObj.fontWeight).not.toBe('bold');
});
it('should apply style when the activated text object has not a selected style', () => {
const activeObj = canvas.getActiveObject();
text.setStyle(activeObj, { fontStyle: 'italic' });
expect(activeObj.fontStyle).toBe('italic');
});
});
it('should change size of selected text object', () => {
const obj = new fabric.Text('test');
const scale = 10;
const { fontSize } = obj;
text.start({});
canvas.add(obj);
obj.scaleY = scale;
canvas.fire('object:scaling', { target: obj });
expect(obj.fontSize).toBe(fontSize * scale);
});
});