mirror of https://github.com/artf/grapesjs.git
nocodeframeworkdrag-and-dropsite-buildersite-generatortemplate-builderui-builderweb-builderweb-builder-frameworkwebsite-builderno-codepage-builder
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
265 lines
7.5 KiB
265 lines
7.5 KiB
import SelectorManager from 'selector_manager';
|
|
import Selector from 'selector_manager/model/Selector';
|
|
import Editor from 'editor/model/Editor';
|
|
|
|
describe('SelectorManager', () => {
|
|
describe('Main', () => {
|
|
var obj;
|
|
let em;
|
|
|
|
beforeEach(() => {
|
|
em = new Editor({});
|
|
obj = new SelectorManager().init({ em });
|
|
});
|
|
|
|
afterEach(() => {
|
|
obj = null;
|
|
em.destroy();
|
|
});
|
|
|
|
test('Object exists', () => {
|
|
expect(obj).toBeTruthy();
|
|
});
|
|
|
|
test('No selectors inside', () => {
|
|
expect(obj.getAll().length).toEqual(0);
|
|
});
|
|
|
|
test('Able to add default selectors', () => {
|
|
var cm = new SelectorManager().init({
|
|
em,
|
|
selectors: ['test1', 'test2', 'test3']
|
|
});
|
|
expect(cm.getAll().length).toEqual(3);
|
|
});
|
|
|
|
test('Add new selector', () => {
|
|
obj.add('test');
|
|
expect(obj.getAll().length).toEqual(1);
|
|
});
|
|
|
|
test('Default new selector is a class type', () => {
|
|
const added = obj.add('test');
|
|
expect(obj.get('test').get('type')).toEqual(obj.Selector.TYPE_CLASS);
|
|
expect(added.getFullName()).toBe('.test');
|
|
});
|
|
|
|
test('Add a selector as an id', () => {
|
|
const name = 'test';
|
|
var sel = obj.add(`#${name}`);
|
|
expect(sel.get('name')).toEqual(name);
|
|
expect(sel.get('label')).toEqual(name);
|
|
expect(obj.get(`#${name}`).get('type')).toEqual(obj.Selector.TYPE_ID);
|
|
expect(sel.getFullName()).toBe('#test');
|
|
});
|
|
|
|
test('Check name property', () => {
|
|
var name = 'test';
|
|
var sel = obj.add(name);
|
|
expect(sel.get('name')).toEqual(name);
|
|
expect(sel.get('label')).toEqual(name);
|
|
});
|
|
|
|
test('Check name property by adding as class', () => {
|
|
var name = 'test';
|
|
var sel = obj.add(`.${name}`);
|
|
expect(sel.get('name')).toEqual(name);
|
|
expect(sel.get('label')).toEqual(name);
|
|
});
|
|
|
|
test('Add 2 selectors', () => {
|
|
obj.add('test');
|
|
obj.add('test2');
|
|
expect(obj.getAll().length).toEqual(2);
|
|
});
|
|
|
|
test('Adding 2 selectors with the same name is not possible', () => {
|
|
const add1 = obj.add('test');
|
|
const add2 = obj.add('test');
|
|
expect(obj.getAll().length).toEqual(1);
|
|
expect(add1).toBe(add2);
|
|
});
|
|
|
|
test('Add multiple selectors', () => {
|
|
const cls = [
|
|
'.test1',
|
|
'test1',
|
|
'.test2',
|
|
'.test2',
|
|
'#test3',
|
|
'test3',
|
|
'test3',
|
|
'#test3'
|
|
];
|
|
const result = obj.add(cls);
|
|
expect(Array.isArray(result)).toEqual(true);
|
|
const concat = obj
|
|
.getAll()
|
|
.map(item => item.getFullName())
|
|
.join('');
|
|
expect(concat).toEqual('.test1.test2#test3.test3');
|
|
expect(obj.getAll().length).toEqual(4);
|
|
expect(
|
|
obj
|
|
.getAll()
|
|
.at(0)
|
|
.getFullName()
|
|
).toEqual('.test1');
|
|
expect(
|
|
obj
|
|
.getAll()
|
|
.at(1)
|
|
.getFullName()
|
|
).toEqual('.test2');
|
|
expect(
|
|
obj
|
|
.getAll()
|
|
.at(2)
|
|
.getFullName()
|
|
).toEqual('#test3');
|
|
expect(
|
|
obj
|
|
.getAll()
|
|
.at(3)
|
|
.getFullName()
|
|
).toEqual('.test3');
|
|
|
|
expect(obj.get(cls).length).toEqual(4);
|
|
expect(
|
|
obj
|
|
.get(cls)
|
|
.map(item => item.getFullName())
|
|
.join('')
|
|
).toEqual(concat);
|
|
});
|
|
|
|
test('Get selector', () => {
|
|
var name = 'test';
|
|
var sel = obj.add(name);
|
|
expect(obj.get(name)).toEqual(sel);
|
|
});
|
|
|
|
test('Get empty class', () => {
|
|
expect(obj.get('test')).toEqual(null);
|
|
});
|
|
|
|
test('Get id selector', () => {
|
|
const name = 'my-id';
|
|
const type = Selector.TYPE_ID;
|
|
const added = obj.add({ name, type });
|
|
expect(obj.get(name)).toEqual(null);
|
|
expect(obj.get(name, type)).toBe(added);
|
|
});
|
|
|
|
test('Add selectors as string identifiers', () => {
|
|
const cls = '.my-class';
|
|
const id = '#my-id';
|
|
const addedCls = obj.add(cls);
|
|
const addedId = obj.add(id);
|
|
expect(addedCls.toString()).toBe(cls);
|
|
expect(addedId.toString()).toBe(id);
|
|
});
|
|
|
|
test('Get selectors as string identifiers', () => {
|
|
const cls = '.my-class';
|
|
const id = '#my-id';
|
|
const addedCls = obj.add(cls);
|
|
const addedId = obj.add(id);
|
|
expect(obj.get(cls)).toBe(addedCls);
|
|
expect(obj.get(id)).toBe(addedId);
|
|
});
|
|
|
|
test('Remove selectors as string identifiers', () => {
|
|
const cls = '.my-class';
|
|
const id = '#my-id';
|
|
const addedCls = obj.add(cls);
|
|
const addedId = obj.add(id);
|
|
expect(obj.getAll().length).toBe(2);
|
|
expect(obj.remove(cls)).toBe(addedCls);
|
|
expect(obj.remove(id)).toBe(addedId);
|
|
expect(obj.getAll().length).toBe(0);
|
|
});
|
|
|
|
test('Remove selector as instance', () => {
|
|
const addedCls = obj.add('.my-class');
|
|
expect(obj.getAll().length).toBe(1);
|
|
expect(obj.remove(addedCls)).toBe(addedCls);
|
|
expect(obj.getAll().length).toBe(0);
|
|
});
|
|
|
|
test('addClass single class string', () => {
|
|
const result = obj.addClass('class1');
|
|
expect(result.length).toEqual(1);
|
|
expect(result[0] instanceof Selector).toEqual(true);
|
|
expect(result[0].get('name')).toEqual('class1');
|
|
});
|
|
|
|
test('addClass multiple class string', () => {
|
|
const result = obj.addClass('class1 class2');
|
|
expect(result.length).toEqual(2);
|
|
expect(obj.getAll().length).toEqual(2);
|
|
});
|
|
|
|
test('addClass single class array', () => {
|
|
const result = obj.addClass(['class1']);
|
|
expect(result.length).toEqual(1);
|
|
});
|
|
|
|
test('addClass multiple class array', () => {
|
|
const result = obj.addClass(['class1', 'class2']);
|
|
expect(result.length).toEqual(2);
|
|
});
|
|
|
|
test('addClass Avoid same name classes', () => {
|
|
obj.addClass('class1');
|
|
const result = obj.addClass('class1');
|
|
expect(obj.getAll().length).toEqual(1);
|
|
expect(result.length).toEqual(1);
|
|
});
|
|
|
|
describe('Events', () => {
|
|
test('Add triggers proper events', () => {
|
|
const itemTest = 'sel';
|
|
const eventAdd = jest.fn();
|
|
const eventAll = jest.fn();
|
|
em.on(obj.events.add, eventAdd);
|
|
em.on(obj.events.all, eventAll);
|
|
const added = obj.add(itemTest);
|
|
expect(eventAdd).toBeCalledTimes(1);
|
|
expect(eventAdd).toBeCalledWith(added, expect.anything());
|
|
expect(eventAll).toBeCalled();
|
|
});
|
|
|
|
test('Remove triggers proper events', () => {
|
|
const itemTest = 'sel';
|
|
const eventBfRm = jest.fn();
|
|
const eventRm = jest.fn();
|
|
const eventAll = jest.fn();
|
|
obj.add(itemTest);
|
|
em.on(obj.events.removeBefore, eventBfRm);
|
|
em.on(obj.events.remove, eventRm);
|
|
em.on(obj.events.all, eventAll);
|
|
const removed = obj.remove(itemTest);
|
|
expect(obj.getAll().length).toBe(0);
|
|
expect(eventBfRm).toBeCalledTimes(1);
|
|
expect(eventRm).toBeCalledTimes(1);
|
|
expect(eventRm).toBeCalledWith(removed, expect.anything());
|
|
expect(eventAll).toBeCalled();
|
|
});
|
|
|
|
test('Update triggers proper events', () => {
|
|
const itemTest = 'sel';
|
|
const eventUp = jest.fn();
|
|
const eventAll = jest.fn();
|
|
const added = obj.add(itemTest);
|
|
const newProps = { label: 'Heading 2' };
|
|
em.on(obj.events.update, eventUp);
|
|
em.on(obj.events.all, eventAll);
|
|
added.set(newProps);
|
|
expect(eventUp).toBeCalledTimes(1);
|
|
expect(eventUp).toBeCalledWith(added, newProps, expect.anything());
|
|
expect(eventAll).toBeCalled();
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|