util_option_spec.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. var _ = require('../../../src/util')
  2. describe('Util - Option merging', function () {
  3. var merge = _.mergeOptions
  4. it('default strat', function () {
  5. // child undefined
  6. var res = merge({replace:true}, {}).replace
  7. expect(res).toBe(true)
  8. // child overwrite
  9. var res = merge({replace:true}, {replace:false}).replace
  10. expect(res).toBe(false)
  11. })
  12. it('hooks & paramAttributes', function () {
  13. var fn1 = function () {}
  14. var fn2 = function () {}
  15. var res
  16. // parent undefined
  17. res = merge({}, {created: fn1}).created
  18. expect(Array.isArray(res)).toBe(true)
  19. expect(res.length).toBe(1)
  20. expect(res[0]).toBe(fn1)
  21. // child undefined
  22. res = merge({created: [fn1]}, {}).created
  23. expect(Array.isArray(res)).toBe(true)
  24. expect(res.length).toBe(1)
  25. expect(res[0]).toBe(fn1)
  26. // both defined
  27. res = merge({created: [fn1]}, {created: fn2}).created
  28. expect(Array.isArray(res)).toBe(true)
  29. expect(res.length).toBe(2)
  30. expect(res[0]).toBe(fn1)
  31. expect(res[1]).toBe(fn2)
  32. })
  33. it('events', function () {
  34. var fn1 = function () {}
  35. var fn2 = function () {}
  36. var fn3 = function () {}
  37. var parent = {
  38. events: {
  39. 'fn1': [fn1, fn2],
  40. 'fn2': [fn2]
  41. }
  42. }
  43. var child = {
  44. events: {
  45. 'fn1': fn3,
  46. 'fn3': fn3
  47. }
  48. }
  49. var res = merge(parent, child).events
  50. assertRes(res.fn1, [fn1, fn2, fn3])
  51. assertRes(res.fn2, [fn2])
  52. assertRes(res.fn3, [fn3])
  53. function assertRes (res, expected) {
  54. expect(Array.isArray(res)).toBe(true)
  55. expect(res.length).toBe(expected.length)
  56. var i = expected.length
  57. while (i--) {
  58. expect(res[i]).toBe(expected[i])
  59. }
  60. }
  61. })
  62. it('normal object hashes', function () {
  63. var fn1 = function () {}
  64. var fn2 = function () {}
  65. var res
  66. // parent undefined
  67. res = merge({}, {methods: {test: fn1}}).methods
  68. expect(res.test).toBe(fn1)
  69. // child undefined
  70. res = merge({methods: {test: fn1}}, {}).methods
  71. expect(res.test).toBe(fn1)
  72. // both defined
  73. var parent = {methods: {test: fn1}}
  74. res = merge(parent, {methods: {test2: fn2}}).methods
  75. expect(res.test).toBe(fn1)
  76. expect(res.test2).toBe(fn2)
  77. })
  78. it('assets', function () {
  79. var asset1 = {}
  80. var asset2 = {}
  81. var asset3 = {}
  82. // mock vm
  83. var vm = {
  84. $parent: {
  85. $options: {
  86. directives: {
  87. c: asset3
  88. }
  89. }
  90. }
  91. }
  92. var res = merge(
  93. { directives: { a: asset1 }},
  94. { directives: { b: asset2 }},
  95. vm
  96. ).directives
  97. expect(res.a).toBe(asset1)
  98. expect(res.b).toBe(asset2)
  99. expect(res.c).toBe(asset3)
  100. // test prototypal inheritance
  101. var asset4 = vm.$parent.$options.directives.d = {}
  102. expect(res.d).toBe(asset4)
  103. })
  104. it('ignore el, data & parent when inheriting', function () {
  105. var res = merge({}, {el:1, data:2, parent:3})
  106. expect(res.el).toBeUndefined()
  107. expect(res.data).toBeUndefined()
  108. expect(res.parent).toBeUndefined()
  109. res = merge({}, {el:1, data:2, parent:3}, {})
  110. expect(res.el).toBe(1)
  111. expect(res.data).toBe(2)
  112. expect(res.parent).toBe(3)
  113. })
  114. })