Smalltalk createPackage: 'DOMite-Tests'! TestCase subclass: #DOMiteTest slots: {#fixtureDiv} package: 'DOMite-Tests'! !DOMiteTest methodsFor: 'fixture'! setUp fixtureDiv := document createElement: 'div'. document body appendChild: fixtureDiv. fixtureDiv setAttribute: 'id' to: 'fixture'. fixtureDiv innerHTML: 'sentinel' ! tearDown | lastChild | lastChild := document body lastChild. self assert: lastChild equals: fixtureDiv. document body removeChild: lastChild ! testedClass ^ Domite ! ! !DOMiteTest methodsFor: 'testing'! assertBodyEndsWith: aString | sanitizedBody sanitizedAssertion | sanitizedBody := document body innerHTML replace: '\s*' with: ''. sanitizedAssertion := aString replace: '\s*' with: ''. self assert: sanitizedBody size >= sanitizedAssertion size. self assert: (sanitizedBody last: sanitizedAssertion size) equals: sanitizedAssertion ! testDefaultInsertElement self testedClass new << (self testedClass newElement: 'p'). self assertBodyEndsWith: '

'. document body removeChild: document body lastChild ! testDefaultInsertString self testedClass new << 'a-foo--in-a-bar'. self assertBodyEndsWith: 'a-foo--in-a-bar'. document body removeChild: document body lastChild ! testDefaultInsertStringInFragment self testedClass new << (self testedClass newStream << 'a-foo--in-a-bar'). self assertBodyEndsWith: 'a-foo--in-a-bar'. document body removeChild: document body lastChild ! testFromBadSelectorIsInvalid | d | d := self testedClass at: '#goo'. self assert: d isInvalid. d := self testedClass at: 'body'. self deny: d isInvalid. d := self testedClass at: 'html body div#fixture'. self deny: d isInvalid ! testInsertDomNode | d | d := self testedClass fromElement: fixtureDiv. d << (document createElement: 'pre'). self assertBodyEndsWith: '>sentinel
'
!

testInsertDomNodeInFragment
	| d |
	d := self testedClass at: '#fixture'.
	d << (self testedClass newStream << (document createElement: 'script')).
	self assertBodyEndsWith: '>sentinel'
!

testInsertDomNodeInRawDomFragment
	| d f |
	d := self testedClass at: '#fixture'.
	f := document createDocumentFragment.
	f appendChild: (document createElement: 'script').
	d << f.
	self assertBodyEndsWith: '>sentinel'
!

testInsertElement
	| d |
	d := self testedClass at: 'html body div#fixture'.
	d << (self testedClass newElement: 'p').
	self assertBodyEndsWith: '>sentinel

' ! testInsertElementTwoLevel | d p s | d := self testedClass fromElement: fixtureDiv. p := self testedClass newElement: 'p'. d << p. s := self testedClass newElement: 'span'. p << s. s << 'dom-mite'. self assertBodyEndsWith: '>sentinel

dom-mite

' ! testInsertElementTwoLevelViaFragments | d p s | d := self testedClass at: '#fixture'. p := self testedClass newElement: 'p'. d << (self testedClass newStream << p). s := self testedClass newElement: 'span'. p << (self testedClass newStream << s). s << (self testedClass newStream << 'dom-mite'). self assertBodyEndsWith: '>sentinel

dom-mite

' ! testInsertElementTwoLevelViaTwoLevelFragments | d p s | d := self testedClass fromElement: fixtureDiv. p := self testedClass newElement: 'p'. d << (self testedClass newStream << (self testedClass newStream << p)). s := self testedClass newElement: 'span'. p << (self testedClass newStream << (self testedClass newStream << s)). s << (self testedClass newStream << (self testedClass newStream << 'dom-mite')). self assertBodyEndsWith: '>sentinel

dom-mite

' ! testInsertString | d | d := self testedClass fromElement: fixtureDiv. d << 'a-foo--in-a-bar'. self assertBodyEndsWith: '>sentinela-foo--in-a-bar' ! testInsertStringInFragment | d | d := self testedClass at: '#fixture'. d << (self testedClass newStream << 'a-foo--in-a-bar'). self assertBodyEndsWith: '>sentinela-foo--in-a-bar' ! testInsertStringifiedJSObject | d obj | d := self testedClass fromElement: fixtureDiv. obj := JSON parse: '{}'. d << obj. self assertBodyEndsWith: '>sentinel', obj asString, '' ! testInsertStringifiedNumber | d | d := self testedClass fromElement: fixtureDiv. d << 42. self assertBodyEndsWith: '>sentinel42' ! testInsertTable | d tbl tr | d := self testedClass at: 'html body div#fixture'. tbl := self testedClass newElement: 'table'. tr := self testedClass newElement: 'tr'. tr << ((self testedClass newElement: 'td') << 'A'). tr << ((self testedClass newElement: 'td') << 'B'). tr << ((self testedClass newElement: 'td') << 'C'). tbl << tr. tr := self testedClass newElement: 'tr'. tr << ((self testedClass newElement: 'td') << 'D'). tr << ((self testedClass newElement: 'td') << 'E'). tr << ((self testedClass newElement: 'td') << 'F'). tbl << tr. d << tbl. self assertBodyEndsWith: '>sentinel
ABC
DEF
' ! testMultipleInserts | d p s | d := self testedClass fromElement: fixtureDiv. p := self testedClass newElement: 'p'. d << p. s := self testedClass newElement: 'span'. d << s. d << 'dom-mite'. self assertBodyEndsWith: '>sentinel

dom-mite' ! testMultipleInsertsWithClear | d p s | d := self testedClass at: '#fixture'. p := self testedClass newElement: 'p'. d << p. s := self testedClass newElement: 'span'. d << s. d resetContents. d << 'dom-mite'. d resetContents. d resetContents. self assertBodyEndsWith: '>' ! testMultipleInsertsWithClearInBetween | d p s | d := self testedClass fromElement: fixtureDiv. p := self testedClass newElement: 'p'. d << p. s := self testedClass newElement: 'span'. d << s. d resetContents. d << 'dom-mite'. self assertBodyEndsWith: '>dom-mite' ! !