blob: cd213356ae9981695bb377e3d3619bf950e60949 [file]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Utilities that are used in multiple tests.
function MockWindow(width, height, sizer) {
this.innerWidth = width;
this.innerHeight = height;
this.addEventListener = function(e, f) {
if (e == 'scroll')
this.scrollCallback = f;
if (e == 'resize')
this.resizeCallback = f;
};
this.setSize = function(width, height) {
this.innerWidth = width;
this.innerHeight = height;
this.resizeCallback();
}
this.scrollTo = function(x, y) {
if (sizer) {
x = Math.min(x, parseInt(sizer.style.width) - width);
y = Math.min(y, parseInt(sizer.style.height) - height);
}
this.pageXOffset = Math.max(0, x);
this.pageYOffset = Math.max(0, y);
this.scrollCallback();
};
this.setTimeout = function(callback, time) {
this.timerCallback = callback;
return "timerId";
};
this.clearTimeout = function(timerId) {
this.timerCallback = null;
};
this.runTimeout = function() {
if (this.timerCallback)
this.timerCallback();
}
if (sizer) {
sizer.resizeCallback_ = function() {
this.scrollTo(this.pageXOffset, this.pageYOffset);
}.bind(this);
}
this.pageXOffset = 0;
this.pageYOffset = 0;
this.scrollCallback = null;
this.resizeCallback = null;
this.timerCallback = null;
}
function MockSizer() {
var sizer = this;
this.style = {
width_: '0px',
height_: '0px',
get height() { return this.height_; },
set height(height) {
this.height_ = height;
if (sizer.resizeCallback_)
sizer.resizeCallback_();
},
get width() { return this.width_; },
set width(width) {
this.width_ = width;
if (sizer.resizeCallback_)
sizer.resizeCallback_();
},
};
}
function MockViewportChangedCallback() {
this.wasCalled = false;
this.callback = function() {
this.wasCalled = true;
}.bind(this);
this.reset = function() {
this.wasCalled = false;
};
}
function MockDocumentDimensions(width, height) {
this.width = width || 0;
this.height = height ? height : 0;
this.pageDimensions = [];
this.addPage = function(w, h) {
var y = 0;
if (this.pageDimensions.length != 0) {
y = this.pageDimensions[this.pageDimensions.length - 1].y +
this.pageDimensions[this.pageDimensions.length - 1].height;
}
this.width = Math.max(this.width, w);
this.height += h;
this.pageDimensions.push({
x: 0,
y: y,
width: w,
height: h
});
};
this.reset = function() {
this.width = 0;
this.height = 0;
this.pageDimensions = [];
};
}
function animationFrame() {
return new Promise(resolve => requestAnimationFrame(resolve));
}
function contentElement() {
return document.elementFromPoint(innerWidth / 2, innerHeight / 2);
}
async function testAsync(f) {
try {
await f();
chrome.test.succeed();
} catch (e) {
chrome.test.fail(e);
}
}