@@ -181,52 +181,68 @@ describe('MdRipple', () => {
181181 expect ( pxStringToFloat ( ripple . style . height ) ) . toBeCloseTo ( 2 * expectedRadius , 1 ) ;
182182 } ) ;
183183
184- it ( 'create ripple with correct position when page is scrolled' , ( ) => {
185- let elementTop = 600 ;
186- let elementLeft = 750 ;
187- let pageScrollTop = 500 ;
188- let pageScrollLeft = 500 ;
189- let left = 50 ;
190- let top = 75 ;
191-
192- // Add a very large element to make the page scroll
193- let veryLargeElement = document . createElement ( 'div' ) ;
194- veryLargeElement . style . width = '4000px' ;
195- veryLargeElement . style . height = '4000px' ;
196- document . body . appendChild ( veryLargeElement ) ;
197- document . body . scrollTop = pageScrollTop ;
198- document . body . scrollLeft = pageScrollLeft ;
199- // Firefox
200- document . documentElement . scrollLeft = pageScrollLeft ;
201- document . documentElement . scrollTop = pageScrollTop ;
202- // Mobile safari
203- window . scrollTo ( pageScrollLeft , pageScrollTop ) ;
204-
205- rippleElement . style . position = 'absolute' ;
206- rippleElement . style . left = `${ elementLeft } px` ;
207- rippleElement . style . top = `${ elementTop } px` ;
208-
209- // Simulate a keyboard-triggered click by setting event coordinates to 0.
210- const clickEvent = createMouseEvent ( 'click' , {
211- clientX : left + elementLeft - pageScrollLeft ,
212- clientY : top + elementTop - pageScrollTop ,
213- screenX : left + elementLeft ,
214- screenY : top + elementTop
184+ describe ( 'when page is scrolled' , ( ) => {
185+ var veryLargeElement : HTMLDivElement ;
186+ var pageScrollTop = 500 ;
187+ var pageScrollLeft = 500 ;
188+
189+ beforeEach ( ( ) => {
190+ // Add a very large element to make the page scroll
191+ this . veryLargeElement = document . createElement ( 'div' ) ;
192+ this . veryLargeElement . style . width = '4000px' ;
193+ this . veryLargeElement . style . height = '4000px' ;
194+ document . body . appendChild ( this . veryLargeElement ) ;
195+ document . body . scrollTop = pageScrollTop ;
196+ document . body . scrollLeft = pageScrollLeft ;
197+ // Firefox
198+ document . documentElement . scrollLeft = pageScrollLeft ;
199+ document . documentElement . scrollTop = pageScrollTop ;
200+ // Mobile safari
201+ window . scrollTo ( pageScrollLeft , pageScrollTop ) ;
215202 } ) ;
216- rippleElement . dispatchEvent ( clickEvent ) ;
217203
218- const expectedRadius = Math . sqrt ( 250 * 250 + 125 * 125 ) ;
219- const expectedLeft = left - expectedRadius ;
220- const expectedTop = top - expectedRadius ;
221-
222- const ripple = < HTMLElement > rippleElement . querySelector ( '.md-ripple-foreground' ) ;
223- expect ( pxStringToFloat ( ripple . style . left ) ) . toBeCloseTo ( expectedLeft , 1 ) ;
224- expect ( pxStringToFloat ( ripple . style . top ) ) . toBeCloseTo ( expectedTop , 1 ) ;
225- expect ( pxStringToFloat ( ripple . style . width ) ) . toBeCloseTo ( 2 * expectedRadius , 1 ) ;
226- expect ( pxStringToFloat ( ripple . style . height ) ) . toBeCloseTo ( 2 * expectedRadius , 1 ) ;
204+ afterEach ( ( ) => {
205+ document . body . removeChild ( this . veryLargeElement ) ;
206+ document . body . scrollTop = 0 ;
207+ document . body . scrollLeft = 0 ;
208+ // Firefox
209+ document . documentElement . scrollLeft = 0 ;
210+ document . documentElement . scrollTop = 0 ;
211+ // Mobile safari
212+ window . scrollTo ( 0 , 0 ) ;
213+ } ) ;
227214
228- document . body . removeChild ( veryLargeElement ) ;
215+ it ( 'create ripple with correct position' , ( ) => {
216+ let elementTop = 600 ;
217+ let elementLeft = 750 ;
218+ let left = 50 ;
219+ let top = 75 ;
220+
221+ rippleElement . style . position = 'absolute' ;
222+ rippleElement . style . left = `${ elementLeft } px` ;
223+ rippleElement . style . top = `${ elementTop } px` ;
224+
225+ // Simulate a keyboard-triggered click by setting event coordinates to 0.
226+ const clickEvent = createMouseEvent ( 'click' , {
227+ clientX : left + elementLeft - pageScrollLeft ,
228+ clientY : top + elementTop - pageScrollTop ,
229+ screenX : left + elementLeft ,
230+ screenY : top + elementTop
231+ } ) ;
232+ rippleElement . dispatchEvent ( clickEvent ) ;
233+
234+ const expectedRadius = Math . sqrt ( 250 * 250 + 125 * 125 ) ;
235+ const expectedLeft = left - expectedRadius ;
236+ const expectedTop = top - expectedRadius ;
237+
238+ const ripple = < HTMLElement > rippleElement . querySelector ( '.md-ripple-foreground' ) ;
239+ expect ( pxStringToFloat ( ripple . style . left ) ) . toBeCloseTo ( expectedLeft , 1 ) ;
240+ expect ( pxStringToFloat ( ripple . style . top ) ) . toBeCloseTo ( expectedTop , 1 ) ;
241+ expect ( pxStringToFloat ( ripple . style . width ) ) . toBeCloseTo ( 2 * expectedRadius , 1 ) ;
242+ expect ( pxStringToFloat ( ripple . style . height ) ) . toBeCloseTo ( 2 * expectedRadius , 1 ) ;
243+ } ) ;
229244 } ) ;
245+
230246 } ) ;
231247
232248 describe ( 'configuring behavior' , ( ) => {
0 commit comments