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: '>sentineldom-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: '>sentineldom-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: '>sentineldom-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: '>sentinelA | B | C |
D | E | F |