mirror of https://github.com/artf/grapesjs.git
committed by
GitHub
67 changed files with 7106 additions and 7483 deletions
@ -1,28 +0,0 @@ |
|||||
import grapesjs from './../src'; |
|
||||
|
|
||||
describe('Main', () => { |
|
||||
describe('Startup', () => { |
|
||||
test('Main object should be loaded', () => { |
|
||||
expect(grapesjs).toBeTruthy(); |
|
||||
}); |
|
||||
}); |
|
||||
|
|
||||
const path = './specs/'; |
|
||||
require(`${path}keymaps`); |
|
||||
require(`${path}asset_manager`); |
|
||||
require(`${path}block_manager`); |
|
||||
require(`${path}code_manager`); |
|
||||
require(`${path}commands`); |
|
||||
require(`${path}css_composer`); |
|
||||
require(`${path}device_manager`); |
|
||||
require(`${path}dom_components`); |
|
||||
require(`${path}modal`); |
|
||||
require(`${path}panels`); |
|
||||
require(`${path}parser`); |
|
||||
require(`${path}plugin_manager`); |
|
||||
require(`${path}selector_manager`); |
|
||||
require(`${path}storage_manager`); |
|
||||
require(`${path}style_manager`); |
|
||||
require(`${path}trait_manager`); |
|
||||
require(`${path}grapesjs`); |
|
||||
}); |
|
||||
@ -1,33 +1,29 @@ |
|||||
import Asset from 'asset_manager/model/Asset'; |
import Asset from 'asset_manager/model/Asset'; |
||||
|
|
||||
module.exports = { |
describe('Asset', () => { |
||||
run() { |
test('Object exists', () => { |
||||
describe('Asset', () => { |
expect(Asset).toBeTruthy(); |
||||
test('Object exists', () => { |
}); |
||||
expect(Asset).toBeTruthy(); |
|
||||
}); |
|
||||
|
|
||||
test('Has default values', () => { |
test('Has default values', () => { |
||||
var obj = new Asset({}); |
var obj = new Asset({}); |
||||
expect(obj.get('type')).toBeFalsy(); |
expect(obj.get('type')).toBeFalsy(); |
||||
expect(obj.get('src')).toBeFalsy(); |
expect(obj.get('src')).toBeFalsy(); |
||||
expect(obj.getExtension()).toBeFalsy(); |
expect(obj.getExtension()).toBeFalsy(); |
||||
expect(obj.getFilename()).toBeFalsy(); |
expect(obj.getFilename()).toBeFalsy(); |
||||
}); |
}); |
||||
|
|
||||
test('Test getFilename', () => { |
test('Test getFilename', () => { |
||||
var obj = new Asset({ type: 'image', src: 'ch/eck/t.e.s.t' }); |
var obj = new Asset({ type: 'image', src: 'ch/eck/t.e.s.t' }); |
||||
expect(obj.getFilename()).toEqual('t.e.s.t'); |
expect(obj.getFilename()).toEqual('t.e.s.t'); |
||||
var obj = new Asset({ type: 'image', src: 'ch/eck/1234abc' }); |
var obj = new Asset({ type: 'image', src: 'ch/eck/1234abc' }); |
||||
expect(obj.getFilename()).toEqual('1234abc'); |
expect(obj.getFilename()).toEqual('1234abc'); |
||||
}); |
}); |
||||
|
|
||||
test('Test getExtension', () => { |
test('Test getExtension', () => { |
||||
var obj = new Asset({ type: 'image', src: 'ch/eck/t.e.s.t' }); |
var obj = new Asset({ type: 'image', src: 'ch/eck/t.e.s.t' }); |
||||
expect(obj.getExtension()).toEqual('t'); |
expect(obj.getExtension()).toEqual('t'); |
||||
var obj = new Asset({ type: 'image', src: 'ch/eck/1234abc.' }); |
var obj = new Asset({ type: 'image', src: 'ch/eck/1234abc.' }); |
||||
expect(obj.getExtension()).toEqual(''); |
expect(obj.getExtension()).toEqual(''); |
||||
}); |
}); |
||||
}); |
}); |
||||
} |
|
||||
}; |
|
||||
|
|||||
@ -1,22 +1,18 @@ |
|||||
import AssetImage from 'asset_manager/model/AssetImage'; |
import AssetImage from 'asset_manager/model/AssetImage'; |
||||
|
|
||||
module.exports = { |
describe('AssetImage', () => { |
||||
run() { |
test('Object exists', () => { |
||||
describe('AssetImage', () => { |
expect(AssetImage).toBeTruthy(); |
||||
test('Object exists', () => { |
}); |
||||
expect(AssetImage).toBeTruthy(); |
|
||||
}); |
|
||||
|
|
||||
test('Has default values', () => { |
test('Has default values', () => { |
||||
var obj = new AssetImage({}); |
var obj = new AssetImage({}); |
||||
expect(obj.get('type')).toEqual('image'); |
expect(obj.get('type')).toEqual('image'); |
||||
expect(obj.get('src')).toBeFalsy(); |
expect(obj.get('src')).toBeFalsy(); |
||||
expect(obj.get('unitDim')).toEqual('px'); |
expect(obj.get('unitDim')).toEqual('px'); |
||||
expect(obj.get('height')).toEqual(0); |
expect(obj.get('height')).toEqual(0); |
||||
expect(obj.get('width')).toEqual(0); |
expect(obj.get('width')).toEqual(0); |
||||
expect(obj.getExtension()).toBeFalsy(); |
expect(obj.getExtension()).toBeFalsy(); |
||||
expect(obj.getFilename()).toBeFalsy(); |
expect(obj.getFilename()).toBeFalsy(); |
||||
}); |
}); |
||||
}); |
}); |
||||
} |
|
||||
}; |
|
||||
|
|||||
@ -1,25 +1,21 @@ |
|||||
import Assets from 'asset_manager/model/Assets'; |
import Assets from 'asset_manager/model/Assets'; |
||||
|
|
||||
module.exports = { |
describe('Assets', () => { |
||||
run() { |
var obj; |
||||
describe('Assets', () => { |
|
||||
var obj; |
|
||||
|
|
||||
beforeEach(() => { |
beforeEach(() => { |
||||
obj = new Assets(); |
obj = new Assets(); |
||||
}); |
}); |
||||
|
|
||||
afterEach(() => { |
afterEach(() => { |
||||
obj = null; |
obj = null; |
||||
}); |
}); |
||||
|
|
||||
test('Object exists', () => { |
test('Object exists', () => { |
||||
expect(obj).toBeTruthy(); |
expect(obj).toBeTruthy(); |
||||
}); |
}); |
||||
|
|
||||
test('Collection is empty', () => { |
test('Collection is empty', () => { |
||||
expect(obj.length).toEqual(0); |
expect(obj.length).toEqual(0); |
||||
}); |
}); |
||||
}); |
}); |
||||
} |
|
||||
}; |
|
||||
|
|||||
@ -1,70 +1,66 @@ |
|||||
import AssetImageView from 'asset_manager/view/AssetImageView'; |
import AssetImageView from 'asset_manager/view/AssetImageView'; |
||||
import Assets from 'asset_manager/model/Assets'; |
import Assets from 'asset_manager/model/Assets'; |
||||
|
|
||||
module.exports = { |
let obj; |
||||
run() { |
|
||||
let obj; |
|
||||
|
|
||||
describe('AssetImageView', () => { |
describe('AssetImageView', () => { |
||||
beforeEach(() => { |
beforeEach(() => { |
||||
var coll = new Assets(); |
var coll = new Assets(); |
||||
var model = coll.add({ type: 'image', src: '/test' }); |
var model = coll.add({ type: 'image', src: '/test' }); |
||||
obj = new AssetImageView({ |
obj = new AssetImageView({ |
||||
collection: new Assets(), |
collection: new Assets(), |
||||
config: {}, |
config: {}, |
||||
model |
model |
||||
}); |
}); |
||||
document.body.innerHTML = '<div id="fixtures"></div>'; |
document.body.innerHTML = '<div id="fixtures"></div>'; |
||||
document.body.querySelector('#fixtures').appendChild(obj.render().el); |
document.body.querySelector('#fixtures').appendChild(obj.render().el); |
||||
}); |
}); |
||||
|
|
||||
afterEach(() => { |
afterEach(() => { |
||||
obj = null; |
obj = null; |
||||
document.body.innerHTML = ''; |
document.body.innerHTML = ''; |
||||
}); |
}); |
||||
|
|
||||
test('Object exists', () => { |
test('Object exists', () => { |
||||
expect(AssetImageView).toBeTruthy(); |
expect(AssetImageView).toBeTruthy(); |
||||
}); |
}); |
||||
|
|
||||
describe('Asset should be rendered correctly', () => { |
describe('Asset should be rendered correctly', () => { |
||||
test('Has preview box', () => { |
test('Has preview box', () => { |
||||
var $asset = obj.$el; |
var $asset = obj.$el; |
||||
expect($asset.find('.preview').length).toEqual(1); |
expect($asset.find('.preview').length).toEqual(1); |
||||
}); |
}); |
||||
|
|
||||
test('Has meta box', () => { |
test('Has meta box', () => { |
||||
var $asset = obj.$el; |
var $asset = obj.$el; |
||||
expect($asset.find('.meta').length).toEqual(1); |
expect($asset.find('.meta').length).toEqual(1); |
||||
}); |
}); |
||||
|
|
||||
test('Has close button', () => { |
test('Has close button', () => { |
||||
var $asset = obj.$el; |
var $asset = obj.$el; |
||||
expect($asset.find('[data-toggle=asset-remove]').length).toEqual(1); |
expect($asset.find('[data-toggle=asset-remove]').length).toEqual(1); |
||||
}); |
}); |
||||
}); |
}); |
||||
|
|
||||
test('Could be selected', () => { |
test('Could be selected', () => { |
||||
var spy = jest.spyOn(obj, 'updateTarget'); |
var spy = jest.spyOn(obj, 'updateTarget'); |
||||
obj.$el.trigger('click'); |
obj.$el.trigger('click'); |
||||
expect(obj.$el.attr('class')).toContain('highlight'); |
expect(obj.$el.attr('class')).toContain('highlight'); |
||||
expect(spy).toHaveBeenCalled(); |
expect(spy).toHaveBeenCalled(); |
||||
}); |
}); |
||||
|
|
||||
test('Could be chosen', () => { |
test('Could be chosen', () => { |
||||
sinon.stub(obj, 'updateTarget'); |
sinon.stub(obj, 'updateTarget'); |
||||
var spy = jest.spyOn(obj, 'updateTarget'); |
var spy = jest.spyOn(obj, 'updateTarget'); |
||||
obj.$el.trigger('dblclick'); |
obj.$el.trigger('dblclick'); |
||||
expect(spy).toHaveBeenCalled(); |
expect(spy).toHaveBeenCalled(); |
||||
//obj.updateTarget.calledOnce.should.equal(true);
|
//obj.updateTarget.calledOnce.should.equal(true);
|
||||
}); |
}); |
||||
|
|
||||
test('Could be removed', () => { |
test('Could be removed', () => { |
||||
var spy = sinon.spy(); |
var spy = sinon.spy(); |
||||
obj.model.on('remove', spy); |
obj.model.on('remove', spy); |
||||
obj.onRemove({ stopImmediatePropagation() {} }); |
obj.onRemove({ stopImmediatePropagation() {} }); |
||||
expect(spy.called).toEqual(true); |
expect(spy.called).toEqual(true); |
||||
}); |
}); |
||||
}); |
}); |
||||
} |
|
||||
}; |
|
||||
|
|||||
@ -1,39 +1,35 @@ |
|||||
import Assets from 'asset_manager/model/Assets'; |
import Assets from 'asset_manager/model/Assets'; |
||||
import AssetView from 'asset_manager/view/AssetView'; |
import AssetView from 'asset_manager/view/AssetView'; |
||||
|
|
||||
module.exports = { |
describe('AssetView', () => { |
||||
run() { |
let testContext; |
||||
describe('AssetView', () => { |
|
||||
let testContext; |
|
||||
|
|
||||
beforeEach(() => { |
beforeEach(() => { |
||||
testContext = {}; |
testContext = {}; |
||||
}); |
}); |
||||
|
|
||||
beforeEach(() => { |
beforeEach(() => { |
||||
var coll = new Assets(); |
var coll = new Assets(); |
||||
var model = coll.add({ src: 'test' }); |
var model = coll.add({ src: 'test' }); |
||||
testContext.view = new AssetView({ |
testContext.view = new AssetView({ |
||||
config: {}, |
config: {}, |
||||
model |
model |
||||
}); |
}); |
||||
document.body.innerHTML = '<div id="fixtures"></div>'; |
document.body.innerHTML = '<div id="fixtures"></div>'; |
||||
document.body |
document.body |
||||
.querySelector('#fixtures') |
.querySelector('#fixtures') |
||||
.appendChild(testContext.view.render().el); |
.appendChild(testContext.view.render().el); |
||||
}); |
}); |
||||
|
|
||||
afterEach(() => { |
afterEach(() => { |
||||
testContext.view.remove(); |
testContext.view.remove(); |
||||
}); |
}); |
||||
|
|
||||
test('Object exists', () => { |
test('Object exists', () => { |
||||
expect(AssetView).toBeTruthy(); |
expect(AssetView).toBeTruthy(); |
||||
}); |
}); |
||||
|
|
||||
test('Has correct prefix', () => { |
test('Has correct prefix', () => { |
||||
expect(testContext.view.pfx).toEqual(''); |
expect(testContext.view.pfx).toEqual(''); |
||||
}); |
}); |
||||
}); |
}); |
||||
} |
|
||||
}; |
|
||||
|
|||||
@ -1,97 +1,85 @@ |
|||||
import FileUploader from 'asset_manager/view/FileUploader'; |
import FileUploader from 'asset_manager/view/FileUploader'; |
||||
|
|
||||
module.exports = { |
describe('File Uploader', () => { |
||||
run() { |
let obj; |
||||
describe('File Uploader', () => { |
|
||||
let obj; |
|
||||
|
|
||||
beforeEach(() => { |
beforeEach(() => { |
||||
obj = new FileUploader({ config: {} }); |
obj = new FileUploader({ config: {} }); |
||||
document.body.innerHTML = '<div id="fixtures"></div>'; |
document.body.innerHTML = '<div id="fixtures"></div>'; |
||||
document.body.querySelector('#fixtures').appendChild(obj.render().el); |
document.body.querySelector('#fixtures').appendChild(obj.render().el); |
||||
}); |
}); |
||||
|
|
||||
afterEach(() => { |
afterEach(() => { |
||||
obj.remove(); |
obj.remove(); |
||||
}); |
}); |
||||
|
|
||||
test('Object exists', () => { |
test('Object exists', () => { |
||||
expect(FileUploader).toBeTruthy(); |
expect(FileUploader).toBeTruthy(); |
||||
}); |
}); |
||||
|
|
||||
test('Has correct prefix', () => { |
test('Has correct prefix', () => { |
||||
expect(obj.pfx).toBeFalsy(); |
expect(obj.pfx).toBeFalsy(); |
||||
}); |
}); |
||||
|
|
||||
describe('Should be rendered correctly', () => { |
describe('Should be rendered correctly', () => { |
||||
test('Has title', () => { |
test('Has title', () => { |
||||
expect(obj.$el.find('#title').length).toEqual(1); |
expect(obj.$el.find('#title').length).toEqual(1); |
||||
}); |
}); |
||||
|
|
||||
test('Title is empty', () => { |
test('Title is empty', () => { |
||||
expect(obj.$el.find('#title').html()).toEqual(''); |
expect(obj.$el.find('#title').html()).toEqual(''); |
||||
}); |
}); |
||||
|
|
||||
test('Has file input', () => { |
test('Has file input', () => { |
||||
expect(obj.$el.find('input[type=file]').length).toEqual(1); |
expect(obj.$el.find('input[type=file]').length).toEqual(1); |
||||
}); |
}); |
||||
|
|
||||
test('File input is enabled', () => { |
test('File input is enabled', () => { |
||||
expect(obj.$el.find('input[type=file]').prop('disabled')).toEqual( |
expect(obj.$el.find('input[type=file]').prop('disabled')).toEqual(true); |
||||
true |
}); |
||||
); |
}); |
||||
}); |
|
||||
}); |
|
||||
|
|
||||
describe('Interprets configurations correctly', () => { |
describe('Interprets configurations correctly', () => { |
||||
test('Has correct title', () => { |
test('Has correct title', () => { |
||||
var view = new FileUploader({ |
var view = new FileUploader({ |
||||
config: { |
config: { |
||||
uploadText: 'Test' |
uploadText: 'Test' |
||||
} |
} |
||||
}); |
}); |
||||
view.render(); |
view.render(); |
||||
expect(view.$el.find('#title').html()).toEqual('Test'); |
expect(view.$el.find('#title').html()).toEqual('Test'); |
||||
}); |
}); |
||||
|
|
||||
test('Could be disabled', () => { |
test('Could be disabled', () => { |
||||
var view = new FileUploader({ |
var view = new FileUploader({ |
||||
config: { |
config: { |
||||
disableUpload: true, |
disableUpload: true, |
||||
upload: 'something' |
upload: 'something' |
||||
} |
} |
||||
}); |
}); |
||||
view.render(); |
view.render(); |
||||
expect(view.$el.find('input[type=file]').prop('disabled')).toEqual( |
expect(view.$el.find('input[type=file]').prop('disabled')).toEqual(true); |
||||
true |
}); |
||||
); |
|
||||
}); |
|
||||
|
|
||||
test('Handles multiUpload false', () => { |
test('Handles multiUpload false', () => { |
||||
var view = new FileUploader({ |
var view = new FileUploader({ |
||||
config: { |
config: { |
||||
multiUpload: false |
multiUpload: false |
||||
} |
} |
||||
}); |
}); |
||||
view.render(); |
view.render(); |
||||
expect( |
expect(view.$el.find('input[type=file]').prop('multiple')).toBeFalsy(); |
||||
view.$el.find('input[type=file]').prop('multiple') |
}); |
||||
).toBeFalsy(); |
|
||||
}); |
|
||||
|
|
||||
test('Handles embedAsBase64 parameter', () => { |
test('Handles embedAsBase64 parameter', () => { |
||||
var view = new FileUploader({ |
var view = new FileUploader({ |
||||
config: { |
config: { |
||||
embedAsBase64: true |
embedAsBase64: true |
||||
} |
} |
||||
}); |
|
||||
view.render(); |
|
||||
expect(view.$el.find('input[type=file]').prop('disabled')).toEqual( |
|
||||
false |
|
||||
); |
|
||||
expect(view.uploadFile).toEqual(FileUploader.embedAsBase64); |
|
||||
}); |
|
||||
}); |
}); |
||||
|
view.render(); |
||||
|
expect(view.$el.find('input[type=file]').prop('disabled')).toEqual(false); |
||||
|
expect(view.uploadFile).toEqual(FileUploader.embedAsBase64); |
||||
}); |
}); |
||||
} |
}); |
||||
}; |
}); |
||||
|
|||||
@ -1,38 +1,34 @@ |
|||||
import Command from 'commands/model/Command'; |
import Command from 'commands/model/Command'; |
||||
import Commands from 'commands'; |
import Commands from 'commands'; |
||||
|
|
||||
module.exports = { |
describe('Command', () => { |
||||
run() { |
let obj; |
||||
describe('Command', () => { |
|
||||
let obj; |
beforeEach(() => { |
||||
|
obj = new Command(); |
||||
beforeEach(() => { |
}); |
||||
obj = new Command(); |
|
||||
}); |
afterEach(() => { |
||||
|
obj = null; |
||||
afterEach(() => { |
}); |
||||
obj = null; |
|
||||
}); |
test('Has id property', () => { |
||||
|
expect(obj.has('id')).toEqual(true); |
||||
test('Has id property', () => { |
}); |
||||
expect(obj.has('id')).toEqual(true); |
}); |
||||
}); |
|
||||
}); |
describe('Commands', () => { |
||||
|
var obj; |
||||
describe('Commands', () => { |
|
||||
var obj; |
beforeEach(() => { |
||||
|
obj = new Commands(); |
||||
beforeEach(() => { |
}); |
||||
obj = new Commands(); |
|
||||
}); |
afterEach(() => { |
||||
|
obj = null; |
||||
afterEach(() => { |
}); |
||||
obj = null; |
|
||||
}); |
test('Object is ok', () => { |
||||
|
expect(obj).toBeTruthy(); |
||||
test('Object is ok', () => { |
}); |
||||
expect(obj).toBeTruthy(); |
}); |
||||
}); |
|
||||
}); |
|
||||
} |
|
||||
}; |
|
||||
|
|||||
@ -1,94 +1,84 @@ |
|||||
import CommandAbstract from 'commands/view/CommandAbstract'; |
import CommandAbstract from 'commands/view/CommandAbstract'; |
||||
import Editor from 'editor/model/Editor'; |
import Editor from 'editor/model/Editor'; |
||||
|
|
||||
module.exports = { |
describe('CommandAbstract', () => { |
||||
run() { |
let editor, editorTriggerSpy, command; |
||||
describe('CommandAbstract', () => { |
|
||||
let editor, editorTriggerSpy, command; |
|
||||
|
|
||||
beforeEach(() => { |
beforeEach(() => { |
||||
editor = new Editor(); |
editor = new Editor(); |
||||
editorTriggerSpy = sinon.spy(editor, 'trigger'); |
editorTriggerSpy = sinon.spy(editor, 'trigger'); |
||||
|
|
||||
command = new CommandAbstract(); |
command = new CommandAbstract(); |
||||
command.id = 'test'; |
command.id = 'test'; |
||||
}); |
}); |
||||
|
|
||||
afterEach(() => { |
afterEach(() => { |
||||
command = null; |
command = null; |
||||
editorTriggerSpy = null; |
editorTriggerSpy = null; |
||||
editor = null; |
editor = null; |
||||
}); |
}); |
||||
|
|
||||
test('callRun returns result when no "abort" option specified', () => { |
test('callRun returns result when no "abort" option specified', () => { |
||||
const runStub = sinon.stub(command, 'run').returns('result'); |
const runStub = sinon.stub(command, 'run').returns('result'); |
||||
|
|
||||
const result = command.callRun(editor); |
const result = command.callRun(editor); |
||||
expect(editorTriggerSpy.callCount).toEqual(3); |
expect(editorTriggerSpy.callCount).toEqual(3); |
||||
expect(editorTriggerSpy.getCall(0).args).toEqual([ |
expect(editorTriggerSpy.getCall(0).args).toEqual(['run:test:before', {}]); |
||||
'run:test:before', |
expect(editorTriggerSpy.getCall(1).args).toEqual([ |
||||
{} |
'run:test', |
||||
]); |
'result', |
||||
expect(editorTriggerSpy.getCall(1).args).toEqual([ |
{} |
||||
'run:test', |
]); |
||||
'result', |
expect(editorTriggerSpy.getCall(2).args).toEqual([ |
||||
{} |
'run', |
||||
]); |
'test', |
||||
expect(editorTriggerSpy.getCall(2).args).toEqual([ |
'result', |
||||
'run', |
{} |
||||
'test', |
]); |
||||
'result', |
|
||||
{} |
|
||||
]); |
|
||||
|
|
||||
expect(result).toEqual('result'); |
expect(result).toEqual('result'); |
||||
expect(runStub.calledOnce).toEqual(true); |
expect(runStub.calledOnce).toEqual(true); |
||||
}); |
}); |
||||
|
|
||||
test('callRun returns undefined when "abort" option is specified', () => { |
test('callRun returns undefined when "abort" option is specified', () => { |
||||
const runStub = sinon.stub(command, 'run').returns('result'); |
const runStub = sinon.stub(command, 'run').returns('result'); |
||||
|
|
||||
const result = command.callRun(editor, { abort: true }); |
const result = command.callRun(editor, { abort: true }); |
||||
|
|
||||
expect(editorTriggerSpy.calledTwice).toEqual(true); |
expect(editorTriggerSpy.calledTwice).toEqual(true); |
||||
expect(editorTriggerSpy.getCall(0).args).toEqual([ |
expect(editorTriggerSpy.getCall(0).args).toEqual([ |
||||
'run:test:before', |
'run:test:before', |
||||
{ abort: true } |
{ abort: true } |
||||
]); |
]); |
||||
expect(editorTriggerSpy.getCall(1).args).toEqual([ |
expect(editorTriggerSpy.getCall(1).args).toEqual([ |
||||
'abort:test', |
'abort:test', |
||||
{ abort: true } |
{ abort: true } |
||||
]); |
]); |
||||
|
|
||||
expect(result).toEqual(undefined); |
expect(result).toEqual(undefined); |
||||
expect(runStub.notCalled).toEqual(true); |
expect(runStub.notCalled).toEqual(true); |
||||
}); |
}); |
||||
|
|
||||
test('callStop returns result', () => { |
test('callStop returns result', () => { |
||||
const stopStub = sinon.stub(command, 'stop').returns('stopped'); |
const stopStub = sinon.stub(command, 'stop').returns('stopped'); |
||||
|
|
||||
const result = command.callStop(editor); |
const result = command.callStop(editor); |
||||
|
|
||||
expect(editorTriggerSpy.callCount).toEqual(3); |
expect(editorTriggerSpy.callCount).toEqual(3); |
||||
expect(editorTriggerSpy.getCall(0).args).toEqual([ |
expect(editorTriggerSpy.getCall(0).args).toEqual(['stop:test:before', {}]); |
||||
'stop:test:before', |
expect(editorTriggerSpy.getCall(1).args).toEqual([ |
||||
{} |
'stop:test', |
||||
]); |
'stopped', |
||||
expect(editorTriggerSpy.getCall(1).args).toEqual([ |
{} |
||||
'stop:test', |
]); |
||||
'stopped', |
expect(editorTriggerSpy.getCall(2).args).toEqual([ |
||||
{} |
'stop', |
||||
]); |
'test', |
||||
expect(editorTriggerSpy.getCall(2).args).toEqual([ |
'stopped', |
||||
'stop', |
{} |
||||
'test', |
]); |
||||
'stopped', |
|
||||
{} |
|
||||
]); |
|
||||
|
|
||||
expect(result).toEqual('stopped'); |
expect(result).toEqual('stopped'); |
||||
expect(stopStub.calledOnce).toEqual(true); |
expect(stopStub.calledOnce).toEqual(true); |
||||
}); |
}); |
||||
}); |
}); |
||||
} |
|
||||
}; |
|
||||
|
|||||
@ -1,202 +1,198 @@ |
|||||
import Backbone from 'backbone'; |
import Backbone from 'backbone'; |
||||
const $ = Backbone.$; |
const $ = Backbone.$; |
||||
|
|
||||
module.exports = { |
describe('E2E tests', () => { |
||||
run() { |
var fixtures; |
||||
describe('E2E tests', () => { |
var fixture; |
||||
var fixtures; |
var gjs; |
||||
var fixture; |
var cssc; |
||||
var gjs; |
var clsm; |
||||
var cssc; |
var domc; |
||||
var clsm; |
var rulesSet; |
||||
var domc; |
var rulesSet2; |
||||
var rulesSet; |
|
||||
var rulesSet2; |
|
||||
|
|
||||
beforeAll(() => { |
beforeAll(() => { |
||||
fixtures = $('#fixtures'); |
fixtures = $('#fixtures'); |
||||
fixture = $('<div class="csscomposer-fixture"></div>'); |
fixture = $('<div class="csscomposer-fixture"></div>'); |
||||
}); |
}); |
||||
|
|
||||
beforeEach(done => { |
beforeEach(done => { |
||||
//this.timeout(5000);
|
//this.timeout(5000);
|
||||
gjs = grapesjs.init({ |
gjs = grapesjs.init({ |
||||
stylePrefix: '', |
stylePrefix: '', |
||||
storageManager: { autoload: 0, type: 'none' }, |
storageManager: { autoload: 0, type: 'none' }, |
||||
assetManager: { storageType: 'none' }, |
assetManager: { storageType: 'none' }, |
||||
container: 'csscomposer-fixture' |
container: 'csscomposer-fixture' |
||||
}); |
}); |
||||
cssc = gjs.CssComposer; |
cssc = gjs.CssComposer; |
||||
clsm = gjs.SelectorManager; |
clsm = gjs.SelectorManager; |
||||
domc = gjs.DomComponents; |
domc = gjs.DomComponents; |
||||
fixture.empty().appendTo(fixtures); |
fixture.empty().appendTo(fixtures); |
||||
gjs.render(); |
gjs.render(); |
||||
rulesSet = [ |
rulesSet = [ |
||||
{ selectors: [{ name: 'test1' }, { name: 'test2' }] }, |
{ selectors: [{ name: 'test1' }, { name: 'test2' }] }, |
||||
{ selectors: [{ name: 'test2' }, { name: 'test3' }] }, |
{ selectors: [{ name: 'test2' }, { name: 'test3' }] }, |
||||
{ selectors: [{ name: 'test3' }] } |
{ selectors: [{ name: 'test3' }] } |
||||
]; |
]; |
||||
rulesSet2 = [ |
rulesSet2 = [ |
||||
{ |
{ |
||||
selectors: [{ name: 'test1' }, { name: 'test2' }], |
selectors: [{ name: 'test1' }, { name: 'test2' }], |
||||
state: ':active' |
state: ':active' |
||||
}, |
}, |
||||
{ selectors: [{ name: 'test2' }, { name: 'test3' }] }, |
{ selectors: [{ name: 'test2' }, { name: 'test3' }] }, |
||||
{ selectors: [{ name: 'test3' }], mediaText: '(max-width: 900px)' } |
{ selectors: [{ name: 'test3' }], mediaText: '(max-width: 900px)' } |
||||
]; |
]; |
||||
done(); |
done(); |
||||
}); |
}); |
||||
|
|
||||
afterEach(() => { |
afterEach(() => { |
||||
gjs = null; |
gjs = null; |
||||
cssc = null; |
cssc = null; |
||||
clsm = null; |
clsm = null; |
||||
}); |
}); |
||||
|
|
||||
afterAll(() => { |
afterAll(() => { |
||||
fixture.remove(); |
fixture.remove(); |
||||
}); |
}); |
||||
|
|
||||
test('Rules are correctly imported from default property', () => { |
test('Rules are correctly imported from default property', () => { |
||||
var gj = grapesjs.init({ |
var gj = grapesjs.init({ |
||||
stylePrefix: '', |
stylePrefix: '', |
||||
storageManager: { autoload: 0, type: 'none' }, |
storageManager: { autoload: 0, type: 'none' }, |
||||
cssComposer: { rules: rulesSet }, |
cssComposer: { rules: rulesSet }, |
||||
container: 'csscomposer-fixture' |
container: 'csscomposer-fixture' |
||||
}); |
}); |
||||
var cssc = gj.editor.get('CssComposer'); |
var cssc = gj.editor.get('CssComposer'); |
||||
expect(cssc.getAll().length).toEqual(rulesSet.length); |
expect(cssc.getAll().length).toEqual(rulesSet.length); |
||||
var cls = gj.editor.get('SelectorManager').getAll(); |
var cls = gj.editor.get('SelectorManager').getAll(); |
||||
expect(cls.length).toEqual(3); |
expect(cls.length).toEqual(3); |
||||
}); |
}); |
||||
|
|
||||
test('New rule adds correctly the class inside selector manager', () => { |
test('New rule adds correctly the class inside selector manager', () => { |
||||
var rules = cssc.getAll(); |
var rules = cssc.getAll(); |
||||
rules.add({ selectors: [{ name: 'test1', private: true }] }); |
rules.add({ selectors: [{ name: 'test1', private: true }] }); |
||||
var rule = clsm.getAll().at(0); |
var rule = clsm.getAll().at(0); |
||||
expect(rule.get('name')).toEqual('test1'); |
expect(rule.get('name')).toEqual('test1'); |
||||
expect(rule.get('private')).toEqual(true); |
expect(rule.get('private')).toEqual(true); |
||||
}); |
}); |
||||
|
|
||||
test('New rules are correctly imported inside selector manager', () => { |
test('New rules are correctly imported inside selector manager', () => { |
||||
var rules = cssc.getAll(); |
var rules = cssc.getAll(); |
||||
rulesSet.forEach(item => { |
rulesSet.forEach(item => { |
||||
rules.add(item); |
rules.add(item); |
||||
}); |
}); |
||||
var cls = clsm.getAll(); |
var cls = clsm.getAll(); |
||||
expect(cls.length).toEqual(3); |
expect(cls.length).toEqual(3); |
||||
expect(cls.at(0).get('name')).toEqual('test1'); |
expect(cls.at(0).get('name')).toEqual('test1'); |
||||
expect(cls.at(1).get('name')).toEqual('test2'); |
expect(cls.at(1).get('name')).toEqual('test2'); |
||||
expect(cls.at(2).get('name')).toEqual('test3'); |
expect(cls.at(2).get('name')).toEqual('test3'); |
||||
}); |
}); |
||||
|
|
||||
test('Add rules from the new component added as a string with style tag', () => { |
test('Add rules from the new component added as a string with style tag', () => { |
||||
var comps = domc.getComponents(); |
var comps = domc.getComponents(); |
||||
var rules = cssc.getAll(); |
var rules = cssc.getAll(); |
||||
comps.add( |
comps.add( |
||||
'<div>Test</div><style>.test{color: red} .test2{color: blue}</style>' |
'<div>Test</div><style>.test{color: red} .test2{color: blue}</style>' |
||||
); |
); |
||||
expect(comps.length).toEqual(1); |
expect(comps.length).toEqual(1); |
||||
expect(rules.length).toEqual(2); |
expect(rules.length).toEqual(2); |
||||
}); |
}); |
||||
|
|
||||
test('Add raw rule objects with addCollection', () => { |
test('Add raw rule objects with addCollection', () => { |
||||
cssc.addCollection(rulesSet); |
cssc.addCollection(rulesSet); |
||||
expect(cssc.getAll().length).toEqual(3); |
expect(cssc.getAll().length).toEqual(3); |
||||
expect(clsm.getAll().length).toEqual(3); |
expect(clsm.getAll().length).toEqual(3); |
||||
}); |
}); |
||||
|
|
||||
test('Add raw rule objects twice with addCollection do not duplucate rules', () => { |
test('Add raw rule objects twice with addCollection do not duplucate rules', () => { |
||||
var rulesSet2Copy = JSON.parse(JSON.stringify(rulesSet2)); |
var rulesSet2Copy = JSON.parse(JSON.stringify(rulesSet2)); |
||||
var coll1 = cssc.addCollection(rulesSet2); |
var coll1 = cssc.addCollection(rulesSet2); |
||||
var coll2 = cssc.addCollection(rulesSet2Copy); |
var coll2 = cssc.addCollection(rulesSet2Copy); |
||||
expect(cssc.getAll().length).toEqual(3); |
expect(cssc.getAll().length).toEqual(3); |
||||
expect(clsm.getAll().length).toEqual(3); |
expect(clsm.getAll().length).toEqual(3); |
||||
expect(coll1).toEqual(coll2); |
expect(coll1).toEqual(coll2); |
||||
}); |
}); |
||||
|
|
||||
test('Extend css rule style, if requested', () => { |
test('Extend css rule style, if requested', () => { |
||||
var style1 = { color: 'red', width: '10px' }; |
var style1 = { color: 'red', width: '10px' }; |
||||
var style2 = { height: '20px', width: '20px' }; |
var style2 = { height: '20px', width: '20px' }; |
||||
var rule1 = { |
var rule1 = { |
||||
selectors: ['test1'], |
selectors: ['test1'], |
||||
style: style1 |
style: style1 |
||||
}; |
}; |
||||
var rule2 = { |
var rule2 = { |
||||
selectors: ['test1'], |
selectors: ['test1'], |
||||
style: style2 |
style: style2 |
||||
}; |
}; |
||||
var ruleOut = cssc.addCollection(rule1)[0]; |
var ruleOut = cssc.addCollection(rule1)[0]; |
||||
// ruleOut is a Model
|
// ruleOut is a Model
|
||||
ruleOut = JSON.parse(JSON.stringify(ruleOut)); |
ruleOut = JSON.parse(JSON.stringify(ruleOut)); |
||||
var ruleResult = { |
var ruleResult = { |
||||
selectors: [ |
selectors: [ |
||||
{ |
{ |
||||
active: true, |
active: true, |
||||
label: 'test1', |
label: 'test1', |
||||
name: 'test1', |
name: 'test1', |
||||
type: clsm.Selector.TYPE_CLASS, |
type: clsm.Selector.TYPE_CLASS, |
||||
private: false, |
private: false, |
||||
protected: false |
protected: false |
||||
} |
} |
||||
], |
], |
||||
style: { |
style: { |
||||
color: 'red', |
color: 'red', |
||||
width: '10px' |
width: '10px' |
||||
} |
} |
||||
}; |
}; |
||||
expect(ruleOut).toEqual(ruleResult); |
expect(ruleOut).toEqual(ruleResult); |
||||
var ruleOut = cssc.addCollection(rule2, { extend: 1 })[0]; |
var ruleOut = cssc.addCollection(rule2, { extend: 1 })[0]; |
||||
ruleOut = JSON.parse(JSON.stringify(ruleOut)); |
ruleOut = JSON.parse(JSON.stringify(ruleOut)); |
||||
ruleResult.style = { |
ruleResult.style = { |
||||
color: 'red', |
color: 'red', |
||||
height: '20px', |
height: '20px', |
||||
width: '20px' |
width: '20px' |
||||
}; |
}; |
||||
expect(ruleOut).toEqual(ruleResult); |
expect(ruleOut).toEqual(ruleResult); |
||||
}); |
}); |
||||
|
|
||||
test('Do not extend with different selectorsAdd', () => { |
test('Do not extend with different selectorsAdd', () => { |
||||
var style1 = { color: 'red', width: '10px' }; |
var style1 = { color: 'red', width: '10px' }; |
||||
var style2 = { height: '20px', width: '20px' }; |
var style2 = { height: '20px', width: '20px' }; |
||||
var rule1 = { |
var rule1 = { |
||||
selectors: [], |
selectors: [], |
||||
selectorsAdd: '*', |
selectorsAdd: '*', |
||||
style: style1 |
style: style1 |
||||
}; |
}; |
||||
var rule2 = { |
var rule2 = { |
||||
selectors: [], |
selectors: [], |
||||
selectorsAdd: 'p', |
selectorsAdd: 'p', |
||||
style: style2 |
style: style2 |
||||
}; |
}; |
||||
var rule1Out = cssc.addCollection(rule1, { extend: 1 })[0]; |
var rule1Out = cssc.addCollection(rule1, { extend: 1 })[0]; |
||||
var rule2Out = cssc.addCollection(rule2, { extend: 1 })[0]; |
var rule2Out = cssc.addCollection(rule2, { extend: 1 })[0]; |
||||
rule1Out = JSON.parse(JSON.stringify(rule1Out)); |
rule1Out = JSON.parse(JSON.stringify(rule1Out)); |
||||
rule2Out = JSON.parse(JSON.stringify(rule2Out)); |
rule2Out = JSON.parse(JSON.stringify(rule2Out)); |
||||
var rule1Result = { |
var rule1Result = { |
||||
selectors: [], |
selectors: [], |
||||
selectorsAdd: '*', |
selectorsAdd: '*', |
||||
style: { |
style: { |
||||
color: 'red', |
color: 'red', |
||||
width: '10px' |
width: '10px' |
||||
} |
} |
||||
}; |
}; |
||||
var rule2Result = { |
var rule2Result = { |
||||
selectors: [], |
selectors: [], |
||||
selectorsAdd: 'p', |
selectorsAdd: 'p', |
||||
style: { |
style: { |
||||
height: '20px', |
height: '20px', |
||||
width: '20px' |
width: '20px' |
||||
} |
} |
||||
}; |
}; |
||||
expect(rule1Out).toEqual(rule1Result); |
expect(rule1Out).toEqual(rule1Result); |
||||
expect(rule2Out).toEqual(rule2Result); |
expect(rule2Out).toEqual(rule2Result); |
||||
}); |
}); |
||||
|
|
||||
test('Add raw rule objects with width via addCollection', () => { |
test('Add raw rule objects with width via addCollection', () => { |
||||
var coll1 = cssc.addCollection(rulesSet2); |
var coll1 = cssc.addCollection(rulesSet2); |
||||
expect(coll1[2].get('mediaText')).toEqual(rulesSet2[2].mediaText); |
expect(coll1[2].get('mediaText')).toEqual(rulesSet2[2].mediaText); |
||||
}); |
}); |
||||
}); |
}); |
||||
} |
|
||||
}; |
|
||||
|
|||||
@ -1,95 +1,91 @@ |
|||||
import CssRuleView from 'css_composer/view/CssRuleView'; |
import CssRuleView from 'css_composer/view/CssRuleView'; |
||||
import CssRule from 'css_composer/model/CssRule'; |
import CssRule from 'css_composer/model/CssRule'; |
||||
|
|
||||
module.exports = { |
describe('CssRuleView', () => { |
||||
run() { |
let obj; |
||||
describe('CssRuleView', () => { |
let fixtures; |
||||
let obj; |
|
||||
let fixtures; |
|
||||
|
|
||||
beforeEach(() => { |
beforeEach(() => { |
||||
var m = new CssRule(); |
var m = new CssRule(); |
||||
obj = new CssRuleView({ |
obj = new CssRuleView({ |
||||
model: m |
model: m |
||||
}); |
}); |
||||
document.body.innerHTML = '<div id="fixtures"></div>'; |
document.body.innerHTML = '<div id="fixtures"></div>'; |
||||
fixtures = document.body.querySelector('#fixtures'); |
fixtures = document.body.querySelector('#fixtures'); |
||||
fixtures.appendChild(obj.render().el); |
fixtures.appendChild(obj.render().el); |
||||
}); |
}); |
||||
|
|
||||
afterEach(() => { |
afterEach(() => { |
||||
obj.model.destroy(); |
obj.model.destroy(); |
||||
}); |
}); |
||||
|
|
||||
test('Object exists', () => { |
test('Object exists', () => { |
||||
expect(CssRuleView).toBeTruthy(); |
expect(CssRuleView).toBeTruthy(); |
||||
}); |
}); |
||||
|
|
||||
test('Empty style inside', () => { |
test('Empty style inside', () => { |
||||
expect(fixtures.innerHTML).toEqual('<style></style>'); |
expect(fixtures.innerHTML).toEqual('<style></style>'); |
||||
}); |
}); |
||||
|
|
||||
test('On update of style always empty as there is no selectors', () => { |
test('On update of style always empty as there is no selectors', () => { |
||||
obj.model.set('style', { prop: 'value' }); |
obj.model.set('style', { prop: 'value' }); |
||||
expect(fixtures.innerHTML).toEqual('<style></style>'); |
expect(fixtures.innerHTML).toEqual('<style></style>'); |
||||
}); |
}); |
||||
|
|
||||
describe('CssRuleView with selectors', () => { |
describe('CssRuleView with selectors', () => { |
||||
let objReg; |
let objReg; |
||||
|
|
||||
beforeEach(() => { |
beforeEach(() => { |
||||
var m = new CssRule({ |
var m = new CssRule({ |
||||
selectors: [{ name: 'test1' }, { name: 'test2' }] |
selectors: [{ name: 'test1' }, { name: 'test2' }] |
||||
}); |
}); |
||||
objReg = new CssRuleView({ |
objReg = new CssRuleView({ |
||||
model: m |
model: m |
||||
}); |
}); |
||||
objReg.render(); |
objReg.render(); |
||||
document.body.innerHTML = '<div id="fixtures"></div>'; |
document.body.innerHTML = '<div id="fixtures"></div>'; |
||||
fixtures = document.body.querySelector('#fixtures'); |
fixtures = document.body.querySelector('#fixtures'); |
||||
fixtures.appendChild(objReg.el); |
fixtures.appendChild(objReg.el); |
||||
}); |
}); |
||||
|
|
||||
afterEach(() => { |
afterEach(() => { |
||||
objReg.model.destroy(); |
objReg.model.destroy(); |
||||
}); |
}); |
||||
|
|
||||
test('Empty with no style', () => { |
test('Empty with no style', () => { |
||||
expect(objReg.$el.html()).toEqual(''); |
expect(objReg.$el.html()).toEqual(''); |
||||
}); |
}); |
||||
|
|
||||
test('Not empty on update of style', () => { |
test('Not empty on update of style', () => { |
||||
objReg.model.set('style', { prop: 'value' }); |
objReg.model.set('style', { prop: 'value' }); |
||||
expect(objReg.$el.html()).toEqual('.test1.test2{prop:value;}'); |
expect(objReg.$el.html()).toEqual('.test1.test2{prop:value;}'); |
||||
}); |
}); |
||||
|
|
||||
test('State correctly rendered', () => { |
test('State correctly rendered', () => { |
||||
objReg.model.set('style', { prop: 'value' }); |
objReg.model.set('style', { prop: 'value' }); |
||||
objReg.model.set('state', 'hover'); |
objReg.model.set('state', 'hover'); |
||||
expect(objReg.$el.html()).toEqual('.test1.test2:hover{prop:value;}'); |
expect(objReg.$el.html()).toEqual('.test1.test2:hover{prop:value;}'); |
||||
}); |
}); |
||||
|
|
||||
test('State render changes on update', () => { |
test('State render changes on update', () => { |
||||
objReg.model.set('style', { prop: 'value' }); |
objReg.model.set('style', { prop: 'value' }); |
||||
objReg.model.set('state', 'hover'); |
objReg.model.set('state', 'hover'); |
||||
objReg.model.set('state', ''); |
objReg.model.set('state', ''); |
||||
expect(objReg.$el.html()).toEqual('.test1.test2{prop:value;}'); |
expect(objReg.$el.html()).toEqual('.test1.test2{prop:value;}'); |
||||
}); |
}); |
||||
|
|
||||
test('Render media queries', () => { |
test('Render media queries', () => { |
||||
objReg.model.set('style', { prop: 'value' }); |
objReg.model.set('style', { prop: 'value' }); |
||||
objReg.model.set('mediaText', '(max-width: 999px)'); |
objReg.model.set('mediaText', '(max-width: 999px)'); |
||||
expect(objReg.$el.html()).toEqual( |
expect(objReg.$el.html()).toEqual( |
||||
'@media (max-width: 999px){.test1.test2{prop:value;}}' |
'@media (max-width: 999px){.test1.test2{prop:value;}}' |
||||
); |
); |
||||
}); |
}); |
||||
|
|
||||
test('Empty on clear', () => { |
test('Empty on clear', () => { |
||||
objReg.model.set('style', { prop: 'value' }); |
objReg.model.set('style', { prop: 'value' }); |
||||
objReg.model.set('style', {}); |
objReg.model.set('style', {}); |
||||
expect(objReg.$el.html()).toEqual(''); |
expect(objReg.$el.html()).toEqual(''); |
||||
}); |
|
||||
}); |
|
||||
}); |
}); |
||||
} |
}); |
||||
}; |
}); |
||||
|
|||||
@ -1,68 +1,62 @@ |
|||||
import DevicesView from 'device_manager/view/DevicesView'; |
import DevicesView from 'device_manager/view/DevicesView'; |
||||
import Devices from 'device_manager/model/Devices'; |
import Devices from 'device_manager/model/Devices'; |
||||
|
|
||||
module.exports = { |
describe('DevicesView', () => { |
||||
run() { |
var $fixtures; |
||||
describe('DevicesView', () => { |
var $fixture; |
||||
var $fixtures; |
var model; |
||||
var $fixture; |
var view; |
||||
var model; |
var editorModel; |
||||
var view; |
var em; |
||||
var editorModel; |
|
||||
var em; |
beforeEach(() => { |
||||
|
model = new Devices([]); |
||||
beforeEach(() => { |
view = new DevicesView({ |
||||
model = new Devices([]); |
collection: model |
||||
view = new DevicesView({ |
}); |
||||
collection: model |
document.body.innerHTML = '<div id="fixtures"></div>'; |
||||
}); |
document.body.querySelector('#fixtures').appendChild(view.render().el); |
||||
document.body.innerHTML = '<div id="fixtures"></div>'; |
}); |
||||
document.body.querySelector('#fixtures').appendChild(view.render().el); |
|
||||
}); |
afterEach(() => { |
||||
|
view.collection.reset(); |
||||
afterEach(() => { |
}); |
||||
view.collection.reset(); |
|
||||
}); |
test('The content is not empty', () => { |
||||
|
expect(view.el.innerHTML).toBeTruthy(); |
||||
test('The content is not empty', () => { |
}); |
||||
expect(view.el.innerHTML).toBeTruthy(); |
|
||||
}); |
test('No options without devices', () => { |
||||
|
expect(view.getOptions()).toEqual(''); |
||||
test('No options without devices', () => { |
}); |
||||
expect(view.getOptions()).toEqual(''); |
|
||||
}); |
test('Render new button', () => { |
||||
|
view.collection.add({}); |
||||
test('Render new button', () => { |
expect(view.$el.html()).toBeTruthy(); |
||||
view.collection.add({}); |
}); |
||||
expect(view.$el.html()).toBeTruthy(); |
|
||||
|
describe('With configs', () => { |
||||
|
beforeEach(() => { |
||||
|
editorModel = new Backbone.Model(); |
||||
|
model = new Devices([{ name: 'test1' }, { name: 'test2' }]); |
||||
|
view = new DevicesView({ |
||||
|
collection: model, |
||||
|
config: { em: editorModel } |
||||
}); |
}); |
||||
|
document.body.innerHTML = '<div id="fixtures"></div>'; |
||||
|
document.body.querySelector('#fixtures').appendChild(view.render().el); |
||||
|
}); |
||||
|
|
||||
describe('With configs', () => { |
test('Update device on select change', () => { |
||||
beforeEach(() => { |
view.$el.find('select').val('test2'); |
||||
editorModel = new Backbone.Model(); |
view.updateDevice(); |
||||
model = new Devices([{ name: 'test1' }, { name: 'test2' }]); |
expect(view.config.em.get('device')).toEqual('test2'); |
||||
view = new DevicesView({ |
}); |
||||
collection: model, |
|
||||
config: { em: editorModel } |
|
||||
}); |
|
||||
document.body.innerHTML = '<div id="fixtures"></div>'; |
|
||||
document.body |
|
||||
.querySelector('#fixtures') |
|
||||
.appendChild(view.render().el); |
|
||||
}); |
|
||||
|
|
||||
test('Update device on select change', () => { |
|
||||
view.$el.find('select').val('test2'); |
|
||||
view.updateDevice(); |
|
||||
expect(view.config.em.get('device')).toEqual('test2'); |
|
||||
}); |
|
||||
|
|
||||
test('Render options', () => { |
test('Render options', () => { |
||||
expect(view.getOptions()).toEqual( |
expect(view.getOptions()).toEqual( |
||||
'<option value="test1">test1</option><option value="test2">test2</option>' |
'<option value="test1">test1</option><option value="test2">test2</option>' |
||||
); |
); |
||||
}); |
|
||||
}); |
|
||||
}); |
}); |
||||
} |
}); |
||||
}; |
}); |
||||
|
|||||
File diff suppressed because it is too large
@ -1,41 +1,37 @@ |
|||||
import ComponentImageView from 'dom_components/view/ComponentImageView'; |
import ComponentImageView from 'dom_components/view/ComponentImageView'; |
||||
import Component from 'dom_components/model/ComponentImage'; |
import Component from 'dom_components/model/ComponentImage'; |
||||
|
|
||||
module.exports = { |
describe('ComponentImageView', () => { |
||||
run() { |
var model; |
||||
describe('ComponentImageView', () => { |
var view; |
||||
var model; |
|
||||
var view; |
|
||||
|
|
||||
beforeEach(() => { |
beforeEach(() => { |
||||
model = new Component(); |
model = new Component(); |
||||
view = new ComponentImageView({ |
view = new ComponentImageView({ |
||||
model |
model |
||||
}); |
}); |
||||
document.body.innerHTML = '<div id="fixtures"></div>'; |
document.body.innerHTML = '<div id="fixtures"></div>'; |
||||
document.body.querySelector('#fixtures').appendChild(view.render().el); |
document.body.querySelector('#fixtures').appendChild(view.render().el); |
||||
}); |
}); |
||||
|
|
||||
afterEach(() => { |
afterEach(() => { |
||||
view.remove(); |
view.remove(); |
||||
}); |
}); |
||||
|
|
||||
test('Component empty', () => { |
test('Component empty', () => { |
||||
expect(view.el.getAttribute('class')).toEqual(view.classEmpty); |
expect(view.el.getAttribute('class')).toEqual(view.classEmpty); |
||||
}); |
}); |
||||
|
|
||||
test('TagName is <img>', () => { |
test('TagName is <img>', () => { |
||||
expect(view.el.tagName).toEqual('IMG'); |
expect(view.el.tagName).toEqual('IMG'); |
||||
}); |
}); |
||||
|
|
||||
test('Update src attribute', () => { |
test('Update src attribute', () => { |
||||
model.set('src', './'); |
model.set('src', './'); |
||||
expect(view.el.getAttribute('src')).toEqual('./'); |
expect(view.el.getAttribute('src')).toEqual('./'); |
||||
}); |
}); |
||||
|
|
||||
test('Renders correctly', () => { |
test('Renders correctly', () => { |
||||
expect(view.render()).toBeTruthy(); |
expect(view.render()).toBeTruthy(); |
||||
}); |
}); |
||||
}); |
}); |
||||
} |
|
||||
}; |
|
||||
|
|||||
@ -1,46 +1,42 @@ |
|||||
import ComponentTextView from 'dom_components/view/ComponentTextView'; |
import ComponentTextView from 'dom_components/view/ComponentTextView'; |
||||
import Component from 'dom_components/model/Component'; |
import Component from 'dom_components/model/Component'; |
||||
|
|
||||
module.exports = { |
describe('ComponentTextView', () => { |
||||
run() { |
var fixtures; |
||||
describe('ComponentTextView', () => { |
var model; |
||||
var fixtures; |
var view; |
||||
var model; |
|
||||
var view; |
|
||||
|
|
||||
beforeEach(() => { |
beforeEach(() => { |
||||
model = new Component(); |
model = new Component(); |
||||
view = new ComponentTextView({ |
view = new ComponentTextView({ |
||||
model |
model |
||||
}); |
}); |
||||
document.body.innerHTML = '<div id="fixtures"></div>'; |
document.body.innerHTML = '<div id="fixtures"></div>'; |
||||
fixtures = document.body.querySelector('#fixtures'); |
fixtures = document.body.querySelector('#fixtures'); |
||||
fixtures.appendChild(view.render().el); |
fixtures.appendChild(view.render().el); |
||||
}); |
}); |
||||
|
|
||||
afterEach(() => { |
afterEach(() => { |
||||
view.remove(); |
view.remove(); |
||||
}); |
}); |
||||
|
|
||||
test('Component empty', () => { |
test('Component empty', () => { |
||||
expect(fixtures.innerHTML).toEqual( |
expect(fixtures.innerHTML).toEqual( |
||||
'<div data-gjs-type="default" data-highlightable="1"></div>' |
'<div data-gjs-type="default" data-highlightable="1"></div>' |
||||
); |
); |
||||
}); |
}); |
||||
|
|
||||
test('Input content is stored in model', () => { |
test('Input content is stored in model', () => { |
||||
//view.enableEditing();
|
//view.enableEditing();
|
||||
view.el.innerHTML = 'test'; |
view.el.innerHTML = 'test'; |
||||
//view.disableEditing();
|
//view.disableEditing();
|
||||
//model.get('content').should.equal('test');
|
//model.get('content').should.equal('test');
|
||||
}); |
}); |
||||
|
|
||||
test('Init with content', () => { |
test('Init with content', () => { |
||||
model = new Component({ content: 'test' }); |
model = new Component({ content: 'test' }); |
||||
view = new ComponentTextView({ model }); |
view = new ComponentTextView({ model }); |
||||
fixtures.appendChild(view.render().el); |
fixtures.appendChild(view.render().el); |
||||
expect(view.el.innerHTML).toEqual('test'); |
expect(view.el.innerHTML).toEqual('test'); |
||||
}); |
}); |
||||
}); |
}); |
||||
} |
|
||||
}; |
|
||||
|
|||||
@ -1,58 +1,54 @@ |
|||||
import ModalView from 'modal_dialog/view/ModalView'; |
import ModalView from 'modal_dialog/view/ModalView'; |
||||
import Modal from 'modal_dialog/model/Modal'; |
import Modal from 'modal_dialog/model/Modal'; |
||||
|
|
||||
module.exports = { |
describe('ModalView', () => { |
||||
run() { |
var model; |
||||
describe('ModalView', () => { |
var view; |
||||
var model; |
var editorModel; |
||||
var view; |
|
||||
var editorModel; |
beforeEach(() => { |
||||
|
model = new Modal(); |
||||
beforeEach(() => { |
view = new ModalView({ |
||||
model = new Modal(); |
model |
||||
view = new ModalView({ |
|
||||
model |
|
||||
}); |
|
||||
document.body.innerHTML = '<div id="fixtures"></div>'; |
|
||||
document.body.querySelector('#fixtures').appendChild(view.render().el); |
|
||||
}); |
|
||||
|
|
||||
afterEach(() => { |
|
||||
view = null; |
|
||||
model = null; |
|
||||
}); |
|
||||
|
|
||||
test('The content is not empty', () => { |
|
||||
expect(view.el.innerHTML).toBeTruthy(); |
|
||||
}); |
|
||||
|
|
||||
test('Get content', () => { |
|
||||
expect(view.getContent()).toBeTruthy(); |
|
||||
}); |
|
||||
|
|
||||
test('Update content', () => { |
|
||||
model.set('content', 'test'); |
|
||||
expect(view.getContent().get(0).innerHTML).toEqual('test'); |
|
||||
}); |
|
||||
|
|
||||
test('Get title', () => { |
|
||||
expect(view.getTitle()).toBeTruthy(); |
|
||||
}); |
|
||||
|
|
||||
test('Update title', () => { |
|
||||
model.set('title', 'test'); |
|
||||
expect(view.getTitle().innerHTML).toEqual('test'); |
|
||||
}); |
|
||||
|
|
||||
test('Close by default', () => { |
|
||||
view.updateOpen(); |
|
||||
expect(view.el.style.display).toEqual('none'); |
|
||||
}); |
|
||||
|
|
||||
test('Open dialog', () => { |
|
||||
model.set('open', 1); |
|
||||
expect(view.el.style.display).toEqual(''); |
|
||||
}); |
|
||||
}); |
}); |
||||
} |
document.body.innerHTML = '<div id="fixtures"></div>'; |
||||
}; |
document.body.querySelector('#fixtures').appendChild(view.render().el); |
||||
|
}); |
||||
|
|
||||
|
afterEach(() => { |
||||
|
view = null; |
||||
|
model = null; |
||||
|
}); |
||||
|
|
||||
|
test('The content is not empty', () => { |
||||
|
expect(view.el.innerHTML).toBeTruthy(); |
||||
|
}); |
||||
|
|
||||
|
test('Get content', () => { |
||||
|
expect(view.getContent()).toBeTruthy(); |
||||
|
}); |
||||
|
|
||||
|
test('Update content', () => { |
||||
|
model.set('content', 'test'); |
||||
|
expect(view.getContent().get(0).innerHTML).toEqual('test'); |
||||
|
}); |
||||
|
|
||||
|
test('Get title', () => { |
||||
|
expect(view.getTitle()).toBeTruthy(); |
||||
|
}); |
||||
|
|
||||
|
test('Update title', () => { |
||||
|
model.set('title', 'test'); |
||||
|
expect(view.getTitle().innerHTML).toEqual('test'); |
||||
|
}); |
||||
|
|
||||
|
test('Close by default', () => { |
||||
|
view.updateOpen(); |
||||
|
expect(view.el.style.display).toEqual('none'); |
||||
|
}); |
||||
|
|
||||
|
test('Open dialog', () => { |
||||
|
model.set('open', 1); |
||||
|
expect(view.el.style.display).toEqual(''); |
||||
|
}); |
||||
|
}); |
||||
|
|||||
@ -1,70 +1,66 @@ |
|||||
module.exports = { |
describe('E2E tests', () => { |
||||
run() { |
var fixtures; |
||||
describe('E2E tests', () => { |
var fixture; |
||||
var fixtures; |
var obj; |
||||
var fixture; |
var config; |
||||
var obj; |
var editorName = 'panel-fixture'; |
||||
var config; |
|
||||
var editorName = 'panel-fixture'; |
|
||||
|
|
||||
beforeAll(() => { |
beforeAll(() => { |
||||
fixtures = $('<div id="#fixtures"></div>').appendTo('body'); |
fixtures = $('<div id="#fixtures"></div>').appendTo('body'); |
||||
}); |
}); |
||||
|
|
||||
beforeEach(() => { |
beforeEach(() => { |
||||
obj = grapesjs; |
obj = grapesjs; |
||||
config = { |
config = { |
||||
container: '#' + editorName, |
container: '#' + editorName, |
||||
storageManager: { autoload: 0, type: 'none' } |
storageManager: { autoload: 0, type: 'none' } |
||||
}; |
}; |
||||
fixture = $('<div id="' + editorName + '"></div>'); |
fixture = $('<div id="' + editorName + '"></div>'); |
||||
fixture.empty().appendTo(fixtures); |
fixture.empty().appendTo(fixtures); |
||||
}); |
}); |
||||
|
|
||||
afterEach(() => { |
afterEach(() => { |
||||
obj = null; |
obj = null; |
||||
config = null; |
config = null; |
||||
fixture.remove(); |
fixture.remove(); |
||||
}); |
}); |
||||
|
|
||||
afterAll(() => { |
afterAll(() => { |
||||
//fixture.remove();
|
//fixture.remove();
|
||||
}); |
}); |
||||
|
|
||||
test('Command is correctly executed on button click', () => { |
test('Command is correctly executed on button click', () => { |
||||
var commandId = 'command-test'; |
var commandId = 'command-test'; |
||||
config.commands = { |
config.commands = { |
||||
defaults: [ |
defaults: [ |
||||
|
{ |
||||
|
id: commandId, |
||||
|
run(ed, caller) { |
||||
|
ed.testValue = 'testValue'; |
||||
|
caller.set('active', false); |
||||
|
} |
||||
|
} |
||||
|
] |
||||
|
}; |
||||
|
config.panels = { |
||||
|
defaults: [ |
||||
|
{ |
||||
|
id: 'toolbar-test', |
||||
|
buttons: [ |
||||
{ |
{ |
||||
id: commandId, |
id: 'button-test', |
||||
run(ed, caller) { |
className: 'fa fa-smile-o', |
||||
ed.testValue = 'testValue'; |
command: commandId |
||||
caller.set('active', false); |
|
||||
} |
|
||||
} |
} |
||||
] |
] |
||||
}; |
} |
||||
config.panels = { |
] |
||||
defaults: [ |
}; |
||||
{ |
var editor = obj.init(config); |
||||
id: 'toolbar-test', |
editor.testValue = ''; |
||||
buttons: [ |
var button = editor.Panels.getButton('toolbar-test', 'button-test'); |
||||
{ |
button.set('active', 1); |
||||
id: 'button-test', |
expect(editor.testValue).toEqual('testValue'); |
||||
className: 'fa fa-smile-o', |
expect(button.get('active')).toEqual(false); |
||||
command: commandId |
}); |
||||
} |
}); |
||||
] |
|
||||
} |
|
||||
] |
|
||||
}; |
|
||||
var editor = obj.init(config); |
|
||||
editor.testValue = ''; |
|
||||
var button = editor.Panels.getButton('toolbar-test', 'button-test'); |
|
||||
button.set('active', 1); |
|
||||
expect(editor.testValue).toEqual('testValue'); |
|
||||
expect(button.get('active')).toEqual(false); |
|
||||
}); |
|
||||
}); |
|
||||
} |
|
||||
}; |
|
||||
|
|||||
@ -1,91 +1,87 @@ |
|||||
import ButtonView from 'panels/view/ButtonView'; |
import ButtonView from 'panels/view/ButtonView'; |
||||
import Button from 'panels/model/Button'; |
import Button from 'panels/model/Button'; |
||||
|
|
||||
module.exports = { |
describe('ButtonView', () => { |
||||
run() { |
var fixtures; |
||||
describe('ButtonView', () => { |
var model; |
||||
var fixtures; |
var view; |
||||
var model; |
var btnClass = 'btn'; |
||||
var view; |
|
||||
var btnClass = 'btn'; |
|
||||
|
|
||||
beforeEach(() => { |
beforeEach(() => { |
||||
model = new Button(); |
model = new Button(); |
||||
view = new ButtonView({ |
view = new ButtonView({ |
||||
model: model |
model: model |
||||
}); |
}); |
||||
document.body.innerHTML = '<div id="fixtures"></div>'; |
document.body.innerHTML = '<div id="fixtures"></div>'; |
||||
fixtures = document.body.querySelector('#fixtures'); |
fixtures = document.body.querySelector('#fixtures'); |
||||
fixtures.appendChild(view.render().el); |
fixtures.appendChild(view.render().el); |
||||
}); |
}); |
||||
|
|
||||
afterEach(() => { |
afterEach(() => { |
||||
view.remove(); |
view.remove(); |
||||
}); |
}); |
||||
|
|
||||
test('Button empty', () => { |
test('Button empty', () => { |
||||
expect(fixtures.innerHTML).toEqual( |
expect(fixtures.innerHTML).toEqual( |
||||
'<span class="' + btnClass + '"></span>' |
'<span class="' + btnClass + '"></span>' |
||||
); |
); |
||||
}); |
}); |
||||
|
|
||||
test('Update class', () => { |
test('Update class', () => { |
||||
model.set('className', 'test'); |
model.set('className', 'test'); |
||||
expect(view.el.getAttribute('class')).toEqual(btnClass + ' test'); |
expect(view.el.getAttribute('class')).toEqual(btnClass + ' test'); |
||||
}); |
}); |
||||
|
|
||||
test('Update attributes', () => { |
test('Update attributes', () => { |
||||
model.set('attributes', { |
model.set('attributes', { |
||||
'data-test': 'test-value' |
'data-test': 'test-value' |
||||
}); |
}); |
||||
expect(view.el.getAttribute('data-test')).toEqual('test-value'); |
expect(view.el.getAttribute('data-test')).toEqual('test-value'); |
||||
}); |
}); |
||||
|
|
||||
test('Check enable active', () => { |
test('Check enable active', () => { |
||||
model.set('active', true, { silent: true }); |
model.set('active', true, { silent: true }); |
||||
view.checkActive(); |
view.checkActive(); |
||||
expect(view.el.getAttribute('class')).toContain(btnClass + ' active'); |
expect(view.el.getAttribute('class')).toContain(btnClass + ' active'); |
||||
}); |
}); |
||||
|
|
||||
test('Check disable active', () => { |
test('Check disable active', () => { |
||||
model.set('active', true, { silent: true }); |
model.set('active', true, { silent: true }); |
||||
view.checkActive(); |
view.checkActive(); |
||||
model.set('active', false, { silent: true }); |
model.set('active', false, { silent: true }); |
||||
view.checkActive(); |
view.checkActive(); |
||||
expect(view.el.getAttribute('class')).toEqual(btnClass); |
expect(view.el.getAttribute('class')).toEqual(btnClass); |
||||
}); |
}); |
||||
|
|
||||
test('Disable the button', () => { |
test('Disable the button', () => { |
||||
model.set('disable', true, { silent: true }); |
model.set('disable', true, { silent: true }); |
||||
view.updateDisable(); |
view.updateDisable(); |
||||
expect(view.el.getAttribute('class')).toEqual(btnClass + ' disabled'); |
expect(view.el.getAttribute('class')).toEqual(btnClass + ' disabled'); |
||||
}); |
}); |
||||
|
|
||||
test('Enable the disabled button', () => { |
test('Enable the disabled button', () => { |
||||
model.set('disable', true, { silent: true }); |
model.set('disable', true, { silent: true }); |
||||
view.updateDisable(); |
view.updateDisable(); |
||||
model.set('disable', false, { silent: true }); |
model.set('disable', false, { silent: true }); |
||||
view.updateDisable(); |
view.updateDisable(); |
||||
expect(view.el.getAttribute('class')).toEqual(btnClass); |
expect(view.el.getAttribute('class')).toEqual(btnClass); |
||||
}); |
}); |
||||
|
|
||||
test('Cancels the click action when button is disabled', () => { |
test('Cancels the click action when button is disabled', () => { |
||||
const stub = sinon.stub(view, 'toogleActive'); |
const stub = sinon.stub(view, 'toogleActive'); |
||||
model.set('disable', true, { silent: true }); |
model.set('disable', true, { silent: true }); |
||||
view.clicked(); |
view.clicked(); |
||||
expect(stub.called).toEqual(false); |
expect(stub.called).toEqual(false); |
||||
}); |
}); |
||||
|
|
||||
test('Enable the click action when button is enable', () => { |
test('Enable the click action when button is enable', () => { |
||||
const stub = sinon.stub(view, 'toogleActive'); |
const stub = sinon.stub(view, 'toogleActive'); |
||||
model.set('disable', false, { silent: true }); |
model.set('disable', false, { silent: true }); |
||||
view.clicked(); |
view.clicked(); |
||||
expect(stub.called).toEqual(true); |
expect(stub.called).toEqual(true); |
||||
}); |
}); |
||||
|
|
||||
test('Renders correctly', () => { |
test('Renders correctly', () => { |
||||
expect(view.render()).toBeTruthy(); |
expect(view.render()).toBeTruthy(); |
||||
}); |
}); |
||||
}); |
}); |
||||
} |
|
||||
}; |
|
||||
|
|||||
@ -1,41 +1,37 @@ |
|||||
import ButtonsView from 'panels/view/ButtonsView'; |
import ButtonsView from 'panels/view/ButtonsView'; |
||||
import Buttons from 'panels/model/Buttons'; |
import Buttons from 'panels/model/Buttons'; |
||||
|
|
||||
module.exports = { |
describe('ButtonsView', () => { |
||||
run() { |
var fixtures; |
||||
describe('ButtonsView', () => { |
var model; |
||||
var fixtures; |
var view; |
||||
var model; |
|
||||
var view; |
|
||||
|
|
||||
beforeEach(() => { |
beforeEach(() => { |
||||
model = new Buttons([]); |
model = new Buttons([]); |
||||
view = new ButtonsView({ |
view = new ButtonsView({ |
||||
collection: model |
collection: model |
||||
}); |
}); |
||||
document.body.innerHTML = '<div id="fixtures"></div>'; |
document.body.innerHTML = '<div id="fixtures"></div>'; |
||||
fixtures = document.body.querySelector('#fixtures'); |
fixtures = document.body.querySelector('#fixtures'); |
||||
fixtures.appendChild(view.render().el); |
fixtures.appendChild(view.render().el); |
||||
}); |
}); |
||||
|
|
||||
afterEach(() => { |
afterEach(() => { |
||||
view.collection.reset(); |
view.collection.reset(); |
||||
}); |
}); |
||||
|
|
||||
test('Collection is empty', () => { |
test('Collection is empty', () => { |
||||
expect(view.$el.html()).toEqual(''); |
expect(view.$el.html()).toEqual(''); |
||||
}); |
}); |
||||
|
|
||||
test('Add new button', () => { |
test('Add new button', () => { |
||||
sinon.stub(view, 'addToCollection'); |
sinon.stub(view, 'addToCollection'); |
||||
view.collection.add({}); |
view.collection.add({}); |
||||
expect(view.addToCollection.calledOnce).toEqual(true); |
expect(view.addToCollection.calledOnce).toEqual(true); |
||||
}); |
}); |
||||
|
|
||||
test('Render new button', () => { |
test('Render new button', () => { |
||||
view.collection.add({}); |
view.collection.add({}); |
||||
expect(view.$el.html()).toBeTruthy(); |
expect(view.$el.html()).toBeTruthy(); |
||||
}); |
}); |
||||
}); |
}); |
||||
} |
|
||||
}; |
|
||||
|
|||||
@ -1,74 +1,70 @@ |
|||||
import PanelView from 'panels/view/PanelView'; |
import PanelView from 'panels/view/PanelView'; |
||||
import Panel from 'panels/model/Panel'; |
import Panel from 'panels/model/Panel'; |
||||
|
|
||||
module.exports = { |
describe('PanelView', () => { |
||||
run() { |
var fixtures; |
||||
describe('PanelView', () => { |
var model; |
||||
var fixtures; |
var view; |
||||
var model; |
|
||||
var view; |
|
||||
|
|
||||
beforeEach(() => { |
beforeEach(() => { |
||||
model = new Panel(); |
model = new Panel(); |
||||
view = new PanelView({ |
view = new PanelView({ |
||||
model |
model |
||||
}); |
}); |
||||
document.body.innerHTML = '<div id="fixtures"></div>'; |
document.body.innerHTML = '<div id="fixtures"></div>'; |
||||
fixtures = document.body.querySelector('#fixtures'); |
fixtures = document.body.querySelector('#fixtures'); |
||||
fixtures.appendChild(view.render().el); |
fixtures.appendChild(view.render().el); |
||||
}); |
}); |
||||
|
|
||||
afterEach(() => { |
|
||||
view.remove(); |
|
||||
}); |
|
||||
|
|
||||
test('Panel empty', () => { |
afterEach(() => { |
||||
fixtures.firstChild.className = ''; |
view.remove(); |
||||
expect(fixtures.innerHTML).toEqual('<div class=""></div>'); |
}); |
||||
}); |
|
||||
|
|
||||
test('Append content', () => { |
test('Panel empty', () => { |
||||
model.set('appendContent', 'test'); |
fixtures.firstChild.className = ''; |
||||
model.set('appendContent', 'test2'); |
expect(fixtures.innerHTML).toEqual('<div class=""></div>'); |
||||
expect(view.$el.html()).toEqual('testtest2'); |
}); |
||||
}); |
|
||||
|
|
||||
test('Update content', () => { |
test('Append content', () => { |
||||
model.set('content', 'test'); |
model.set('appendContent', 'test'); |
||||
model.set('content', 'test2'); |
model.set('appendContent', 'test2'); |
||||
expect(view.$el.html()).toEqual('test2'); |
expect(view.$el.html()).toEqual('testtest2'); |
||||
}); |
}); |
||||
|
|
||||
test('Hide panel', () => { |
test('Update content', () => { |
||||
expect(view.$el.hasClass('hidden')).toBeFalsy(); |
model.set('content', 'test'); |
||||
model.set('visible', false); |
model.set('content', 'test2'); |
||||
expect(view.$el.hasClass('hidden')).toBeTruthy(); |
expect(view.$el.html()).toEqual('test2'); |
||||
}); |
}); |
||||
|
|
||||
test('Show panel', () => { |
test('Hide panel', () => { |
||||
model.set('visible', false); |
expect(view.$el.hasClass('hidden')).toBeFalsy(); |
||||
expect(view.$el.hasClass('hidden')).toBeTruthy(); |
model.set('visible', false); |
||||
model.set('visible', true); |
expect(view.$el.hasClass('hidden')).toBeTruthy(); |
||||
expect(view.$el.hasClass('hidden')).toBeFalsy(); |
}); |
||||
}); |
|
||||
|
|
||||
describe('Init with options', () => { |
test('Show panel', () => { |
||||
beforeEach(() => { |
model.set('visible', false); |
||||
model = new Panel({ |
expect(view.$el.hasClass('hidden')).toBeTruthy(); |
||||
buttons: [{}] |
model.set('visible', true); |
||||
}); |
expect(view.$el.hasClass('hidden')).toBeFalsy(); |
||||
view = new PanelView({ |
}); |
||||
model |
|
||||
}); |
|
||||
document.body.innerHTML = '<div id="fixtures"></div>'; |
|
||||
fixtures = document.body.querySelector('#fixtures'); |
|
||||
fixtures.appendChild(view.render().el); |
|
||||
}); |
|
||||
|
|
||||
afterEach(() => { |
describe('Init with options', () => { |
||||
view.remove(); |
beforeEach(() => { |
||||
}); |
model = new Panel({ |
||||
|
buttons: [{}] |
||||
}); |
}); |
||||
|
view = new PanelView({ |
||||
|
model |
||||
|
}); |
||||
|
document.body.innerHTML = '<div id="fixtures"></div>'; |
||||
|
fixtures = document.body.querySelector('#fixtures'); |
||||
|
fixtures.appendChild(view.render().el); |
||||
|
}); |
||||
|
|
||||
|
afterEach(() => { |
||||
|
view.remove(); |
||||
}); |
}); |
||||
} |
}); |
||||
}; |
}); |
||||
|
|||||
@ -1,42 +1,38 @@ |
|||||
import PanelsView from 'panels/view/PanelsView'; |
import PanelsView from 'panels/view/PanelsView'; |
||||
import Panels from 'panels/model/Panels'; |
import Panels from 'panels/model/Panels'; |
||||
|
|
||||
module.exports = { |
describe('PanelsView', () => { |
||||
run() { |
var fixtures; |
||||
describe('PanelsView', () => { |
var $fixture; |
||||
var fixtures; |
var model; |
||||
var $fixture; |
var view; |
||||
var model; |
|
||||
var view; |
|
||||
|
|
||||
beforeEach(() => { |
beforeEach(() => { |
||||
model = new Panels([]); |
model = new Panels([]); |
||||
view = new PanelsView({ |
view = new PanelsView({ |
||||
collection: model |
collection: model |
||||
}); |
}); |
||||
document.body.innerHTML = '<div id="fixtures"></div>'; |
document.body.innerHTML = '<div id="fixtures"></div>'; |
||||
fixtures = document.body.querySelector('#fixtures'); |
fixtures = document.body.querySelector('#fixtures'); |
||||
fixtures.appendChild(view.render().el); |
fixtures.appendChild(view.render().el); |
||||
}); |
}); |
||||
|
|
||||
afterEach(() => { |
afterEach(() => { |
||||
view.collection.reset(); |
view.collection.reset(); |
||||
}); |
}); |
||||
|
|
||||
test('Collection is empty', () => { |
test('Collection is empty', () => { |
||||
expect(view.$el.html()).toEqual(''); |
expect(view.$el.html()).toEqual(''); |
||||
}); |
}); |
||||
|
|
||||
test('Add new panel', () => { |
test('Add new panel', () => { |
||||
sinon.stub(view, 'addToCollection'); |
sinon.stub(view, 'addToCollection'); |
||||
view.collection.add({}); |
view.collection.add({}); |
||||
expect(view.addToCollection.calledOnce).toEqual(true); |
expect(view.addToCollection.calledOnce).toEqual(true); |
||||
}); |
}); |
||||
|
|
||||
test('Render new panel', () => { |
test('Render new panel', () => { |
||||
view.collection.add({}); |
view.collection.add({}); |
||||
expect(view.$el.html()).toBeTruthy(); |
expect(view.$el.html()).toBeTruthy(); |
||||
}); |
}); |
||||
}); |
}); |
||||
} |
|
||||
}; |
|
||||
|
|||||
@ -1,7 +0,0 @@ |
|||||
import ParserHtml from './model/ParserHtml'; |
|
||||
import ParserCss from './model/ParserCss'; |
|
||||
|
|
||||
describe('Parser', () => { |
|
||||
ParserHtml.run(); |
|
||||
ParserCss.run(); |
|
||||
}); |
|
||||
@ -1,498 +1,493 @@ |
|||||
import { parseSelector } from 'parser/model/BrowserParserCss'; |
import { parseSelector } from 'parser/model/BrowserParserCss'; |
||||
import ParserCss from 'parser/model/ParserCss'; |
import ParserCss from 'parser/model/ParserCss'; |
||||
|
|
||||
module.exports = { |
describe('ParserCss', () => { |
||||
run() { |
let obj; |
||||
describe('ParserCss', () => { |
let config; |
||||
let obj; |
let customParser; |
||||
let config; |
|
||||
let customParser; |
beforeEach(() => { |
||||
|
config = { |
||||
beforeEach(() => { |
em: { |
||||
config = { |
getCustomParserCss: () => customParser |
||||
em: { |
} |
||||
getCustomParserCss: () => customParser |
}; |
||||
} |
obj = new ParserCss(config); |
||||
}; |
}); |
||||
obj = new ParserCss(config); |
|
||||
}); |
afterEach(() => { |
||||
|
obj = null; |
||||
afterEach(() => { |
}); |
||||
obj = null; |
|
||||
}); |
test('Parse selector', () => { |
||||
|
var str = '.test'; |
||||
test('Parse selector', () => { |
var result = [['test']]; |
||||
var str = '.test'; |
expect(parseSelector(str).result).toEqual(result); |
||||
var result = [['test']]; |
}); |
||||
expect(parseSelector(str).result).toEqual(result); |
|
||||
}); |
test('Parse selectors', () => { |
||||
|
var str = '.test1, .test1.test2, .test2.test3'; |
||||
test('Parse selectors', () => { |
var result = [['test1'], ['test1', 'test2'], ['test2', 'test3']]; |
||||
var str = '.test1, .test1.test2, .test2.test3'; |
expect(parseSelector(str).result).toEqual(result); |
||||
var result = [['test1'], ['test1', 'test2'], ['test2', 'test3']]; |
}); |
||||
expect(parseSelector(str).result).toEqual(result); |
|
||||
}); |
test('Ignore not valid selectors', () => { |
||||
|
var str = '.test1.test2, .test2 .test3, div > .test4, #test.test5, .test6'; |
||||
test('Ignore not valid selectors', () => { |
var result = [['test1', 'test2'], ['test6']]; |
||||
var str = |
expect(parseSelector(str).result).toEqual(result); |
||||
'.test1.test2, .test2 .test3, div > .test4, #test.test5, .test6'; |
}); |
||||
var result = [['test1', 'test2'], ['test6']]; |
|
||||
expect(parseSelector(str).result).toEqual(result); |
test('Parse selectors with state', () => { |
||||
}); |
var str = '.test1. test2, .test2>test3, .test4.test5:hover'; |
||||
|
var result = [['test4', 'test5:hover']]; |
||||
test('Parse selectors with state', () => { |
expect(parseSelector(str).result).toEqual(result); |
||||
var str = '.test1. test2, .test2>test3, .test4.test5:hover'; |
}); |
||||
var result = [['test4', 'test5:hover']]; |
|
||||
expect(parseSelector(str).result).toEqual(result); |
test('Parse simple rule', () => { |
||||
}); |
var str = ' .test1 {color:red; width: 50px }'; |
||||
|
var result = { |
||||
test('Parse simple rule', () => { |
selectors: ['test1'], |
||||
var str = ' .test1 {color:red; width: 50px }'; |
style: { |
||||
var result = { |
color: 'red', |
||||
selectors: ['test1'], |
width: '50px' |
||||
style: { |
} |
||||
color: 'red', |
}; |
||||
width: '50px' |
expect(obj.parse(str)).toEqual([result]); |
||||
} |
}); |
||||
}; |
|
||||
expect(obj.parse(str)).toEqual([result]); |
test('Parse rule with more selectors', () => { |
||||
}); |
var str = ' .test1.test2 {color:red; test: value}'; |
||||
|
var result = { |
||||
test('Parse rule with more selectors', () => { |
selectors: ['test1', 'test2'], |
||||
var str = ' .test1.test2 {color:red; test: value}'; |
style: { color: 'red', test: 'value' } |
||||
var result = { |
}; |
||||
selectors: ['test1', 'test2'], |
expect(obj.parse(str)).toEqual([result]); |
||||
style: { color: 'red', test: 'value' } |
}); |
||||
}; |
|
||||
expect(obj.parse(str)).toEqual([result]); |
test('Parse same rule with more selectors', () => { |
||||
}); |
var str = ' .test1.test2, .test3{ color:red }'; |
||||
|
var result = [ |
||||
test('Parse same rule with more selectors', () => { |
{ |
||||
var str = ' .test1.test2, .test3{ color:red }'; |
selectors: ['test1', 'test2'], |
||||
var result = [ |
style: { color: 'red' } |
||||
{ |
}, |
||||
selectors: ['test1', 'test2'], |
{ |
||||
style: { color: 'red' } |
selectors: ['test3'], |
||||
}, |
style: { color: 'red' } |
||||
{ |
} |
||||
selectors: ['test3'], |
]; |
||||
style: { color: 'red' } |
expect(obj.parse(str)).toEqual(result); |
||||
} |
}); |
||||
]; |
|
||||
expect(obj.parse(str)).toEqual(result); |
test('Parse more rules', () => { |
||||
}); |
var str = |
||||
|
' .test1.test2, .test3{ color:red } .test4, .test5.test6{ width:10px }'; |
||||
test('Parse more rules', () => { |
var result = [ |
||||
var str = |
{ |
||||
' .test1.test2, .test3{ color:red } .test4, .test5.test6{ width:10px }'; |
selectors: ['test1', 'test2'], |
||||
var result = [ |
style: { color: 'red' } |
||||
{ |
}, |
||||
selectors: ['test1', 'test2'], |
{ |
||||
style: { color: 'red' } |
selectors: ['test3'], |
||||
}, |
style: { color: 'red' } |
||||
{ |
}, |
||||
selectors: ['test3'], |
{ |
||||
style: { color: 'red' } |
selectors: ['test4'], |
||||
}, |
style: { width: '10px' } |
||||
{ |
}, |
||||
selectors: ['test4'], |
{ |
||||
style: { width: '10px' } |
selectors: ['test5', 'test6'], |
||||
}, |
style: { width: '10px' } |
||||
{ |
} |
||||
selectors: ['test5', 'test6'], |
]; |
||||
style: { width: '10px' } |
expect(obj.parse(str)).toEqual(result); |
||||
} |
}); |
||||
]; |
|
||||
expect(obj.parse(str)).toEqual(result); |
test('Parse rule with state', () => { |
||||
}); |
var str = ' .test1.test2:hover{ color:red }'; |
||||
|
var result = { |
||||
test('Parse rule with state', () => { |
selectors: ['test1', 'test2'], |
||||
var str = ' .test1.test2:hover{ color:red }'; |
style: { color: 'red' }, |
||||
var result = { |
state: 'hover' |
||||
selectors: ['test1', 'test2'], |
}; |
||||
style: { color: 'red' }, |
expect(obj.parse(str)).toEqual([result]); |
||||
state: 'hover' |
}); |
||||
}; |
|
||||
expect(obj.parse(str)).toEqual([result]); |
test('Parse rule with state like after', () => { |
||||
}); |
var str = ' .test1.test2::after{ color:red }'; |
||||
|
var result = { |
||||
test('Parse rule with state like after', () => { |
selectors: ['test1', 'test2'], |
||||
var str = ' .test1.test2::after{ color:red }'; |
style: { color: 'red' }, |
||||
var result = { |
state: ':after' |
||||
selectors: ['test1', 'test2'], |
}; |
||||
style: { color: 'red' }, |
expect(obj.parse(str)).toEqual([result]); |
||||
state: ':after' |
}); |
||||
}; |
|
||||
expect(obj.parse(str)).toEqual([result]); |
test('Parse rule with nth-x state', () => { |
||||
}); |
var str = ' .test1.test2:nth-of-type(2n){ color:red }'; |
||||
|
var result = { |
||||
test('Parse rule with nth-x state', () => { |
selectors: ['test1', 'test2'], |
||||
var str = ' .test1.test2:nth-of-type(2n){ color:red }'; |
style: { color: 'red' }, |
||||
var result = { |
state: 'nth-of-type(2n)' |
||||
selectors: ['test1', 'test2'], |
}; |
||||
style: { color: 'red' }, |
expect(obj.parse(str)).toEqual([result]); |
||||
state: 'nth-of-type(2n)' |
}); |
||||
}; |
|
||||
expect(obj.parse(str)).toEqual([result]); |
// Phantom don't find 'node.conditionText' so will skip it
|
||||
}); |
test('Parse rule inside media query', () => { |
||||
|
var str = |
||||
// Phantom don't find 'node.conditionText' so will skip it
|
'@media only screen and (max-width: 992px){ .test1.test2:hover{ color:red }}'; |
||||
test('Parse rule inside media query', () => { |
var result = { |
||||
var str = |
atRuleType: 'media', |
||||
'@media only screen and (max-width: 992px){ .test1.test2:hover{ color:red }}'; |
selectors: ['test1', 'test2'], |
||||
var result = { |
style: { color: 'red' }, |
||||
atRuleType: 'media', |
state: 'hover', |
||||
selectors: ['test1', 'test2'], |
mediaText: 'only screen and (max-width: 992px)' |
||||
style: { color: 'red' }, |
}; |
||||
state: 'hover', |
expect(obj.parse(str)).toEqual([result]); |
||||
mediaText: 'only screen and (max-width: 992px)' |
}); |
||||
}; |
|
||||
expect(obj.parse(str)).toEqual([result]); |
// Phantom don't find 'node.conditionText' so will skip it
|
||||
}); |
test('Parse rule inside media query', () => { |
||||
|
var str = '@media (max-width: 992px){ .test1.test2:hover{ color:red }}'; |
||||
// Phantom don't find 'node.conditionText' so will skip it
|
var result = { |
||||
test('Parse rule inside media query', () => { |
atRuleType: 'media', |
||||
var str = '@media (max-width: 992px){ .test1.test2:hover{ color:red }}'; |
selectors: ['test1', 'test2'], |
||||
var result = { |
style: { color: 'red' }, |
||||
atRuleType: 'media', |
state: 'hover', |
||||
selectors: ['test1', 'test2'], |
mediaText: '(max-width: 992px)' |
||||
style: { color: 'red' }, |
}; |
||||
state: 'hover', |
expect(obj.parse(str)).toEqual([result]); |
||||
mediaText: '(max-width: 992px)' |
}); |
||||
}; |
|
||||
expect(obj.parse(str)).toEqual([result]); |
// Phantom doesn't find 'node.conditionText' so will skip it
|
||||
}); |
test('Parse rules inside media queries', () => { |
||||
|
var str = |
||||
// Phantom doesn't find 'node.conditionText' so will skip it
|
'.test1:hover{ color:white }@media (max-width: 992px){ .test1.test2:hover{ color:red } .test2{ color: blue }}'; |
||||
test('Parse rules inside media queries', () => { |
var result = [ |
||||
var str = |
{ |
||||
'.test1:hover{ color:white }@media (max-width: 992px){ .test1.test2:hover{ color:red } .test2{ color: blue }}'; |
selectors: ['test1'], |
||||
var result = [ |
style: { color: 'white' }, |
||||
{ |
state: 'hover' |
||||
selectors: ['test1'], |
}, |
||||
style: { color: 'white' }, |
{ |
||||
state: 'hover' |
selectors: ['test1', 'test2'], |
||||
}, |
style: { color: 'red' }, |
||||
{ |
state: 'hover', |
||||
selectors: ['test1', 'test2'], |
atRuleType: 'media', |
||||
style: { color: 'red' }, |
mediaText: '(max-width: 992px)' |
||||
state: 'hover', |
}, |
||||
atRuleType: 'media', |
{ |
||||
mediaText: '(max-width: 992px)' |
selectors: ['test2'], |
||||
}, |
style: { color: 'blue' }, |
||||
{ |
atRuleType: 'media', |
||||
selectors: ['test2'], |
mediaText: '(max-width: 992px)' |
||||
style: { color: 'blue' }, |
} |
||||
atRuleType: 'media', |
]; |
||||
mediaText: '(max-width: 992px)' |
expect(obj.parse(str)).toEqual(result); |
||||
} |
}); |
||||
]; |
|
||||
expect(obj.parse(str)).toEqual(result); |
test('Parse rules with not class-based selectors', () => { |
||||
}); |
var str = ' .class1 .class2, div > .class3 { color:red }'; |
||||
|
var result = { |
||||
test('Parse rules with not class-based selectors', () => { |
selectors: [], |
||||
var str = ' .class1 .class2, div > .class3 { color:red }'; |
selectorsAdd: '.class1 .class2, div > .class3', |
||||
var result = { |
style: { color: 'red' } |
||||
selectors: [], |
}; |
||||
selectorsAdd: '.class1 .class2, div > .class3', |
expect(obj.parse(str)).toEqual([result]); |
||||
style: { color: 'red' } |
}); |
||||
}; |
|
||||
expect(obj.parse(str)).toEqual([result]); |
test('Parse rule with mixed selectors', () => { |
||||
}); |
var str = |
||||
|
' .class1 .class2, .class3, div > .class4, .class5.class6 { color:red }'; |
||||
test('Parse rule with mixed selectors', () => { |
var result = [ |
||||
var str = |
{ |
||||
' .class1 .class2, .class3, div > .class4, .class5.class6 { color:red }'; |
selectors: ['class3'], |
||||
var result = [ |
style: { color: 'red' } |
||||
{ |
}, |
||||
selectors: ['class3'], |
{ |
||||
style: { color: 'red' } |
selectors: ['class5', 'class6'], |
||||
}, |
selectorsAdd: '.class1 .class2, div > .class4', |
||||
{ |
style: { color: 'red' } |
||||
selectors: ['class5', 'class6'], |
} |
||||
selectorsAdd: '.class1 .class2, div > .class4', |
]; |
||||
style: { color: 'red' } |
expect(obj.parse(str)).toEqual(result); |
||||
} |
}); |
||||
]; |
|
||||
expect(obj.parse(str)).toEqual(result); |
test('Parse rule with important styles', () => { |
||||
}); |
var str = |
||||
|
' .test1 {color:red !important; width: 100px; height: 10px !important}'; |
||||
test('Parse rule with important styles', () => { |
var result = { |
||||
var str = |
selectors: ['test1'], |
||||
' .test1 {color:red !important; width: 100px; height: 10px !important}'; |
style: { |
||||
var result = { |
color: 'red !important', |
||||
selectors: ['test1'], |
height: '10px !important', |
||||
style: { |
width: '100px' |
||||
color: 'red !important', |
} |
||||
height: '10px !important', |
}; |
||||
width: '100px' |
expect(obj.parse(str)).toEqual([result]); |
||||
} |
}); |
||||
}; |
|
||||
expect(obj.parse(str)).toEqual([result]); |
test('Parse rule with CSS variables', () => { |
||||
}); |
var str = `:root {
|
||||
|
--some-color: red; |
||||
test('Parse rule with CSS variables', () => { |
--some-width: 55px; |
||||
var str = `:root {
|
}`;
|
||||
--some-color: red; |
var result = { |
||||
--some-width: 55px; |
selectors: [], |
||||
}`;
|
selectorsAdd: ':root', |
||||
var result = { |
style: { |
||||
selectors: [], |
'--some-color': 'red', |
||||
selectorsAdd: ':root', |
'--some-width': '55px' |
||||
style: { |
} |
||||
'--some-color': 'red', |
}; |
||||
'--some-width': '55px' |
expect(obj.parse(str)).toEqual([result]); |
||||
} |
}); |
||||
}; |
|
||||
expect(obj.parse(str)).toEqual([result]); |
// Can't test keyframes https://github.com/NV/CSSOM/issues/95
|
||||
}); |
test.skip('Parse rule with a keyframes at-rule', () => { |
||||
|
var str = `@keyframes {
|
||||
// Can't test keyframes https://github.com/NV/CSSOM/issues/95
|
from {opacity: 0;} |
||||
test.skip('Parse rule with a keyframes at-rule', () => { |
to {opacity: 1;} |
||||
var str = `@keyframes {
|
}`;
|
||||
from {opacity: 0;} |
var result = [ |
||||
to {opacity: 1;} |
{ |
||||
}`;
|
selectors: [], |
||||
var result = [ |
atRuleType: 'keyframes', |
||||
{ |
selectorsAdd: 'from', |
||||
selectors: [], |
style: { opacity: '0' } |
||||
atRuleType: 'keyframes', |
}, |
||||
selectorsAdd: 'from', |
{ |
||||
style: { opacity: '0' } |
selectors: [], |
||||
}, |
atRuleType: 'keyframes', |
||||
{ |
selectorsAdd: 'to', |
||||
selectors: [], |
style: { opacity: '1' } |
||||
atRuleType: 'keyframes', |
} |
||||
selectorsAdd: 'to', |
]; |
||||
style: { opacity: '1' } |
expect(obj.parse(str)).toEqual(result); |
||||
} |
}); |
||||
]; |
|
||||
expect(obj.parse(str)).toEqual(result); |
test('Parse rule with font-face at-rule', () => { |
||||
}); |
var str = `@font-face {
|
||||
|
font-family: "Open Sans"; |
||||
test('Parse rule with font-face at-rule', () => { |
}`;
|
||||
var str = `@font-face {
|
var result = { |
||||
font-family: "Open Sans"; |
selectors: [], |
||||
}`;
|
selectorsAdd: '', |
||||
var result = { |
atRuleType: 'font-face', |
||||
selectors: [], |
singleAtRule: 1, |
||||
selectorsAdd: '', |
style: { 'font-family': '"Open Sans"' } |
||||
atRuleType: 'font-face', |
}; |
||||
singleAtRule: 1, |
expect(obj.parse(str)).toEqual([result]); |
||||
style: { 'font-family': '"Open Sans"' } |
}); |
||||
}; |
|
||||
expect(obj.parse(str)).toEqual([result]); |
test('Parses multiple font-face at-rules', () => { |
||||
}); |
const str = ` |
||||
|
@font-face { |
||||
test('Parses multiple font-face at-rules', () => { |
font-family: "Open Sans"; |
||||
const str = ` |
} |
||||
@font-face { |
@font-face { |
||||
font-family: "Open Sans"; |
font-family: 'Glyphicons Halflings'; |
||||
} |
src:url(https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/fonts/glyphicons-halflings-regular.eot)
|
||||
@font-face { |
}`;
|
||||
font-family: 'Glyphicons Halflings'; |
const result = [ |
||||
src:url(https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/fonts/glyphicons-halflings-regular.eot)
|
{ |
||||
}`;
|
selectors: [], |
||||
const result = [ |
selectorsAdd: '', |
||||
{ |
style: { 'font-family': '"Open Sans"' }, |
||||
selectors: [], |
singleAtRule: 1, |
||||
selectorsAdd: '', |
atRuleType: 'font-face' |
||||
style: { 'font-family': '"Open Sans"' }, |
}, |
||||
singleAtRule: 1, |
{ |
||||
atRuleType: 'font-face' |
selectors: [], |
||||
}, |
selectorsAdd: '', |
||||
{ |
style: { |
||||
selectors: [], |
'font-family': "'Glyphicons Halflings'", |
||||
selectorsAdd: '', |
|
||||
style: { |
|
||||
'font-family': "'Glyphicons Halflings'", |
|
||||
src: |
|
||||
'url(https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/fonts/glyphicons-halflings-regular.eot)' |
|
||||
}, |
|
||||
singleAtRule: 1, |
|
||||
atRuleType: 'font-face' |
|
||||
} |
|
||||
]; |
|
||||
const parsed = obj.parse(str); |
|
||||
expect(parsed).toEqual(result); |
|
||||
}); |
|
||||
|
|
||||
test('Parse ID rule', () => { |
|
||||
var str = `#test { color: red }`; |
|
||||
var result = { |
|
||||
selectors: ['#test'], |
|
||||
style: { color: 'red' } |
|
||||
}; |
|
||||
expect(obj.parse(str)).toEqual([result]); |
|
||||
}); |
|
||||
|
|
||||
test('Parse ID rule with state', () => { |
|
||||
var str = `#test:hover { color: red }`; |
|
||||
var result = { |
|
||||
selectors: ['#test'], |
|
||||
state: 'hover', |
|
||||
style: { color: 'red' } |
|
||||
}; |
|
||||
expect(obj.parse(str)).toEqual([result]); |
|
||||
}); |
|
||||
|
|
||||
test('Avoid composed selectors with ID', () => { |
|
||||
var str = `#test.class, #test.class:hover, .class { color: red }`; |
|
||||
var result = { |
|
||||
selectors: ['class'], |
|
||||
selectorsAdd: '#test.class, #test.class:hover', |
|
||||
style: { color: 'red' } |
|
||||
}; |
|
||||
expect(obj.parse(str)).toEqual([result]); |
|
||||
}); |
|
||||
|
|
||||
test('Parse CSS with custom parser', () => { |
|
||||
var str = '.test1 { color:red }'; |
|
||||
var result = { |
|
||||
selectors: ['test1'], |
|
||||
style: { color: 'blue' } |
|
||||
}; |
|
||||
obj = new ParserCss({ |
|
||||
parserCss: () => [result] |
|
||||
}); |
|
||||
expect(obj.parse(str)).toEqual([result]); |
|
||||
}); |
|
||||
|
|
||||
test.skip('Parse CSS with custom async parser', async () => { |
|
||||
var str = '.test1 { color:red }'; |
|
||||
var result = { |
|
||||
selectors: ['test1'], |
|
||||
style: { color: 'blue' } |
|
||||
}; |
|
||||
obj = new ParserCss({ |
|
||||
parserCss: async () => [result] |
|
||||
}); |
|
||||
const cssResult = await obj.parse(str); |
|
||||
expect(cssResult).toEqual([result]); |
|
||||
}); |
|
||||
|
|
||||
test('Check node with font-face rule', () => { |
|
||||
const style = { |
|
||||
'font-family': '"Glyphicons Halflings"', |
|
||||
src: |
src: |
||||
'url("https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/fonts/glyphicons-halflings-regular.eot")' |
'url(https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/fonts/glyphicons-halflings-regular.eot)' |
||||
}; |
}, |
||||
expect( |
singleAtRule: 1, |
||||
obj.checkNode({ |
atRuleType: 'font-face' |
||||
atRule: 'font-face', |
} |
||||
selectors: '', |
]; |
||||
style: style |
const parsed = obj.parse(str); |
||||
}) |
expect(parsed).toEqual(result); |
||||
).toEqual([ |
}); |
||||
{ |
|
||||
style: style, |
test('Parse ID rule', () => { |
||||
atRuleType: 'font-face', |
var str = `#test { color: red }`; |
||||
singleAtRule: 1, |
var result = { |
||||
selectors: [] |
selectors: ['#test'], |
||||
} |
style: { color: 'red' } |
||||
]); |
}; |
||||
}); |
expect(obj.parse(str)).toEqual([result]); |
||||
|
}); |
||||
test('Check node with keyframes rule', () => { |
|
||||
const style = { opacity: 0 }; |
test('Parse ID rule with state', () => { |
||||
expect( |
var str = `#test:hover { color: red }`; |
||||
obj.checkNode({ |
var result = { |
||||
atRule: 'keyframes', |
selectors: ['#test'], |
||||
params: 'name', |
state: 'hover', |
||||
selectors: 'from', |
style: { color: 'red' } |
||||
style: style |
}; |
||||
}) |
expect(obj.parse(str)).toEqual([result]); |
||||
).toEqual([ |
}); |
||||
{ |
|
||||
selectors: [], |
test('Avoid composed selectors with ID', () => { |
||||
atRuleType: 'keyframes', |
var str = `#test.class, #test.class:hover, .class { color: red }`; |
||||
selectorsAdd: 'from', |
var result = { |
||||
style: style, |
selectors: ['class'], |
||||
mediaText: 'name' |
selectorsAdd: '#test.class, #test.class:hover', |
||||
} |
style: { color: 'red' } |
||||
]); |
}; |
||||
}); |
expect(obj.parse(str)).toEqual([result]); |
||||
|
}); |
||||
test('Check node with media rule', () => { |
|
||||
const style = { color: 'blue' }; |
test('Parse CSS with custom parser', () => { |
||||
expect( |
var str = '.test1 { color:red }'; |
||||
obj.checkNode({ |
var result = { |
||||
atRule: 'media', |
selectors: ['test1'], |
||||
params: 'screen and (min-width: 480px)', |
style: { color: 'blue' } |
||||
selectors: '.class-test.class2:hover, div > span ', |
}; |
||||
style |
obj = new ParserCss({ |
||||
}) |
parserCss: () => [result] |
||||
).toEqual([ |
|
||||
{ |
|
||||
atRuleType: 'media', |
|
||||
selectors: ['class-test', 'class2'], |
|
||||
selectorsAdd: 'div > span', |
|
||||
style: style, |
|
||||
state: 'hover', |
|
||||
mediaText: 'screen and (min-width: 480px)' |
|
||||
} |
|
||||
]); |
|
||||
}); |
|
||||
|
|
||||
test('Check node with a rule containing id', () => { |
|
||||
const style = { border: '1px solid black !important' }; |
|
||||
expect( |
|
||||
obj.checkNode({ |
|
||||
selectors: '#main:hover', |
|
||||
style |
|
||||
}) |
|
||||
).toEqual([ |
|
||||
{ |
|
||||
selectors: ['#main'], |
|
||||
state: 'hover', |
|
||||
style: style |
|
||||
} |
|
||||
]); |
|
||||
}); |
|
||||
|
|
||||
test('Check node with multiple class selectors', () => { |
|
||||
const style = { |
|
||||
border: '1px solid black !important', |
|
||||
'background-repeat': 'repeat-y, no-repeat' |
|
||||
}; |
|
||||
expect( |
|
||||
obj.checkNode({ |
|
||||
selectors: |
|
||||
'.class1, .class1.class2:hover, div > .test:hover, span.test2', |
|
||||
style |
|
||||
}) |
|
||||
).toEqual([ |
|
||||
{ |
|
||||
selectors: ['class1'], |
|
||||
style: style |
|
||||
}, |
|
||||
{ |
|
||||
selectors: ['class1', 'class2'], |
|
||||
state: 'hover', |
|
||||
selectorsAdd: 'div > .test:hover, span.test2', |
|
||||
style: style |
|
||||
} |
|
||||
]); |
|
||||
}); |
|
||||
|
|
||||
test('Check node with a rule containing CSS variables', () => { |
|
||||
const style = { |
|
||||
'--some-color': 'red', |
|
||||
'--some-width': '55px' |
|
||||
}; |
|
||||
expect( |
|
||||
obj.checkNode({ |
|
||||
selectors: ':root', |
|
||||
style |
|
||||
}) |
|
||||
).toEqual([ |
|
||||
{ |
|
||||
selectors: [], |
|
||||
selectorsAdd: ':root', |
|
||||
style: style |
|
||||
} |
|
||||
]); |
|
||||
}); |
|
||||
}); |
}); |
||||
} |
expect(obj.parse(str)).toEqual([result]); |
||||
}; |
}); |
||||
|
|
||||
|
test.skip('Parse CSS with custom async parser', async () => { |
||||
|
var str = '.test1 { color:red }'; |
||||
|
var result = { |
||||
|
selectors: ['test1'], |
||||
|
style: { color: 'blue' } |
||||
|
}; |
||||
|
obj = new ParserCss({ |
||||
|
parserCss: async () => [result] |
||||
|
}); |
||||
|
const cssResult = await obj.parse(str); |
||||
|
expect(cssResult).toEqual([result]); |
||||
|
}); |
||||
|
|
||||
|
test('Check node with font-face rule', () => { |
||||
|
const style = { |
||||
|
'font-family': '"Glyphicons Halflings"', |
||||
|
src: |
||||
|
'url("https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/fonts/glyphicons-halflings-regular.eot")' |
||||
|
}; |
||||
|
expect( |
||||
|
obj.checkNode({ |
||||
|
atRule: 'font-face', |
||||
|
selectors: '', |
||||
|
style: style |
||||
|
}) |
||||
|
).toEqual([ |
||||
|
{ |
||||
|
style: style, |
||||
|
atRuleType: 'font-face', |
||||
|
singleAtRule: 1, |
||||
|
selectors: [] |
||||
|
} |
||||
|
]); |
||||
|
}); |
||||
|
|
||||
|
test('Check node with keyframes rule', () => { |
||||
|
const style = { opacity: 0 }; |
||||
|
expect( |
||||
|
obj.checkNode({ |
||||
|
atRule: 'keyframes', |
||||
|
params: 'name', |
||||
|
selectors: 'from', |
||||
|
style: style |
||||
|
}) |
||||
|
).toEqual([ |
||||
|
{ |
||||
|
selectors: [], |
||||
|
atRuleType: 'keyframes', |
||||
|
selectorsAdd: 'from', |
||||
|
style: style, |
||||
|
mediaText: 'name' |
||||
|
} |
||||
|
]); |
||||
|
}); |
||||
|
|
||||
|
test('Check node with media rule', () => { |
||||
|
const style = { color: 'blue' }; |
||||
|
expect( |
||||
|
obj.checkNode({ |
||||
|
atRule: 'media', |
||||
|
params: 'screen and (min-width: 480px)', |
||||
|
selectors: '.class-test.class2:hover, div > span ', |
||||
|
style |
||||
|
}) |
||||
|
).toEqual([ |
||||
|
{ |
||||
|
atRuleType: 'media', |
||||
|
selectors: ['class-test', 'class2'], |
||||
|
selectorsAdd: 'div > span', |
||||
|
style: style, |
||||
|
state: 'hover', |
||||
|
mediaText: 'screen and (min-width: 480px)' |
||||
|
} |
||||
|
]); |
||||
|
}); |
||||
|
|
||||
|
test('Check node with a rule containing id', () => { |
||||
|
const style = { border: '1px solid black !important' }; |
||||
|
expect( |
||||
|
obj.checkNode({ |
||||
|
selectors: '#main:hover', |
||||
|
style |
||||
|
}) |
||||
|
).toEqual([ |
||||
|
{ |
||||
|
selectors: ['#main'], |
||||
|
state: 'hover', |
||||
|
style: style |
||||
|
} |
||||
|
]); |
||||
|
}); |
||||
|
|
||||
|
test('Check node with multiple class selectors', () => { |
||||
|
const style = { |
||||
|
border: '1px solid black !important', |
||||
|
'background-repeat': 'repeat-y, no-repeat' |
||||
|
}; |
||||
|
expect( |
||||
|
obj.checkNode({ |
||||
|
selectors: |
||||
|
'.class1, .class1.class2:hover, div > .test:hover, span.test2', |
||||
|
style |
||||
|
}) |
||||
|
).toEqual([ |
||||
|
{ |
||||
|
selectors: ['class1'], |
||||
|
style: style |
||||
|
}, |
||||
|
{ |
||||
|
selectors: ['class1', 'class2'], |
||||
|
state: 'hover', |
||||
|
selectorsAdd: 'div > .test:hover, span.test2', |
||||
|
style: style |
||||
|
} |
||||
|
]); |
||||
|
}); |
||||
|
|
||||
|
test('Check node with a rule containing CSS variables', () => { |
||||
|
const style = { |
||||
|
'--some-color': 'red', |
||||
|
'--some-width': '55px' |
||||
|
}; |
||||
|
expect( |
||||
|
obj.checkNode({ |
||||
|
selectors: ':root', |
||||
|
style |
||||
|
}) |
||||
|
).toEqual([ |
||||
|
{ |
||||
|
selectors: [], |
||||
|
selectorsAdd: ':root', |
||||
|
style: style |
||||
|
} |
||||
|
]); |
||||
|
}); |
||||
|
}); |
||||
|
|||||
@ -1,134 +1,130 @@ |
|||||
import Selectors from 'selector_manager/model/Selectors'; |
import Selectors from 'selector_manager/model/Selectors'; |
||||
import ClassTagsView from 'selector_manager/view/ClassTagsView'; |
import ClassTagsView from 'selector_manager/view/ClassTagsView'; |
||||
|
|
||||
module.exports = { |
describe('E2E tests', () => { |
||||
run() { |
var fixtures; |
||||
describe('E2E tests', () => { |
var components; |
||||
var fixtures; |
var tagEl; |
||||
var components; |
var gjs; |
||||
var tagEl; |
|
||||
var gjs; |
|
||||
|
|
||||
var instClassTagViewer = (gjs, fixtures) => { |
var instClassTagViewer = (gjs, fixtures) => { |
||||
var tagEl; |
var tagEl; |
||||
var clm = gjs.editor.get('SelectorManager'); |
var clm = gjs.editor.get('SelectorManager'); |
||||
|
|
||||
if (clm) { |
if (clm) { |
||||
tagEl = new ClassTagsView({ |
tagEl = new ClassTagsView({ |
||||
collection: new Selectors([]), |
collection: new Selectors([]), |
||||
config: { em: gjs.editor } |
config: { em: gjs.editor } |
||||
}).render(); |
}).render(); |
||||
fixtures.appendChild(tagEl.el); |
fixtures.appendChild(tagEl.el); |
||||
} |
} |
||||
|
|
||||
return tagEl; |
return tagEl; |
||||
}; |
}; |
||||
/* |
/* |
||||
before(function () { |
before(function () { |
||||
this.$fixtures = $("#fixtures"); |
this.$fixtures = $("#fixtures"); |
||||
this.$fixture = $('<div id="SelectorManager-fixture"></div>'); |
this.$fixture = $('<div id="SelectorManager-fixture"></div>'); |
||||
}); |
}); |
||||
*/ |
*/ |
||||
beforeEach(() => { |
beforeEach(() => { |
||||
document.body.innerHTML = |
document.body.innerHTML = |
||||
'<div id="fixtures"><div id="SelectorManager-fixture"></div></div>'; |
'<div id="fixtures"><div id="SelectorManager-fixture"></div></div>'; |
||||
fixtures = document.body.firstChild; |
fixtures = document.body.firstChild; |
||||
gjs = grapesjs.init({ |
gjs = grapesjs.init({ |
||||
stylePrefix: '', |
stylePrefix: '', |
||||
storageManager: { autoload: 0, type: 0 }, |
storageManager: { autoload: 0, type: 0 }, |
||||
assetManager: { |
assetManager: { |
||||
storageType: 'none' |
storageType: 'none' |
||||
}, |
}, |
||||
container: '#SelectorManager-fixture' |
container: '#SelectorManager-fixture' |
||||
}); |
}); |
||||
}); |
}); |
||||
|
|
||||
describe('Interaction with Components', () => { |
describe('Interaction with Components', () => { |
||||
beforeEach(() => { |
beforeEach(() => { |
||||
components = gjs.getComponents(); |
components = gjs.getComponents(); |
||||
tagEl = instClassTagViewer(gjs, fixtures); |
tagEl = instClassTagViewer(gjs, fixtures); |
||||
}); |
}); |
||||
|
|
||||
test('Assign correctly new class to component', done => { |
test('Assign correctly new class to component', done => { |
||||
var model = components.add({}); |
var model = components.add({}); |
||||
expect(model.get('classes').length).toEqual(0); |
expect(model.get('classes').length).toEqual(0); |
||||
gjs.select(model); |
gjs.select(model); |
||||
setTimeout(() => { |
setTimeout(() => { |
||||
tagEl.addNewTag('test'); |
tagEl.addNewTag('test'); |
||||
expect(model.get('classes').length).toEqual(1); |
expect(model.get('classes').length).toEqual(1); |
||||
expect( |
expect( |
||||
model |
model |
||||
.get('classes') |
.get('classes') |
||||
.at(0) |
.at(0) |
||||
.get('name') |
.get('name') |
||||
).toEqual('test'); |
).toEqual('test'); |
||||
done(); |
done(); |
||||
}); |
}); |
||||
}); |
}); |
||||
|
|
||||
test('Classes from components are correctly imported inside main container', () => { |
test('Classes from components are correctly imported inside main container', () => { |
||||
var model = components.add([ |
var model = components.add([ |
||||
{ classes: ['test11', 'test12', 'test13'] }, |
{ classes: ['test11', 'test12', 'test13'] }, |
||||
{ classes: ['test11', 'test22', 'test22'] } |
{ classes: ['test11', 'test22', 'test22'] } |
||||
]); |
]); |
||||
expect(gjs.editor.get('SelectorManager').getAll().length).toEqual(4); |
expect(gjs.editor.get('SelectorManager').getAll().length).toEqual(4); |
||||
}); |
}); |
||||
|
|
||||
test('Class imported into component is the same model from main container', () => { |
test('Class imported into component is the same model from main container', () => { |
||||
var model = components.add({ classes: ['test1'] }); |
var model = components.add({ classes: ['test1'] }); |
||||
var clModel = model.get('classes').at(0); |
var clModel = model.get('classes').at(0); |
||||
var clModel2 = gjs.editor |
var clModel2 = gjs.editor |
||||
.get('SelectorManager') |
.get('SelectorManager') |
||||
.getAll() |
.getAll() |
||||
.at(0); |
.at(0); |
||||
expect(clModel).toEqual(clModel2); |
expect(clModel).toEqual(clModel2); |
||||
}); |
}); |
||||
|
|
||||
test('Can assign only one time the same class on selected component and the class viewer', done => { |
test('Can assign only one time the same class on selected component and the class viewer', done => { |
||||
var model = components.add({}); |
var model = components.add({}); |
||||
gjs.select(model); |
gjs.select(model); |
||||
setTimeout(() => { |
setTimeout(() => { |
||||
tagEl.addNewTag('test'); |
tagEl.addNewTag('test'); |
||||
tagEl.addNewTag('test'); |
tagEl.addNewTag('test'); |
||||
expect(model.getSelectors().length).toEqual(1); |
expect(model.getSelectors().length).toEqual(1); |
||||
expect( |
expect( |
||||
model |
model |
||||
.getSelectors() |
.getSelectors() |
||||
.at(0) |
.at(0) |
||||
.get('name') |
.get('name') |
||||
).toEqual('test'); |
).toEqual('test'); |
||||
expect(tagEl.collection.length).toEqual(1); |
expect(tagEl.collection.length).toEqual(1); |
||||
expect(tagEl.collection.at(0).get('name')).toEqual('test'); |
expect(tagEl.collection.at(0).get('name')).toEqual('test'); |
||||
done(); |
done(); |
||||
}); |
}); |
||||
}); |
}); |
||||
|
|
||||
test('Removing from container removes also from selected component', () => { |
test('Removing from container removes also from selected component', () => { |
||||
var model = components.add({}); |
var model = components.add({}); |
||||
gjs.editor.setSelected(model); |
gjs.editor.setSelected(model); |
||||
tagEl.addNewTag('test'); |
tagEl.addNewTag('test'); |
||||
tagEl |
tagEl |
||||
.getClasses() |
.getClasses() |
||||
.find('.tag #close') |
.find('.tag #close') |
||||
.trigger('click'); |
.trigger('click'); |
||||
setTimeout(() => expect(model.get('classes').length).toEqual(0)); |
setTimeout(() => expect(model.get('classes').length).toEqual(0)); |
||||
}); |
}); |
||||
|
|
||||
test('Trigger correctly event on target with new class add', done => { |
test('Trigger correctly event on target with new class add', done => { |
||||
var spy = sinon.spy(); |
var spy = sinon.spy(); |
||||
var model = components.add({}); |
var model = components.add({}); |
||||
gjs.select(model); |
gjs.select(model); |
||||
setTimeout(() => { |
setTimeout(() => { |
||||
tagEl.addNewTag('test'); |
tagEl.addNewTag('test'); |
||||
gjs.editor.on('component:update:classes', spy); |
gjs.editor.on('component:update:classes', spy); |
||||
tagEl.addNewTag('test'); |
tagEl.addNewTag('test'); |
||||
expect(spy.called).toEqual(false); |
expect(spy.called).toEqual(false); |
||||
tagEl.addNewTag('test2'); |
tagEl.addNewTag('test2'); |
||||
expect(spy.called).toEqual(true); |
expect(spy.called).toEqual(true); |
||||
done(); |
done(); |
||||
}); |
|
||||
}); |
|
||||
}); |
}); |
||||
}); |
}); |
||||
} |
}); |
||||
}; |
}); |
||||
|
|||||
@ -1,68 +1,64 @@ |
|||||
import Selector from 'selector_manager/model/Selector'; |
import Selector from 'selector_manager/model/Selector'; |
||||
import Selectors from 'selector_manager/model/Selectors'; |
import Selectors from 'selector_manager/model/Selectors'; |
||||
|
|
||||
module.exports = { |
describe('Selector', () => { |
||||
run() { |
var obj; |
||||
describe('Selector', () => { |
|
||||
var obj; |
|
||||
|
|
||||
beforeEach(() => { |
beforeEach(() => { |
||||
obj = new Selector(); |
obj = new Selector(); |
||||
}); |
}); |
||||
|
|
||||
afterEach(() => { |
afterEach(() => { |
||||
obj = null; |
obj = null; |
||||
}); |
}); |
||||
|
|
||||
test('Has name property', () => { |
test('Has name property', () => { |
||||
expect(obj.has('name')).toEqual(true); |
expect(obj.has('name')).toEqual(true); |
||||
}); |
}); |
||||
|
|
||||
test('Has label property', () => { |
test('Has label property', () => { |
||||
expect(obj.has('label')).toEqual(true); |
expect(obj.has('label')).toEqual(true); |
||||
}); |
}); |
||||
|
|
||||
test('Has active property', () => { |
test('Has active property', () => { |
||||
expect(obj.has('active')).toEqual(true); |
expect(obj.has('active')).toEqual(true); |
||||
}); |
}); |
||||
|
|
||||
test('escapeName test', () => { |
test('escapeName test', () => { |
||||
expect(Selector.escapeName('@Te sT*')).toEqual('-Te-sT-'); |
expect(Selector.escapeName('@Te sT*')).toEqual('-Te-sT-'); |
||||
}); |
}); |
||||
|
|
||||
test('Name is corrected at instantiation', () => { |
test('Name is corrected at instantiation', () => { |
||||
obj = new Selector({ name: '@Te sT*' }); |
obj = new Selector({ name: '@Te sT*' }); |
||||
expect(obj.get('name')).toEqual('-Te-sT-'); |
expect(obj.get('name')).toEqual('-Te-sT-'); |
||||
}); |
}); |
||||
}); |
}); |
||||
|
|
||||
describe('Selectors', () => { |
describe('Selectors', () => { |
||||
var obj; |
var obj; |
||||
|
|
||||
beforeEach(() => { |
beforeEach(() => { |
||||
obj = new Selectors(); |
obj = new Selectors(); |
||||
}); |
}); |
||||
|
|
||||
test('Creates collection item correctly', () => { |
test('Creates collection item correctly', () => { |
||||
var c = new Selectors(); |
var c = new Selectors(); |
||||
var m = c.add({}); |
var m = c.add({}); |
||||
expect(m instanceof Selector).toEqual(true); |
expect(m instanceof Selector).toEqual(true); |
||||
}); |
}); |
||||
|
|
||||
test('getFullString with single class', () => { |
test('getFullString with single class', () => { |
||||
obj.add({ name: 'test' }); |
obj.add({ name: 'test' }); |
||||
expect(obj.getFullString()).toEqual('.test'); |
expect(obj.getFullString()).toEqual('.test'); |
||||
}); |
}); |
||||
|
|
||||
test('getFullString with multiple classes', () => { |
test('getFullString with multiple classes', () => { |
||||
obj.add([{ name: 'test' }, { name: 'test2' }]); |
obj.add([{ name: 'test' }, { name: 'test2' }]); |
||||
expect(obj.getFullString()).toEqual('.test.test2'); |
expect(obj.getFullString()).toEqual('.test.test2'); |
||||
}); |
}); |
||||
|
|
||||
test('getFullString with mixed selectors', () => { |
test('getFullString with mixed selectors', () => { |
||||
obj.add([{ name: 'test' }, { name: 'test2', type: Selector.TYPE_ID }]); |
obj.add([{ name: 'test' }, { name: 'test2', type: Selector.TYPE_ID }]); |
||||
expect(obj.getFullString()).toEqual('.test#test2'); |
expect(obj.getFullString()).toEqual('.test#test2'); |
||||
}); |
}); |
||||
}); |
}); |
||||
} |
|
||||
}; |
|
||||
|
|||||
File diff suppressed because it is too large
@ -1,59 +1,55 @@ |
|||||
import LayerView from 'style_manager/view/LayerView'; |
import LayerView from 'style_manager/view/LayerView'; |
||||
import Layers from 'style_manager/model/Layers'; |
import Layers from 'style_manager/model/Layers'; |
||||
|
|
||||
module.exports = { |
describe('LayerView', () => { |
||||
run() { |
var component; |
||||
describe('LayerView', () => { |
var fixtures; |
||||
var component; |
var target; |
||||
var fixtures; |
var model; |
||||
var target; |
var view; |
||||
var model; |
|
||||
var view; |
beforeEach(() => { |
||||
|
var coll = new Layers(); |
||||
beforeEach(() => { |
model = coll.add({}); |
||||
var coll = new Layers(); |
view = new LayerView({ |
||||
model = coll.add({}); |
model |
||||
view = new LayerView({ |
|
||||
model |
|
||||
}); |
|
||||
document.body.innerHTML = '<div id="fixtures"></div>'; |
|
||||
fixtures = document.body.firstChild; |
|
||||
fixtures.appendChild(view.render().el); |
|
||||
}); |
|
||||
|
|
||||
afterAll(() => { |
|
||||
component = null; |
|
||||
view = null; |
|
||||
model = null; |
|
||||
}); |
|
||||
|
|
||||
test('Rendered correctly', () => { |
|
||||
var layer = view.el; |
|
||||
expect(fixtures.querySelector('.layer')).toBeTruthy(); |
|
||||
expect(layer.querySelector('#label')).toBeTruthy(); |
|
||||
expect(layer.querySelector('#close-layer')).toBeTruthy(); |
|
||||
expect(view.getPropertiesWrapper()).toBeTruthy(); |
|
||||
expect(view.getPreviewEl()).toBeTruthy(); |
|
||||
}); |
|
||||
|
|
||||
test('Is not active by default', () => { |
|
||||
expect(view.$el.hasClass('active')).toEqual(false); |
|
||||
}); |
|
||||
|
|
||||
test('Is possible to activate it', () => { |
|
||||
view.model.set('active', 1); |
|
||||
expect(view.$el.hasClass('active')).toEqual(true); |
|
||||
}); |
|
||||
|
|
||||
test('Is possible to activate it with active()', () => { |
|
||||
view.active(); |
|
||||
expect(view.$el.hasClass('active')).toEqual(true); |
|
||||
}); |
|
||||
|
|
||||
test('No preview', () => { |
|
||||
var style = view.el.querySelector('#preview').style; |
|
||||
expect(style.cssText).toBeFalsy(); |
|
||||
}); |
|
||||
}); |
}); |
||||
} |
document.body.innerHTML = '<div id="fixtures"></div>'; |
||||
}; |
fixtures = document.body.firstChild; |
||||
|
fixtures.appendChild(view.render().el); |
||||
|
}); |
||||
|
|
||||
|
afterAll(() => { |
||||
|
component = null; |
||||
|
view = null; |
||||
|
model = null; |
||||
|
}); |
||||
|
|
||||
|
test('Rendered correctly', () => { |
||||
|
var layer = view.el; |
||||
|
expect(fixtures.querySelector('.layer')).toBeTruthy(); |
||||
|
expect(layer.querySelector('#label')).toBeTruthy(); |
||||
|
expect(layer.querySelector('#close-layer')).toBeTruthy(); |
||||
|
expect(view.getPropertiesWrapper()).toBeTruthy(); |
||||
|
expect(view.getPreviewEl()).toBeTruthy(); |
||||
|
}); |
||||
|
|
||||
|
test('Is not active by default', () => { |
||||
|
expect(view.$el.hasClass('active')).toEqual(false); |
||||
|
}); |
||||
|
|
||||
|
test('Is possible to activate it', () => { |
||||
|
view.model.set('active', 1); |
||||
|
expect(view.$el.hasClass('active')).toEqual(true); |
||||
|
}); |
||||
|
|
||||
|
test('Is possible to activate it with active()', () => { |
||||
|
view.active(); |
||||
|
expect(view.$el.hasClass('active')).toEqual(true); |
||||
|
}); |
||||
|
|
||||
|
test('No preview', () => { |
||||
|
var style = view.el.querySelector('#preview').style; |
||||
|
expect(style.cssText).toBeFalsy(); |
||||
|
}); |
||||
|
}); |
||||
|
|||||
@ -1,91 +1,85 @@ |
|||||
import SectorView from 'style_manager/view/SectorView'; |
import SectorView from 'style_manager/view/SectorView'; |
||||
import Sector from 'style_manager/model/Sector'; |
import Sector from 'style_manager/model/Sector'; |
||||
|
|
||||
module.exports = { |
describe('SectorView', () => { |
||||
run() { |
var fixtures; |
||||
describe('SectorView', () => { |
var model; |
||||
var fixtures; |
var view; |
||||
var model; |
|
||||
var view; |
|
||||
|
|
||||
beforeEach(() => { |
beforeEach(() => { |
||||
model = new Sector(); |
model = new Sector(); |
||||
view = new SectorView({ |
view = new SectorView({ |
||||
model |
model |
||||
}); |
}); |
||||
document.body.innerHTML = '<div id="fixtures"></div>'; |
document.body.innerHTML = '<div id="fixtures"></div>'; |
||||
fixtures = document.body.querySelector('#fixtures'); |
fixtures = document.body.querySelector('#fixtures'); |
||||
fixtures.appendChild(view.render().el); |
fixtures.appendChild(view.render().el); |
||||
}); |
}); |
||||
|
|
||||
afterEach(() => { |
afterEach(() => { |
||||
view.remove(); |
view.remove(); |
||||
}); |
}); |
||||
|
|
||||
test('Rendered correctly', () => { |
test('Rendered correctly', () => { |
||||
var sector = view.el; |
var sector = view.el; |
||||
expect(sector.querySelector('.title')).toBeTruthy(); |
expect(sector.querySelector('.title')).toBeTruthy(); |
||||
var props = sector.querySelector('.properties'); |
var props = sector.querySelector('.properties'); |
||||
expect(props).toBeTruthy(); |
expect(props).toBeTruthy(); |
||||
expect(sector.classList.contains('open')).toEqual(true); |
expect(sector.classList.contains('open')).toEqual(true); |
||||
}); |
}); |
||||
|
|
||||
test('No properties', () => { |
test('No properties', () => { |
||||
var props = view.el.querySelector('.properties'); |
var props = view.el.querySelector('.properties'); |
||||
expect(props.innerHTML).toEqual(''); |
expect(props.innerHTML).toEqual(''); |
||||
}); |
}); |
||||
|
|
||||
test('Update on open', () => { |
test('Update on open', () => { |
||||
var sector = view.el; |
var sector = view.el; |
||||
var props = sector.querySelector('.properties'); |
var props = sector.querySelector('.properties'); |
||||
model.set('open', false); |
model.set('open', false); |
||||
expect(sector.classList.contains('open')).toEqual(false); |
expect(sector.classList.contains('open')).toEqual(false); |
||||
expect(props.style.display).toEqual('none'); |
expect(props.style.display).toEqual('none'); |
||||
}); |
}); |
||||
|
|
||||
test('Toggle on click', () => { |
test('Toggle on click', () => { |
||||
var sector = view.el; |
var sector = view.el; |
||||
view.$el.find('.title').click(); |
view.$el.find('.title').click(); |
||||
expect(sector.classList.contains('open')).toEqual(false); |
expect(sector.classList.contains('open')).toEqual(false); |
||||
}); |
}); |
||||
|
|
||||
describe('Init with options', () => { |
describe('Init with options', () => { |
||||
beforeEach(() => { |
beforeEach(() => { |
||||
model = new Sector({ |
model = new Sector({ |
||||
open: false, |
open: false, |
||||
name: 'TestName', |
name: 'TestName', |
||||
properties: [ |
properties: [ |
||||
{ type: 'integer' }, |
{ type: 'integer' }, |
||||
{ type: 'integer' }, |
{ type: 'integer' }, |
||||
{ type: 'integer' } |
{ type: 'integer' } |
||||
] |
] |
||||
}); |
}); |
||||
view = new SectorView({ |
view = new SectorView({ |
||||
model |
model |
||||
}); |
}); |
||||
//$fixture.empty().appendTo($fixtures);
|
//$fixture.empty().appendTo($fixtures);
|
||||
//$fixture.html(view.render().el);
|
//$fixture.html(view.render().el);
|
||||
document.body.innerHTML = '<div id="fixtures"></div>'; |
document.body.innerHTML = '<div id="fixtures"></div>'; |
||||
fixtures = document.body.querySelector('#fixtures'); |
fixtures = document.body.querySelector('#fixtures'); |
||||
fixtures.appendChild(view.render().el); |
fixtures.appendChild(view.render().el); |
||||
}); |
}); |
||||
|
|
||||
test('Rendered correctly', () => { |
test('Rendered correctly', () => { |
||||
var sector = view.el; |
var sector = view.el; |
||||
var props = sector.querySelector('.properties'); |
var props = sector.querySelector('.properties'); |
||||
expect(sector.querySelector('.title').innerHTML).toContain( |
expect(sector.querySelector('.title').innerHTML).toContain('TestName'); |
||||
'TestName' |
expect(props).toBeTruthy(); |
||||
); |
expect(sector.classList.contains('open')).toEqual(false); |
||||
expect(props).toBeTruthy(); |
expect(props.style.display).toEqual('none'); |
||||
expect(sector.classList.contains('open')).toEqual(false); |
}); |
||||
expect(props.style.display).toEqual('none'); |
|
||||
}); |
|
||||
|
|
||||
test('Has properties', () => { |
test('Has properties', () => { |
||||
var props = view.el.querySelector('.properties'); |
var props = view.el.querySelector('.properties'); |
||||
expect(props.children.length).toEqual(3); |
expect(props.children.length).toEqual(3); |
||||
}); |
|
||||
}); |
|
||||
}); |
}); |
||||
} |
}); |
||||
}; |
}); |
||||
|
|||||
@ -1,35 +1,31 @@ |
|||||
import SectorsView from 'style_manager/view/SectorsView'; |
import SectorsView from 'style_manager/view/SectorsView'; |
||||
import Sectors from 'style_manager/model/Sectors'; |
import Sectors from 'style_manager/model/Sectors'; |
||||
|
|
||||
module.exports = { |
describe('SectorsView', () => { |
||||
run() { |
var fixtures; |
||||
describe('SectorsView', () => { |
var model; |
||||
var fixtures; |
var view; |
||||
var model; |
|
||||
var view; |
|
||||
|
|
||||
beforeEach(() => { |
beforeEach(() => { |
||||
model = new Sectors([]); |
model = new Sectors([]); |
||||
view = new SectorsView({ |
view = new SectorsView({ |
||||
collection: model |
collection: model |
||||
}); |
}); |
||||
document.body.innerHTML = '<div id="fixtures"></div>'; |
document.body.innerHTML = '<div id="fixtures"></div>'; |
||||
fixtures = document.body.firstChild; |
fixtures = document.body.firstChild; |
||||
fixtures.appendChild(view.render().el); |
fixtures.appendChild(view.render().el); |
||||
}); |
}); |
||||
|
|
||||
afterEach(() => { |
afterEach(() => { |
||||
view.collection.reset(); |
view.collection.reset(); |
||||
}); |
}); |
||||
|
|
||||
test('Collection is empty', () => { |
test('Collection is empty', () => { |
||||
expect(view.el.innerHTML).toEqual(''); |
expect(view.el.innerHTML).toEqual(''); |
||||
}); |
}); |
||||
|
|
||||
test('Add new sectors', () => { |
test('Add new sectors', () => { |
||||
view.collection.add([{}, {}]); |
view.collection.add([{}, {}]); |
||||
expect(view.el.children.length).toEqual(2); |
expect(view.el.children.length).toEqual(2); |
||||
}); |
}); |
||||
}); |
}); |
||||
} |
|
||||
}; |
|
||||
|
|||||
@ -1,20 +0,0 @@ |
|||||
import TraitManager from 'trait_manager'; |
|
||||
import TraitsModel from './model/TraitsModel'; |
|
||||
import TraitsView from './view/TraitsView'; |
|
||||
|
|
||||
describe('TraitManager', () => { |
|
||||
describe('Main', () => { |
|
||||
var obj; |
|
||||
|
|
||||
beforeEach(() => { |
|
||||
obj = new TraitManager().init(); |
|
||||
}); |
|
||||
|
|
||||
afterEach(() => { |
|
||||
obj = null; |
|
||||
}); |
|
||||
}); |
|
||||
|
|
||||
TraitsModel.run(); |
|
||||
TraitsView.run(); |
|
||||
}); |
|
||||
@ -1,28 +1,24 @@ |
|||||
import Trait from 'trait_manager/model/Trait'; |
import Trait from 'trait_manager/model/Trait'; |
||||
import Component from 'dom_components/model/Component'; |
import Component from 'dom_components/model/Component'; |
||||
|
|
||||
module.exports = { |
describe('TraitModels', () => { |
||||
run() { |
var obj; |
||||
describe('TraitModels', () => { |
var target; |
||||
var obj; |
var modelName = 'title'; |
||||
var target; |
|
||||
var modelName = 'title'; |
|
||||
|
|
||||
beforeEach(() => { |
beforeEach(() => { |
||||
target = new Component(); |
target = new Component(); |
||||
obj = new Trait({ |
obj = new Trait({ |
||||
name: modelName, |
name: modelName, |
||||
target |
target |
||||
}); |
}); |
||||
}); |
}); |
||||
|
|
||||
afterEach(() => { |
afterEach(() => { |
||||
obj = null; |
obj = null; |
||||
}); |
}); |
||||
|
|
||||
test('Object exists', () => { |
test('Object exists', () => { |
||||
expect(Trait).toBeTruthy(); |
expect(Trait).toBeTruthy(); |
||||
}); |
}); |
||||
}); |
}); |
||||
} |
|
||||
}; |
|
||||
|
|||||
@ -1,438 +1,432 @@ |
|||||
define(function(require, exports, module) { |
// import Sorter from '../../../src/utils/Sorter.js'
|
||||
'use strict'; |
|
||||
var Sorter = require('undefined'); |
// TODO: Migrate this file to Jest
|
||||
|
|
||||
module.exports = { |
describe.skip('Sorter', () => { |
||||
run: function() { |
var fixture; |
||||
describe('Sorter', () => { |
var obj; |
||||
var fixtures; |
var parent; |
||||
var fixture; |
var plh; |
||||
var obj; |
var html; |
||||
var parent; |
|
||||
var plh; |
beforeAll(function() { |
||||
var html; |
fixture = $('<div class="sorter-fixture"></div>').get(0); |
||||
|
}); |
||||
beforeAll(function() { |
|
||||
fixture = $('<div class="sorter-fixture"></div>').get(0); |
beforeEach(() => { |
||||
}); |
parent = document.createElement('div'); |
||||
|
parent.setAttribute('class', 'parent1'); |
||||
beforeEach(() => { |
plh = document.createElement('div'); |
||||
parent = document.createElement('div'); |
document.body.appendChild(parent); |
||||
parent.setAttribute('class', 'parent1'); |
obj = new Sorter({ container: '.parent1' }); |
||||
plh = document.createElement('div'); |
document.body.appendChild(fixture); |
||||
document.body.appendChild(parent); |
fixture.appendChild(parent); |
||||
obj = new Sorter({ container: '.parent1' }); |
html = |
||||
document.body.appendChild(fixture); |
'<div id="el1" style="overflow: hidden;">' + |
||||
fixture.appendChild(parent); |
'<div id="el2">ba' + |
||||
html = |
'<p id="baa">baa</p>' + |
||||
'<div id="el1" style="overflow: hidden;">' + |
'<span id="elspan">bab</span>' + |
||||
'<div id="el2">ba' + |
'<span id="bac" style="display:block;">bac</span>' + |
||||
'<p id="baa">baa</p>' + |
'<div id="eldiv">eldiv</div>' + |
||||
'<span id="elspan">bab</span>' + |
'</div>' + |
||||
'<span id="bac" style="display:block;">bac</span>' + |
'</div>' + |
||||
'<div id="eldiv">eldiv</div>' + |
'<div id="a">' + |
||||
'</div>' + |
'<div id="aa">aa' + |
||||
'</div>' + |
'<p id="aaa">aaa</p>' + |
||||
'<div id="a">' + |
'<span id="aab">aab</span>' + |
||||
'<div id="aa">aa' + |
'<span id="aac" style="display:block;">aac</span>' + |
||||
'<p id="aaa">aaa</p>' + |
'</div>' + |
||||
'<span id="aab">aab</span>' + |
'<div id="ab" style="float: left;">ab</div>' + |
||||
'<span id="aac" style="display:block;">aac</span>' + |
'<div id="ac" style="position: absolute;">ac' + |
||||
'</div>' + |
'<div id="aca" style="float: left;">aca</div>' + |
||||
'<div id="ab" style="float: left;">ab</div>' + |
'<div id="acb">acb</div>' + |
||||
'<div id="ac" style="position: absolute;">ac' + |
'</div>' + |
||||
'<div id="aca" style="float: left;">aca</div>' + |
'<div id="ad" style="overflow: hidden;">ad' + |
||||
'<div id="acb">acb</div>' + |
'<p id="ada">ada</p>' + |
||||
'</div>' + |
'<span id="adb">adb</span>' + |
||||
'<div id="ad" style="overflow: hidden;">ad' + |
'<span id="adc" style="display:block;">adc</span>' + |
||||
'<p id="ada">ada</p>' + |
'</div>' + |
||||
'<span id="adb">adb</span>' + |
'</div>'; |
||||
'<span id="adc" style="display:block;">adc</span>' + |
}); |
||||
'</div>' + |
|
||||
'</div>'; |
afterEach(() => { |
||||
}); |
document.body.removeChild(fixture); |
||||
|
obj = null; |
||||
afterEach(() => { |
parent = null; |
||||
document.body.removeChild(fixture); |
html = null; |
||||
obj = null; |
}); |
||||
parent = null; |
|
||||
html = null; |
test('matches class', () => { |
||||
}); |
var el = document.createElement('div'); |
||||
|
el.setAttribute('class', 'test test2'); |
||||
test('matches class', () => { |
parent.appendChild(el); |
||||
var el = document.createElement('div'); |
obj.matches(el, '.test').should.equal(true); |
||||
el.setAttribute('class', 'test test2'); |
obj.matches(el, '.test2').should.equal(true); |
||||
parent.appendChild(el); |
obj.matches(el, '.test3').should.equal(false); |
||||
obj.matches(el, '.test').should.equal(true); |
}); |
||||
obj.matches(el, '.test2').should.equal(true); |
|
||||
obj.matches(el, '.test3').should.equal(false); |
test('matches id', () => { |
||||
}); |
var el = document.createElement('div'); |
||||
|
el.setAttribute('id', 'test2'); |
||||
test('matches id', () => { |
parent.appendChild(el); |
||||
var el = document.createElement('div'); |
obj.matches(el, '#test2').should.equal(true); |
||||
el.setAttribute('id', 'test2'); |
obj.matches(el, '.test2').should.equal(false); |
||||
parent.appendChild(el); |
obj.matches(el, '#test').should.equal(false); |
||||
obj.matches(el, '#test2').should.equal(true); |
}); |
||||
obj.matches(el, '.test2').should.equal(false); |
|
||||
obj.matches(el, '#test').should.equal(false); |
test('matches tag', () => { |
||||
}); |
var el = document.createElement('span'); |
||||
|
parent.appendChild(el); |
||||
test('matches tag', () => { |
obj.matches(el, 'span').should.equal(true); |
||||
var el = document.createElement('span'); |
obj.matches(el, 'div').should.equal(false); |
||||
parent.appendChild(el); |
obj.matches(el, '*').should.equal(true); |
||||
obj.matches(el, 'span').should.equal(true); |
}); |
||||
obj.matches(el, 'div').should.equal(false); |
|
||||
obj.matches(el, '*').should.equal(true); |
test('Creates placeholder', () => { |
||||
}); |
obj.createPlaceholder().className.should.equal('placeholder'); |
||||
|
}); |
||||
test('Creates placeholder', () => { |
|
||||
obj.createPlaceholder().className.should.equal('placeholder'); |
test('isInFlow to overflow hidden', () => { |
||||
}); |
parent.innerHTML = html; |
||||
|
var el = parent.querySelector('#el1'); |
||||
test('isInFlow to overflow hidden', () => { |
obj.isInFlow(el).should.equal(false); |
||||
parent.innerHTML = html; |
}); |
||||
var el = parent.querySelector('#el1'); |
|
||||
obj.isInFlow(el).should.equal(false); |
test('isInFlow inner to overflow', () => { |
||||
}); |
parent.innerHTML = html; |
||||
|
var el = parent.querySelector('#el2'); |
||||
test('isInFlow inner to overflow', () => { |
if (!el) { |
||||
parent.innerHTML = html; |
console.log('phantom issue'); |
||||
var el = parent.querySelector('#el2'); |
return; |
||||
if (!el) { |
} |
||||
console.log('phantom issue'); |
obj.isInFlow(el).should.equal(true); |
||||
return; |
}); |
||||
} |
|
||||
obj.isInFlow(el).should.equal(true); |
test('isInFlow for span', () => { |
||||
}); |
parent.innerHTML = html; |
||||
|
var el = parent.querySelector('#elspan'); |
||||
test('isInFlow for span', () => { |
obj.isInFlow(el).should.equal(false); |
||||
parent.innerHTML = html; |
}); |
||||
var el = parent.querySelector('#elspan'); |
|
||||
obj.isInFlow(el).should.equal(false); |
test('isInFlow for div #a', () => { |
||||
}); |
parent.innerHTML = html; |
||||
|
var el = parent.querySelector('#a'); |
||||
test('isInFlow for div #a', () => { |
if (!el) { |
||||
parent.innerHTML = html; |
console.log('phantom issue'); |
||||
var el = parent.querySelector('#a'); |
return; |
||||
if (!el) { |
} |
||||
console.log('phantom issue'); |
obj.isInFlow(el).should.equal(true); |
||||
return; |
}); |
||||
} |
|
||||
obj.isInFlow(el).should.equal(true); |
test('isInFlow for div #aa', () => { |
||||
}); |
parent.innerHTML = html; |
||||
|
var el = parent.querySelector('#aa'); |
||||
test('isInFlow for div #aa', () => { |
if (!el) { |
||||
parent.innerHTML = html; |
console.log('phantom issue'); |
||||
var el = parent.querySelector('#aa'); |
return; |
||||
if (!el) { |
|
||||
console.log('phantom issue'); |
|
||||
return; |
|
||||
} |
|
||||
obj.isInFlow(el).should.equal(true); |
|
||||
}); |
|
||||
|
|
||||
test('isInFlow for p #aaa', () => { |
|
||||
parent.innerHTML = html; |
|
||||
var el = parent.querySelector('#aaa'); |
|
||||
if (!el) { |
|
||||
console.log('phantom issue'); |
|
||||
return; |
|
||||
} |
|
||||
obj.isInFlow(el).should.equal(true); |
|
||||
}); |
|
||||
|
|
||||
test('isInFlow for span #aab', () => { |
|
||||
parent.innerHTML = html; |
|
||||
var el = parent.querySelector('#aab'); |
|
||||
obj.isInFlow(el).should.equal(false); |
|
||||
}); |
|
||||
|
|
||||
test('isInFlow for span #aac with display block', () => { |
|
||||
parent.innerHTML = html; |
|
||||
var el = parent.querySelector('#aac'); |
|
||||
if (!el) |
|
||||
// in phantom doesnt work
|
|
||||
return; |
|
||||
obj.isInFlow(el).should.equal(true); |
|
||||
}); |
|
||||
|
|
||||
test('isInFlow for div #ab with float left', () => { |
|
||||
parent.innerHTML = html; |
|
||||
var el = parent.querySelector('#ab'); |
|
||||
obj.isInFlow(el).should.equal(false); |
|
||||
}); |
|
||||
|
|
||||
test('isInFlow for div #ac in absolute', () => { |
|
||||
parent.innerHTML = html; |
|
||||
var el = parent.querySelector('#ac'); |
|
||||
obj.isInFlow(el).should.equal(false); |
|
||||
}); |
|
||||
|
|
||||
test('isInFlow for div #acb inside absolute', () => { |
|
||||
parent.innerHTML = html; |
|
||||
var el = parent.querySelector('#acb'); |
|
||||
if (!el) { |
|
||||
console.log('phantom issue'); |
|
||||
return; |
|
||||
} |
|
||||
obj.isInFlow(el).should.equal(true); |
|
||||
}); |
|
||||
|
|
||||
test('isInFlow for div #ad overflow hidden', () => { |
|
||||
parent.innerHTML = html; |
|
||||
var el = parent.querySelector('#ad'); |
|
||||
obj.isInFlow(el).should.equal(false); |
|
||||
}); |
|
||||
|
|
||||
describe('Closest method', () => { |
|
||||
var parent2; |
|
||||
var parent3; |
|
||||
|
|
||||
beforeEach(() => { |
|
||||
parent2 = document.createElement('span'); |
|
||||
parent2.setAttribute('class', 'parent2'); |
|
||||
parent3 = document.createElement('div'); |
|
||||
parent3.setAttribute('class', 'parent3'); |
|
||||
parent.appendChild(parent2); |
|
||||
parent2.appendChild(parent3); |
|
||||
}); |
|
||||
|
|
||||
test('Closest by class', () => { |
|
||||
var el = document.createElement('div'); |
|
||||
parent3.appendChild(el); |
|
||||
obj.closest(el, '.parent2').should.deep.equal(parent2); |
|
||||
obj.closest(el, '.parent3').should.deep.equal(parent3); |
|
||||
obj.closest(el, '.parent1').should.deep.equal(parent); |
|
||||
}); |
|
||||
|
|
||||
test('Closest by tag', () => { |
|
||||
var el = document.createElement('div'); |
|
||||
el.setAttribute('class', 'el'); |
|
||||
parent3.appendChild(el); |
|
||||
obj.closest(el, 'span').should.deep.equal(parent2); |
|
||||
obj.closest(el, 'div').should.deep.equal(parent3); |
|
||||
obj.closest(el, '*').should.deep.equal(parent3); |
|
||||
}); |
|
||||
}); |
|
||||
|
|
||||
describe('With elements', () => { |
|
||||
var vertDims; |
|
||||
var parent2; |
|
||||
var parent3; |
|
||||
var sib1; |
|
||||
var sib2; |
|
||||
var sib3; |
|
||||
var sib4; |
|
||||
var el; |
|
||||
|
|
||||
beforeEach(() => { |
|
||||
parent2 = document.createElement('span'); |
|
||||
parent2.setAttribute('class', 'parent2'); |
|
||||
parent3 = document.createElement('div'); |
|
||||
parent3.setAttribute('class', 'parent3'); |
|
||||
parent.appendChild(parent2); |
|
||||
parent2.appendChild(parent3); |
|
||||
el = document.createElement('div'); |
|
||||
el.setAttribute('class', 'el'); |
|
||||
parent3.appendChild(el); |
|
||||
|
|
||||
sib1 = document.createElement('div'); |
|
||||
sib2 = document.createElement('div'); |
|
||||
sib3 = document.createElement('div'); |
|
||||
sib4 = document.createElement('div'); |
|
||||
sib1.style.width = '100px'; |
|
||||
sib1.style.height = '50px'; |
|
||||
sib2.style.width = '100px'; |
|
||||
sib2.style.height = '50px'; |
|
||||
sib3.style.width = '100px'; |
|
||||
sib3.style.height = '50px'; |
|
||||
sib3.style.float = 'left'; |
|
||||
sib4.style.width = '70px'; |
|
||||
sib4.style.height = '50px'; |
|
||||
sib4.style.float = 'left'; |
|
||||
el.appendChild(sib1); |
|
||||
el.appendChild(sib2); |
|
||||
el.appendChild(sib3); |
|
||||
el.appendChild(sib4); |
|
||||
|
|
||||
vertDims = [ |
|
||||
[0, 0, 50, 100, true], |
|
||||
[50, 0, 50, 100, true], |
|
||||
[100, 0, 50, 100, true], |
|
||||
[150, 0, 50, 70, true] |
|
||||
]; |
|
||||
}); |
|
||||
|
|
||||
test('startSort inits correctly inits', () => { |
|
||||
obj.startSort(el); |
|
||||
obj.moved.should.equal(0); |
|
||||
obj.plh.style.display.should.equal('none'); |
|
||||
}); |
|
||||
|
|
||||
test('onMove', () => { |
|
||||
var target = document.createElement('div'); |
|
||||
obj.startSort(el); |
|
||||
obj.onMove({ |
|
||||
pageX: 0, |
|
||||
pageY: 0, |
|
||||
target: target |
|
||||
}); |
|
||||
obj.moved.should.equal(1); |
|
||||
}); |
|
||||
|
|
||||
test('getDim from element', () => { |
|
||||
var subPos = obj.offset(sib1); |
|
||||
var top = subPos.top; |
|
||||
var left = subPos.left; |
|
||||
var result = [top, left, 50, 100]; |
|
||||
obj.getDim(sib1).should.deep.equal(result); |
|
||||
}); |
|
||||
|
|
||||
test('getChildrenDim from element', () => { |
|
||||
el.style.position = 'absolute'; |
|
||||
el.style.top = '0'; |
|
||||
var ch = obj.getChildrenDim(el); |
|
||||
ch = ch.map(function(v) { |
|
||||
return v.slice(0, 5); |
|
||||
}); |
|
||||
var subPos = obj.offset(sib1); |
|
||||
var top = subPos.top; |
|
||||
var left = subPos.left; |
|
||||
var result = [ |
|
||||
[top, left, 50, 100, true], |
|
||||
[top + 50, left + 0, 50, 100, true], |
|
||||
[top + 100, left + 0, 50, 100, true], |
|
||||
[top + 100, left + 100, 50, 70, true] |
|
||||
]; |
|
||||
ch.should.deep.equal(result); |
|
||||
}); |
|
||||
|
|
||||
test('nearBorders', () => { |
|
||||
obj.borderOffset = 10; |
|
||||
var dim = [0, 0, 100, 200]; |
|
||||
obj.nearBorders(dim, 20, 15).should.equal(false); |
|
||||
obj.nearBorders(dim, 3, 4).should.equal(true); |
|
||||
obj.nearBorders(dim, 500, 500).should.equal(true); |
|
||||
}); |
|
||||
|
|
||||
test('dimsFromTarget', () => { |
|
||||
var child1 = document.createElement('div'); |
|
||||
var child2 = document.createElement('div'); |
|
||||
child1.style.width = '30px'; |
|
||||
child1.style.height = '30px'; |
|
||||
child2.style.width = '30px'; |
|
||||
child2.style.height = '20px'; |
|
||||
sib3.appendChild(child1); |
|
||||
sib3.appendChild(child2); |
|
||||
|
|
||||
var subPos = obj.offset(sib1); |
|
||||
var top = subPos.top; |
|
||||
var left = subPos.left; |
|
||||
var topSib3 = top + 100; |
|
||||
var leftSib3 = left + 0; |
|
||||
var resultParent = [ |
|
||||
[top, left, 50, 100, true], |
|
||||
[top + 50, left + 0, 50, 100, true], |
|
||||
[topSib3, leftSib3, 50, 100, true], |
|
||||
[top + 100, left + 100, 50, 70, true] |
|
||||
]; |
|
||||
var resultChildren = [ |
|
||||
[topSib3, leftSib3, 30, 30, true], |
|
||||
[topSib3 + 30, left + 0, 20, 30, true] |
|
||||
]; |
|
||||
|
|
||||
var dims = obj.dimsFromTarget(sib3); |
|
||||
dims = dims.map(function(v) { |
|
||||
return v.slice(0, 5); |
|
||||
}); |
|
||||
dims.should.deep.equal(resultParent); |
|
||||
|
|
||||
// Inside target
|
|
||||
var dims = obj.dimsFromTarget(sib3, leftSib3 + 15, topSib3 + 15); |
|
||||
dims = dims.map(function(v) { |
|
||||
return v.slice(0, 5); |
|
||||
}); |
|
||||
dims.should.deep.equal(resultChildren); |
|
||||
|
|
||||
// Exactly on border
|
|
||||
var bOffset = obj.borderOffset; |
|
||||
var dims = obj.dimsFromTarget( |
|
||||
sib3, |
|
||||
leftSib3 + bOffset, |
|
||||
topSib3 + bOffset |
|
||||
); |
|
||||
dims = dims.map(function(v) { |
|
||||
return v.slice(0, 5); |
|
||||
}); |
|
||||
dims.should.deep.equal(resultChildren); |
|
||||
|
|
||||
// Slightly near border
|
|
||||
var dims = obj.dimsFromTarget( |
|
||||
sib3, |
|
||||
leftSib3 + bOffset - 3, |
|
||||
topSib3 + bOffset |
|
||||
); |
|
||||
dims = dims.map(function(v) { |
|
||||
return v.slice(0, 5); |
|
||||
}); |
|
||||
dims.should.deep.equal(resultParent); |
|
||||
}); |
|
||||
|
|
||||
describe('findPosition', () => { |
|
||||
beforeEach(() => {}); |
|
||||
|
|
||||
test('Vertical dimensions', () => { |
|
||||
var result = { index: 0, method: 'before' }; |
|
||||
obj.findPosition(vertDims, -10, -10).should.deep.equal(result); |
|
||||
obj.findPosition(vertDims, 0, 0).should.deep.equal(result); |
|
||||
obj.findPosition(vertDims, 10, 10).should.deep.equal(result); |
|
||||
|
|
||||
var result = { index: 1, method: 'before' }; |
|
||||
obj.findPosition(vertDims, 10, 30).should.deep.equal(result); |
|
||||
obj.findPosition(vertDims, 10, 70).should.deep.equal(result); |
|
||||
|
|
||||
var result = { index: 2, method: 'before' }; |
|
||||
obj.findPosition(vertDims, 10, 76).should.deep.equal(result); |
|
||||
|
|
||||
var result = { index: 3, method: 'before' }; |
|
||||
obj.findPosition(vertDims, 100, 140).should.deep.equal(result); |
|
||||
obj.findPosition(vertDims, 100, 160).should.deep.equal(result); |
|
||||
|
|
||||
var result = { index: 3, method: 'after' }; |
|
||||
obj.findPosition(vertDims, 1000, 1000).should.deep.equal(result); |
|
||||
}); |
|
||||
}); |
|
||||
|
|
||||
describe('movePlaceholder', () => { |
|
||||
beforeEach(() => { |
|
||||
vertDims = [ |
|
||||
[0, 10, 50, 100, true], |
|
||||
[50, 20, 50, 70, true], |
|
||||
[100, 30, 50, 100, true], |
|
||||
[150, 40, 50, 70, true] |
|
||||
]; |
|
||||
}); |
|
||||
|
|
||||
test('Vertical dimensions with before position', () => { |
|
||||
var pos = { index: 2, method: 'before' }; |
|
||||
obj.movePlaceholder(plh, vertDims, pos); |
|
||||
var style = plh.style; |
|
||||
style.top.should.equal('100px'); |
|
||||
style.left.should.equal('30px'); |
|
||||
style.width.should.equal('100px'); |
|
||||
}); |
|
||||
|
|
||||
test('Vertical dimensions with after position', () => { |
|
||||
var pos = { index: 1, method: 'after' }; |
|
||||
obj.movePlaceholder(plh, vertDims, pos); |
|
||||
var style = plh.style; |
|
||||
style.top.should.equal('100px'); |
|
||||
style.left.should.equal('20px'); |
|
||||
style.width.should.equal('70px'); |
|
||||
}); |
|
||||
}); |
|
||||
}); |
|
||||
}); |
|
||||
} |
} |
||||
}; |
obj.isInFlow(el).should.equal(true); |
||||
|
}); |
||||
|
|
||||
|
test('isInFlow for p #aaa', () => { |
||||
|
parent.innerHTML = html; |
||||
|
var el = parent.querySelector('#aaa'); |
||||
|
if (!el) { |
||||
|
console.log('phantom issue'); |
||||
|
return; |
||||
|
} |
||||
|
obj.isInFlow(el).should.equal(true); |
||||
|
}); |
||||
|
|
||||
|
test('isInFlow for span #aab', () => { |
||||
|
parent.innerHTML = html; |
||||
|
var el = parent.querySelector('#aab'); |
||||
|
obj.isInFlow(el).should.equal(false); |
||||
|
}); |
||||
|
|
||||
|
test('isInFlow for span #aac with display block', () => { |
||||
|
parent.innerHTML = html; |
||||
|
var el = parent.querySelector('#aac'); |
||||
|
if (!el) |
||||
|
// in phantom doesnt work
|
||||
|
return; |
||||
|
obj.isInFlow(el).should.equal(true); |
||||
|
}); |
||||
|
|
||||
|
test('isInFlow for div #ab with float left', () => { |
||||
|
parent.innerHTML = html; |
||||
|
var el = parent.querySelector('#ab'); |
||||
|
obj.isInFlow(el).should.equal(false); |
||||
|
}); |
||||
|
|
||||
|
test('isInFlow for div #ac in absolute', () => { |
||||
|
parent.innerHTML = html; |
||||
|
var el = parent.querySelector('#ac'); |
||||
|
obj.isInFlow(el).should.equal(false); |
||||
|
}); |
||||
|
|
||||
|
test('isInFlow for div #acb inside absolute', () => { |
||||
|
parent.innerHTML = html; |
||||
|
var el = parent.querySelector('#acb'); |
||||
|
if (!el) { |
||||
|
console.log('phantom issue'); |
||||
|
return; |
||||
|
} |
||||
|
obj.isInFlow(el).should.equal(true); |
||||
|
}); |
||||
|
|
||||
|
test('isInFlow for div #ad overflow hidden', () => { |
||||
|
parent.innerHTML = html; |
||||
|
var el = parent.querySelector('#ad'); |
||||
|
obj.isInFlow(el).should.equal(false); |
||||
|
}); |
||||
|
|
||||
|
describe('Closest method', () => { |
||||
|
var parent2; |
||||
|
var parent3; |
||||
|
|
||||
|
beforeEach(() => { |
||||
|
parent2 = document.createElement('span'); |
||||
|
parent2.setAttribute('class', 'parent2'); |
||||
|
parent3 = document.createElement('div'); |
||||
|
parent3.setAttribute('class', 'parent3'); |
||||
|
parent.appendChild(parent2); |
||||
|
parent2.appendChild(parent3); |
||||
|
}); |
||||
|
|
||||
|
test('Closest by class', () => { |
||||
|
var el = document.createElement('div'); |
||||
|
parent3.appendChild(el); |
||||
|
obj.closest(el, '.parent2').should.deep.equal(parent2); |
||||
|
obj.closest(el, '.parent3').should.deep.equal(parent3); |
||||
|
obj.closest(el, '.parent1').should.deep.equal(parent); |
||||
|
}); |
||||
|
|
||||
|
test('Closest by tag', () => { |
||||
|
var el = document.createElement('div'); |
||||
|
el.setAttribute('class', 'el'); |
||||
|
parent3.appendChild(el); |
||||
|
obj.closest(el, 'span').should.deep.equal(parent2); |
||||
|
obj.closest(el, 'div').should.deep.equal(parent3); |
||||
|
obj.closest(el, '*').should.deep.equal(parent3); |
||||
|
}); |
||||
|
}); |
||||
|
|
||||
|
describe('With elements', () => { |
||||
|
var vertDims; |
||||
|
var parent2; |
||||
|
var parent3; |
||||
|
var sib1; |
||||
|
var sib2; |
||||
|
var sib3; |
||||
|
var sib4; |
||||
|
var el; |
||||
|
|
||||
|
beforeEach(() => { |
||||
|
parent2 = document.createElement('span'); |
||||
|
parent2.setAttribute('class', 'parent2'); |
||||
|
parent3 = document.createElement('div'); |
||||
|
parent3.setAttribute('class', 'parent3'); |
||||
|
parent.appendChild(parent2); |
||||
|
parent2.appendChild(parent3); |
||||
|
el = document.createElement('div'); |
||||
|
el.setAttribute('class', 'el'); |
||||
|
parent3.appendChild(el); |
||||
|
|
||||
|
sib1 = document.createElement('div'); |
||||
|
sib2 = document.createElement('div'); |
||||
|
sib3 = document.createElement('div'); |
||||
|
sib4 = document.createElement('div'); |
||||
|
sib1.style.width = '100px'; |
||||
|
sib1.style.height = '50px'; |
||||
|
sib2.style.width = '100px'; |
||||
|
sib2.style.height = '50px'; |
||||
|
sib3.style.width = '100px'; |
||||
|
sib3.style.height = '50px'; |
||||
|
sib3.style.float = 'left'; |
||||
|
sib4.style.width = '70px'; |
||||
|
sib4.style.height = '50px'; |
||||
|
sib4.style.float = 'left'; |
||||
|
el.appendChild(sib1); |
||||
|
el.appendChild(sib2); |
||||
|
el.appendChild(sib3); |
||||
|
el.appendChild(sib4); |
||||
|
|
||||
|
vertDims = [ |
||||
|
[0, 0, 50, 100, true], |
||||
|
[50, 0, 50, 100, true], |
||||
|
[100, 0, 50, 100, true], |
||||
|
[150, 0, 50, 70, true] |
||||
|
]; |
||||
|
}); |
||||
|
|
||||
|
test('startSort inits correctly inits', () => { |
||||
|
obj.startSort(el); |
||||
|
obj.moved.should.equal(0); |
||||
|
obj.plh.style.display.should.equal('none'); |
||||
|
}); |
||||
|
|
||||
|
test('onMove', () => { |
||||
|
var target = document.createElement('div'); |
||||
|
obj.startSort(el); |
||||
|
obj.onMove({ |
||||
|
pageX: 0, |
||||
|
pageY: 0, |
||||
|
target: target |
||||
|
}); |
||||
|
obj.moved.should.equal(1); |
||||
|
}); |
||||
|
|
||||
|
test('getDim from element', () => { |
||||
|
var subPos = obj.offset(sib1); |
||||
|
var top = subPos.top; |
||||
|
var left = subPos.left; |
||||
|
var result = [top, left, 50, 100]; |
||||
|
obj.getDim(sib1).should.deep.equal(result); |
||||
|
}); |
||||
|
|
||||
|
test('getChildrenDim from element', () => { |
||||
|
el.style.position = 'absolute'; |
||||
|
el.style.top = '0'; |
||||
|
var ch = obj.getChildrenDim(el); |
||||
|
ch = ch.map(function(v) { |
||||
|
return v.slice(0, 5); |
||||
|
}); |
||||
|
var subPos = obj.offset(sib1); |
||||
|
var top = subPos.top; |
||||
|
var left = subPos.left; |
||||
|
var result = [ |
||||
|
[top, left, 50, 100, true], |
||||
|
[top + 50, left + 0, 50, 100, true], |
||||
|
[top + 100, left + 0, 50, 100, true], |
||||
|
[top + 100, left + 100, 50, 70, true] |
||||
|
]; |
||||
|
ch.should.deep.equal(result); |
||||
|
}); |
||||
|
|
||||
|
test('nearBorders', () => { |
||||
|
obj.borderOffset = 10; |
||||
|
var dim = [0, 0, 100, 200]; |
||||
|
obj.nearBorders(dim, 20, 15).should.equal(false); |
||||
|
obj.nearBorders(dim, 3, 4).should.equal(true); |
||||
|
obj.nearBorders(dim, 500, 500).should.equal(true); |
||||
|
}); |
||||
|
|
||||
|
test('dimsFromTarget', () => { |
||||
|
var child1 = document.createElement('div'); |
||||
|
var child2 = document.createElement('div'); |
||||
|
child1.style.width = '30px'; |
||||
|
child1.style.height = '30px'; |
||||
|
child2.style.width = '30px'; |
||||
|
child2.style.height = '20px'; |
||||
|
sib3.appendChild(child1); |
||||
|
sib3.appendChild(child2); |
||||
|
|
||||
|
var subPos = obj.offset(sib1); |
||||
|
var top = subPos.top; |
||||
|
var left = subPos.left; |
||||
|
var topSib3 = top + 100; |
||||
|
var leftSib3 = left + 0; |
||||
|
var resultParent = [ |
||||
|
[top, left, 50, 100, true], |
||||
|
[top + 50, left + 0, 50, 100, true], |
||||
|
[topSib3, leftSib3, 50, 100, true], |
||||
|
[top + 100, left + 100, 50, 70, true] |
||||
|
]; |
||||
|
var resultChildren = [ |
||||
|
[topSib3, leftSib3, 30, 30, true], |
||||
|
[topSib3 + 30, left + 0, 20, 30, true] |
||||
|
]; |
||||
|
|
||||
|
var dims = obj.dimsFromTarget(sib3); |
||||
|
dims = dims.map(function(v) { |
||||
|
return v.slice(0, 5); |
||||
|
}); |
||||
|
dims.should.deep.equal(resultParent); |
||||
|
|
||||
|
// Inside target
|
||||
|
var dims = obj.dimsFromTarget(sib3, leftSib3 + 15, topSib3 + 15); |
||||
|
dims = dims.map(function(v) { |
||||
|
return v.slice(0, 5); |
||||
|
}); |
||||
|
dims.should.deep.equal(resultChildren); |
||||
|
|
||||
|
// Exactly on border
|
||||
|
var bOffset = obj.borderOffset; |
||||
|
var dims = obj.dimsFromTarget( |
||||
|
sib3, |
||||
|
leftSib3 + bOffset, |
||||
|
topSib3 + bOffset |
||||
|
); |
||||
|
dims = dims.map(function(v) { |
||||
|
return v.slice(0, 5); |
||||
|
}); |
||||
|
dims.should.deep.equal(resultChildren); |
||||
|
|
||||
|
// Slightly near border
|
||||
|
var dims = obj.dimsFromTarget( |
||||
|
sib3, |
||||
|
leftSib3 + bOffset - 3, |
||||
|
topSib3 + bOffset |
||||
|
); |
||||
|
dims = dims.map(function(v) { |
||||
|
return v.slice(0, 5); |
||||
|
}); |
||||
|
dims.should.deep.equal(resultParent); |
||||
|
}); |
||||
|
|
||||
|
describe('findPosition', () => { |
||||
|
beforeEach(() => {}); |
||||
|
|
||||
|
test('Vertical dimensions', () => { |
||||
|
var result = { index: 0, method: 'before' }; |
||||
|
obj.findPosition(vertDims, -10, -10).should.deep.equal(result); |
||||
|
obj.findPosition(vertDims, 0, 0).should.deep.equal(result); |
||||
|
obj.findPosition(vertDims, 10, 10).should.deep.equal(result); |
||||
|
|
||||
|
var result = { index: 1, method: 'before' }; |
||||
|
obj.findPosition(vertDims, 10, 30).should.deep.equal(result); |
||||
|
obj.findPosition(vertDims, 10, 70).should.deep.equal(result); |
||||
|
|
||||
|
var result = { index: 2, method: 'before' }; |
||||
|
obj.findPosition(vertDims, 10, 76).should.deep.equal(result); |
||||
|
|
||||
|
var result = { index: 3, method: 'before' }; |
||||
|
obj.findPosition(vertDims, 100, 140).should.deep.equal(result); |
||||
|
obj.findPosition(vertDims, 100, 160).should.deep.equal(result); |
||||
|
|
||||
|
var result = { index: 3, method: 'after' }; |
||||
|
obj.findPosition(vertDims, 1000, 1000).should.deep.equal(result); |
||||
|
}); |
||||
|
}); |
||||
|
|
||||
|
describe('movePlaceholder', () => { |
||||
|
beforeEach(() => { |
||||
|
vertDims = [ |
||||
|
[0, 10, 50, 100, true], |
||||
|
[50, 20, 50, 70, true], |
||||
|
[100, 30, 50, 100, true], |
||||
|
[150, 40, 50, 70, true] |
||||
|
]; |
||||
|
}); |
||||
|
|
||||
|
test('Vertical dimensions with before position', () => { |
||||
|
var pos = { index: 2, method: 'before' }; |
||||
|
obj.movePlaceholder(plh, vertDims, pos); |
||||
|
var style = plh.style; |
||||
|
style.top.should.equal('100px'); |
||||
|
style.left.should.equal('30px'); |
||||
|
style.width.should.equal('100px'); |
||||
|
}); |
||||
|
|
||||
|
test('Vertical dimensions with after position', () => { |
||||
|
var pos = { index: 1, method: 'after' }; |
||||
|
obj.movePlaceholder(plh, vertDims, pos); |
||||
|
var style = plh.style; |
||||
|
style.top.should.equal('100px'); |
||||
|
style.left.should.equal('20px'); |
||||
|
style.width.should.equal('70px'); |
||||
|
}); |
||||
|
}); |
||||
|
}); |
||||
}); |
}); |
||||
|
|||||
@ -1,9 +0,0 @@ |
|||||
define((require, exports, module) => { |
|
||||
'use strict'; |
|
||||
var Utils = require('Utils'); |
|
||||
var Sorter = require('undefined'); |
|
||||
|
|
||||
describe('Utils', () => { |
|
||||
Sorter.run(); |
|
||||
}); |
|
||||
}); |
|
||||
Loading…
Reference in new issue