DOMite-Tests.st 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. Smalltalk createPackage: 'DOMite-Tests'!
  2. TestCase subclass: #DOMiteTest
  3. instanceVariableNames: 'fixtureDiv'
  4. package: 'DOMite-Tests'!
  5. !DOMiteTest methodsFor: 'fixture'!
  6. setUp
  7. fixtureDiv := document createElement: 'div'.
  8. document body appendChild: fixtureDiv.
  9. fixtureDiv setAttribute: 'id' to: 'fixture'.
  10. fixtureDiv innerHTML: 'sentinel'
  11. !
  12. tearDown
  13. | lastChild |
  14. lastChild := document body lastChild.
  15. self assert: lastChild equals: fixtureDiv.
  16. document body removeChild: lastChild
  17. !
  18. testedClass
  19. ^Domite
  20. ! !
  21. !DOMiteTest methodsFor: 'testing'!
  22. assertBodyEndsWith: aString
  23. | sanitizedBody |
  24. sanitizedBody := document body innerHTML replace: '\s*' with: ''.
  25. self assert: (sanitizedBody endsWith: aString)
  26. !
  27. testDefaultInsertElement
  28. self testedClass new << (self testedClass newElement: 'p').
  29. self assertBodyEndsWith: '<p></p>'.
  30. document body removeChild: document body lastChild
  31. !
  32. testDefaultInsertString
  33. self testedClass new << 'a-foo--in-a-bar'.
  34. self assertBodyEndsWith: 'a-foo--in-a-bar'.
  35. document body removeChild: document body lastChild
  36. !
  37. testDefaultInsertStringInFragment
  38. self testedClass new << (self testedClass newStream << 'a-foo--in-a-bar').
  39. self assertBodyEndsWith: 'a-foo--in-a-bar'.
  40. document body removeChild: document body lastChild
  41. !
  42. testFromBadSelectorIsInvalid
  43. | d |
  44. d := self testedClass at: '#goo'.
  45. self assert: d isInvalid.
  46. d := self testedClass at: 'body'.
  47. self deny: d isInvalid.
  48. d := self testedClass at: 'html body div#fixture'.
  49. self deny: d isInvalid
  50. !
  51. testInsertDomNode
  52. | d |
  53. d := self testedClass fromElement: fixtureDiv.
  54. d << (document createElement: 'pre').
  55. self assertBodyEndsWith: '>sentinel<pre></pre></div>'
  56. !
  57. testInsertDomNodeInFragment
  58. | d |
  59. d := self testedClass at: '#fixture'.
  60. d << (self testedClass newStream << (document createElement: 'script')).
  61. self assertBodyEndsWith: '>sentinel<script></script></div>'
  62. !
  63. testInsertElement
  64. | d |
  65. d := self testedClass at: 'html body div#fixture'.
  66. d << (self testedClass newElement: 'p').
  67. self assertBodyEndsWith: '>sentinel<p></p></div>'
  68. !
  69. testInsertElementTwoLevel
  70. | d p s |
  71. d := self testedClass fromElement: fixtureDiv.
  72. p := self testedClass newElement: 'p'.
  73. d << p.
  74. s := self testedClass newElement: 'span'.
  75. p << s.
  76. s << 'dom-mite'.
  77. self assertBodyEndsWith: '>sentinel<p><span>dom-mite</span></p></div>'
  78. !
  79. testInsertElementTwoLevelViaFragments
  80. | d p s |
  81. d := self testedClass at: '#fixture'.
  82. p := self testedClass newElement: 'p'.
  83. d << (self testedClass newStream << p).
  84. s := self testedClass newElement: 'span'.
  85. p << (self testedClass newStream << s).
  86. s << (self testedClass newStream << 'dom-mite').
  87. self assertBodyEndsWith: '>sentinel<p><span>dom-mite</span></p></div>'
  88. !
  89. testInsertElementTwoLevelViaTwoLevelFragments
  90. | d p s |
  91. d := self testedClass fromElement: fixtureDiv.
  92. p := self testedClass newElement: 'p'.
  93. d << (self testedClass newStream << (self testedClass newStream << p)).
  94. s := self testedClass newElement: 'span'.
  95. p << (self testedClass newStream << (self testedClass newStream << s)).
  96. s << (self testedClass newStream << (self testedClass newStream << 'dom-mite')).
  97. self assertBodyEndsWith: '>sentinel<p><span>dom-mite</span></p></div>'
  98. !
  99. testInsertString
  100. | d |
  101. d := self testedClass fromElement: fixtureDiv.
  102. d << 'a-foo--in-a-bar'.
  103. self assertBodyEndsWith: '>sentinela-foo--in-a-bar</div>'
  104. !
  105. testInsertStringInFragment
  106. | d |
  107. d := self testedClass at: '#fixture'.
  108. d << (self testedClass newStream << 'a-foo--in-a-bar').
  109. self assertBodyEndsWith: '>sentinela-foo--in-a-bar</div>'
  110. !
  111. testInsertTable
  112. | d tbl tr |
  113. d := self testedClass at: 'html body div#fixture'.
  114. tbl := self testedClass newElement: 'table'.
  115. tr := self testedClass newElement: 'tr'.
  116. tr << ((self testedClass newElement: 'td') << 'A').
  117. tr << ((self testedClass newElement: 'td') << 'B').
  118. tr << ((self testedClass newElement: 'td') << 'C').
  119. tbl << tr.
  120. tr := Domite newElement: 'tr'.
  121. tr << ((Domite newElement: 'td') << 'D').
  122. tr << ((Domite newElement: 'td') << 'E').
  123. tr << ((Domite newElement: 'td') << 'F').
  124. tbl << tr.
  125. d << tbl.
  126. self assertBodyEndsWith: 'table><tr><td>A</td><td>B</td><td>C</td></tr><tr><td>D</td><td>E</td><td>F</td></tr></table></div>'
  127. !
  128. testMultipleInserts
  129. | d p s |
  130. d := self testedClass fromElement: fixtureDiv.
  131. p := self testedClass newElement: 'p'.
  132. d << p.
  133. s := self testedClass newElement: 'span'.
  134. d << s.
  135. d << 'dom-mite'.
  136. self assertBodyEndsWith: '>sentinel<p></p><span></span>dom-mite</div>'
  137. !
  138. testMultipleInsertsWithClear
  139. | d p s |
  140. d := self testedClass at: '#fixture'.
  141. p := self testedClass newElement: 'p'.
  142. d << p.
  143. s := self testedClass newElement: 'span'.
  144. d << s.
  145. d resetContents.
  146. d << 'dom-mite'.
  147. d resetContents.
  148. d resetContents.
  149. self assertBodyEndsWith: '></div>'
  150. !
  151. testMultipleInsertsWithClearInBetween
  152. | d p s |
  153. d := self testedClass fromElement: fixtureDiv.
  154. p := self testedClass newElement: 'p'.
  155. d << p.
  156. s := self testedClass newElement: 'span'.
  157. d << s.
  158. d resetContents.
  159. d << 'dom-mite'.
  160. self assertBodyEndsWith: '>dom-mite</div>'
  161. ! !