mirror of https://github.com/artf/grapesjs.git
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'; |
|||
|
|||
module.exports = { |
|||
run() { |
|||
describe('Asset', () => { |
|||
test('Object exists', () => { |
|||
expect(Asset).toBeTruthy(); |
|||
}); |
|||
describe('Asset', () => { |
|||
test('Object exists', () => { |
|||
expect(Asset).toBeTruthy(); |
|||
}); |
|||
|
|||
test('Has default values', () => { |
|||
var obj = new Asset({}); |
|||
expect(obj.get('type')).toBeFalsy(); |
|||
expect(obj.get('src')).toBeFalsy(); |
|||
expect(obj.getExtension()).toBeFalsy(); |
|||
expect(obj.getFilename()).toBeFalsy(); |
|||
}); |
|||
test('Has default values', () => { |
|||
var obj = new Asset({}); |
|||
expect(obj.get('type')).toBeFalsy(); |
|||
expect(obj.get('src')).toBeFalsy(); |
|||
expect(obj.getExtension()).toBeFalsy(); |
|||
expect(obj.getFilename()).toBeFalsy(); |
|||
}); |
|||
|
|||
test('Test getFilename', () => { |
|||
var obj = new Asset({ type: 'image', src: 'ch/eck/t.e.s.t' }); |
|||
expect(obj.getFilename()).toEqual('t.e.s.t'); |
|||
var obj = new Asset({ type: 'image', src: 'ch/eck/1234abc' }); |
|||
expect(obj.getFilename()).toEqual('1234abc'); |
|||
}); |
|||
test('Test getFilename', () => { |
|||
var obj = new Asset({ type: 'image', src: 'ch/eck/t.e.s.t' }); |
|||
expect(obj.getFilename()).toEqual('t.e.s.t'); |
|||
var obj = new Asset({ type: 'image', src: 'ch/eck/1234abc' }); |
|||
expect(obj.getFilename()).toEqual('1234abc'); |
|||
}); |
|||
|
|||
test('Test getExtension', () => { |
|||
var obj = new Asset({ type: 'image', src: 'ch/eck/t.e.s.t' }); |
|||
expect(obj.getExtension()).toEqual('t'); |
|||
var obj = new Asset({ type: 'image', src: 'ch/eck/1234abc.' }); |
|||
expect(obj.getExtension()).toEqual(''); |
|||
}); |
|||
}); |
|||
} |
|||
}; |
|||
test('Test getExtension', () => { |
|||
var obj = new Asset({ type: 'image', src: 'ch/eck/t.e.s.t' }); |
|||
expect(obj.getExtension()).toEqual('t'); |
|||
var obj = new Asset({ type: 'image', src: 'ch/eck/1234abc.' }); |
|||
expect(obj.getExtension()).toEqual(''); |
|||
}); |
|||
}); |
|||
|
|||
@ -1,22 +1,18 @@ |
|||
import AssetImage from 'asset_manager/model/AssetImage'; |
|||
|
|||
module.exports = { |
|||
run() { |
|||
describe('AssetImage', () => { |
|||
test('Object exists', () => { |
|||
expect(AssetImage).toBeTruthy(); |
|||
}); |
|||
describe('AssetImage', () => { |
|||
test('Object exists', () => { |
|||
expect(AssetImage).toBeTruthy(); |
|||
}); |
|||
|
|||
test('Has default values', () => { |
|||
var obj = new AssetImage({}); |
|||
expect(obj.get('type')).toEqual('image'); |
|||
expect(obj.get('src')).toBeFalsy(); |
|||
expect(obj.get('unitDim')).toEqual('px'); |
|||
expect(obj.get('height')).toEqual(0); |
|||
expect(obj.get('width')).toEqual(0); |
|||
expect(obj.getExtension()).toBeFalsy(); |
|||
expect(obj.getFilename()).toBeFalsy(); |
|||
}); |
|||
}); |
|||
} |
|||
}; |
|||
test('Has default values', () => { |
|||
var obj = new AssetImage({}); |
|||
expect(obj.get('type')).toEqual('image'); |
|||
expect(obj.get('src')).toBeFalsy(); |
|||
expect(obj.get('unitDim')).toEqual('px'); |
|||
expect(obj.get('height')).toEqual(0); |
|||
expect(obj.get('width')).toEqual(0); |
|||
expect(obj.getExtension()).toBeFalsy(); |
|||
expect(obj.getFilename()).toBeFalsy(); |
|||
}); |
|||
}); |
|||
|
|||
@ -1,25 +1,21 @@ |
|||
import Assets from 'asset_manager/model/Assets'; |
|||
|
|||
module.exports = { |
|||
run() { |
|||
describe('Assets', () => { |
|||
var obj; |
|||
describe('Assets', () => { |
|||
var obj; |
|||
|
|||
beforeEach(() => { |
|||
obj = new Assets(); |
|||
}); |
|||
beforeEach(() => { |
|||
obj = new Assets(); |
|||
}); |
|||
|
|||
afterEach(() => { |
|||
obj = null; |
|||
}); |
|||
afterEach(() => { |
|||
obj = null; |
|||
}); |
|||
|
|||
test('Object exists', () => { |
|||
expect(obj).toBeTruthy(); |
|||
}); |
|||
test('Object exists', () => { |
|||
expect(obj).toBeTruthy(); |
|||
}); |
|||
|
|||
test('Collection is empty', () => { |
|||
expect(obj.length).toEqual(0); |
|||
}); |
|||
}); |
|||
} |
|||
}; |
|||
test('Collection is empty', () => { |
|||
expect(obj.length).toEqual(0); |
|||
}); |
|||
}); |
|||
|
|||
@ -1,70 +1,66 @@ |
|||
import AssetImageView from 'asset_manager/view/AssetImageView'; |
|||
import Assets from 'asset_manager/model/Assets'; |
|||
|
|||
module.exports = { |
|||
run() { |
|||
let obj; |
|||
let obj; |
|||
|
|||
describe('AssetImageView', () => { |
|||
beforeEach(() => { |
|||
var coll = new Assets(); |
|||
var model = coll.add({ type: 'image', src: '/test' }); |
|||
obj = new AssetImageView({ |
|||
collection: new Assets(), |
|||
config: {}, |
|||
model |
|||
}); |
|||
document.body.innerHTML = '<div id="fixtures"></div>'; |
|||
document.body.querySelector('#fixtures').appendChild(obj.render().el); |
|||
}); |
|||
describe('AssetImageView', () => { |
|||
beforeEach(() => { |
|||
var coll = new Assets(); |
|||
var model = coll.add({ type: 'image', src: '/test' }); |
|||
obj = new AssetImageView({ |
|||
collection: new Assets(), |
|||
config: {}, |
|||
model |
|||
}); |
|||
document.body.innerHTML = '<div id="fixtures"></div>'; |
|||
document.body.querySelector('#fixtures').appendChild(obj.render().el); |
|||
}); |
|||
|
|||
afterEach(() => { |
|||
obj = null; |
|||
document.body.innerHTML = ''; |
|||
}); |
|||
afterEach(() => { |
|||
obj = null; |
|||
document.body.innerHTML = ''; |
|||
}); |
|||
|
|||
test('Object exists', () => { |
|||
expect(AssetImageView).toBeTruthy(); |
|||
}); |
|||
test('Object exists', () => { |
|||
expect(AssetImageView).toBeTruthy(); |
|||
}); |
|||
|
|||
describe('Asset should be rendered correctly', () => { |
|||
test('Has preview box', () => { |
|||
var $asset = obj.$el; |
|||
expect($asset.find('.preview').length).toEqual(1); |
|||
}); |
|||
describe('Asset should be rendered correctly', () => { |
|||
test('Has preview box', () => { |
|||
var $asset = obj.$el; |
|||
expect($asset.find('.preview').length).toEqual(1); |
|||
}); |
|||
|
|||
test('Has meta box', () => { |
|||
var $asset = obj.$el; |
|||
expect($asset.find('.meta').length).toEqual(1); |
|||
}); |
|||
test('Has meta box', () => { |
|||
var $asset = obj.$el; |
|||
expect($asset.find('.meta').length).toEqual(1); |
|||
}); |
|||
|
|||
test('Has close button', () => { |
|||
var $asset = obj.$el; |
|||
expect($asset.find('[data-toggle=asset-remove]').length).toEqual(1); |
|||
}); |
|||
}); |
|||
test('Has close button', () => { |
|||
var $asset = obj.$el; |
|||
expect($asset.find('[data-toggle=asset-remove]').length).toEqual(1); |
|||
}); |
|||
}); |
|||
|
|||
test('Could be selected', () => { |
|||
var spy = jest.spyOn(obj, 'updateTarget'); |
|||
obj.$el.trigger('click'); |
|||
expect(obj.$el.attr('class')).toContain('highlight'); |
|||
expect(spy).toHaveBeenCalled(); |
|||
}); |
|||
test('Could be selected', () => { |
|||
var spy = jest.spyOn(obj, 'updateTarget'); |
|||
obj.$el.trigger('click'); |
|||
expect(obj.$el.attr('class')).toContain('highlight'); |
|||
expect(spy).toHaveBeenCalled(); |
|||
}); |
|||
|
|||
test('Could be chosen', () => { |
|||
sinon.stub(obj, 'updateTarget'); |
|||
var spy = jest.spyOn(obj, 'updateTarget'); |
|||
obj.$el.trigger('dblclick'); |
|||
expect(spy).toHaveBeenCalled(); |
|||
//obj.updateTarget.calledOnce.should.equal(true);
|
|||
}); |
|||
test('Could be chosen', () => { |
|||
sinon.stub(obj, 'updateTarget'); |
|||
var spy = jest.spyOn(obj, 'updateTarget'); |
|||
obj.$el.trigger('dblclick'); |
|||
expect(spy).toHaveBeenCalled(); |
|||
//obj.updateTarget.calledOnce.should.equal(true);
|
|||
}); |
|||
|
|||
test('Could be removed', () => { |
|||
var spy = sinon.spy(); |
|||
obj.model.on('remove', spy); |
|||
obj.onRemove({ stopImmediatePropagation() {} }); |
|||
expect(spy.called).toEqual(true); |
|||
}); |
|||
}); |
|||
} |
|||
}; |
|||
test('Could be removed', () => { |
|||
var spy = sinon.spy(); |
|||
obj.model.on('remove', spy); |
|||
obj.onRemove({ stopImmediatePropagation() {} }); |
|||
expect(spy.called).toEqual(true); |
|||
}); |
|||
}); |
|||
|
|||
@ -1,39 +1,35 @@ |
|||
import Assets from 'asset_manager/model/Assets'; |
|||
import AssetView from 'asset_manager/view/AssetView'; |
|||
|
|||
module.exports = { |
|||
run() { |
|||
describe('AssetView', () => { |
|||
let testContext; |
|||
describe('AssetView', () => { |
|||
let testContext; |
|||
|
|||
beforeEach(() => { |
|||
testContext = {}; |
|||
}); |
|||
beforeEach(() => { |
|||
testContext = {}; |
|||
}); |
|||
|
|||
beforeEach(() => { |
|||
var coll = new Assets(); |
|||
var model = coll.add({ src: 'test' }); |
|||
testContext.view = new AssetView({ |
|||
config: {}, |
|||
model |
|||
}); |
|||
document.body.innerHTML = '<div id="fixtures"></div>'; |
|||
document.body |
|||
.querySelector('#fixtures') |
|||
.appendChild(testContext.view.render().el); |
|||
}); |
|||
beforeEach(() => { |
|||
var coll = new Assets(); |
|||
var model = coll.add({ src: 'test' }); |
|||
testContext.view = new AssetView({ |
|||
config: {}, |
|||
model |
|||
}); |
|||
document.body.innerHTML = '<div id="fixtures"></div>'; |
|||
document.body |
|||
.querySelector('#fixtures') |
|||
.appendChild(testContext.view.render().el); |
|||
}); |
|||
|
|||
afterEach(() => { |
|||
testContext.view.remove(); |
|||
}); |
|||
afterEach(() => { |
|||
testContext.view.remove(); |
|||
}); |
|||
|
|||
test('Object exists', () => { |
|||
expect(AssetView).toBeTruthy(); |
|||
}); |
|||
test('Object exists', () => { |
|||
expect(AssetView).toBeTruthy(); |
|||
}); |
|||
|
|||
test('Has correct prefix', () => { |
|||
expect(testContext.view.pfx).toEqual(''); |
|||
}); |
|||
}); |
|||
} |
|||
}; |
|||
test('Has correct prefix', () => { |
|||
expect(testContext.view.pfx).toEqual(''); |
|||
}); |
|||
}); |
|||
|
|||
@ -1,97 +1,85 @@ |
|||
import FileUploader from 'asset_manager/view/FileUploader'; |
|||
|
|||
module.exports = { |
|||
run() { |
|||
describe('File Uploader', () => { |
|||
let obj; |
|||
describe('File Uploader', () => { |
|||
let obj; |
|||
|
|||
beforeEach(() => { |
|||
obj = new FileUploader({ config: {} }); |
|||
document.body.innerHTML = '<div id="fixtures"></div>'; |
|||
document.body.querySelector('#fixtures').appendChild(obj.render().el); |
|||
}); |
|||
beforeEach(() => { |
|||
obj = new FileUploader({ config: {} }); |
|||
document.body.innerHTML = '<div id="fixtures"></div>'; |
|||
document.body.querySelector('#fixtures').appendChild(obj.render().el); |
|||
}); |
|||
|
|||
afterEach(() => { |
|||
obj.remove(); |
|||
}); |
|||
afterEach(() => { |
|||
obj.remove(); |
|||
}); |
|||
|
|||
test('Object exists', () => { |
|||
expect(FileUploader).toBeTruthy(); |
|||
}); |
|||
test('Object exists', () => { |
|||
expect(FileUploader).toBeTruthy(); |
|||
}); |
|||
|
|||
test('Has correct prefix', () => { |
|||
expect(obj.pfx).toBeFalsy(); |
|||
}); |
|||
test('Has correct prefix', () => { |
|||
expect(obj.pfx).toBeFalsy(); |
|||
}); |
|||
|
|||
describe('Should be rendered correctly', () => { |
|||
test('Has title', () => { |
|||
expect(obj.$el.find('#title').length).toEqual(1); |
|||
}); |
|||
describe('Should be rendered correctly', () => { |
|||
test('Has title', () => { |
|||
expect(obj.$el.find('#title').length).toEqual(1); |
|||
}); |
|||
|
|||
test('Title is empty', () => { |
|||
expect(obj.$el.find('#title').html()).toEqual(''); |
|||
}); |
|||
test('Title is empty', () => { |
|||
expect(obj.$el.find('#title').html()).toEqual(''); |
|||
}); |
|||
|
|||
test('Has file input', () => { |
|||
expect(obj.$el.find('input[type=file]').length).toEqual(1); |
|||
}); |
|||
test('Has file input', () => { |
|||
expect(obj.$el.find('input[type=file]').length).toEqual(1); |
|||
}); |
|||
|
|||
test('File input is enabled', () => { |
|||
expect(obj.$el.find('input[type=file]').prop('disabled')).toEqual( |
|||
true |
|||
); |
|||
}); |
|||
}); |
|||
test('File input is enabled', () => { |
|||
expect(obj.$el.find('input[type=file]').prop('disabled')).toEqual(true); |
|||
}); |
|||
}); |
|||
|
|||
describe('Interprets configurations correctly', () => { |
|||
test('Has correct title', () => { |
|||
var view = new FileUploader({ |
|||
config: { |
|||
uploadText: 'Test' |
|||
} |
|||
}); |
|||
view.render(); |
|||
expect(view.$el.find('#title').html()).toEqual('Test'); |
|||
}); |
|||
describe('Interprets configurations correctly', () => { |
|||
test('Has correct title', () => { |
|||
var view = new FileUploader({ |
|||
config: { |
|||
uploadText: 'Test' |
|||
} |
|||
}); |
|||
view.render(); |
|||
expect(view.$el.find('#title').html()).toEqual('Test'); |
|||
}); |
|||
|
|||
test('Could be disabled', () => { |
|||
var view = new FileUploader({ |
|||
config: { |
|||
disableUpload: true, |
|||
upload: 'something' |
|||
} |
|||
}); |
|||
view.render(); |
|||
expect(view.$el.find('input[type=file]').prop('disabled')).toEqual( |
|||
true |
|||
); |
|||
}); |
|||
test('Could be disabled', () => { |
|||
var view = new FileUploader({ |
|||
config: { |
|||
disableUpload: true, |
|||
upload: 'something' |
|||
} |
|||
}); |
|||
view.render(); |
|||
expect(view.$el.find('input[type=file]').prop('disabled')).toEqual(true); |
|||
}); |
|||
|
|||
test('Handles multiUpload false', () => { |
|||
var view = new FileUploader({ |
|||
config: { |
|||
multiUpload: false |
|||
} |
|||
}); |
|||
view.render(); |
|||
expect( |
|||
view.$el.find('input[type=file]').prop('multiple') |
|||
).toBeFalsy(); |
|||
}); |
|||
test('Handles multiUpload false', () => { |
|||
var view = new FileUploader({ |
|||
config: { |
|||
multiUpload: false |
|||
} |
|||
}); |
|||
view.render(); |
|||
expect(view.$el.find('input[type=file]').prop('multiple')).toBeFalsy(); |
|||
}); |
|||
|
|||
test('Handles embedAsBase64 parameter', () => { |
|||
var view = new FileUploader({ |
|||
config: { |
|||
embedAsBase64: true |
|||
} |
|||
}); |
|||
view.render(); |
|||
expect(view.$el.find('input[type=file]').prop('disabled')).toEqual( |
|||
false |
|||
); |
|||
expect(view.uploadFile).toEqual(FileUploader.embedAsBase64); |
|||
}); |
|||
test('Handles embedAsBase64 parameter', () => { |
|||
var view = new FileUploader({ |
|||
config: { |
|||
embedAsBase64: true |
|||
} |
|||
}); |
|||
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 Commands from 'commands'; |
|||
|
|||
module.exports = { |
|||
run() { |
|||
describe('Command', () => { |
|||
let obj; |
|||
|
|||
beforeEach(() => { |
|||
obj = new Command(); |
|||
}); |
|||
|
|||
afterEach(() => { |
|||
obj = null; |
|||
}); |
|||
|
|||
test('Has id property', () => { |
|||
expect(obj.has('id')).toEqual(true); |
|||
}); |
|||
}); |
|||
|
|||
describe('Commands', () => { |
|||
var obj; |
|||
|
|||
beforeEach(() => { |
|||
obj = new Commands(); |
|||
}); |
|||
|
|||
afterEach(() => { |
|||
obj = null; |
|||
}); |
|||
|
|||
test('Object is ok', () => { |
|||
expect(obj).toBeTruthy(); |
|||
}); |
|||
}); |
|||
} |
|||
}; |
|||
describe('Command', () => { |
|||
let obj; |
|||
|
|||
beforeEach(() => { |
|||
obj = new Command(); |
|||
}); |
|||
|
|||
afterEach(() => { |
|||
obj = null; |
|||
}); |
|||
|
|||
test('Has id property', () => { |
|||
expect(obj.has('id')).toEqual(true); |
|||
}); |
|||
}); |
|||
|
|||
describe('Commands', () => { |
|||
var obj; |
|||
|
|||
beforeEach(() => { |
|||
obj = new Commands(); |
|||
}); |
|||
|
|||
afterEach(() => { |
|||
obj = null; |
|||
}); |
|||
|
|||
test('Object is ok', () => { |
|||
expect(obj).toBeTruthy(); |
|||
}); |
|||
}); |
|||
|
|||
@ -1,94 +1,84 @@ |
|||
import CommandAbstract from 'commands/view/CommandAbstract'; |
|||
import Editor from 'editor/model/Editor'; |
|||
|
|||
module.exports = { |
|||
run() { |
|||
describe('CommandAbstract', () => { |
|||
let editor, editorTriggerSpy, command; |
|||
describe('CommandAbstract', () => { |
|||
let editor, editorTriggerSpy, command; |
|||
|
|||
beforeEach(() => { |
|||
editor = new Editor(); |
|||
editorTriggerSpy = sinon.spy(editor, 'trigger'); |
|||
beforeEach(() => { |
|||
editor = new Editor(); |
|||
editorTriggerSpy = sinon.spy(editor, 'trigger'); |
|||
|
|||
command = new CommandAbstract(); |
|||
command.id = 'test'; |
|||
}); |
|||
command = new CommandAbstract(); |
|||
command.id = 'test'; |
|||
}); |
|||
|
|||
afterEach(() => { |
|||
command = null; |
|||
editorTriggerSpy = null; |
|||
editor = null; |
|||
}); |
|||
afterEach(() => { |
|||
command = null; |
|||
editorTriggerSpy = null; |
|||
editor = null; |
|||
}); |
|||
|
|||
test('callRun returns result when no "abort" option specified', () => { |
|||
const runStub = sinon.stub(command, 'run').returns('result'); |
|||
test('callRun returns result when no "abort" option specified', () => { |
|||
const runStub = sinon.stub(command, 'run').returns('result'); |
|||
|
|||
const result = command.callRun(editor); |
|||
expect(editorTriggerSpy.callCount).toEqual(3); |
|||
expect(editorTriggerSpy.getCall(0).args).toEqual([ |
|||
'run:test:before', |
|||
{} |
|||
]); |
|||
expect(editorTriggerSpy.getCall(1).args).toEqual([ |
|||
'run:test', |
|||
'result', |
|||
{} |
|||
]); |
|||
expect(editorTriggerSpy.getCall(2).args).toEqual([ |
|||
'run', |
|||
'test', |
|||
'result', |
|||
{} |
|||
]); |
|||
const result = command.callRun(editor); |
|||
expect(editorTriggerSpy.callCount).toEqual(3); |
|||
expect(editorTriggerSpy.getCall(0).args).toEqual(['run:test:before', {}]); |
|||
expect(editorTriggerSpy.getCall(1).args).toEqual([ |
|||
'run:test', |
|||
'result', |
|||
{} |
|||
]); |
|||
expect(editorTriggerSpy.getCall(2).args).toEqual([ |
|||
'run', |
|||
'test', |
|||
'result', |
|||
{} |
|||
]); |
|||
|
|||
expect(result).toEqual('result'); |
|||
expect(runStub.calledOnce).toEqual(true); |
|||
}); |
|||
expect(result).toEqual('result'); |
|||
expect(runStub.calledOnce).toEqual(true); |
|||
}); |
|||
|
|||
test('callRun returns undefined when "abort" option is specified', () => { |
|||
const runStub = sinon.stub(command, 'run').returns('result'); |
|||
test('callRun returns undefined when "abort" option is specified', () => { |
|||
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.getCall(0).args).toEqual([ |
|||
'run:test:before', |
|||
{ abort: true } |
|||
]); |
|||
expect(editorTriggerSpy.getCall(1).args).toEqual([ |
|||
'abort:test', |
|||
{ abort: true } |
|||
]); |
|||
expect(editorTriggerSpy.calledTwice).toEqual(true); |
|||
expect(editorTriggerSpy.getCall(0).args).toEqual([ |
|||
'run:test:before', |
|||
{ abort: true } |
|||
]); |
|||
expect(editorTriggerSpy.getCall(1).args).toEqual([ |
|||
'abort:test', |
|||
{ abort: true } |
|||
]); |
|||
|
|||
expect(result).toEqual(undefined); |
|||
expect(runStub.notCalled).toEqual(true); |
|||
}); |
|||
expect(result).toEqual(undefined); |
|||
expect(runStub.notCalled).toEqual(true); |
|||
}); |
|||
|
|||
test('callStop returns result', () => { |
|||
const stopStub = sinon.stub(command, 'stop').returns('stopped'); |
|||
test('callStop returns result', () => { |
|||
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.getCall(0).args).toEqual([ |
|||
'stop:test:before', |
|||
{} |
|||
]); |
|||
expect(editorTriggerSpy.getCall(1).args).toEqual([ |
|||
'stop:test', |
|||
'stopped', |
|||
{} |
|||
]); |
|||
expect(editorTriggerSpy.getCall(2).args).toEqual([ |
|||
'stop', |
|||
'test', |
|||
'stopped', |
|||
{} |
|||
]); |
|||
expect(editorTriggerSpy.callCount).toEqual(3); |
|||
expect(editorTriggerSpy.getCall(0).args).toEqual(['stop:test:before', {}]); |
|||
expect(editorTriggerSpy.getCall(1).args).toEqual([ |
|||
'stop:test', |
|||
'stopped', |
|||
{} |
|||
]); |
|||
expect(editorTriggerSpy.getCall(2).args).toEqual([ |
|||
'stop', |
|||
'test', |
|||
'stopped', |
|||
{} |
|||
]); |
|||
|
|||
expect(result).toEqual('stopped'); |
|||
expect(stopStub.calledOnce).toEqual(true); |
|||
}); |
|||
}); |
|||
} |
|||
}; |
|||
expect(result).toEqual('stopped'); |
|||
expect(stopStub.calledOnce).toEqual(true); |
|||
}); |
|||
}); |
|||
|
|||
@ -1,202 +1,198 @@ |
|||
import Backbone from 'backbone'; |
|||
const $ = Backbone.$; |
|||
|
|||
module.exports = { |
|||
run() { |
|||
describe('E2E tests', () => { |
|||
var fixtures; |
|||
var fixture; |
|||
var gjs; |
|||
var cssc; |
|||
var clsm; |
|||
var domc; |
|||
var rulesSet; |
|||
var rulesSet2; |
|||
describe('E2E tests', () => { |
|||
var fixtures; |
|||
var fixture; |
|||
var gjs; |
|||
var cssc; |
|||
var clsm; |
|||
var domc; |
|||
var rulesSet; |
|||
var rulesSet2; |
|||
|
|||
beforeAll(() => { |
|||
fixtures = $('#fixtures'); |
|||
fixture = $('<div class="csscomposer-fixture"></div>'); |
|||
}); |
|||
beforeAll(() => { |
|||
fixtures = $('#fixtures'); |
|||
fixture = $('<div class="csscomposer-fixture"></div>'); |
|||
}); |
|||
|
|||
beforeEach(done => { |
|||
//this.timeout(5000);
|
|||
gjs = grapesjs.init({ |
|||
stylePrefix: '', |
|||
storageManager: { autoload: 0, type: 'none' }, |
|||
assetManager: { storageType: 'none' }, |
|||
container: 'csscomposer-fixture' |
|||
}); |
|||
cssc = gjs.CssComposer; |
|||
clsm = gjs.SelectorManager; |
|||
domc = gjs.DomComponents; |
|||
fixture.empty().appendTo(fixtures); |
|||
gjs.render(); |
|||
rulesSet = [ |
|||
{ selectors: [{ name: 'test1' }, { name: 'test2' }] }, |
|||
{ selectors: [{ name: 'test2' }, { name: 'test3' }] }, |
|||
{ selectors: [{ name: 'test3' }] } |
|||
]; |
|||
rulesSet2 = [ |
|||
{ |
|||
selectors: [{ name: 'test1' }, { name: 'test2' }], |
|||
state: ':active' |
|||
}, |
|||
{ selectors: [{ name: 'test2' }, { name: 'test3' }] }, |
|||
{ selectors: [{ name: 'test3' }], mediaText: '(max-width: 900px)' } |
|||
]; |
|||
done(); |
|||
}); |
|||
beforeEach(done => { |
|||
//this.timeout(5000);
|
|||
gjs = grapesjs.init({ |
|||
stylePrefix: '', |
|||
storageManager: { autoload: 0, type: 'none' }, |
|||
assetManager: { storageType: 'none' }, |
|||
container: 'csscomposer-fixture' |
|||
}); |
|||
cssc = gjs.CssComposer; |
|||
clsm = gjs.SelectorManager; |
|||
domc = gjs.DomComponents; |
|||
fixture.empty().appendTo(fixtures); |
|||
gjs.render(); |
|||
rulesSet = [ |
|||
{ selectors: [{ name: 'test1' }, { name: 'test2' }] }, |
|||
{ selectors: [{ name: 'test2' }, { name: 'test3' }] }, |
|||
{ selectors: [{ name: 'test3' }] } |
|||
]; |
|||
rulesSet2 = [ |
|||
{ |
|||
selectors: [{ name: 'test1' }, { name: 'test2' }], |
|||
state: ':active' |
|||
}, |
|||
{ selectors: [{ name: 'test2' }, { name: 'test3' }] }, |
|||
{ selectors: [{ name: 'test3' }], mediaText: '(max-width: 900px)' } |
|||
]; |
|||
done(); |
|||
}); |
|||
|
|||
afterEach(() => { |
|||
gjs = null; |
|||
cssc = null; |
|||
clsm = null; |
|||
}); |
|||
afterEach(() => { |
|||
gjs = null; |
|||
cssc = null; |
|||
clsm = null; |
|||
}); |
|||
|
|||
afterAll(() => { |
|||
fixture.remove(); |
|||
}); |
|||
afterAll(() => { |
|||
fixture.remove(); |
|||
}); |
|||
|
|||
test('Rules are correctly imported from default property', () => { |
|||
var gj = grapesjs.init({ |
|||
stylePrefix: '', |
|||
storageManager: { autoload: 0, type: 'none' }, |
|||
cssComposer: { rules: rulesSet }, |
|||
container: 'csscomposer-fixture' |
|||
}); |
|||
var cssc = gj.editor.get('CssComposer'); |
|||
expect(cssc.getAll().length).toEqual(rulesSet.length); |
|||
var cls = gj.editor.get('SelectorManager').getAll(); |
|||
expect(cls.length).toEqual(3); |
|||
}); |
|||
test('Rules are correctly imported from default property', () => { |
|||
var gj = grapesjs.init({ |
|||
stylePrefix: '', |
|||
storageManager: { autoload: 0, type: 'none' }, |
|||
cssComposer: { rules: rulesSet }, |
|||
container: 'csscomposer-fixture' |
|||
}); |
|||
var cssc = gj.editor.get('CssComposer'); |
|||
expect(cssc.getAll().length).toEqual(rulesSet.length); |
|||
var cls = gj.editor.get('SelectorManager').getAll(); |
|||
expect(cls.length).toEqual(3); |
|||
}); |
|||
|
|||
test('New rule adds correctly the class inside selector manager', () => { |
|||
var rules = cssc.getAll(); |
|||
rules.add({ selectors: [{ name: 'test1', private: true }] }); |
|||
var rule = clsm.getAll().at(0); |
|||
expect(rule.get('name')).toEqual('test1'); |
|||
expect(rule.get('private')).toEqual(true); |
|||
}); |
|||
test('New rule adds correctly the class inside selector manager', () => { |
|||
var rules = cssc.getAll(); |
|||
rules.add({ selectors: [{ name: 'test1', private: true }] }); |
|||
var rule = clsm.getAll().at(0); |
|||
expect(rule.get('name')).toEqual('test1'); |
|||
expect(rule.get('private')).toEqual(true); |
|||
}); |
|||
|
|||
test('New rules are correctly imported inside selector manager', () => { |
|||
var rules = cssc.getAll(); |
|||
rulesSet.forEach(item => { |
|||
rules.add(item); |
|||
}); |
|||
var cls = clsm.getAll(); |
|||
expect(cls.length).toEqual(3); |
|||
expect(cls.at(0).get('name')).toEqual('test1'); |
|||
expect(cls.at(1).get('name')).toEqual('test2'); |
|||
expect(cls.at(2).get('name')).toEqual('test3'); |
|||
}); |
|||
test('New rules are correctly imported inside selector manager', () => { |
|||
var rules = cssc.getAll(); |
|||
rulesSet.forEach(item => { |
|||
rules.add(item); |
|||
}); |
|||
var cls = clsm.getAll(); |
|||
expect(cls.length).toEqual(3); |
|||
expect(cls.at(0).get('name')).toEqual('test1'); |
|||
expect(cls.at(1).get('name')).toEqual('test2'); |
|||
expect(cls.at(2).get('name')).toEqual('test3'); |
|||
}); |
|||
|
|||
test('Add rules from the new component added as a string with style tag', () => { |
|||
var comps = domc.getComponents(); |
|||
var rules = cssc.getAll(); |
|||
comps.add( |
|||
'<div>Test</div><style>.test{color: red} .test2{color: blue}</style>' |
|||
); |
|||
expect(comps.length).toEqual(1); |
|||
expect(rules.length).toEqual(2); |
|||
}); |
|||
test('Add rules from the new component added as a string with style tag', () => { |
|||
var comps = domc.getComponents(); |
|||
var rules = cssc.getAll(); |
|||
comps.add( |
|||
'<div>Test</div><style>.test{color: red} .test2{color: blue}</style>' |
|||
); |
|||
expect(comps.length).toEqual(1); |
|||
expect(rules.length).toEqual(2); |
|||
}); |
|||
|
|||
test('Add raw rule objects with addCollection', () => { |
|||
cssc.addCollection(rulesSet); |
|||
expect(cssc.getAll().length).toEqual(3); |
|||
expect(clsm.getAll().length).toEqual(3); |
|||
}); |
|||
test('Add raw rule objects with addCollection', () => { |
|||
cssc.addCollection(rulesSet); |
|||
expect(cssc.getAll().length).toEqual(3); |
|||
expect(clsm.getAll().length).toEqual(3); |
|||
}); |
|||
|
|||
test('Add raw rule objects twice with addCollection do not duplucate rules', () => { |
|||
var rulesSet2Copy = JSON.parse(JSON.stringify(rulesSet2)); |
|||
var coll1 = cssc.addCollection(rulesSet2); |
|||
var coll2 = cssc.addCollection(rulesSet2Copy); |
|||
expect(cssc.getAll().length).toEqual(3); |
|||
expect(clsm.getAll().length).toEqual(3); |
|||
expect(coll1).toEqual(coll2); |
|||
}); |
|||
test('Add raw rule objects twice with addCollection do not duplucate rules', () => { |
|||
var rulesSet2Copy = JSON.parse(JSON.stringify(rulesSet2)); |
|||
var coll1 = cssc.addCollection(rulesSet2); |
|||
var coll2 = cssc.addCollection(rulesSet2Copy); |
|||
expect(cssc.getAll().length).toEqual(3); |
|||
expect(clsm.getAll().length).toEqual(3); |
|||
expect(coll1).toEqual(coll2); |
|||
}); |
|||
|
|||
test('Extend css rule style, if requested', () => { |
|||
var style1 = { color: 'red', width: '10px' }; |
|||
var style2 = { height: '20px', width: '20px' }; |
|||
var rule1 = { |
|||
selectors: ['test1'], |
|||
style: style1 |
|||
}; |
|||
var rule2 = { |
|||
selectors: ['test1'], |
|||
style: style2 |
|||
}; |
|||
var ruleOut = cssc.addCollection(rule1)[0]; |
|||
// ruleOut is a Model
|
|||
ruleOut = JSON.parse(JSON.stringify(ruleOut)); |
|||
var ruleResult = { |
|||
selectors: [ |
|||
{ |
|||
active: true, |
|||
label: 'test1', |
|||
name: 'test1', |
|||
type: clsm.Selector.TYPE_CLASS, |
|||
private: false, |
|||
protected: false |
|||
} |
|||
], |
|||
style: { |
|||
color: 'red', |
|||
width: '10px' |
|||
} |
|||
}; |
|||
expect(ruleOut).toEqual(ruleResult); |
|||
var ruleOut = cssc.addCollection(rule2, { extend: 1 })[0]; |
|||
ruleOut = JSON.parse(JSON.stringify(ruleOut)); |
|||
ruleResult.style = { |
|||
color: 'red', |
|||
height: '20px', |
|||
width: '20px' |
|||
}; |
|||
expect(ruleOut).toEqual(ruleResult); |
|||
}); |
|||
test('Extend css rule style, if requested', () => { |
|||
var style1 = { color: 'red', width: '10px' }; |
|||
var style2 = { height: '20px', width: '20px' }; |
|||
var rule1 = { |
|||
selectors: ['test1'], |
|||
style: style1 |
|||
}; |
|||
var rule2 = { |
|||
selectors: ['test1'], |
|||
style: style2 |
|||
}; |
|||
var ruleOut = cssc.addCollection(rule1)[0]; |
|||
// ruleOut is a Model
|
|||
ruleOut = JSON.parse(JSON.stringify(ruleOut)); |
|||
var ruleResult = { |
|||
selectors: [ |
|||
{ |
|||
active: true, |
|||
label: 'test1', |
|||
name: 'test1', |
|||
type: clsm.Selector.TYPE_CLASS, |
|||
private: false, |
|||
protected: false |
|||
} |
|||
], |
|||
style: { |
|||
color: 'red', |
|||
width: '10px' |
|||
} |
|||
}; |
|||
expect(ruleOut).toEqual(ruleResult); |
|||
var ruleOut = cssc.addCollection(rule2, { extend: 1 })[0]; |
|||
ruleOut = JSON.parse(JSON.stringify(ruleOut)); |
|||
ruleResult.style = { |
|||
color: 'red', |
|||
height: '20px', |
|||
width: '20px' |
|||
}; |
|||
expect(ruleOut).toEqual(ruleResult); |
|||
}); |
|||
|
|||
test('Do not extend with different selectorsAdd', () => { |
|||
var style1 = { color: 'red', width: '10px' }; |
|||
var style2 = { height: '20px', width: '20px' }; |
|||
var rule1 = { |
|||
selectors: [], |
|||
selectorsAdd: '*', |
|||
style: style1 |
|||
}; |
|||
var rule2 = { |
|||
selectors: [], |
|||
selectorsAdd: 'p', |
|||
style: style2 |
|||
}; |
|||
var rule1Out = cssc.addCollection(rule1, { extend: 1 })[0]; |
|||
var rule2Out = cssc.addCollection(rule2, { extend: 1 })[0]; |
|||
rule1Out = JSON.parse(JSON.stringify(rule1Out)); |
|||
rule2Out = JSON.parse(JSON.stringify(rule2Out)); |
|||
var rule1Result = { |
|||
selectors: [], |
|||
selectorsAdd: '*', |
|||
style: { |
|||
color: 'red', |
|||
width: '10px' |
|||
} |
|||
}; |
|||
var rule2Result = { |
|||
selectors: [], |
|||
selectorsAdd: 'p', |
|||
style: { |
|||
height: '20px', |
|||
width: '20px' |
|||
} |
|||
}; |
|||
expect(rule1Out).toEqual(rule1Result); |
|||
expect(rule2Out).toEqual(rule2Result); |
|||
}); |
|||
test('Do not extend with different selectorsAdd', () => { |
|||
var style1 = { color: 'red', width: '10px' }; |
|||
var style2 = { height: '20px', width: '20px' }; |
|||
var rule1 = { |
|||
selectors: [], |
|||
selectorsAdd: '*', |
|||
style: style1 |
|||
}; |
|||
var rule2 = { |
|||
selectors: [], |
|||
selectorsAdd: 'p', |
|||
style: style2 |
|||
}; |
|||
var rule1Out = cssc.addCollection(rule1, { extend: 1 })[0]; |
|||
var rule2Out = cssc.addCollection(rule2, { extend: 1 })[0]; |
|||
rule1Out = JSON.parse(JSON.stringify(rule1Out)); |
|||
rule2Out = JSON.parse(JSON.stringify(rule2Out)); |
|||
var rule1Result = { |
|||
selectors: [], |
|||
selectorsAdd: '*', |
|||
style: { |
|||
color: 'red', |
|||
width: '10px' |
|||
} |
|||
}; |
|||
var rule2Result = { |
|||
selectors: [], |
|||
selectorsAdd: 'p', |
|||
style: { |
|||
height: '20px', |
|||
width: '20px' |
|||
} |
|||
}; |
|||
expect(rule1Out).toEqual(rule1Result); |
|||
expect(rule2Out).toEqual(rule2Result); |
|||
}); |
|||
|
|||
test('Add raw rule objects with width via addCollection', () => { |
|||
var coll1 = cssc.addCollection(rulesSet2); |
|||
expect(coll1[2].get('mediaText')).toEqual(rulesSet2[2].mediaText); |
|||
}); |
|||
}); |
|||
} |
|||
}; |
|||
test('Add raw rule objects with width via addCollection', () => { |
|||
var coll1 = cssc.addCollection(rulesSet2); |
|||
expect(coll1[2].get('mediaText')).toEqual(rulesSet2[2].mediaText); |
|||
}); |
|||
}); |
|||
|
|||
@ -1,95 +1,91 @@ |
|||
import CssRuleView from 'css_composer/view/CssRuleView'; |
|||
import CssRule from 'css_composer/model/CssRule'; |
|||
|
|||
module.exports = { |
|||
run() { |
|||
describe('CssRuleView', () => { |
|||
let obj; |
|||
let fixtures; |
|||
describe('CssRuleView', () => { |
|||
let obj; |
|||
let fixtures; |
|||
|
|||
beforeEach(() => { |
|||
var m = new CssRule(); |
|||
obj = new CssRuleView({ |
|||
model: m |
|||
}); |
|||
document.body.innerHTML = '<div id="fixtures"></div>'; |
|||
fixtures = document.body.querySelector('#fixtures'); |
|||
fixtures.appendChild(obj.render().el); |
|||
}); |
|||
beforeEach(() => { |
|||
var m = new CssRule(); |
|||
obj = new CssRuleView({ |
|||
model: m |
|||
}); |
|||
document.body.innerHTML = '<div id="fixtures"></div>'; |
|||
fixtures = document.body.querySelector('#fixtures'); |
|||
fixtures.appendChild(obj.render().el); |
|||
}); |
|||
|
|||
afterEach(() => { |
|||
obj.model.destroy(); |
|||
}); |
|||
afterEach(() => { |
|||
obj.model.destroy(); |
|||
}); |
|||
|
|||
test('Object exists', () => { |
|||
expect(CssRuleView).toBeTruthy(); |
|||
}); |
|||
test('Object exists', () => { |
|||
expect(CssRuleView).toBeTruthy(); |
|||
}); |
|||
|
|||
test('Empty style inside', () => { |
|||
expect(fixtures.innerHTML).toEqual('<style></style>'); |
|||
}); |
|||
test('Empty style inside', () => { |
|||
expect(fixtures.innerHTML).toEqual('<style></style>'); |
|||
}); |
|||
|
|||
test('On update of style always empty as there is no selectors', () => { |
|||
obj.model.set('style', { prop: 'value' }); |
|||
expect(fixtures.innerHTML).toEqual('<style></style>'); |
|||
}); |
|||
test('On update of style always empty as there is no selectors', () => { |
|||
obj.model.set('style', { prop: 'value' }); |
|||
expect(fixtures.innerHTML).toEqual('<style></style>'); |
|||
}); |
|||
|
|||
describe('CssRuleView with selectors', () => { |
|||
let objReg; |
|||
describe('CssRuleView with selectors', () => { |
|||
let objReg; |
|||
|
|||
beforeEach(() => { |
|||
var m = new CssRule({ |
|||
selectors: [{ name: 'test1' }, { name: 'test2' }] |
|||
}); |
|||
objReg = new CssRuleView({ |
|||
model: m |
|||
}); |
|||
objReg.render(); |
|||
document.body.innerHTML = '<div id="fixtures"></div>'; |
|||
fixtures = document.body.querySelector('#fixtures'); |
|||
fixtures.appendChild(objReg.el); |
|||
}); |
|||
beforeEach(() => { |
|||
var m = new CssRule({ |
|||
selectors: [{ name: 'test1' }, { name: 'test2' }] |
|||
}); |
|||
objReg = new CssRuleView({ |
|||
model: m |
|||
}); |
|||
objReg.render(); |
|||
document.body.innerHTML = '<div id="fixtures"></div>'; |
|||
fixtures = document.body.querySelector('#fixtures'); |
|||
fixtures.appendChild(objReg.el); |
|||
}); |
|||
|
|||
afterEach(() => { |
|||
objReg.model.destroy(); |
|||
}); |
|||
afterEach(() => { |
|||
objReg.model.destroy(); |
|||
}); |
|||
|
|||
test('Empty with no style', () => { |
|||
expect(objReg.$el.html()).toEqual(''); |
|||
}); |
|||
test('Empty with no style', () => { |
|||
expect(objReg.$el.html()).toEqual(''); |
|||
}); |
|||
|
|||
test('Not empty on update of style', () => { |
|||
objReg.model.set('style', { prop: 'value' }); |
|||
expect(objReg.$el.html()).toEqual('.test1.test2{prop:value;}'); |
|||
}); |
|||
test('Not empty on update of style', () => { |
|||
objReg.model.set('style', { prop: 'value' }); |
|||
expect(objReg.$el.html()).toEqual('.test1.test2{prop:value;}'); |
|||
}); |
|||
|
|||
test('State correctly rendered', () => { |
|||
objReg.model.set('style', { prop: 'value' }); |
|||
objReg.model.set('state', 'hover'); |
|||
expect(objReg.$el.html()).toEqual('.test1.test2:hover{prop:value;}'); |
|||
}); |
|||
test('State correctly rendered', () => { |
|||
objReg.model.set('style', { prop: 'value' }); |
|||
objReg.model.set('state', 'hover'); |
|||
expect(objReg.$el.html()).toEqual('.test1.test2:hover{prop:value;}'); |
|||
}); |
|||
|
|||
test('State render changes on update', () => { |
|||
objReg.model.set('style', { prop: 'value' }); |
|||
objReg.model.set('state', 'hover'); |
|||
objReg.model.set('state', ''); |
|||
expect(objReg.$el.html()).toEqual('.test1.test2{prop:value;}'); |
|||
}); |
|||
test('State render changes on update', () => { |
|||
objReg.model.set('style', { prop: 'value' }); |
|||
objReg.model.set('state', 'hover'); |
|||
objReg.model.set('state', ''); |
|||
expect(objReg.$el.html()).toEqual('.test1.test2{prop:value;}'); |
|||
}); |
|||
|
|||
test('Render media queries', () => { |
|||
objReg.model.set('style', { prop: 'value' }); |
|||
objReg.model.set('mediaText', '(max-width: 999px)'); |
|||
expect(objReg.$el.html()).toEqual( |
|||
'@media (max-width: 999px){.test1.test2{prop:value;}}' |
|||
); |
|||
}); |
|||
test('Render media queries', () => { |
|||
objReg.model.set('style', { prop: 'value' }); |
|||
objReg.model.set('mediaText', '(max-width: 999px)'); |
|||
expect(objReg.$el.html()).toEqual( |
|||
'@media (max-width: 999px){.test1.test2{prop:value;}}' |
|||
); |
|||
}); |
|||
|
|||
test('Empty on clear', () => { |
|||
objReg.model.set('style', { prop: 'value' }); |
|||
objReg.model.set('style', {}); |
|||
expect(objReg.$el.html()).toEqual(''); |
|||
}); |
|||
}); |
|||
test('Empty on clear', () => { |
|||
objReg.model.set('style', { prop: 'value' }); |
|||
objReg.model.set('style', {}); |
|||
expect(objReg.$el.html()).toEqual(''); |
|||
}); |
|||
} |
|||
}; |
|||
}); |
|||
}); |
|||
|
|||
@ -1,68 +1,62 @@ |
|||
import DevicesView from 'device_manager/view/DevicesView'; |
|||
import Devices from 'device_manager/model/Devices'; |
|||
|
|||
module.exports = { |
|||
run() { |
|||
describe('DevicesView', () => { |
|||
var $fixtures; |
|||
var $fixture; |
|||
var model; |
|||
var view; |
|||
var editorModel; |
|||
var em; |
|||
|
|||
beforeEach(() => { |
|||
model = new Devices([]); |
|||
view = new DevicesView({ |
|||
collection: model |
|||
}); |
|||
document.body.innerHTML = '<div id="fixtures"></div>'; |
|||
document.body.querySelector('#fixtures').appendChild(view.render().el); |
|||
}); |
|||
|
|||
afterEach(() => { |
|||
view.collection.reset(); |
|||
}); |
|||
|
|||
test('The content is not empty', () => { |
|||
expect(view.el.innerHTML).toBeTruthy(); |
|||
}); |
|||
|
|||
test('No options without devices', () => { |
|||
expect(view.getOptions()).toEqual(''); |
|||
}); |
|||
|
|||
test('Render new button', () => { |
|||
view.collection.add({}); |
|||
expect(view.$el.html()).toBeTruthy(); |
|||
describe('DevicesView', () => { |
|||
var $fixtures; |
|||
var $fixture; |
|||
var model; |
|||
var view; |
|||
var editorModel; |
|||
var em; |
|||
|
|||
beforeEach(() => { |
|||
model = new Devices([]); |
|||
view = new DevicesView({ |
|||
collection: model |
|||
}); |
|||
document.body.innerHTML = '<div id="fixtures"></div>'; |
|||
document.body.querySelector('#fixtures').appendChild(view.render().el); |
|||
}); |
|||
|
|||
afterEach(() => { |
|||
view.collection.reset(); |
|||
}); |
|||
|
|||
test('The content is not empty', () => { |
|||
expect(view.el.innerHTML).toBeTruthy(); |
|||
}); |
|||
|
|||
test('No options without devices', () => { |
|||
expect(view.getOptions()).toEqual(''); |
|||
}); |
|||
|
|||
test('Render new button', () => { |
|||
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', () => { |
|||
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); |
|||
}); |
|||
|
|||
test('Update device on select change', () => { |
|||
view.$el.find('select').val('test2'); |
|||
view.updateDevice(); |
|||
expect(view.config.em.get('device')).toEqual('test2'); |
|||
}); |
|||
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', () => { |
|||
expect(view.getOptions()).toEqual( |
|||
'<option value="test1">test1</option><option value="test2">test2</option>' |
|||
); |
|||
}); |
|||
}); |
|||
test('Render options', () => { |
|||
expect(view.getOptions()).toEqual( |
|||
'<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 Component from 'dom_components/model/ComponentImage'; |
|||
|
|||
module.exports = { |
|||
run() { |
|||
describe('ComponentImageView', () => { |
|||
var model; |
|||
var view; |
|||
describe('ComponentImageView', () => { |
|||
var model; |
|||
var view; |
|||
|
|||
beforeEach(() => { |
|||
model = new Component(); |
|||
view = new ComponentImageView({ |
|||
model |
|||
}); |
|||
document.body.innerHTML = '<div id="fixtures"></div>'; |
|||
document.body.querySelector('#fixtures').appendChild(view.render().el); |
|||
}); |
|||
beforeEach(() => { |
|||
model = new Component(); |
|||
view = new ComponentImageView({ |
|||
model |
|||
}); |
|||
document.body.innerHTML = '<div id="fixtures"></div>'; |
|||
document.body.querySelector('#fixtures').appendChild(view.render().el); |
|||
}); |
|||
|
|||
afterEach(() => { |
|||
view.remove(); |
|||
}); |
|||
afterEach(() => { |
|||
view.remove(); |
|||
}); |
|||
|
|||
test('Component empty', () => { |
|||
expect(view.el.getAttribute('class')).toEqual(view.classEmpty); |
|||
}); |
|||
test('Component empty', () => { |
|||
expect(view.el.getAttribute('class')).toEqual(view.classEmpty); |
|||
}); |
|||
|
|||
test('TagName is <img>', () => { |
|||
expect(view.el.tagName).toEqual('IMG'); |
|||
}); |
|||
test('TagName is <img>', () => { |
|||
expect(view.el.tagName).toEqual('IMG'); |
|||
}); |
|||
|
|||
test('Update src attribute', () => { |
|||
model.set('src', './'); |
|||
expect(view.el.getAttribute('src')).toEqual('./'); |
|||
}); |
|||
test('Update src attribute', () => { |
|||
model.set('src', './'); |
|||
expect(view.el.getAttribute('src')).toEqual('./'); |
|||
}); |
|||
|
|||
test('Renders correctly', () => { |
|||
expect(view.render()).toBeTruthy(); |
|||
}); |
|||
}); |
|||
} |
|||
}; |
|||
test('Renders correctly', () => { |
|||
expect(view.render()).toBeTruthy(); |
|||
}); |
|||
}); |
|||
|
|||
@ -1,46 +1,42 @@ |
|||
import ComponentTextView from 'dom_components/view/ComponentTextView'; |
|||
import Component from 'dom_components/model/Component'; |
|||
|
|||
module.exports = { |
|||
run() { |
|||
describe('ComponentTextView', () => { |
|||
var fixtures; |
|||
var model; |
|||
var view; |
|||
describe('ComponentTextView', () => { |
|||
var fixtures; |
|||
var model; |
|||
var view; |
|||
|
|||
beforeEach(() => { |
|||
model = new Component(); |
|||
view = new ComponentTextView({ |
|||
model |
|||
}); |
|||
document.body.innerHTML = '<div id="fixtures"></div>'; |
|||
fixtures = document.body.querySelector('#fixtures'); |
|||
fixtures.appendChild(view.render().el); |
|||
}); |
|||
beforeEach(() => { |
|||
model = new Component(); |
|||
view = new ComponentTextView({ |
|||
model |
|||
}); |
|||
document.body.innerHTML = '<div id="fixtures"></div>'; |
|||
fixtures = document.body.querySelector('#fixtures'); |
|||
fixtures.appendChild(view.render().el); |
|||
}); |
|||
|
|||
afterEach(() => { |
|||
view.remove(); |
|||
}); |
|||
afterEach(() => { |
|||
view.remove(); |
|||
}); |
|||
|
|||
test('Component empty', () => { |
|||
expect(fixtures.innerHTML).toEqual( |
|||
'<div data-gjs-type="default" data-highlightable="1"></div>' |
|||
); |
|||
}); |
|||
test('Component empty', () => { |
|||
expect(fixtures.innerHTML).toEqual( |
|||
'<div data-gjs-type="default" data-highlightable="1"></div>' |
|||
); |
|||
}); |
|||
|
|||
test('Input content is stored in model', () => { |
|||
//view.enableEditing();
|
|||
view.el.innerHTML = 'test'; |
|||
//view.disableEditing();
|
|||
//model.get('content').should.equal('test');
|
|||
}); |
|||
test('Input content is stored in model', () => { |
|||
//view.enableEditing();
|
|||
view.el.innerHTML = 'test'; |
|||
//view.disableEditing();
|
|||
//model.get('content').should.equal('test');
|
|||
}); |
|||
|
|||
test('Init with content', () => { |
|||
model = new Component({ content: 'test' }); |
|||
view = new ComponentTextView({ model }); |
|||
fixtures.appendChild(view.render().el); |
|||
expect(view.el.innerHTML).toEqual('test'); |
|||
}); |
|||
}); |
|||
} |
|||
}; |
|||
test('Init with content', () => { |
|||
model = new Component({ content: 'test' }); |
|||
view = new ComponentTextView({ model }); |
|||
fixtures.appendChild(view.render().el); |
|||
expect(view.el.innerHTML).toEqual('test'); |
|||
}); |
|||
}); |
|||
|
|||
@ -1,58 +1,54 @@ |
|||
import ModalView from 'modal_dialog/view/ModalView'; |
|||
import Modal from 'modal_dialog/model/Modal'; |
|||
|
|||
module.exports = { |
|||
run() { |
|||
describe('ModalView', () => { |
|||
var model; |
|||
var view; |
|||
var editorModel; |
|||
|
|||
beforeEach(() => { |
|||
model = new Modal(); |
|||
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(''); |
|||
}); |
|||
describe('ModalView', () => { |
|||
var model; |
|||
var view; |
|||
var editorModel; |
|||
|
|||
beforeEach(() => { |
|||
model = new Modal(); |
|||
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(''); |
|||
}); |
|||
}); |
|||
|
|||
@ -1,70 +1,66 @@ |
|||
module.exports = { |
|||
run() { |
|||
describe('E2E tests', () => { |
|||
var fixtures; |
|||
var fixture; |
|||
var obj; |
|||
var config; |
|||
var editorName = 'panel-fixture'; |
|||
describe('E2E tests', () => { |
|||
var fixtures; |
|||
var fixture; |
|||
var obj; |
|||
var config; |
|||
var editorName = 'panel-fixture'; |
|||
|
|||
beforeAll(() => { |
|||
fixtures = $('<div id="#fixtures"></div>').appendTo('body'); |
|||
}); |
|||
beforeAll(() => { |
|||
fixtures = $('<div id="#fixtures"></div>').appendTo('body'); |
|||
}); |
|||
|
|||
beforeEach(() => { |
|||
obj = grapesjs; |
|||
config = { |
|||
container: '#' + editorName, |
|||
storageManager: { autoload: 0, type: 'none' } |
|||
}; |
|||
fixture = $('<div id="' + editorName + '"></div>'); |
|||
fixture.empty().appendTo(fixtures); |
|||
}); |
|||
beforeEach(() => { |
|||
obj = grapesjs; |
|||
config = { |
|||
container: '#' + editorName, |
|||
storageManager: { autoload: 0, type: 'none' } |
|||
}; |
|||
fixture = $('<div id="' + editorName + '"></div>'); |
|||
fixture.empty().appendTo(fixtures); |
|||
}); |
|||
|
|||
afterEach(() => { |
|||
obj = null; |
|||
config = null; |
|||
fixture.remove(); |
|||
}); |
|||
afterEach(() => { |
|||
obj = null; |
|||
config = null; |
|||
fixture.remove(); |
|||
}); |
|||
|
|||
afterAll(() => { |
|||
//fixture.remove();
|
|||
}); |
|||
afterAll(() => { |
|||
//fixture.remove();
|
|||
}); |
|||
|
|||
test('Command is correctly executed on button click', () => { |
|||
var commandId = 'command-test'; |
|||
config.commands = { |
|||
defaults: [ |
|||
test('Command is correctly executed on button click', () => { |
|||
var commandId = 'command-test'; |
|||
config.commands = { |
|||
defaults: [ |
|||
{ |
|||
id: commandId, |
|||
run(ed, caller) { |
|||
ed.testValue = 'testValue'; |
|||
caller.set('active', false); |
|||
} |
|||
} |
|||
] |
|||
}; |
|||
config.panels = { |
|||
defaults: [ |
|||
{ |
|||
id: 'toolbar-test', |
|||
buttons: [ |
|||
{ |
|||
id: commandId, |
|||
run(ed, caller) { |
|||
ed.testValue = 'testValue'; |
|||
caller.set('active', false); |
|||
} |
|||
id: 'button-test', |
|||
className: 'fa fa-smile-o', |
|||
command: commandId |
|||
} |
|||
] |
|||
}; |
|||
config.panels = { |
|||
defaults: [ |
|||
{ |
|||
id: 'toolbar-test', |
|||
buttons: [ |
|||
{ |
|||
id: 'button-test', |
|||
className: 'fa fa-smile-o', |
|||
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); |
|||
}); |
|||
}); |
|||
} |
|||
}; |
|||
} |
|||
] |
|||
}; |
|||
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 Button from 'panels/model/Button'; |
|||
|
|||
module.exports = { |
|||
run() { |
|||
describe('ButtonView', () => { |
|||
var fixtures; |
|||
var model; |
|||
var view; |
|||
var btnClass = 'btn'; |
|||
describe('ButtonView', () => { |
|||
var fixtures; |
|||
var model; |
|||
var view; |
|||
var btnClass = 'btn'; |
|||
|
|||
beforeEach(() => { |
|||
model = new Button(); |
|||
view = new ButtonView({ |
|||
model: model |
|||
}); |
|||
document.body.innerHTML = '<div id="fixtures"></div>'; |
|||
fixtures = document.body.querySelector('#fixtures'); |
|||
fixtures.appendChild(view.render().el); |
|||
}); |
|||
beforeEach(() => { |
|||
model = new Button(); |
|||
view = new ButtonView({ |
|||
model: model |
|||
}); |
|||
document.body.innerHTML = '<div id="fixtures"></div>'; |
|||
fixtures = document.body.querySelector('#fixtures'); |
|||
fixtures.appendChild(view.render().el); |
|||
}); |
|||
|
|||
afterEach(() => { |
|||
view.remove(); |
|||
}); |
|||
afterEach(() => { |
|||
view.remove(); |
|||
}); |
|||
|
|||
test('Button empty', () => { |
|||
expect(fixtures.innerHTML).toEqual( |
|||
'<span class="' + btnClass + '"></span>' |
|||
); |
|||
}); |
|||
test('Button empty', () => { |
|||
expect(fixtures.innerHTML).toEqual( |
|||
'<span class="' + btnClass + '"></span>' |
|||
); |
|||
}); |
|||
|
|||
test('Update class', () => { |
|||
model.set('className', 'test'); |
|||
expect(view.el.getAttribute('class')).toEqual(btnClass + ' test'); |
|||
}); |
|||
test('Update class', () => { |
|||
model.set('className', 'test'); |
|||
expect(view.el.getAttribute('class')).toEqual(btnClass + ' test'); |
|||
}); |
|||
|
|||
test('Update attributes', () => { |
|||
model.set('attributes', { |
|||
'data-test': 'test-value' |
|||
}); |
|||
expect(view.el.getAttribute('data-test')).toEqual('test-value'); |
|||
}); |
|||
test('Update attributes', () => { |
|||
model.set('attributes', { |
|||
'data-test': 'test-value' |
|||
}); |
|||
expect(view.el.getAttribute('data-test')).toEqual('test-value'); |
|||
}); |
|||
|
|||
test('Check enable active', () => { |
|||
model.set('active', true, { silent: true }); |
|||
view.checkActive(); |
|||
expect(view.el.getAttribute('class')).toContain(btnClass + ' active'); |
|||
}); |
|||
test('Check enable active', () => { |
|||
model.set('active', true, { silent: true }); |
|||
view.checkActive(); |
|||
expect(view.el.getAttribute('class')).toContain(btnClass + ' active'); |
|||
}); |
|||
|
|||
test('Check disable active', () => { |
|||
model.set('active', true, { silent: true }); |
|||
view.checkActive(); |
|||
model.set('active', false, { silent: true }); |
|||
view.checkActive(); |
|||
expect(view.el.getAttribute('class')).toEqual(btnClass); |
|||
}); |
|||
test('Check disable active', () => { |
|||
model.set('active', true, { silent: true }); |
|||
view.checkActive(); |
|||
model.set('active', false, { silent: true }); |
|||
view.checkActive(); |
|||
expect(view.el.getAttribute('class')).toEqual(btnClass); |
|||
}); |
|||
|
|||
test('Disable the button', () => { |
|||
model.set('disable', true, { silent: true }); |
|||
view.updateDisable(); |
|||
expect(view.el.getAttribute('class')).toEqual(btnClass + ' disabled'); |
|||
}); |
|||
test('Disable the button', () => { |
|||
model.set('disable', true, { silent: true }); |
|||
view.updateDisable(); |
|||
expect(view.el.getAttribute('class')).toEqual(btnClass + ' disabled'); |
|||
}); |
|||
|
|||
test('Enable the disabled button', () => { |
|||
model.set('disable', true, { silent: true }); |
|||
view.updateDisable(); |
|||
model.set('disable', false, { silent: true }); |
|||
view.updateDisable(); |
|||
expect(view.el.getAttribute('class')).toEqual(btnClass); |
|||
}); |
|||
test('Enable the disabled button', () => { |
|||
model.set('disable', true, { silent: true }); |
|||
view.updateDisable(); |
|||
model.set('disable', false, { silent: true }); |
|||
view.updateDisable(); |
|||
expect(view.el.getAttribute('class')).toEqual(btnClass); |
|||
}); |
|||
|
|||
test('Cancels the click action when button is disabled', () => { |
|||
const stub = sinon.stub(view, 'toogleActive'); |
|||
model.set('disable', true, { silent: true }); |
|||
view.clicked(); |
|||
expect(stub.called).toEqual(false); |
|||
}); |
|||
test('Cancels the click action when button is disabled', () => { |
|||
const stub = sinon.stub(view, 'toogleActive'); |
|||
model.set('disable', true, { silent: true }); |
|||
view.clicked(); |
|||
expect(stub.called).toEqual(false); |
|||
}); |
|||
|
|||
test('Enable the click action when button is enable', () => { |
|||
const stub = sinon.stub(view, 'toogleActive'); |
|||
model.set('disable', false, { silent: true }); |
|||
view.clicked(); |
|||
expect(stub.called).toEqual(true); |
|||
}); |
|||
test('Enable the click action when button is enable', () => { |
|||
const stub = sinon.stub(view, 'toogleActive'); |
|||
model.set('disable', false, { silent: true }); |
|||
view.clicked(); |
|||
expect(stub.called).toEqual(true); |
|||
}); |
|||
|
|||
test('Renders correctly', () => { |
|||
expect(view.render()).toBeTruthy(); |
|||
}); |
|||
}); |
|||
} |
|||
}; |
|||
test('Renders correctly', () => { |
|||
expect(view.render()).toBeTruthy(); |
|||
}); |
|||
}); |
|||
|
|||
@ -1,41 +1,37 @@ |
|||
import ButtonsView from 'panels/view/ButtonsView'; |
|||
import Buttons from 'panels/model/Buttons'; |
|||
|
|||
module.exports = { |
|||
run() { |
|||
describe('ButtonsView', () => { |
|||
var fixtures; |
|||
var model; |
|||
var view; |
|||
describe('ButtonsView', () => { |
|||
var fixtures; |
|||
var model; |
|||
var view; |
|||
|
|||
beforeEach(() => { |
|||
model = new Buttons([]); |
|||
view = new ButtonsView({ |
|||
collection: model |
|||
}); |
|||
document.body.innerHTML = '<div id="fixtures"></div>'; |
|||
fixtures = document.body.querySelector('#fixtures'); |
|||
fixtures.appendChild(view.render().el); |
|||
}); |
|||
beforeEach(() => { |
|||
model = new Buttons([]); |
|||
view = new ButtonsView({ |
|||
collection: model |
|||
}); |
|||
document.body.innerHTML = '<div id="fixtures"></div>'; |
|||
fixtures = document.body.querySelector('#fixtures'); |
|||
fixtures.appendChild(view.render().el); |
|||
}); |
|||
|
|||
afterEach(() => { |
|||
view.collection.reset(); |
|||
}); |
|||
afterEach(() => { |
|||
view.collection.reset(); |
|||
}); |
|||
|
|||
test('Collection is empty', () => { |
|||
expect(view.$el.html()).toEqual(''); |
|||
}); |
|||
test('Collection is empty', () => { |
|||
expect(view.$el.html()).toEqual(''); |
|||
}); |
|||
|
|||
test('Add new button', () => { |
|||
sinon.stub(view, 'addToCollection'); |
|||
view.collection.add({}); |
|||
expect(view.addToCollection.calledOnce).toEqual(true); |
|||
}); |
|||
test('Add new button', () => { |
|||
sinon.stub(view, 'addToCollection'); |
|||
view.collection.add({}); |
|||
expect(view.addToCollection.calledOnce).toEqual(true); |
|||
}); |
|||
|
|||
test('Render new button', () => { |
|||
view.collection.add({}); |
|||
expect(view.$el.html()).toBeTruthy(); |
|||
}); |
|||
}); |
|||
} |
|||
}; |
|||
test('Render new button', () => { |
|||
view.collection.add({}); |
|||
expect(view.$el.html()).toBeTruthy(); |
|||
}); |
|||
}); |
|||
|
|||
@ -1,74 +1,70 @@ |
|||
import PanelView from 'panels/view/PanelView'; |
|||
import Panel from 'panels/model/Panel'; |
|||
|
|||
module.exports = { |
|||
run() { |
|||
describe('PanelView', () => { |
|||
var fixtures; |
|||
var model; |
|||
var view; |
|||
describe('PanelView', () => { |
|||
var fixtures; |
|||
var model; |
|||
var view; |
|||
|
|||
beforeEach(() => { |
|||
model = new Panel(); |
|||
view = new PanelView({ |
|||
model |
|||
}); |
|||
document.body.innerHTML = '<div id="fixtures"></div>'; |
|||
fixtures = document.body.querySelector('#fixtures'); |
|||
fixtures.appendChild(view.render().el); |
|||
}); |
|||
|
|||
afterEach(() => { |
|||
view.remove(); |
|||
}); |
|||
beforeEach(() => { |
|||
model = new Panel(); |
|||
view = new PanelView({ |
|||
model |
|||
}); |
|||
document.body.innerHTML = '<div id="fixtures"></div>'; |
|||
fixtures = document.body.querySelector('#fixtures'); |
|||
fixtures.appendChild(view.render().el); |
|||
}); |
|||
|
|||
test('Panel empty', () => { |
|||
fixtures.firstChild.className = ''; |
|||
expect(fixtures.innerHTML).toEqual('<div class=""></div>'); |
|||
}); |
|||
afterEach(() => { |
|||
view.remove(); |
|||
}); |
|||
|
|||
test('Append content', () => { |
|||
model.set('appendContent', 'test'); |
|||
model.set('appendContent', 'test2'); |
|||
expect(view.$el.html()).toEqual('testtest2'); |
|||
}); |
|||
test('Panel empty', () => { |
|||
fixtures.firstChild.className = ''; |
|||
expect(fixtures.innerHTML).toEqual('<div class=""></div>'); |
|||
}); |
|||
|
|||
test('Update content', () => { |
|||
model.set('content', 'test'); |
|||
model.set('content', 'test2'); |
|||
expect(view.$el.html()).toEqual('test2'); |
|||
}); |
|||
test('Append content', () => { |
|||
model.set('appendContent', 'test'); |
|||
model.set('appendContent', 'test2'); |
|||
expect(view.$el.html()).toEqual('testtest2'); |
|||
}); |
|||
|
|||
test('Hide panel', () => { |
|||
expect(view.$el.hasClass('hidden')).toBeFalsy(); |
|||
model.set('visible', false); |
|||
expect(view.$el.hasClass('hidden')).toBeTruthy(); |
|||
}); |
|||
test('Update content', () => { |
|||
model.set('content', 'test'); |
|||
model.set('content', 'test2'); |
|||
expect(view.$el.html()).toEqual('test2'); |
|||
}); |
|||
|
|||
test('Show panel', () => { |
|||
model.set('visible', false); |
|||
expect(view.$el.hasClass('hidden')).toBeTruthy(); |
|||
model.set('visible', true); |
|||
expect(view.$el.hasClass('hidden')).toBeFalsy(); |
|||
}); |
|||
test('Hide panel', () => { |
|||
expect(view.$el.hasClass('hidden')).toBeFalsy(); |
|||
model.set('visible', false); |
|||
expect(view.$el.hasClass('hidden')).toBeTruthy(); |
|||
}); |
|||
|
|||
describe('Init with options', () => { |
|||
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); |
|||
}); |
|||
test('Show panel', () => { |
|||
model.set('visible', false); |
|||
expect(view.$el.hasClass('hidden')).toBeTruthy(); |
|||
model.set('visible', true); |
|||
expect(view.$el.hasClass('hidden')).toBeFalsy(); |
|||
}); |
|||
|
|||
afterEach(() => { |
|||
view.remove(); |
|||
}); |
|||
describe('Init with options', () => { |
|||
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 Panels from 'panels/model/Panels'; |
|||
|
|||
module.exports = { |
|||
run() { |
|||
describe('PanelsView', () => { |
|||
var fixtures; |
|||
var $fixture; |
|||
var model; |
|||
var view; |
|||
describe('PanelsView', () => { |
|||
var fixtures; |
|||
var $fixture; |
|||
var model; |
|||
var view; |
|||
|
|||
beforeEach(() => { |
|||
model = new Panels([]); |
|||
view = new PanelsView({ |
|||
collection: model |
|||
}); |
|||
document.body.innerHTML = '<div id="fixtures"></div>'; |
|||
fixtures = document.body.querySelector('#fixtures'); |
|||
fixtures.appendChild(view.render().el); |
|||
}); |
|||
beforeEach(() => { |
|||
model = new Panels([]); |
|||
view = new PanelsView({ |
|||
collection: model |
|||
}); |
|||
document.body.innerHTML = '<div id="fixtures"></div>'; |
|||
fixtures = document.body.querySelector('#fixtures'); |
|||
fixtures.appendChild(view.render().el); |
|||
}); |
|||
|
|||
afterEach(() => { |
|||
view.collection.reset(); |
|||
}); |
|||
afterEach(() => { |
|||
view.collection.reset(); |
|||
}); |
|||
|
|||
test('Collection is empty', () => { |
|||
expect(view.$el.html()).toEqual(''); |
|||
}); |
|||
test('Collection is empty', () => { |
|||
expect(view.$el.html()).toEqual(''); |
|||
}); |
|||
|
|||
test('Add new panel', () => { |
|||
sinon.stub(view, 'addToCollection'); |
|||
view.collection.add({}); |
|||
expect(view.addToCollection.calledOnce).toEqual(true); |
|||
}); |
|||
test('Add new panel', () => { |
|||
sinon.stub(view, 'addToCollection'); |
|||
view.collection.add({}); |
|||
expect(view.addToCollection.calledOnce).toEqual(true); |
|||
}); |
|||
|
|||
test('Render new panel', () => { |
|||
view.collection.add({}); |
|||
expect(view.$el.html()).toBeTruthy(); |
|||
}); |
|||
}); |
|||
} |
|||
}; |
|||
test('Render new panel', () => { |
|||
view.collection.add({}); |
|||
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 ParserCss from 'parser/model/ParserCss'; |
|||
|
|||
module.exports = { |
|||
run() { |
|||
describe('ParserCss', () => { |
|||
let obj; |
|||
let config; |
|||
let customParser; |
|||
|
|||
beforeEach(() => { |
|||
config = { |
|||
em: { |
|||
getCustomParserCss: () => customParser |
|||
} |
|||
}; |
|||
obj = new ParserCss(config); |
|||
}); |
|||
|
|||
afterEach(() => { |
|||
obj = null; |
|||
}); |
|||
|
|||
test('Parse selector', () => { |
|||
var str = '.test'; |
|||
var result = [['test']]; |
|||
expect(parseSelector(str).result).toEqual(result); |
|||
}); |
|||
|
|||
test('Parse selectors', () => { |
|||
var str = '.test1, .test1.test2, .test2.test3'; |
|||
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'; |
|||
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']]; |
|||
expect(parseSelector(str).result).toEqual(result); |
|||
}); |
|||
|
|||
test('Parse simple rule', () => { |
|||
var str = ' .test1 {color:red; width: 50px }'; |
|||
var result = { |
|||
selectors: ['test1'], |
|||
style: { |
|||
color: 'red', |
|||
width: '50px' |
|||
} |
|||
}; |
|||
expect(obj.parse(str)).toEqual([result]); |
|||
}); |
|||
|
|||
test('Parse rule with more selectors', () => { |
|||
var str = ' .test1.test2 {color:red; test: value}'; |
|||
var result = { |
|||
selectors: ['test1', 'test2'], |
|||
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 = [ |
|||
{ |
|||
selectors: ['test1', 'test2'], |
|||
style: { color: 'red' } |
|||
}, |
|||
{ |
|||
selectors: ['test3'], |
|||
style: { color: 'red' } |
|||
} |
|||
]; |
|||
expect(obj.parse(str)).toEqual(result); |
|||
}); |
|||
|
|||
test('Parse more rules', () => { |
|||
var str = |
|||
' .test1.test2, .test3{ color:red } .test4, .test5.test6{ width:10px }'; |
|||
var result = [ |
|||
{ |
|||
selectors: ['test1', 'test2'], |
|||
style: { color: 'red' } |
|||
}, |
|||
{ |
|||
selectors: ['test3'], |
|||
style: { color: 'red' } |
|||
}, |
|||
{ |
|||
selectors: ['test4'], |
|||
style: { width: '10px' } |
|||
}, |
|||
{ |
|||
selectors: ['test5', 'test6'], |
|||
style: { width: '10px' } |
|||
} |
|||
]; |
|||
expect(obj.parse(str)).toEqual(result); |
|||
}); |
|||
|
|||
test('Parse rule with state', () => { |
|||
var str = ' .test1.test2:hover{ color:red }'; |
|||
var result = { |
|||
selectors: ['test1', 'test2'], |
|||
style: { color: 'red' }, |
|||
state: 'hover' |
|||
}; |
|||
expect(obj.parse(str)).toEqual([result]); |
|||
}); |
|||
|
|||
test('Parse rule with state like after', () => { |
|||
var str = ' .test1.test2::after{ color:red }'; |
|||
var result = { |
|||
selectors: ['test1', 'test2'], |
|||
style: { color: 'red' }, |
|||
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 = { |
|||
selectors: ['test1', 'test2'], |
|||
style: { color: 'red' }, |
|||
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 = |
|||
'@media only screen and (max-width: 992px){ .test1.test2:hover{ color:red }}'; |
|||
var result = { |
|||
atRuleType: 'media', |
|||
selectors: ['test1', 'test2'], |
|||
style: { color: 'red' }, |
|||
state: 'hover', |
|||
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 }}'; |
|||
var result = { |
|||
atRuleType: 'media', |
|||
selectors: ['test1', 'test2'], |
|||
style: { color: 'red' }, |
|||
state: 'hover', |
|||
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 = |
|||
'.test1:hover{ color:white }@media (max-width: 992px){ .test1.test2:hover{ color:red } .test2{ color: blue }}'; |
|||
var result = [ |
|||
{ |
|||
selectors: ['test1'], |
|||
style: { color: 'white' }, |
|||
state: 'hover' |
|||
}, |
|||
{ |
|||
selectors: ['test1', 'test2'], |
|||
style: { color: 'red' }, |
|||
state: 'hover', |
|||
atRuleType: 'media', |
|||
mediaText: '(max-width: 992px)' |
|||
}, |
|||
{ |
|||
selectors: ['test2'], |
|||
style: { color: 'blue' }, |
|||
atRuleType: 'media', |
|||
mediaText: '(max-width: 992px)' |
|||
} |
|||
]; |
|||
expect(obj.parse(str)).toEqual(result); |
|||
}); |
|||
|
|||
test('Parse rules with not class-based selectors', () => { |
|||
var str = ' .class1 .class2, div > .class3 { color:red }'; |
|||
var result = { |
|||
selectors: [], |
|||
selectorsAdd: '.class1 .class2, div > .class3', |
|||
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 }'; |
|||
var result = [ |
|||
{ |
|||
selectors: ['class3'], |
|||
style: { color: 'red' } |
|||
}, |
|||
{ |
|||
selectors: ['class5', 'class6'], |
|||
selectorsAdd: '.class1 .class2, div > .class4', |
|||
style: { color: 'red' } |
|||
} |
|||
]; |
|||
expect(obj.parse(str)).toEqual(result); |
|||
}); |
|||
|
|||
test('Parse rule with important styles', () => { |
|||
var str = |
|||
' .test1 {color:red !important; width: 100px; height: 10px !important}'; |
|||
var result = { |
|||
selectors: ['test1'], |
|||
style: { |
|||
color: 'red !important', |
|||
height: '10px !important', |
|||
width: '100px' |
|||
} |
|||
}; |
|||
expect(obj.parse(str)).toEqual([result]); |
|||
}); |
|||
|
|||
test('Parse rule with CSS variables', () => { |
|||
var str = `:root {
|
|||
--some-color: red; |
|||
--some-width: 55px; |
|||
}`;
|
|||
var result = { |
|||
selectors: [], |
|||
selectorsAdd: ':root', |
|||
style: { |
|||
'--some-color': 'red', |
|||
'--some-width': '55px' |
|||
} |
|||
}; |
|||
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 {
|
|||
from {opacity: 0;} |
|||
to {opacity: 1;} |
|||
}`;
|
|||
var result = [ |
|||
{ |
|||
selectors: [], |
|||
atRuleType: 'keyframes', |
|||
selectorsAdd: 'from', |
|||
style: { opacity: '0' } |
|||
}, |
|||
{ |
|||
selectors: [], |
|||
atRuleType: 'keyframes', |
|||
selectorsAdd: 'to', |
|||
style: { opacity: '1' } |
|||
} |
|||
]; |
|||
expect(obj.parse(str)).toEqual(result); |
|||
}); |
|||
|
|||
test('Parse rule with font-face at-rule', () => { |
|||
var str = `@font-face {
|
|||
font-family: "Open Sans"; |
|||
}`;
|
|||
var result = { |
|||
selectors: [], |
|||
selectorsAdd: '', |
|||
atRuleType: 'font-face', |
|||
singleAtRule: 1, |
|||
style: { 'font-family': '"Open Sans"' } |
|||
}; |
|||
expect(obj.parse(str)).toEqual([result]); |
|||
}); |
|||
|
|||
test('Parses multiple font-face at-rules', () => { |
|||
const str = ` |
|||
@font-face { |
|||
font-family: "Open Sans"; |
|||
} |
|||
@font-face { |
|||
font-family: 'Glyphicons Halflings'; |
|||
src:url(https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/fonts/glyphicons-halflings-regular.eot)
|
|||
}`;
|
|||
const result = [ |
|||
{ |
|||
selectors: [], |
|||
selectorsAdd: '', |
|||
style: { 'font-family': '"Open Sans"' }, |
|||
singleAtRule: 1, |
|||
atRuleType: 'font-face' |
|||
}, |
|||
{ |
|||
selectors: [], |
|||
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"', |
|||
describe('ParserCss', () => { |
|||
let obj; |
|||
let config; |
|||
let customParser; |
|||
|
|||
beforeEach(() => { |
|||
config = { |
|||
em: { |
|||
getCustomParserCss: () => customParser |
|||
} |
|||
}; |
|||
obj = new ParserCss(config); |
|||
}); |
|||
|
|||
afterEach(() => { |
|||
obj = null; |
|||
}); |
|||
|
|||
test('Parse selector', () => { |
|||
var str = '.test'; |
|||
var result = [['test']]; |
|||
expect(parseSelector(str).result).toEqual(result); |
|||
}); |
|||
|
|||
test('Parse selectors', () => { |
|||
var str = '.test1, .test1.test2, .test2.test3'; |
|||
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'; |
|||
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']]; |
|||
expect(parseSelector(str).result).toEqual(result); |
|||
}); |
|||
|
|||
test('Parse simple rule', () => { |
|||
var str = ' .test1 {color:red; width: 50px }'; |
|||
var result = { |
|||
selectors: ['test1'], |
|||
style: { |
|||
color: 'red', |
|||
width: '50px' |
|||
} |
|||
}; |
|||
expect(obj.parse(str)).toEqual([result]); |
|||
}); |
|||
|
|||
test('Parse rule with more selectors', () => { |
|||
var str = ' .test1.test2 {color:red; test: value}'; |
|||
var result = { |
|||
selectors: ['test1', 'test2'], |
|||
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 = [ |
|||
{ |
|||
selectors: ['test1', 'test2'], |
|||
style: { color: 'red' } |
|||
}, |
|||
{ |
|||
selectors: ['test3'], |
|||
style: { color: 'red' } |
|||
} |
|||
]; |
|||
expect(obj.parse(str)).toEqual(result); |
|||
}); |
|||
|
|||
test('Parse more rules', () => { |
|||
var str = |
|||
' .test1.test2, .test3{ color:red } .test4, .test5.test6{ width:10px }'; |
|||
var result = [ |
|||
{ |
|||
selectors: ['test1', 'test2'], |
|||
style: { color: 'red' } |
|||
}, |
|||
{ |
|||
selectors: ['test3'], |
|||
style: { color: 'red' } |
|||
}, |
|||
{ |
|||
selectors: ['test4'], |
|||
style: { width: '10px' } |
|||
}, |
|||
{ |
|||
selectors: ['test5', 'test6'], |
|||
style: { width: '10px' } |
|||
} |
|||
]; |
|||
expect(obj.parse(str)).toEqual(result); |
|||
}); |
|||
|
|||
test('Parse rule with state', () => { |
|||
var str = ' .test1.test2:hover{ color:red }'; |
|||
var result = { |
|||
selectors: ['test1', 'test2'], |
|||
style: { color: 'red' }, |
|||
state: 'hover' |
|||
}; |
|||
expect(obj.parse(str)).toEqual([result]); |
|||
}); |
|||
|
|||
test('Parse rule with state like after', () => { |
|||
var str = ' .test1.test2::after{ color:red }'; |
|||
var result = { |
|||
selectors: ['test1', 'test2'], |
|||
style: { color: 'red' }, |
|||
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 = { |
|||
selectors: ['test1', 'test2'], |
|||
style: { color: 'red' }, |
|||
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 = |
|||
'@media only screen and (max-width: 992px){ .test1.test2:hover{ color:red }}'; |
|||
var result = { |
|||
atRuleType: 'media', |
|||
selectors: ['test1', 'test2'], |
|||
style: { color: 'red' }, |
|||
state: 'hover', |
|||
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 }}'; |
|||
var result = { |
|||
atRuleType: 'media', |
|||
selectors: ['test1', 'test2'], |
|||
style: { color: 'red' }, |
|||
state: 'hover', |
|||
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 = |
|||
'.test1:hover{ color:white }@media (max-width: 992px){ .test1.test2:hover{ color:red } .test2{ color: blue }}'; |
|||
var result = [ |
|||
{ |
|||
selectors: ['test1'], |
|||
style: { color: 'white' }, |
|||
state: 'hover' |
|||
}, |
|||
{ |
|||
selectors: ['test1', 'test2'], |
|||
style: { color: 'red' }, |
|||
state: 'hover', |
|||
atRuleType: 'media', |
|||
mediaText: '(max-width: 992px)' |
|||
}, |
|||
{ |
|||
selectors: ['test2'], |
|||
style: { color: 'blue' }, |
|||
atRuleType: 'media', |
|||
mediaText: '(max-width: 992px)' |
|||
} |
|||
]; |
|||
expect(obj.parse(str)).toEqual(result); |
|||
}); |
|||
|
|||
test('Parse rules with not class-based selectors', () => { |
|||
var str = ' .class1 .class2, div > .class3 { color:red }'; |
|||
var result = { |
|||
selectors: [], |
|||
selectorsAdd: '.class1 .class2, div > .class3', |
|||
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 }'; |
|||
var result = [ |
|||
{ |
|||
selectors: ['class3'], |
|||
style: { color: 'red' } |
|||
}, |
|||
{ |
|||
selectors: ['class5', 'class6'], |
|||
selectorsAdd: '.class1 .class2, div > .class4', |
|||
style: { color: 'red' } |
|||
} |
|||
]; |
|||
expect(obj.parse(str)).toEqual(result); |
|||
}); |
|||
|
|||
test('Parse rule with important styles', () => { |
|||
var str = |
|||
' .test1 {color:red !important; width: 100px; height: 10px !important}'; |
|||
var result = { |
|||
selectors: ['test1'], |
|||
style: { |
|||
color: 'red !important', |
|||
height: '10px !important', |
|||
width: '100px' |
|||
} |
|||
}; |
|||
expect(obj.parse(str)).toEqual([result]); |
|||
}); |
|||
|
|||
test('Parse rule with CSS variables', () => { |
|||
var str = `:root {
|
|||
--some-color: red; |
|||
--some-width: 55px; |
|||
}`;
|
|||
var result = { |
|||
selectors: [], |
|||
selectorsAdd: ':root', |
|||
style: { |
|||
'--some-color': 'red', |
|||
'--some-width': '55px' |
|||
} |
|||
}; |
|||
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 {
|
|||
from {opacity: 0;} |
|||
to {opacity: 1;} |
|||
}`;
|
|||
var result = [ |
|||
{ |
|||
selectors: [], |
|||
atRuleType: 'keyframes', |
|||
selectorsAdd: 'from', |
|||
style: { opacity: '0' } |
|||
}, |
|||
{ |
|||
selectors: [], |
|||
atRuleType: 'keyframes', |
|||
selectorsAdd: 'to', |
|||
style: { opacity: '1' } |
|||
} |
|||
]; |
|||
expect(obj.parse(str)).toEqual(result); |
|||
}); |
|||
|
|||
test('Parse rule with font-face at-rule', () => { |
|||
var str = `@font-face {
|
|||
font-family: "Open Sans"; |
|||
}`;
|
|||
var result = { |
|||
selectors: [], |
|||
selectorsAdd: '', |
|||
atRuleType: 'font-face', |
|||
singleAtRule: 1, |
|||
style: { 'font-family': '"Open Sans"' } |
|||
}; |
|||
expect(obj.parse(str)).toEqual([result]); |
|||
}); |
|||
|
|||
test('Parses multiple font-face at-rules', () => { |
|||
const str = ` |
|||
@font-face { |
|||
font-family: "Open Sans"; |
|||
} |
|||
@font-face { |
|||
font-family: 'Glyphicons Halflings'; |
|||
src:url(https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/fonts/glyphicons-halflings-regular.eot)
|
|||
}`;
|
|||
const result = [ |
|||
{ |
|||
selectors: [], |
|||
selectorsAdd: '', |
|||
style: { 'font-family': '"Open Sans"' }, |
|||
singleAtRule: 1, |
|||
atRuleType: 'font-face' |
|||
}, |
|||
{ |
|||
selectors: [], |
|||
selectorsAdd: '', |
|||
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 |
|||
} |
|||
]); |
|||
}); |
|||
'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: |
|||
'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 ClassTagsView from 'selector_manager/view/ClassTagsView'; |
|||
|
|||
module.exports = { |
|||
run() { |
|||
describe('E2E tests', () => { |
|||
var fixtures; |
|||
var components; |
|||
var tagEl; |
|||
var gjs; |
|||
describe('E2E tests', () => { |
|||
var fixtures; |
|||
var components; |
|||
var tagEl; |
|||
var gjs; |
|||
|
|||
var instClassTagViewer = (gjs, fixtures) => { |
|||
var tagEl; |
|||
var clm = gjs.editor.get('SelectorManager'); |
|||
var instClassTagViewer = (gjs, fixtures) => { |
|||
var tagEl; |
|||
var clm = gjs.editor.get('SelectorManager'); |
|||
|
|||
if (clm) { |
|||
tagEl = new ClassTagsView({ |
|||
collection: new Selectors([]), |
|||
config: { em: gjs.editor } |
|||
}).render(); |
|||
fixtures.appendChild(tagEl.el); |
|||
} |
|||
if (clm) { |
|||
tagEl = new ClassTagsView({ |
|||
collection: new Selectors([]), |
|||
config: { em: gjs.editor } |
|||
}).render(); |
|||
fixtures.appendChild(tagEl.el); |
|||
} |
|||
|
|||
return tagEl; |
|||
}; |
|||
/* |
|||
before(function () { |
|||
this.$fixtures = $("#fixtures"); |
|||
this.$fixture = $('<div id="SelectorManager-fixture"></div>'); |
|||
}); |
|||
return tagEl; |
|||
}; |
|||
/* |
|||
before(function () { |
|||
this.$fixtures = $("#fixtures"); |
|||
this.$fixture = $('<div id="SelectorManager-fixture"></div>'); |
|||
}); |
|||
*/ |
|||
beforeEach(() => { |
|||
document.body.innerHTML = |
|||
'<div id="fixtures"><div id="SelectorManager-fixture"></div></div>'; |
|||
fixtures = document.body.firstChild; |
|||
gjs = grapesjs.init({ |
|||
stylePrefix: '', |
|||
storageManager: { autoload: 0, type: 0 }, |
|||
assetManager: { |
|||
storageType: 'none' |
|||
}, |
|||
container: '#SelectorManager-fixture' |
|||
}); |
|||
}); |
|||
beforeEach(() => { |
|||
document.body.innerHTML = |
|||
'<div id="fixtures"><div id="SelectorManager-fixture"></div></div>'; |
|||
fixtures = document.body.firstChild; |
|||
gjs = grapesjs.init({ |
|||
stylePrefix: '', |
|||
storageManager: { autoload: 0, type: 0 }, |
|||
assetManager: { |
|||
storageType: 'none' |
|||
}, |
|||
container: '#SelectorManager-fixture' |
|||
}); |
|||
}); |
|||
|
|||
describe('Interaction with Components', () => { |
|||
beforeEach(() => { |
|||
components = gjs.getComponents(); |
|||
tagEl = instClassTagViewer(gjs, fixtures); |
|||
}); |
|||
describe('Interaction with Components', () => { |
|||
beforeEach(() => { |
|||
components = gjs.getComponents(); |
|||
tagEl = instClassTagViewer(gjs, fixtures); |
|||
}); |
|||
|
|||
test('Assign correctly new class to component', done => { |
|||
var model = components.add({}); |
|||
expect(model.get('classes').length).toEqual(0); |
|||
gjs.select(model); |
|||
setTimeout(() => { |
|||
tagEl.addNewTag('test'); |
|||
expect(model.get('classes').length).toEqual(1); |
|||
expect( |
|||
model |
|||
.get('classes') |
|||
.at(0) |
|||
.get('name') |
|||
).toEqual('test'); |
|||
done(); |
|||
}); |
|||
}); |
|||
test('Assign correctly new class to component', done => { |
|||
var model = components.add({}); |
|||
expect(model.get('classes').length).toEqual(0); |
|||
gjs.select(model); |
|||
setTimeout(() => { |
|||
tagEl.addNewTag('test'); |
|||
expect(model.get('classes').length).toEqual(1); |
|||
expect( |
|||
model |
|||
.get('classes') |
|||
.at(0) |
|||
.get('name') |
|||
).toEqual('test'); |
|||
done(); |
|||
}); |
|||
}); |
|||
|
|||
test('Classes from components are correctly imported inside main container', () => { |
|||
var model = components.add([ |
|||
{ classes: ['test11', 'test12', 'test13'] }, |
|||
{ classes: ['test11', 'test22', 'test22'] } |
|||
]); |
|||
expect(gjs.editor.get('SelectorManager').getAll().length).toEqual(4); |
|||
}); |
|||
test('Classes from components are correctly imported inside main container', () => { |
|||
var model = components.add([ |
|||
{ classes: ['test11', 'test12', 'test13'] }, |
|||
{ classes: ['test11', 'test22', 'test22'] } |
|||
]); |
|||
expect(gjs.editor.get('SelectorManager').getAll().length).toEqual(4); |
|||
}); |
|||
|
|||
test('Class imported into component is the same model from main container', () => { |
|||
var model = components.add({ classes: ['test1'] }); |
|||
var clModel = model.get('classes').at(0); |
|||
var clModel2 = gjs.editor |
|||
.get('SelectorManager') |
|||
.getAll() |
|||
.at(0); |
|||
expect(clModel).toEqual(clModel2); |
|||
}); |
|||
test('Class imported into component is the same model from main container', () => { |
|||
var model = components.add({ classes: ['test1'] }); |
|||
var clModel = model.get('classes').at(0); |
|||
var clModel2 = gjs.editor |
|||
.get('SelectorManager') |
|||
.getAll() |
|||
.at(0); |
|||
expect(clModel).toEqual(clModel2); |
|||
}); |
|||
|
|||
test('Can assign only one time the same class on selected component and the class viewer', done => { |
|||
var model = components.add({}); |
|||
gjs.select(model); |
|||
setTimeout(() => { |
|||
tagEl.addNewTag('test'); |
|||
tagEl.addNewTag('test'); |
|||
expect(model.getSelectors().length).toEqual(1); |
|||
expect( |
|||
model |
|||
.getSelectors() |
|||
.at(0) |
|||
.get('name') |
|||
).toEqual('test'); |
|||
expect(tagEl.collection.length).toEqual(1); |
|||
expect(tagEl.collection.at(0).get('name')).toEqual('test'); |
|||
done(); |
|||
}); |
|||
}); |
|||
test('Can assign only one time the same class on selected component and the class viewer', done => { |
|||
var model = components.add({}); |
|||
gjs.select(model); |
|||
setTimeout(() => { |
|||
tagEl.addNewTag('test'); |
|||
tagEl.addNewTag('test'); |
|||
expect(model.getSelectors().length).toEqual(1); |
|||
expect( |
|||
model |
|||
.getSelectors() |
|||
.at(0) |
|||
.get('name') |
|||
).toEqual('test'); |
|||
expect(tagEl.collection.length).toEqual(1); |
|||
expect(tagEl.collection.at(0).get('name')).toEqual('test'); |
|||
done(); |
|||
}); |
|||
}); |
|||
|
|||
test('Removing from container removes also from selected component', () => { |
|||
var model = components.add({}); |
|||
gjs.editor.setSelected(model); |
|||
tagEl.addNewTag('test'); |
|||
tagEl |
|||
.getClasses() |
|||
.find('.tag #close') |
|||
.trigger('click'); |
|||
setTimeout(() => expect(model.get('classes').length).toEqual(0)); |
|||
}); |
|||
test('Removing from container removes also from selected component', () => { |
|||
var model = components.add({}); |
|||
gjs.editor.setSelected(model); |
|||
tagEl.addNewTag('test'); |
|||
tagEl |
|||
.getClasses() |
|||
.find('.tag #close') |
|||
.trigger('click'); |
|||
setTimeout(() => expect(model.get('classes').length).toEqual(0)); |
|||
}); |
|||
|
|||
test('Trigger correctly event on target with new class add', done => { |
|||
var spy = sinon.spy(); |
|||
var model = components.add({}); |
|||
gjs.select(model); |
|||
setTimeout(() => { |
|||
tagEl.addNewTag('test'); |
|||
gjs.editor.on('component:update:classes', spy); |
|||
tagEl.addNewTag('test'); |
|||
expect(spy.called).toEqual(false); |
|||
tagEl.addNewTag('test2'); |
|||
expect(spy.called).toEqual(true); |
|||
done(); |
|||
}); |
|||
}); |
|||
test('Trigger correctly event on target with new class add', done => { |
|||
var spy = sinon.spy(); |
|||
var model = components.add({}); |
|||
gjs.select(model); |
|||
setTimeout(() => { |
|||
tagEl.addNewTag('test'); |
|||
gjs.editor.on('component:update:classes', spy); |
|||
tagEl.addNewTag('test'); |
|||
expect(spy.called).toEqual(false); |
|||
tagEl.addNewTag('test2'); |
|||
expect(spy.called).toEqual(true); |
|||
done(); |
|||
}); |
|||
}); |
|||
} |
|||
}; |
|||
}); |
|||
}); |
|||
|
|||
@ -1,68 +1,64 @@ |
|||
import Selector from 'selector_manager/model/Selector'; |
|||
import Selectors from 'selector_manager/model/Selectors'; |
|||
|
|||
module.exports = { |
|||
run() { |
|||
describe('Selector', () => { |
|||
var obj; |
|||
describe('Selector', () => { |
|||
var obj; |
|||
|
|||
beforeEach(() => { |
|||
obj = new Selector(); |
|||
}); |
|||
beforeEach(() => { |
|||
obj = new Selector(); |
|||
}); |
|||
|
|||
afterEach(() => { |
|||
obj = null; |
|||
}); |
|||
afterEach(() => { |
|||
obj = null; |
|||
}); |
|||
|
|||
test('Has name property', () => { |
|||
expect(obj.has('name')).toEqual(true); |
|||
}); |
|||
test('Has name property', () => { |
|||
expect(obj.has('name')).toEqual(true); |
|||
}); |
|||
|
|||
test('Has label property', () => { |
|||
expect(obj.has('label')).toEqual(true); |
|||
}); |
|||
test('Has label property', () => { |
|||
expect(obj.has('label')).toEqual(true); |
|||
}); |
|||
|
|||
test('Has active property', () => { |
|||
expect(obj.has('active')).toEqual(true); |
|||
}); |
|||
test('Has active property', () => { |
|||
expect(obj.has('active')).toEqual(true); |
|||
}); |
|||
|
|||
test('escapeName test', () => { |
|||
expect(Selector.escapeName('@Te sT*')).toEqual('-Te-sT-'); |
|||
}); |
|||
test('escapeName test', () => { |
|||
expect(Selector.escapeName('@Te sT*')).toEqual('-Te-sT-'); |
|||
}); |
|||
|
|||
test('Name is corrected at instantiation', () => { |
|||
obj = new Selector({ name: '@Te sT*' }); |
|||
expect(obj.get('name')).toEqual('-Te-sT-'); |
|||
}); |
|||
}); |
|||
test('Name is corrected at instantiation', () => { |
|||
obj = new Selector({ name: '@Te sT*' }); |
|||
expect(obj.get('name')).toEqual('-Te-sT-'); |
|||
}); |
|||
}); |
|||
|
|||
describe('Selectors', () => { |
|||
var obj; |
|||
describe('Selectors', () => { |
|||
var obj; |
|||
|
|||
beforeEach(() => { |
|||
obj = new Selectors(); |
|||
}); |
|||
beforeEach(() => { |
|||
obj = new Selectors(); |
|||
}); |
|||
|
|||
test('Creates collection item correctly', () => { |
|||
var c = new Selectors(); |
|||
var m = c.add({}); |
|||
expect(m instanceof Selector).toEqual(true); |
|||
}); |
|||
test('Creates collection item correctly', () => { |
|||
var c = new Selectors(); |
|||
var m = c.add({}); |
|||
expect(m instanceof Selector).toEqual(true); |
|||
}); |
|||
|
|||
test('getFullString with single class', () => { |
|||
obj.add({ name: 'test' }); |
|||
expect(obj.getFullString()).toEqual('.test'); |
|||
}); |
|||
test('getFullString with single class', () => { |
|||
obj.add({ name: 'test' }); |
|||
expect(obj.getFullString()).toEqual('.test'); |
|||
}); |
|||
|
|||
test('getFullString with multiple classes', () => { |
|||
obj.add([{ name: 'test' }, { name: 'test2' }]); |
|||
expect(obj.getFullString()).toEqual('.test.test2'); |
|||
}); |
|||
test('getFullString with multiple classes', () => { |
|||
obj.add([{ name: 'test' }, { name: 'test2' }]); |
|||
expect(obj.getFullString()).toEqual('.test.test2'); |
|||
}); |
|||
|
|||
test('getFullString with mixed selectors', () => { |
|||
obj.add([{ name: 'test' }, { name: 'test2', type: Selector.TYPE_ID }]); |
|||
expect(obj.getFullString()).toEqual('.test#test2'); |
|||
}); |
|||
}); |
|||
} |
|||
}; |
|||
test('getFullString with mixed selectors', () => { |
|||
obj.add([{ name: 'test' }, { name: 'test2', type: Selector.TYPE_ID }]); |
|||
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 Layers from 'style_manager/model/Layers'; |
|||
|
|||
module.exports = { |
|||
run() { |
|||
describe('LayerView', () => { |
|||
var component; |
|||
var fixtures; |
|||
var target; |
|||
var model; |
|||
var view; |
|||
|
|||
beforeEach(() => { |
|||
var coll = new Layers(); |
|||
model = coll.add({}); |
|||
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(); |
|||
}); |
|||
describe('LayerView', () => { |
|||
var component; |
|||
var fixtures; |
|||
var target; |
|||
var model; |
|||
var view; |
|||
|
|||
beforeEach(() => { |
|||
var coll = new Layers(); |
|||
model = coll.add({}); |
|||
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(); |
|||
}); |
|||
}); |
|||
|
|||
@ -1,91 +1,85 @@ |
|||
import SectorView from 'style_manager/view/SectorView'; |
|||
import Sector from 'style_manager/model/Sector'; |
|||
|
|||
module.exports = { |
|||
run() { |
|||
describe('SectorView', () => { |
|||
var fixtures; |
|||
var model; |
|||
var view; |
|||
describe('SectorView', () => { |
|||
var fixtures; |
|||
var model; |
|||
var view; |
|||
|
|||
beforeEach(() => { |
|||
model = new Sector(); |
|||
view = new SectorView({ |
|||
model |
|||
}); |
|||
document.body.innerHTML = '<div id="fixtures"></div>'; |
|||
fixtures = document.body.querySelector('#fixtures'); |
|||
fixtures.appendChild(view.render().el); |
|||
}); |
|||
beforeEach(() => { |
|||
model = new Sector(); |
|||
view = new SectorView({ |
|||
model |
|||
}); |
|||
document.body.innerHTML = '<div id="fixtures"></div>'; |
|||
fixtures = document.body.querySelector('#fixtures'); |
|||
fixtures.appendChild(view.render().el); |
|||
}); |
|||
|
|||
afterEach(() => { |
|||
view.remove(); |
|||
}); |
|||
afterEach(() => { |
|||
view.remove(); |
|||
}); |
|||
|
|||
test('Rendered correctly', () => { |
|||
var sector = view.el; |
|||
expect(sector.querySelector('.title')).toBeTruthy(); |
|||
var props = sector.querySelector('.properties'); |
|||
expect(props).toBeTruthy(); |
|||
expect(sector.classList.contains('open')).toEqual(true); |
|||
}); |
|||
test('Rendered correctly', () => { |
|||
var sector = view.el; |
|||
expect(sector.querySelector('.title')).toBeTruthy(); |
|||
var props = sector.querySelector('.properties'); |
|||
expect(props).toBeTruthy(); |
|||
expect(sector.classList.contains('open')).toEqual(true); |
|||
}); |
|||
|
|||
test('No properties', () => { |
|||
var props = view.el.querySelector('.properties'); |
|||
expect(props.innerHTML).toEqual(''); |
|||
}); |
|||
test('No properties', () => { |
|||
var props = view.el.querySelector('.properties'); |
|||
expect(props.innerHTML).toEqual(''); |
|||
}); |
|||
|
|||
test('Update on open', () => { |
|||
var sector = view.el; |
|||
var props = sector.querySelector('.properties'); |
|||
model.set('open', false); |
|||
expect(sector.classList.contains('open')).toEqual(false); |
|||
expect(props.style.display).toEqual('none'); |
|||
}); |
|||
test('Update on open', () => { |
|||
var sector = view.el; |
|||
var props = sector.querySelector('.properties'); |
|||
model.set('open', false); |
|||
expect(sector.classList.contains('open')).toEqual(false); |
|||
expect(props.style.display).toEqual('none'); |
|||
}); |
|||
|
|||
test('Toggle on click', () => { |
|||
var sector = view.el; |
|||
view.$el.find('.title').click(); |
|||
expect(sector.classList.contains('open')).toEqual(false); |
|||
}); |
|||
test('Toggle on click', () => { |
|||
var sector = view.el; |
|||
view.$el.find('.title').click(); |
|||
expect(sector.classList.contains('open')).toEqual(false); |
|||
}); |
|||
|
|||
describe('Init with options', () => { |
|||
beforeEach(() => { |
|||
model = new Sector({ |
|||
open: false, |
|||
name: 'TestName', |
|||
properties: [ |
|||
{ type: 'integer' }, |
|||
{ type: 'integer' }, |
|||
{ type: 'integer' } |
|||
] |
|||
}); |
|||
view = new SectorView({ |
|||
model |
|||
}); |
|||
//$fixture.empty().appendTo($fixtures);
|
|||
//$fixture.html(view.render().el);
|
|||
document.body.innerHTML = '<div id="fixtures"></div>'; |
|||
fixtures = document.body.querySelector('#fixtures'); |
|||
fixtures.appendChild(view.render().el); |
|||
}); |
|||
describe('Init with options', () => { |
|||
beforeEach(() => { |
|||
model = new Sector({ |
|||
open: false, |
|||
name: 'TestName', |
|||
properties: [ |
|||
{ type: 'integer' }, |
|||
{ type: 'integer' }, |
|||
{ type: 'integer' } |
|||
] |
|||
}); |
|||
view = new SectorView({ |
|||
model |
|||
}); |
|||
//$fixture.empty().appendTo($fixtures);
|
|||
//$fixture.html(view.render().el);
|
|||
document.body.innerHTML = '<div id="fixtures"></div>'; |
|||
fixtures = document.body.querySelector('#fixtures'); |
|||
fixtures.appendChild(view.render().el); |
|||
}); |
|||
|
|||
test('Rendered correctly', () => { |
|||
var sector = view.el; |
|||
var props = sector.querySelector('.properties'); |
|||
expect(sector.querySelector('.title').innerHTML).toContain( |
|||
'TestName' |
|||
); |
|||
expect(props).toBeTruthy(); |
|||
expect(sector.classList.contains('open')).toEqual(false); |
|||
expect(props.style.display).toEqual('none'); |
|||
}); |
|||
test('Rendered correctly', () => { |
|||
var sector = view.el; |
|||
var props = sector.querySelector('.properties'); |
|||
expect(sector.querySelector('.title').innerHTML).toContain('TestName'); |
|||
expect(props).toBeTruthy(); |
|||
expect(sector.classList.contains('open')).toEqual(false); |
|||
expect(props.style.display).toEqual('none'); |
|||
}); |
|||
|
|||
test('Has properties', () => { |
|||
var props = view.el.querySelector('.properties'); |
|||
expect(props.children.length).toEqual(3); |
|||
}); |
|||
}); |
|||
test('Has properties', () => { |
|||
var props = view.el.querySelector('.properties'); |
|||
expect(props.children.length).toEqual(3); |
|||
}); |
|||
} |
|||
}; |
|||
}); |
|||
}); |
|||
|
|||
@ -1,35 +1,31 @@ |
|||
import SectorsView from 'style_manager/view/SectorsView'; |
|||
import Sectors from 'style_manager/model/Sectors'; |
|||
|
|||
module.exports = { |
|||
run() { |
|||
describe('SectorsView', () => { |
|||
var fixtures; |
|||
var model; |
|||
var view; |
|||
describe('SectorsView', () => { |
|||
var fixtures; |
|||
var model; |
|||
var view; |
|||
|
|||
beforeEach(() => { |
|||
model = new Sectors([]); |
|||
view = new SectorsView({ |
|||
collection: model |
|||
}); |
|||
document.body.innerHTML = '<div id="fixtures"></div>'; |
|||
fixtures = document.body.firstChild; |
|||
fixtures.appendChild(view.render().el); |
|||
}); |
|||
beforeEach(() => { |
|||
model = new Sectors([]); |
|||
view = new SectorsView({ |
|||
collection: model |
|||
}); |
|||
document.body.innerHTML = '<div id="fixtures"></div>'; |
|||
fixtures = document.body.firstChild; |
|||
fixtures.appendChild(view.render().el); |
|||
}); |
|||
|
|||
afterEach(() => { |
|||
view.collection.reset(); |
|||
}); |
|||
afterEach(() => { |
|||
view.collection.reset(); |
|||
}); |
|||
|
|||
test('Collection is empty', () => { |
|||
expect(view.el.innerHTML).toEqual(''); |
|||
}); |
|||
test('Collection is empty', () => { |
|||
expect(view.el.innerHTML).toEqual(''); |
|||
}); |
|||
|
|||
test('Add new sectors', () => { |
|||
view.collection.add([{}, {}]); |
|||
expect(view.el.children.length).toEqual(2); |
|||
}); |
|||
}); |
|||
} |
|||
}; |
|||
test('Add new sectors', () => { |
|||
view.collection.add([{}, {}]); |
|||
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 Component from 'dom_components/model/Component'; |
|||
|
|||
module.exports = { |
|||
run() { |
|||
describe('TraitModels', () => { |
|||
var obj; |
|||
var target; |
|||
var modelName = 'title'; |
|||
describe('TraitModels', () => { |
|||
var obj; |
|||
var target; |
|||
var modelName = 'title'; |
|||
|
|||
beforeEach(() => { |
|||
target = new Component(); |
|||
obj = new Trait({ |
|||
name: modelName, |
|||
target |
|||
}); |
|||
}); |
|||
beforeEach(() => { |
|||
target = new Component(); |
|||
obj = new Trait({ |
|||
name: modelName, |
|||
target |
|||
}); |
|||
}); |
|||
|
|||
afterEach(() => { |
|||
obj = null; |
|||
}); |
|||
afterEach(() => { |
|||
obj = null; |
|||
}); |
|||
|
|||
test('Object exists', () => { |
|||
expect(Trait).toBeTruthy(); |
|||
}); |
|||
}); |
|||
} |
|||
}; |
|||
test('Object exists', () => { |
|||
expect(Trait).toBeTruthy(); |
|||
}); |
|||
}); |
|||
|
|||
@ -1,438 +1,432 @@ |
|||
define(function(require, exports, module) { |
|||
'use strict'; |
|||
var Sorter = require('undefined'); |
|||
|
|||
module.exports = { |
|||
run: function() { |
|||
describe('Sorter', () => { |
|||
var fixtures; |
|||
var fixture; |
|||
var obj; |
|||
var parent; |
|||
var plh; |
|||
var html; |
|||
|
|||
beforeAll(function() { |
|||
fixture = $('<div class="sorter-fixture"></div>').get(0); |
|||
}); |
|||
|
|||
beforeEach(() => { |
|||
parent = document.createElement('div'); |
|||
parent.setAttribute('class', 'parent1'); |
|||
plh = document.createElement('div'); |
|||
document.body.appendChild(parent); |
|||
obj = new Sorter({ container: '.parent1' }); |
|||
document.body.appendChild(fixture); |
|||
fixture.appendChild(parent); |
|||
html = |
|||
'<div id="el1" style="overflow: hidden;">' + |
|||
'<div id="el2">ba' + |
|||
'<p id="baa">baa</p>' + |
|||
'<span id="elspan">bab</span>' + |
|||
'<span id="bac" style="display:block;">bac</span>' + |
|||
'<div id="eldiv">eldiv</div>' + |
|||
'</div>' + |
|||
'</div>' + |
|||
'<div id="a">' + |
|||
'<div id="aa">aa' + |
|||
'<p id="aaa">aaa</p>' + |
|||
'<span id="aab">aab</span>' + |
|||
'<span id="aac" style="display:block;">aac</span>' + |
|||
'</div>' + |
|||
'<div id="ab" style="float: left;">ab</div>' + |
|||
'<div id="ac" style="position: absolute;">ac' + |
|||
'<div id="aca" style="float: left;">aca</div>' + |
|||
'<div id="acb">acb</div>' + |
|||
'</div>' + |
|||
'<div id="ad" style="overflow: hidden;">ad' + |
|||
'<p id="ada">ada</p>' + |
|||
'<span id="adb">adb</span>' + |
|||
'<span id="adc" style="display:block;">adc</span>' + |
|||
'</div>' + |
|||
'</div>'; |
|||
}); |
|||
|
|||
afterEach(() => { |
|||
document.body.removeChild(fixture); |
|||
obj = null; |
|||
parent = null; |
|||
html = null; |
|||
}); |
|||
|
|||
test('matches class', () => { |
|||
var el = document.createElement('div'); |
|||
el.setAttribute('class', 'test test2'); |
|||
parent.appendChild(el); |
|||
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'); |
|||
parent.appendChild(el); |
|||
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); |
|||
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('isInFlow to overflow hidden', () => { |
|||
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'); |
|||
if (!el) { |
|||
console.log('phantom issue'); |
|||
return; |
|||
} |
|||
obj.isInFlow(el).should.equal(true); |
|||
}); |
|||
|
|||
test('isInFlow for span', () => { |
|||
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'); |
|||
if (!el) { |
|||
console.log('phantom issue'); |
|||
return; |
|||
} |
|||
obj.isInFlow(el).should.equal(true); |
|||
}); |
|||
|
|||
test('isInFlow for div #aa', () => { |
|||
parent.innerHTML = html; |
|||
var el = parent.querySelector('#aa'); |
|||
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'); |
|||
}); |
|||
}); |
|||
}); |
|||
}); |
|||
// import Sorter from '../../../src/utils/Sorter.js'
|
|||
|
|||
// TODO: Migrate this file to Jest
|
|||
|
|||
describe.skip('Sorter', () => { |
|||
var fixture; |
|||
var obj; |
|||
var parent; |
|||
var plh; |
|||
var html; |
|||
|
|||
beforeAll(function() { |
|||
fixture = $('<div class="sorter-fixture"></div>').get(0); |
|||
}); |
|||
|
|||
beforeEach(() => { |
|||
parent = document.createElement('div'); |
|||
parent.setAttribute('class', 'parent1'); |
|||
plh = document.createElement('div'); |
|||
document.body.appendChild(parent); |
|||
obj = new Sorter({ container: '.parent1' }); |
|||
document.body.appendChild(fixture); |
|||
fixture.appendChild(parent); |
|||
html = |
|||
'<div id="el1" style="overflow: hidden;">' + |
|||
'<div id="el2">ba' + |
|||
'<p id="baa">baa</p>' + |
|||
'<span id="elspan">bab</span>' + |
|||
'<span id="bac" style="display:block;">bac</span>' + |
|||
'<div id="eldiv">eldiv</div>' + |
|||
'</div>' + |
|||
'</div>' + |
|||
'<div id="a">' + |
|||
'<div id="aa">aa' + |
|||
'<p id="aaa">aaa</p>' + |
|||
'<span id="aab">aab</span>' + |
|||
'<span id="aac" style="display:block;">aac</span>' + |
|||
'</div>' + |
|||
'<div id="ab" style="float: left;">ab</div>' + |
|||
'<div id="ac" style="position: absolute;">ac' + |
|||
'<div id="aca" style="float: left;">aca</div>' + |
|||
'<div id="acb">acb</div>' + |
|||
'</div>' + |
|||
'<div id="ad" style="overflow: hidden;">ad' + |
|||
'<p id="ada">ada</p>' + |
|||
'<span id="adb">adb</span>' + |
|||
'<span id="adc" style="display:block;">adc</span>' + |
|||
'</div>' + |
|||
'</div>'; |
|||
}); |
|||
|
|||
afterEach(() => { |
|||
document.body.removeChild(fixture); |
|||
obj = null; |
|||
parent = null; |
|||
html = null; |
|||
}); |
|||
|
|||
test('matches class', () => { |
|||
var el = document.createElement('div'); |
|||
el.setAttribute('class', 'test test2'); |
|||
parent.appendChild(el); |
|||
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'); |
|||
parent.appendChild(el); |
|||
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); |
|||
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('isInFlow to overflow hidden', () => { |
|||
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'); |
|||
if (!el) { |
|||
console.log('phantom issue'); |
|||
return; |
|||
} |
|||
obj.isInFlow(el).should.equal(true); |
|||
}); |
|||
|
|||
test('isInFlow for span', () => { |
|||
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'); |
|||
if (!el) { |
|||
console.log('phantom issue'); |
|||
return; |
|||
} |
|||
obj.isInFlow(el).should.equal(true); |
|||
}); |
|||
|
|||
test('isInFlow for div #aa', () => { |
|||
parent.innerHTML = html; |
|||
var el = parent.querySelector('#aa'); |
|||
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'); |
|||
}); |
|||
}); |
|||
}); |
|||
}); |
|||
|
|||
@ -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