зеркало из https://github.com/mozilla/gecko-dev.git
215 строки
6.9 KiB
JavaScript
215 строки
6.9 KiB
JavaScript
let testURL_01 = chromeRoot + "browser_formsZoom.html";
|
|
let testURL_02 = baseURI + "browser_formsZoom.html";
|
|
messageManager.loadFrameScript(baseURI + "remote_formsZoom.js", true);
|
|
|
|
// A queue to order the tests and a handle for each test
|
|
var gTests = [];
|
|
var gCurrentTest = null;
|
|
|
|
//------------------------------------------------------------------------------
|
|
// Entry point (must be named "test")
|
|
function test() {
|
|
// The "runNextTest" approach is async, so we need to call "waitForExplicitFinish()"
|
|
// We call "finish()" when the tests are finished
|
|
waitForExplicitFinish();
|
|
// Start the tests
|
|
runNextTest();
|
|
}
|
|
|
|
function waitForPageShow(aPageURL, aCallback) {
|
|
messageManager.addMessageListener("pageshow", function(aMessage) {
|
|
if (aMessage.target.currentURI.spec == aPageURL) {
|
|
messageManager.removeMessageListener("pageshow", arguments.callee);
|
|
setTimeout(function() { aCallback(); }, 0);
|
|
}
|
|
});
|
|
};
|
|
|
|
//------------------------------------------------------------------------------
|
|
// Iterating tests by shifting test out one by one as runNextTest is called.
|
|
function runNextTest() {
|
|
// Run the next test until all tests completed
|
|
if (gTests.length > 0) {
|
|
gCurrentTest = gTests.shift();
|
|
info(gCurrentTest.desc);
|
|
setTimeout(gCurrentTest.run, 0);
|
|
}
|
|
else {
|
|
// Cleanup. All tests are completed at this point
|
|
try {
|
|
// Add any cleanup code here
|
|
}
|
|
finally {
|
|
// We must finialize the tests
|
|
finish();
|
|
}
|
|
}
|
|
}
|
|
|
|
function waitForZoom(aCallback) {
|
|
if (AnimatedZoom.isZooming()) {
|
|
let self = this;
|
|
window.addEventListener("AnimatedZoomEnd", function() {
|
|
window.removeEventListener("AnimatedZoomEnd", arguments.callee, false);
|
|
setTimeout(aCallback, 0);
|
|
}, false);
|
|
}
|
|
else setTimeout(aCallback, 0);
|
|
}
|
|
|
|
function isElementVisible(aElement) {
|
|
let elementRect = Rect.fromRect(aElement.rect);
|
|
let caretRect = Rect.fromRect(aElement.caretRect);
|
|
|
|
let browser = getBrowser();
|
|
let zoomRect = Rect.fromRect(browser.getBoundingClientRect());
|
|
let scroll = browser.getRootView().getPosition();
|
|
let browserRect = new Rect(scroll.x, scroll.y, zoomRect.width, zoomRect.height);
|
|
|
|
info("CanZoom: " +Browser.selectedTab.allowZoom);
|
|
|
|
info("Browser rect: " + browserRect + " - scale: " + browser.scale);
|
|
info("Element rect: " + elementRect + " - caret rect: " + caretRect);
|
|
info("Scale element rect: " + elementRect.clone().scale(browser.scale, browser.scale) + " - scale caretRect: " + caretRect.clone().scale(browser.scale, browser.scale));
|
|
info("Resulting zoom rect: " + Browser._getZoomRectForPoint(elementRect.center().x, elementRect.y, browser.scale));
|
|
|
|
let isCaretSyncEnabled = Services.prefs.getBoolPref("formhelper.autozoom.caret");
|
|
if (isCaretSyncEnabled) {
|
|
ok(browserRect.contains(caretRect.clone().scale(browser.scale, browser.scale)), "Caret rect should be completely visible");
|
|
}
|
|
else {
|
|
elementRect = elementRect.clone().scale(browser.scale, browser.scale);
|
|
let resultRect = browserRect.intersect(elementRect);
|
|
ok(!resultRect.isEmpty() && elementRect.x > browserRect.x && elementRect.y > browserRect.y, "Element should be partially visible");
|
|
}
|
|
}
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
// Case: Loading a page and Zoom into textarea field with caret sync disabled
|
|
gTests.push({
|
|
desc: "Loading a page and Zoom into textarea field with caret sync enabled",
|
|
elements: ["textarea-1", "textarea-2", "textarea-3", "textarea-4"],
|
|
_currentTab: null,
|
|
|
|
run: function() {
|
|
Services.prefs.setBoolPref("formhelper.autozoom.caret", false);
|
|
gCurrentTest._currentTab = BrowserUI.newTab(testURL_01);
|
|
|
|
waitForPageShow(testURL_01, function() { gCurrentTest.zoomNext(); });
|
|
},
|
|
|
|
zoomNext: function() {
|
|
let id = this.elements.shift();
|
|
if (!id) {
|
|
BrowserUI.closeTab();
|
|
runNextTest();
|
|
return;
|
|
}
|
|
|
|
info("Zooming to " + id);
|
|
AsyncTests.waitFor("FormAssist:Show", { id: id }, function(json) {
|
|
waitForZoom(function() {
|
|
isElementVisible(json.current);
|
|
gCurrentTest.zoomNext();
|
|
});
|
|
});
|
|
}
|
|
});
|
|
|
|
//------------------------------------------------------------------------------
|
|
// Case: Loading a page and Zoom into textarea field with caret sync enabled
|
|
gTests.push({
|
|
desc: "Loading a page and Zoom into textarea field with caret sync enabled",
|
|
elements: ["textarea-1", "textarea-2", "textarea-3", "textarea-4"],
|
|
_currentTab: null,
|
|
|
|
run: function() {
|
|
Services.prefs.setBoolPref("formhelper.autozoom.caret", true);
|
|
gCurrentTest._currentTab = BrowserUI.newTab(testURL_01);
|
|
|
|
waitForPageShow(testURL_01, function() { gCurrentTest.zoomNext(); });
|
|
},
|
|
|
|
zoomNext: function() {
|
|
let id = this.elements.shift();
|
|
if (!id) {
|
|
BrowserUI.closeTab();
|
|
runNextTest();
|
|
return;
|
|
}
|
|
|
|
AsyncTests.waitFor("FormAssist:Show", { id: id }, function(json) {
|
|
waitForZoom(function() {
|
|
isElementVisible(json.current);
|
|
gCurrentTest.zoomNext();
|
|
});
|
|
});
|
|
}
|
|
});
|
|
|
|
//------------------------------------------------------------------------------
|
|
// Case: Loading a remote page and Zoom into textarea field with caret sync disabled
|
|
gTests.push({
|
|
desc: "Loading a remote page and Zoom into textarea field with caret sync disabled",
|
|
elements: ["textarea-1", "textarea-2", "textarea-3", "textarea-4"],
|
|
_currentTab: null,
|
|
|
|
run: function() {
|
|
Services.prefs.setBoolPref("formhelper.autozoom.caret", false);
|
|
gCurrentTest._currentTab = BrowserUI.newTab(testURL_02);
|
|
|
|
waitForPageShow(testURL_02, function() { gCurrentTest.zoomNext(); });
|
|
},
|
|
|
|
zoomNext: function() {
|
|
let id = this.elements.shift();
|
|
if (!id) {
|
|
BrowserUI.closeTab();
|
|
runNextTest();
|
|
return;
|
|
}
|
|
|
|
AsyncTests.waitFor("FormAssist:Show", { id: id }, function(json) {
|
|
waitForZoom(function() {
|
|
isElementVisible(json.current);
|
|
gCurrentTest.zoomNext();
|
|
});
|
|
});
|
|
}
|
|
});
|
|
|
|
//------------------------------------------------------------------------------
|
|
// Case: Loading a remote page and Zoom into textarea field with caret sync enabled
|
|
gTests.push({
|
|
desc: "Loading a remote page and Zoom into textarea field with caret sync enabled",
|
|
elements: ["textarea-1", "textarea-2"],
|
|
_currentTab: null,
|
|
|
|
run: function() {
|
|
Services.prefs.setBoolPref("formhelper.autozoom.caret", true);
|
|
gCurrentTest._currentTab = BrowserUI.newTab(testURL_02);
|
|
|
|
waitForPageShow(testURL_02, function() { gCurrentTest.zoomNext(); });
|
|
},
|
|
|
|
zoomNext: function() {
|
|
let id = this.elements.shift();
|
|
if (!id) {
|
|
todo(false, "textarea-3 caret should be synced, but for some reason it is not");
|
|
todo(false, "textarea-4 caret should be synced, but for some reason it is not");
|
|
BrowserUI.closeTab();
|
|
runNextTest();
|
|
return;
|
|
}
|
|
|
|
AsyncTests.waitFor("FormAssist:Show", { id: id }, function(json) {
|
|
waitForZoom(function() {
|
|
isElementVisible(json.current);
|
|
gCurrentTest.zoomNext();
|
|
});
|
|
});
|
|
}
|
|
});
|
|
|