utils.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. /**
  2. * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
  3. * For licensing, see LICENSE.md.
  4. */
  5. /* globals describe, it, expect */
  6. 'use strict';
  7. describe( 'utils', function() {
  8. it( 'extend() should extend and override', function( done ) {
  9. CKEDITOR.require( [ 'utils' ], function( utils ) {
  10. var target = {
  11. a: 1,
  12. b: 2
  13. };
  14. var extensions = {
  15. a: 'A',
  16. c: 3,
  17. // Extend by reference (no deep-copy).
  18. obj: {
  19. a: 1
  20. },
  21. // Extend by reference (no deep-copy).
  22. arr: [ 1, 2 ],
  23. // Extend by reference.
  24. fn: function() {}
  25. };
  26. var ret = utils.extend( target, extensions );
  27. expect( target.a ).equal( 'A' );
  28. expect( target.b ).equal( 2 );
  29. expect( target ).to.have.property( 'c' ).equal( 3 );
  30. expect( target ).to.have.property( 'obj' ).equal( extensions.obj );
  31. expect( target ).to.have.property( 'arr' ).equal( extensions.arr );
  32. expect( target ).to.have.property( 'fn' ).equal( extensions.fn );
  33. // "target" should be the return value.
  34. expect( ret ).to.equal( target );
  35. done();
  36. } );
  37. } );
  38. it( 'extend() should not be touched by non-objects', function( done ) {
  39. CKEDITOR.require( [ 'utils' ], function( utils ) {
  40. var target = {
  41. a: 1
  42. };
  43. expect( utils.extend( target, function() {} ) ).equal( target );
  44. expect( utils.extend( target, 1 ) ).equal( target );
  45. expect( utils.extend( target, 'a' ) ).equal( target );
  46. expect( utils.extend( target, true ) ).equal( target );
  47. expect( utils.extend( target, undefined ) ).equal( target );
  48. expect( utils.extend( target, [] ) ).equal( target );
  49. expect( utils.extend( target, Date.now() ) ).equal( target );
  50. expect( utils.extend( target ) ).equal( target );
  51. // None of the above calls should have touched "target".
  52. expect( target ).to.have.property( 'a' ).equal( 1 );
  53. expect( Object.getOwnPropertyNames( target ).length ).equal( 1 );
  54. done();
  55. } );
  56. } );
  57. it( 'extend() should extend by several params in order', function( done ) {
  58. CKEDITOR.require( [ 'utils' ], function( utils ) {
  59. var target = {
  60. a: 0,
  61. b: 0
  62. };
  63. var ext1 = {
  64. b: 1,
  65. c: 1
  66. };
  67. var ext2 = {
  68. c: 2,
  69. d: 2
  70. };
  71. utils.extend( target, ext1, ext2 );
  72. expect( target ).to.have.property( 'a' ).equal( 0 );
  73. expect( target ).to.have.property( 'b' ).equal( 1 );
  74. expect( target ).to.have.property( 'c' ).equal( 2 );
  75. expect( target ).to.have.property( 'd' ).equal( 2 );
  76. done();
  77. } );
  78. } );
  79. it( 'isFunction() should be true for functions only', function( done ) {
  80. CKEDITOR.require( [ 'utils' ], function( utils ) {
  81. var f1 = function() {
  82. };
  83. /* jshint -W054 */ // The Function constructor is a form of eval
  84. var f2 = new Function( '' );
  85. /* jshint +W054 */
  86. expect( utils.isFunction( f1 ) ).to.be.true();
  87. expect( utils.isFunction( f2 ) ).to.be.true();
  88. expect( utils.isFunction( 1 ) ).to.be.false();
  89. expect( utils.isFunction( 'a' ) ).to.be.false();
  90. expect( utils.isFunction( true ) ).to.be.false();
  91. expect( utils.isFunction( undefined ) ).to.be.false();
  92. expect( utils.isFunction( [] ) ).to.be.false();
  93. expect( utils.isFunction( {} ) ).to.be.false();
  94. expect( utils.isFunction( Date.now() ) ).to.be.false();
  95. done();
  96. } );
  97. } );
  98. it( 'isObject() should be true for pure objects only', function( done ) {
  99. CKEDITOR.require( [ 'utils' ], function( utils ) {
  100. var f1 = function() {
  101. };
  102. /* jshint -W054 */ // The Function constructor is a form of eval
  103. var f2 = new Function( '' );
  104. /* jshint +W054 */
  105. expect( utils.isObject( {} ) ).to.be.true();
  106. expect( utils.isObject( [] ) ).to.be.true();
  107. expect( utils.isObject( 1 ) ).to.be.false();
  108. expect( utils.isObject( 'a' ) ).to.be.false();
  109. expect( utils.isObject( true ) ).to.be.false();
  110. expect( utils.isObject( undefined ) ).to.be.false();
  111. expect( utils.isObject( Date.now() ) ).to.be.false();
  112. expect( utils.isObject( f1 ) ).to.be.false();
  113. expect( utils.isObject( f2 ) ).to.be.false();
  114. done();
  115. } );
  116. } );
  117. } );