DOMite-Tests.st 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. Smalltalk createPackage: 'DOMite-Tests'!
  2. TestCase subclass: #DOMiteTest
  3. slots: {#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 sanitizedAssertion |
  24. sanitizedBody := document body innerHTML replace: '\s*' with: ''.
  25. sanitizedAssertion := aString replace: '\s*' with: ''.
  26. self assert: sanitizedBody size >= sanitizedAssertion size.
  27. self
  28. assert: (sanitizedBody last: sanitizedAssertion size)
  29. equals: sanitizedAssertion
  30. !
  31. testDefaultInsertElement
  32. self testedClass new << (self testedClass newElement: 'p').
  33. self assertBodyEndsWith: '<p></p>'.
  34. document body removeChild: document body lastChild
  35. !
  36. testDefaultInsertString
  37. self testedClass new << 'a-foo--in-a-bar'.
  38. self assertBodyEndsWith: 'a-foo--in-a-bar'.
  39. document body removeChild: document body lastChild
  40. !
  41. testDefaultInsertStringInFragment
  42. self testedClass new << (self testedClass newStream << 'a-foo--in-a-bar').
  43. self assertBodyEndsWith: 'a-foo--in-a-bar'.
  44. document body removeChild: document body lastChild
  45. !
  46. testFromBadSelectorIsInvalid
  47. | d |
  48. d := self testedClass at: '#goo'.
  49. self assert: d isInvalid.
  50. d := self testedClass at: 'body'.
  51. self deny: d isInvalid.
  52. d := self testedClass at: 'html body div#fixture'.
  53. self deny: d isInvalid
  54. !
  55. testInsertDomNode
  56. | d |
  57. d := self testedClass fromElement: fixtureDiv.
  58. d << (document createElement: 'pre').
  59. self assertBodyEndsWith: '>sentinel<pre></pre></div>'
  60. !
  61. testInsertDomNodeInFragment
  62. | d |
  63. d := self testedClass at: '#fixture'.
  64. d << (self testedClass newStream << (document createElement: 'script')).
  65. self assertBodyEndsWith: '>sentinel<script></script></div>'
  66. !
  67. testInsertDomNodeInRawDomFragment
  68. | d f |
  69. d := self testedClass at: '#fixture'.
  70. f := document createDocumentFragment.
  71. f appendChild: (document createElement: 'script').
  72. d << f.
  73. self assertBodyEndsWith: '>sentinel<script></script></div>'
  74. !
  75. testInsertElement
  76. | d |
  77. d := self testedClass at: 'html body div#fixture'.
  78. d << (self testedClass newElement: 'p').
  79. self assertBodyEndsWith: '>sentinel<p></p></div>'
  80. !
  81. testInsertElementTwoLevel
  82. | d p s |
  83. d := self testedClass fromElement: fixtureDiv.
  84. p := self testedClass newElement: 'p'.
  85. d << p.
  86. s := self testedClass newElement: 'span'.
  87. p << s.
  88. s << 'dom-mite'.
  89. self assertBodyEndsWith: '>sentinel<p><span>dom-mite</span></p></div>'
  90. !
  91. testInsertElementTwoLevelViaFragments
  92. | d p s |
  93. d := self testedClass at: '#fixture'.
  94. p := self testedClass newElement: 'p'.
  95. d << (self testedClass newStream << p).
  96. s := self testedClass newElement: 'span'.
  97. p << (self testedClass newStream << s).
  98. s << (self testedClass newStream << 'dom-mite').
  99. self assertBodyEndsWith: '>sentinel<p><span>dom-mite</span></p></div>'
  100. !
  101. testInsertElementTwoLevelViaTwoLevelFragments
  102. | d p s |
  103. d := self testedClass fromElement: fixtureDiv.
  104. p := self testedClass newElement: 'p'.
  105. d << (self testedClass newStream << (self testedClass newStream << p)).
  106. s := self testedClass newElement: 'span'.
  107. p << (self testedClass newStream << (self testedClass newStream << s)).
  108. s << (self testedClass newStream << (self testedClass newStream << 'dom-mite')).
  109. self assertBodyEndsWith: '>sentinel<p><span>dom-mite</span></p></div>'
  110. !
  111. testInsertString
  112. | d |
  113. d := self testedClass fromElement: fixtureDiv.
  114. d << 'a-foo--in-a-bar'.
  115. self assertBodyEndsWith: '>sentinela-foo--in-a-bar</div>'
  116. !
  117. testInsertStringInFragment
  118. | d |
  119. d := self testedClass at: '#fixture'.
  120. d << (self testedClass newStream << 'a-foo--in-a-bar').
  121. self assertBodyEndsWith: '>sentinela-foo--in-a-bar</div>'
  122. !
  123. testInsertStringifiedJSObject
  124. | d obj |
  125. d := self testedClass fromElement: fixtureDiv.
  126. obj := JSON parse: '{}'.
  127. d << obj.
  128. self assertBodyEndsWith: '>sentinel', obj asString, '</div>'
  129. !
  130. testInsertStringifiedNumber
  131. | d |
  132. d := self testedClass fromElement: fixtureDiv.
  133. d << 42.
  134. self assertBodyEndsWith: '>sentinel42</div>'
  135. !
  136. testInsertTable
  137. | d tbl tr |
  138. d := self testedClass at: 'html body div#fixture'.
  139. tbl := self testedClass newElement: 'table'.
  140. tr := self testedClass newElement: 'tr'.
  141. tr << ((self testedClass newElement: 'td') << 'A').
  142. tr << ((self testedClass newElement: 'td') << 'B').
  143. tr << ((self testedClass newElement: 'td') << 'C').
  144. tbl << tr.
  145. tr := self testedClass newElement: 'tr'.
  146. tr << ((self testedClass newElement: 'td') << 'D').
  147. tr << ((self testedClass newElement: 'td') << 'E').
  148. tr << ((self testedClass newElement: 'td') << 'F').
  149. tbl << tr.
  150. d << tbl.
  151. self assertBodyEndsWith: '>sentinel<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>'
  152. !
  153. testMultipleInserts
  154. | d p s |
  155. d := self testedClass fromElement: fixtureDiv.
  156. p := self testedClass newElement: 'p'.
  157. d << p.
  158. s := self testedClass newElement: 'span'.
  159. d << s.
  160. d << 'dom-mite'.
  161. self assertBodyEndsWith: '>sentinel<p></p><span></span>dom-mite</div>'
  162. !
  163. testMultipleInsertsWithClear
  164. | d p s |
  165. d := self testedClass at: '#fixture'.
  166. p := self testedClass newElement: 'p'.
  167. d << p.
  168. s := self testedClass newElement: 'span'.
  169. d << s.
  170. d resetContents.
  171. d << 'dom-mite'.
  172. d resetContents.
  173. d resetContents.
  174. self assertBodyEndsWith: '></div>'
  175. !
  176. testMultipleInsertsWithClearInBetween
  177. | d p s |
  178. d := self testedClass fromElement: fixtureDiv.
  179. p := self testedClass newElement: 'p'.
  180. d << p.
  181. s := self testedClass newElement: 'span'.
  182. d << s.
  183. d resetContents.
  184. d << 'dom-mite'.
  185. self assertBodyEndsWith: '>dom-mite</div>'
  186. ! !