8
0

utils.js 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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. var modules = bender.amd.require( 'utils' );
  8. describe( 'extend()', function() {
  9. it( 'should extend and override', function() {
  10. var utils = modules.utils;
  11. var target = {
  12. a: 1,
  13. b: 2
  14. };
  15. var extensions = {
  16. a: 'A',
  17. c: 3,
  18. // Extend by reference (no deep-copy).
  19. obj: {
  20. a: 1
  21. },
  22. // Extend by reference (no deep-copy).
  23. arr: [ 1, 2 ],
  24. // Extend by reference.
  25. fn: function() {}
  26. };
  27. var ret = utils.extend( target, extensions );
  28. expect( target.a ).to.equal( 'A' );
  29. expect( target.b ).to.equal( 2 );
  30. expect( target ).to.have.property( 'c' ).to.equal( 3 );
  31. expect( target ).to.have.property( 'obj' ).to.equal( extensions.obj );
  32. expect( target ).to.have.property( 'arr' ).to.equal( extensions.arr );
  33. expect( target ).to.have.property( 'fn' ).to.equal( extensions.fn );
  34. // "target" should be the return value.
  35. expect( ret ).to.equal( target );
  36. } );
  37. it( 'should not be touched by non-objects', function() {
  38. var utils = modules.utils;
  39. var target = {
  40. a: 1
  41. };
  42. expect( utils.extend( target, function() {} ) ).to.equal( target );
  43. expect( utils.extend( target, 1 ) ).to.equal( target );
  44. expect( utils.extend( target, 'a' ) ).to.equal( target );
  45. expect( utils.extend( target, true ) ).to.equal( target );
  46. expect( utils.extend( target, undefined ) ).to.equal( target );
  47. expect( utils.extend( target, [] ) ).to.equal( target );
  48. expect( utils.extend( target, new Date() ) ).to.equal( target );
  49. expect( utils.extend( target ) ).to.equal( target );
  50. // None of the above calls should have touched "target".
  51. expect( target ).to.have.property( 'a' ).to.equal( 1 );
  52. expect( Object.getOwnPropertyNames( target ).length ).to.equal( 1 );
  53. } );
  54. // Properties of the subsequent objects should override properties of the preceding objects.
  55. it( 'should extend by several params in the correct order', function() {
  56. var utils = modules.utils;
  57. var target = {
  58. a: 0,
  59. b: 0
  60. };
  61. var ext1 = {
  62. b: 1,
  63. c: 1
  64. };
  65. var ext2 = {
  66. c: 2,
  67. d: 2
  68. };
  69. utils.extend( target, ext1, ext2 );
  70. expect( target ).to.have.property( 'a' ).to.equal( 0 );
  71. expect( target ).to.have.property( 'b' ).to.equal( 1 );
  72. expect( target ).to.have.property( 'c' ).to.equal( 2 );
  73. expect( target ).to.have.property( 'd' ).to.equal( 2 );
  74. } );
  75. } );