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