extensions.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. /**
  2. * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
  3. * For licensing, see LICENSE.md.
  4. */
  5. /* globals bender, CKEDITOR, describe: true */
  6. 'use strict';
  7. // ### General extensions.
  8. ( function() {
  9. // Make Bender wait to start running tests.
  10. var done = bender.defer();
  11. // Wait for the "ckeditor" module to be ready to start testing.
  12. CKEDITOR.require( [ 'ckeditor' ], done );
  13. } )();
  14. // ### AMD related extensions.
  15. ( function() {
  16. var wasRequireCalled,
  17. requires;
  18. /**
  19. * AMD tools related to CKEditor.
  20. */
  21. bender.amd = {
  22. /**
  23. * Specifies the list of CKEditor modules to be loaded before tests start. The modules will be passed to the
  24. * describe() functions as parameters.
  25. *
  26. * @params {...String} module The name of the module to load.
  27. */
  28. require: function() {
  29. if ( wasRequireCalled ) {
  30. throw 'bender.amd.require() must be called just once.';
  31. }
  32. wasRequireCalled = true;
  33. var done = bender.defer();
  34. var modules = [].slice.call( arguments );
  35. CKEDITOR.require( modules, function() {
  36. // Save all returned modules.
  37. requires = [].slice.call( arguments );
  38. // Call all describe()s that where waiting for `requires` to load.
  39. flushDescribeQueue();
  40. // Finally give green light for tests to start.
  41. done();
  42. } );
  43. }
  44. };
  45. var originalDescribe = describe;
  46. var describeQueue = [];
  47. // Override the original Mocha's describe() so we can pass required modules to it.
  48. describe = function( title, fn ) {
  49. if ( wasRequireCalled ) {
  50. // Queue the call.
  51. describeQueue.push( [ this, title, fn ] );
  52. // Then eventually call it for real, if `requires` have beel loaded already.
  53. flushDescribeQueue();
  54. } else {
  55. originalDescribe.apply( this, arguments );
  56. }
  57. };
  58. // Call all defined describe()s if `requires` have been loaded already.
  59. function flushDescribeQueue() {
  60. if ( requires ) {
  61. describeQueue = describeQueue.filter( function( describeEntry ) {
  62. var scope = describeEntry[ 0 ];
  63. var title = describeEntry[ 1 ];
  64. var fn = describeEntry[ 2 ];
  65. originalDescribe.call( scope, title, function() {
  66. fn.apply( this, requires );
  67. } );
  68. return false;
  69. } );
  70. }
  71. }
  72. } )();