bind_spec.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. var _ = require('src/util')
  2. var def = require('src/directives/public/bind')
  3. var xlinkNS = 'http://www.w3.org/1999/xlink'
  4. describe('v-bind', function () {
  5. var el, dir
  6. beforeEach(function () {
  7. el = document.createElement('div')
  8. dir = {
  9. el: el,
  10. descriptor: {},
  11. modifiers: {}
  12. }
  13. _.extend(dir, def)
  14. })
  15. it('normal attr', function () {
  16. dir.arg = 'test'
  17. dir.update('ok')
  18. expect(el.getAttribute('test')).toBe('ok')
  19. dir.update('again')
  20. expect(el.getAttribute('test')).toBe('again')
  21. dir.update(null)
  22. expect(el.hasAttribute('test')).toBe(false)
  23. dir.update(false)
  24. expect(el.hasAttribute('test')).toBe(false)
  25. dir.update(true)
  26. expect(el.getAttribute('test')).toBe('')
  27. dir.update(0)
  28. expect(el.getAttribute('test')).toBe('0')
  29. })
  30. it('should set property for input value', function () {
  31. dir.el = document.createElement('input')
  32. dir.arg = 'value'
  33. dir.update('what')
  34. expect(dir.el.value).toBe('what')
  35. dir.el = document.createElement('input')
  36. dir.el.type = 'checkbox'
  37. dir.arg = 'checked'
  38. expect(dir.el.checked).toBe(false)
  39. dir.update(true)
  40. expect(dir.el.checked).toBe(true)
  41. })
  42. it('xlink', function () {
  43. dir.arg = 'xlink:special'
  44. dir.update('ok')
  45. expect(el.getAttributeNS(xlinkNS, 'special')).toBe('ok')
  46. dir.update('again')
  47. expect(el.getAttributeNS(xlinkNS, 'special')).toBe('again')
  48. dir.update(null)
  49. expect(el.hasAttributeNS(xlinkNS, 'special')).toBe(false)
  50. })
  51. it('object format', function () {
  52. dir.el = document.createElement('input')
  53. dir.update({
  54. 'test': 'hi',
  55. 'value': 'what'
  56. })
  57. expect(dir.el.getAttribute('test')).toBe('hi')
  58. expect(dir.el.value).toBe('what')
  59. dir.update({
  60. 'xlink:special': 'ok'
  61. })
  62. expect(dir.el.hasAttribute('test')).toBe(false)
  63. expect(dir.el.value).toBeFalsy()
  64. expect(dir.el.getAttributeNS(xlinkNS, 'special')).toBe('ok')
  65. dir.update(null)
  66. expect(dir.el.hasAttributeNS(xlinkNS, 'special')).toBe(false)
  67. })
  68. it('camel modifier', function () {
  69. dir.modifiers.camel = true
  70. var div = document.createElement('div')
  71. div.innerHTML = '<svg></svg>'
  72. dir.el = div.children[0]
  73. dir.arg = 'view-box'
  74. dir.update('0 0 1500 1000')
  75. expect(dir.el.getAttribute('viewBox')).toBe('0 0 1500 1000')
  76. })
  77. it('enumrated non-boolean attributes', function () {
  78. ['draggable', 'contenteditable', 'spellcheck'].forEach(function (attr) {
  79. dir.arg = attr
  80. dir.update(true)
  81. expect(el.getAttribute(attr)).toBe('true')
  82. dir.update(false)
  83. expect(el.getAttribute(attr)).toBe('false')
  84. })
  85. })
  86. })