DOMite-Tests.st 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  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 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. testInsertElement
  68. | d |
  69. d := self testedClass at: 'html body div#fixture'.
  70. d << (self testedClass newElement: 'p').
  71. self assertBodyEndsWith: '>sentinel<p></p></div>'
  72. !
  73. testInsertElementTwoLevel
  74. | d p s |
  75. d := self testedClass fromElement: fixtureDiv.
  76. p := self testedClass newElement: 'p'.
  77. d << p.
  78. s := self testedClass newElement: 'span'.
  79. p << s.
  80. s << 'dom-mite'.
  81. self assertBodyEndsWith: '>sentinel<p><span>dom-mite</span></p></div>'
  82. !
  83. testInsertElementTwoLevelViaFragments
  84. | d p s |
  85. d := self testedClass at: '#fixture'.
  86. p := self testedClass newElement: 'p'.
  87. d << (self testedClass newStream << p).
  88. s := self testedClass newElement: 'span'.
  89. p << (self testedClass newStream << s).
  90. s << (self testedClass newStream << 'dom-mite').
  91. self assertBodyEndsWith: '>sentinel<p><span>dom-mite</span></p></div>'
  92. !
  93. testInsertElementTwoLevelViaTwoLevelFragments
  94. | d p s |
  95. d := self testedClass fromElement: fixtureDiv.
  96. p := self testedClass newElement: 'p'.
  97. d << (self testedClass newStream << (self testedClass newStream << p)).
  98. s := self testedClass newElement: 'span'.
  99. p << (self testedClass newStream << (self testedClass newStream << s)).
  100. s << (self testedClass newStream << (self testedClass newStream << 'dom-mite')).
  101. self assertBodyEndsWith: '>sentinel<p><span>dom-mite</span></p></div>'
  102. !
  103. testInsertString
  104. | d |
  105. d := self testedClass fromElement: fixtureDiv.
  106. d << 'a-foo--in-a-bar'.
  107. self assertBodyEndsWith: '>sentinela-foo--in-a-bar</div>'
  108. !
  109. testInsertStringInFragment
  110. | d |
  111. d := self testedClass at: '#fixture'.
  112. d << (self testedClass newStream << 'a-foo--in-a-bar').
  113. self assertBodyEndsWith: '>sentinela-foo--in-a-bar</div>'
  114. !
  115. testInsertTable
  116. | d tbl tr |
  117. d := self testedClass at: 'html body div#fixture'.
  118. tbl := self testedClass newElement: 'table'.
  119. tr := self testedClass newElement: 'tr'.
  120. tr << ((self testedClass newElement: 'td') << 'A').
  121. tr << ((self testedClass newElement: 'td') << 'B').
  122. tr << ((self testedClass newElement: 'td') << 'C').
  123. tbl << tr.
  124. tr := self testedClass newElement: 'tr'.
  125. tr << ((self testedClass newElement: 'td') << 'D').
  126. tr << ((self testedClass newElement: 'td') << 'E').
  127. tr << ((self testedClass newElement: 'td') << 'F').
  128. tbl << tr.
  129. d << tbl.
  130. 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>'
  131. !
  132. testMultipleInserts
  133. | d p s |
  134. d := self testedClass fromElement: fixtureDiv.
  135. p := self testedClass newElement: 'p'.
  136. d << p.
  137. s := self testedClass newElement: 'span'.
  138. d << s.
  139. d << 'dom-mite'.
  140. self assertBodyEndsWith: '>sentinel<p></p><span></span>dom-mite</div>'
  141. !
  142. testMultipleInsertsWithClear
  143. | d p s |
  144. d := self testedClass at: '#fixture'.
  145. p := self testedClass newElement: 'p'.
  146. d << p.
  147. s := self testedClass newElement: 'span'.
  148. d << s.
  149. d resetContents.
  150. d << 'dom-mite'.
  151. d resetContents.
  152. d resetContents.
  153. self assertBodyEndsWith: '></div>'
  154. !
  155. testMultipleInsertsWithClearInBetween
  156. | d p s |
  157. d := self testedClass fromElement: fixtureDiv.
  158. p := self testedClass newElement: 'p'.
  159. d << p.
  160. s := self testedClass newElement: 'span'.
  161. d << s.
  162. d resetContents.
  163. d << 'dom-mite'.
  164. self assertBodyEndsWith: '>dom-mite</div>'
  165. ! !