disclosure.spec.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. import { beVisible, haveClasses, haveAttribute, html, notBeVisible, notHaveClasses, test } from '../../../utils'
  2. test('has accessibility attributes',
  3. [html`
  4. <div x-data x-disclosure>
  5. <button trigger x-disclosure:button>Trigger</button>
  6. <div x-disclosure:panel panel>
  7. Content
  8. </div>
  9. </div>
  10. `],
  11. ({ get }) => {
  12. get('button').should(haveAttribute('aria-expanded', 'false'))
  13. get('button').should(haveAttribute('aria-controls', 'alpine-disclosure-panel-1'))
  14. get('[panel]').should(haveAttribute('id', 'alpine-disclosure-panel-1'))
  15. },
  16. )
  17. test('it toggles',
  18. [html`
  19. <div x-data x-disclosure>
  20. <button trigger x-disclosure:button>Trigger</button>
  21. <div x-disclosure:panel panel>
  22. Content
  23. <button close-button type="button" @click="$disclosure.close()">Close</button>
  24. </div>
  25. </div>
  26. `],
  27. ({ get }) => {
  28. get('[panel]').should(notBeVisible())
  29. get('[trigger]').click()
  30. get('[panel]').should(beVisible())
  31. get('[trigger]').click()
  32. get('[panel]').should(notBeVisible())
  33. },
  34. )
  35. test('$disclosure.isOpen and $disclosure.close() work',
  36. [html`
  37. <div x-data x-disclosure>
  38. <button trigger x-disclosure:button>Trigger</button>
  39. <div x-disclosure:panel panel :class="$disclosure.isOpen && 'open'">
  40. Content
  41. <button close-button type="button" @click="$disclosure.close()">Close</button>
  42. </div>
  43. </div>
  44. `],
  45. ({ get }) => {
  46. get('[panel]').should(notHaveClasses(['open']))
  47. get('[trigger]').click()
  48. get('[panel]').should(haveClasses(['open']))
  49. get('[close-button]').click()
  50. get('[panel]').should(notBeVisible())
  51. },
  52. )
  53. test('can set a default open state',
  54. [html`
  55. <div x-data x-disclosure :default-open="true">
  56. <button trigger x-disclosure:button>Trigger</button>
  57. <div x-disclosure:panel panel>
  58. Content
  59. <button close-button type="button" @click="$disclosure.close()">Close</button>
  60. </div>
  61. </div>
  62. `],
  63. ({ get }) => {
  64. get('[panel]').should(beVisible())
  65. get('[trigger]').click()
  66. get('[panel]').should(notBeVisible())
  67. },
  68. )
  69. test('it toggles using the space key',
  70. [html`
  71. <div x-data x-disclosure>
  72. <button trigger x-disclosure:button>Trigger</button>
  73. <div x-disclosure:panel panel>
  74. Content
  75. <button close-button type="button" @click="$disclosure.close()">Close</button>
  76. </div>
  77. </div>
  78. `],
  79. ({ get }) => {
  80. get('[panel]').should(notBeVisible())
  81. get('[trigger]').click()
  82. get('[panel]').should(beVisible())
  83. get('[trigger]').type(' ')
  84. get('[panel]').should(notBeVisible())
  85. get('[trigger]').type(' ')
  86. get('[panel]').should(beVisible())
  87. },
  88. )