import { Pipeline } from '@ephox/agar'; import { LegacyUnit } from '@ephox/mcagar'; import EventUtils from 'tinymce/core/api/dom/EventUtils'; import ViewBlock from '../module/test/ViewBlock'; import Api from 'tinymce/ui/Api'; import Collection from 'tinymce/ui/Collection'; import Factory from 'tinymce/core/api/ui/Factory'; import { UnitTest } from '@ephox/bedrock'; UnitTest.asynctest('browser.tinymce.ui.ButtonTest', function () { const success = arguments[arguments.length - 2]; const failure = arguments[arguments.length - 1]; const suite = LegacyUnit.createSuite(); const viewBlock = ViewBlock(); let panel; // Registers ui widgets to factory Api.registerToFactory(); const createPanel = function () { panel = Factory.create({ type: 'panel', items: [ { type: 'button', name: 'button1', text: 'button1', classes: 'class1', disabled: true }, { type: 'button', name: 'button2', classes: 'class1 class2' }, { type: 'button', name: 'button3', classes: 'class2 class1 class3' }, { type: 'buttongroup', name: 'buttongroup1', items: [ { type: 'button', name: 'button4' }, { type: 'button', name: 'button5' }, { type: 'button', name: 'button6' } ] }, { type: 'buttongroup', name: 'buttongroup2', items: [ { type: 'button', name: 'button7' }, { type: 'button', name: 'button8' }, { type: 'button', name: 'button9' } ] }, { type: 'toolbar', name: 'toolbar1', items: [ { type: 'buttongroup', name: 'buttongroup3', items: [ { type: 'button', name: 'button10', disabled: true }, { type: 'button', name: 'button11' }, { type: 'button', name: 'button12', classes: 'class4' } ] } ] } ] }).renderTo(viewBlock.get()); }; suite.test('Constructor', function () { LegacyUnit.equal(new Collection().length, 0); LegacyUnit.equal(new Collection(panel.find('button').toArray()).length, 12); LegacyUnit.equal(new Collection(panel.find('button')).length, 12); LegacyUnit.equal(new Collection(panel.find('button:first')[0]).length, 1); LegacyUnit.equal(new Collection(panel.find('button:first')[0])[0].type, 'button'); }); suite.test('add', function () { const collection = new Collection([panel, panel]); LegacyUnit.equal(collection.add(panel).length, 3); LegacyUnit.equal(collection.add([panel, panel]).length, 5); }); suite.test('set', function () { const collection = new Collection([panel, panel]); LegacyUnit.equal(collection.set(panel).length, 1); LegacyUnit.equal(collection.set([panel, panel]).length, 2); }); suite.test('filter', function () { LegacyUnit.equal(panel.find('button').filter('*:first').length, 4); LegacyUnit.equal(panel.find('button').filter('buttongroup button').length, 9); LegacyUnit.equal(panel.find('button').filter('*').length, 12); LegacyUnit.equal(panel.find('button').filter('nomatch').length, 0); LegacyUnit.equal(panel.find('button').filter(function (ctrl) { return ctrl.settings.name === 'button7'; }).length, 1); }); suite.test('slice', function () { LegacyUnit.equal(panel.find('button').slice(1).length, 11); LegacyUnit.equal(panel.find('button').slice(1)[0].name(), 'button2'); LegacyUnit.equal(panel.find('button').slice(0, 1).length, 1); LegacyUnit.equal(panel.find('button').slice(0, 1)[0].name(), 'button1'); LegacyUnit.equal(panel.find('button').slice(-1).length, 1); LegacyUnit.equal(panel.find('button').slice(-1)[0].name(), 'button12'); LegacyUnit.equal(panel.find('button').slice(-2).length, 2); LegacyUnit.equal(panel.find('button').slice(-2)[0].name(), 'button11'); LegacyUnit.equal(panel.find('button').slice(-2, -1).length, 1); LegacyUnit.equal(panel.find('button').slice(-2, -1)[0].name(), 'button11'); LegacyUnit.equal(panel.find('button').slice(1000).length, 0); LegacyUnit.equal(panel.find('button').slice(-1000).length, 12); }); suite.test('eq', function () { LegacyUnit.equal(panel.find('button').eq(1).length, 1); LegacyUnit.equal(panel.find('button').eq(1)[0].name(), 'button2'); LegacyUnit.equal(panel.find('button').eq(-2).length, 1); LegacyUnit.equal(panel.find('button').eq(-2)[0].name(), 'button11'); LegacyUnit.equal(panel.find('button').eq(1000).length, 0); }); suite.test('each', function () { let count; count = 0; panel.find('button').each(function () { count++; }); LegacyUnit.equal(count, 12); count = 0; panel.find('nomatch').each(function () { count++; }); LegacyUnit.equal(count, 0); count = 0; panel.find('button').each(function (item, index) { count += index; }); LegacyUnit.equal(count, 66); count = 0; panel.find('button').each(function (item) { if (item.type === 'button') { count++; } }); LegacyUnit.equal(count, 12); count = 0; panel.find('button').each(function (item, index) { count++; if (index === 3) { return false; } }); LegacyUnit.equal(count, 4); }); suite.test('toArray', function () { LegacyUnit.equal(panel.find('button').toArray().length, 12); LegacyUnit.equal(panel.find('button').toArray().concat, Array.prototype.concat); }); suite.test('fire/on/off', function () { let value; value = 0; panel.find('button').off(); panel.find('button#button1,button#button2').on('test', function (args) { value += args.value; }); panel.find('button#button1').fire('test', { value: 42 }); LegacyUnit.equal(value, 42); value = 0; panel.find('button').off(); panel.find('button#button1,button#button2').on('test', function (args) { value += args.value; }); panel.find('button').fire('test', { value: 42 }); LegacyUnit.equal(value, 84); value = 0; panel.find('button').off(); panel.find('button#button1,button#button2').on('test', function (args) { value += args.value; }); panel.find('button#button1').off('test'); panel.find('button').fire('test', { value: 42 }); LegacyUnit.equal(value, 42); panel.find('button').off(); value = 0; panel.find('button').fire('test', { value: 42 }); LegacyUnit.equal(value, 0); }); suite.test('show/hide', function () { panel.find('button#button1,button#button2').hide(); LegacyUnit.equal(panel.find('button:not(:visible)').length, 2); panel.find('button#button1').show(); LegacyUnit.equal(panel.find('button:not(:visible)').length, 1); panel.find('button#button2').show(); }); suite.test('text', function () { LegacyUnit.equal(panel.find('button#button1,button#button2').text(), 'button1'); LegacyUnit.equal(panel.find('button#button2').text('button2').text(), 'button2'); LegacyUnit.equal(panel.find('button#button2,button#button3').text('test').text(), 'test'); LegacyUnit.equal(panel.find('button#button3').text(), 'test'); }); suite.test('disabled', function () { LegacyUnit.equal(panel.find('button#button1').disabled(), true); LegacyUnit.equal(panel.find('button#button2').disabled(), false); LegacyUnit.equal(panel.find('button#button2').disabled(true).disabled(), true); panel.find('button#button2').disabled(false); }); suite.test('visible', function () { LegacyUnit.equal(panel.find('button#button2').visible(), true); LegacyUnit.equal(panel.find('button#button2').visible(false).visible(), false); panel.find('button#button2').visible(true); }); suite.test('active', function () { LegacyUnit.equal(panel.find('button#button2').active(), false); LegacyUnit.equal(panel.find('button#button2').active(true).active(), true); panel.find('button#button2').active(false); }); suite.test('name', function () { LegacyUnit.equal(panel.find('button#button1').name(), 'button1'); LegacyUnit.equal(panel.find('button#button2').name('buttonX').name(), 'buttonX'); panel.find('button#buttonX').name('button2'); }); suite.test('addClass/removeClass/hasClass', function () { panel.find('button#button1').addClass('test'); LegacyUnit.equal(panel.find('button#button1').hasClass('test'), true); LegacyUnit.equal(panel.find('button#button1').hasClass('nomatch'), false); panel.find('button#button1').removeClass('test'); LegacyUnit.equal(panel.find('button#button1').hasClass('test'), false); }); suite.test('prop', function () { LegacyUnit.equal(panel.find('button#button1').prop('disabled'), true); LegacyUnit.equal(panel.find('button#button1').prop('name'), 'button1'); LegacyUnit.equal(panel.find('button#button1').prop('name', 'buttonX').prop('name'), 'buttonX'); panel.find('button#buttonX').prop('name', 'button1'); LegacyUnit.equal(panel.find('button#button1').prop('missingProperty'), undefined); }); suite.test('exec', function () { LegacyUnit.equal(panel.find('button#button1').exec('disabled', false).disabled(), false); panel.find('button#button1').disabled(true); }); viewBlock.attach(); createPanel(); Pipeline.async({}, suite.toSteps({}), function () { EventUtils.Event.clean(viewBlock.get()); viewBlock.detach(); success(); }, failure); });