repeated-items.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. /* global demo */
  2. casper.test.begin('Repeated Items', 50, function (test) {
  3. casper
  4. .start('./fixtures/repeated-items.html')
  5. .then(function () {
  6. // initial values
  7. test.assertSelectorHasText('.count', '3')
  8. test.assertSelectorHasText('.item:nth-child(1)', '0 A')
  9. test.assertSelectorHasText('.item:nth-child(2)', '1 B')
  10. test.assertSelectorHasText('.item:nth-child(3)', '2 C')
  11. })
  12. .thenClick('.push', function () {
  13. test.assertSelectorHasText('.count', '4')
  14. test.assertSelectorHasText('.item:nth-child(4)', '3 0')
  15. })
  16. .thenClick('.shift', function () {
  17. test.assertSelectorHasText('.count', '3')
  18. test.assertSelectorHasText('.item:nth-child(1)', '0 B')
  19. test.assertSelectorHasText('.item:nth-child(2)', '1 C')
  20. test.assertSelectorHasText('.item:nth-child(3)', '2 0')
  21. })
  22. .thenClick('.pop', function () {
  23. test.assertSelectorHasText('.count', '2')
  24. test.assertSelectorHasText('.item:nth-child(1)', '0 B')
  25. test.assertSelectorHasText('.item:nth-child(2)', '1 C')
  26. })
  27. .thenClick('.unshift', function () {
  28. test.assertSelectorHasText('.count', '3')
  29. test.assertSelectorHasText('.item:nth-child(1)', '0 1')
  30. test.assertSelectorHasText('.item:nth-child(2)', '1 B')
  31. test.assertSelectorHasText('.item:nth-child(3)', '2 C')
  32. })
  33. .thenClick('.splice', function () {
  34. test.assertSelectorHasText('.count', '4')
  35. test.assertSelectorHasText('.item:nth-child(1)', '0 1')
  36. test.assertSelectorHasText('.item:nth-child(2)', '1 2')
  37. test.assertSelectorHasText('.item:nth-child(3)', '2 3')
  38. test.assertSelectorHasText('.item:nth-child(4)', '3 C')
  39. })
  40. .thenClick('.remove', function () {
  41. test.assertSelectorHasText('.count', '3')
  42. test.assertSelectorHasText('.item:nth-child(1)', '0 1')
  43. test.assertSelectorHasText('.item:nth-child(2)', '1 2')
  44. test.assertSelectorHasText('.item:nth-child(3)', '2 3')
  45. })
  46. .thenClick('.set', function () {
  47. test.assertSelectorHasText('.count', '3')
  48. test.assertSelectorHasText('.item:nth-child(1)', '0 1')
  49. test.assertSelectorHasText('.item:nth-child(2)', '1 2')
  50. test.assertSelectorHasText('.item:nth-child(3)', '2 4')
  51. })
  52. .thenClick('.reverse', function () {
  53. test.assertSelectorHasText('.count', '3')
  54. test.assertSelectorHasText('.item:nth-child(1)', '0 4')
  55. test.assertSelectorHasText('.item:nth-child(2)', '1 2')
  56. test.assertSelectorHasText('.item:nth-child(3)', '2 1')
  57. })
  58. .thenClick('.sort', function () {
  59. test.assertSelectorHasText('.count', '3')
  60. test.assertSelectorHasText('.item:nth-child(1)', '0 1')
  61. test.assertSelectorHasText('.item:nth-child(2)', '1 2')
  62. test.assertSelectorHasText('.item:nth-child(3)', '2 4')
  63. })
  64. .then(function () {
  65. // make sure things work on empty array
  66. this.click('.pop')
  67. this.click('.pop')
  68. this.click('.pop')
  69. this.click('.pop')
  70. this.click('.shift')
  71. this.click('.remove')
  72. this.click('.sort')
  73. this.click('.reverse')
  74. this.click('.splice')
  75. })
  76. .then(function () {
  77. test.assertSelectorHasText('.count', '2')
  78. test.assertSelectorHasText('.item:nth-child(1)', '0 5')
  79. test.assertSelectorHasText('.item:nth-child(2)', '1 6')
  80. })
  81. // test swap entire array
  82. .thenEvaluate(function () {
  83. demo.items = [{title:'A'}, {title:'B'}, {title:'C'}]
  84. })
  85. .then(function () {
  86. test.assertSelectorHasText('.count', '3')
  87. test.assertSelectorHasText('.item:nth-child(1)', '0 A')
  88. test.assertSelectorHasText('.item:nth-child(2)', '1 B')
  89. test.assertSelectorHasText('.item:nth-child(3)', '2 C')
  90. })
  91. // test swap array with old elements
  92. // should reuse existing VMs!
  93. .thenEvaluate(function () {
  94. window.oldVMs = demo.$.items
  95. demo.items = [demo.items[2],demo.items[1],demo.items[0]]
  96. })
  97. .then(function () {
  98. test.assertSelectorHasText('.count', '3')
  99. test.assertSelectorHasText('.item:nth-child(1)', '0 C')
  100. test.assertSelectorHasText('.item:nth-child(2)', '1 B')
  101. test.assertSelectorHasText('.item:nth-child(3)', '2 A')
  102. test.assertEval(function () {
  103. var i = window.oldVMs.length
  104. while (i--) {
  105. if (window.oldVMs[i] !== demo.$.items[2 - i]) {
  106. return false
  107. }
  108. }
  109. return true
  110. })
  111. })
  112. .run(function () {
  113. test.done()
  114. })
  115. })