Skip to content

Commit 955dd77

Browse files
committed
fix test on mobile safari
1 parent 3df4e71 commit 955dd77

File tree

1 file changed

+58
-42
lines changed

1 file changed

+58
-42
lines changed

src/lib/core/ripple/ripple.spec.ts

Lines changed: 58 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)