| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- /**
- * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
- */
- 'use strict';
- import moduleUtils from '/tests/ckeditor5/_utils/module.js';
- import View from '/ckeditor5/ui/view.js';
- import Controller from '/ckeditor5/ui/controller.js';
- import ControllerCollection from '/ckeditor5/ui/controllercollection.js';
- /**
- * General test utils for CKEditor.
- */
- const utils = {
- /**
- * Creates Sinon sandbox in {@link bender#sinon} and plugs `afterEach()` callback which
- * restores all spies and stubs created in this sandbox.
- *
- * See https://github.com/ckeditor/ckeditor5-design/issues/72 and http://sinonjs.org/docs/#sinon-sandbox
- *
- * Usage:
- *
- * // Directly in the test file:
- * testUtils.createSinonSandbox();
- *
- * // Then inside tests you can use bender.sinon:
- * it( 'does something', () => {
- * testUtils.sinon.spy( obj, 'method' );
- * } );
- */
- createSinonSandbox() {
- before( () => {
- utils.sinon = sinon.sandbox.create();
- } );
- afterEach( () => {
- utils.sinon.restore();
- } );
- },
- /**
- * Defines CKEditor plugin which is a mock of an editor creator.
- *
- * The mocked creator is available under:
- *
- * editor.plugins.get( 'creator-thename' );
- *
- * @param {String} creatorName Name of the creator.
- * @param {Object} [proto] Prototype of the creator. Properties from the proto param will
- * be copied to the prototype of the creator.
- */
- defineEditorCreatorMock( creatorName, proto ) {
- moduleUtils.define( `creator-${ creatorName }/creator-${ creatorName }`, [ 'creator/creator' ], ( Creator ) => {
- class TestCreator extends Creator {}
- if ( proto ) {
- for ( let propName in proto ) {
- TestCreator.prototype[ propName ] = proto[ propName ];
- }
- }
- return TestCreator;
- } );
- },
- /**
- * Returns UI controller for given region/DOM selector pairs, which {@link ui.Controller#view}
- * is `document.body`. It is useful for manual tests which engage various UI components and/or
- * UI {@link ui.Controller} instances, where initialization and the process of insertion into
- * DOM could be problematic i.e. because of the number of instances.
- *
- * Usage:
- *
- * // Get the controller.
- * const controller = testUtils.createTestUIController();
- *
- * // Then use it to organize and initialize children.
- * controller.add( 'some-collection', childControllerInstance );
- *
- * @param {Object} regions An object literal with `regionName: DOM Selector pairs`.
- * See {@link ui.View#register}.
- */
- createTestUIController( regions ) {
- const TestUIView = class extends View {
- constructor() {
- super();
- this.element = document.body;
- for ( let r in regions ) {
- this.register( r, regions[ r ] );
- }
- }
- };
- const controller = new Controller( null, new TestUIView() );
- for ( let r in regions ) {
- controller.collections.add( new ControllerCollection( r ) );
- }
- return controller.init().then( () => {
- return controller;
- } );
- }
- };
- export default utils;
|