зеркало из https://github.com/mozilla/pjs.git
Bug 597930 - Fix broken regexp that causes link hover in location bar to break some URLs. r=dao, a=dietrich
This commit is contained in:
Родитель
c4ff4cf9d7
Коммит
e44221ff23
|
@ -44,23 +44,68 @@ var gTestIter;
|
||||||
|
|
||||||
// TESTS //////////////////////////////////////////////////////////////////////
|
// TESTS //////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
function smokeTestGenerator() {
|
let gTests = [
|
||||||
if (ensureOverLinkHidden())
|
|
||||||
|
function smokeTestGenerator() {
|
||||||
|
if (ensureOverLinkHidden())
|
||||||
|
yield;
|
||||||
|
|
||||||
|
setOverLinkWait("http://example.com/");
|
||||||
yield;
|
yield;
|
||||||
|
checkURLBar(true);
|
||||||
|
|
||||||
setOverLink("http://example.com/");
|
setOverLinkWait("");
|
||||||
yield;
|
yield;
|
||||||
checkURLBar(true);
|
checkURLBar(false);
|
||||||
|
},
|
||||||
|
|
||||||
setOverLink("");
|
function hostPathLabels() {
|
||||||
yield;
|
setOverLink("http://example.com/");
|
||||||
checkURLBar(false);
|
hostLabelIs("http://example.com/");
|
||||||
}
|
pathLabelIs("");
|
||||||
|
|
||||||
|
setOverLink("http://example.com/foo");
|
||||||
|
hostLabelIs("http://example.com/");
|
||||||
|
pathLabelIs("foo");
|
||||||
|
|
||||||
|
setOverLink("javascript:popup('http://example.com/')");
|
||||||
|
hostLabelIs("");
|
||||||
|
pathLabelIs("javascript:popup('http://example.com/')");
|
||||||
|
|
||||||
|
setOverLink("javascript:popup('http://example.com/foo')");
|
||||||
|
hostLabelIs("");
|
||||||
|
pathLabelIs("javascript:popup('http://example.com/foo')");
|
||||||
|
|
||||||
|
setOverLink("about:home");
|
||||||
|
hostLabelIs("");
|
||||||
|
pathLabelIs("about:home");
|
||||||
|
|
||||||
|
// Clean up after ourselves.
|
||||||
|
if (ensureOverLinkHidden())
|
||||||
|
yield;
|
||||||
|
}
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
function test() {
|
function test() {
|
||||||
waitForExplicitFinish();
|
waitForExplicitFinish();
|
||||||
gTestIter = smokeTestGenerator();
|
runNextTest();
|
||||||
cont();
|
}
|
||||||
|
|
||||||
|
function runNextTest() {
|
||||||
|
let nextTest = gTests.shift();
|
||||||
|
if (nextTest) {
|
||||||
|
dump("Running next test: " + nextTest.name + "\n");
|
||||||
|
gTestIter = nextTest();
|
||||||
|
|
||||||
|
// If the test is a generator, advance it. Otherwise, we just ran the test.
|
||||||
|
if (gTestIter)
|
||||||
|
cont();
|
||||||
|
else
|
||||||
|
runNextTest();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
// HELPERS ////////////////////////////////////////////////////////////////////
|
// HELPERS ////////////////////////////////////////////////////////////////////
|
||||||
|
@ -74,7 +119,13 @@ function cont() {
|
||||||
gTestIter.next();
|
gTestIter.next();
|
||||||
}
|
}
|
||||||
catch (err if err instanceof StopIteration) {
|
catch (err if err instanceof StopIteration) {
|
||||||
finish();
|
runNextTest();
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
// Depending on who calls us, sometimes exceptions are eaten by event
|
||||||
|
// handlers... Make sure we fail.
|
||||||
|
ok(false, "Exception: " + err);
|
||||||
|
throw err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -105,14 +156,14 @@ function checkURLBar(shouldShowOverLink) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the over-link. This assumes that aStr will cause the over-link to fade
|
* Sets the over-link. This assumes that str will cause the over-link to fade
|
||||||
* in or out. When its transition has finished, the test iterator is
|
* in or out. When its transition has finished, the test iterator is
|
||||||
* incremented, so you should yield after calling.
|
* incremented, so you should yield after calling.
|
||||||
*
|
*
|
||||||
* @param aStr
|
* @param str
|
||||||
* The over-link will be set to this string or cleared if this is falsey.
|
* The over-link will be set to this string or cleared if this is falsey.
|
||||||
*/
|
*/
|
||||||
function setOverLink(aStr) {
|
function setOverLinkWait(str) {
|
||||||
let overLink = gURLBar._overLinkBox;
|
let overLink = gURLBar._overLinkBox;
|
||||||
overLink.addEventListener("transitionend", function onTrans(event) {
|
overLink.addEventListener("transitionend", function onTrans(event) {
|
||||||
if (event.target == overLink && event.propertyName == "opacity") {
|
if (event.target == overLink && event.propertyName == "opacity") {
|
||||||
|
@ -120,7 +171,18 @@ function setOverLink(aStr) {
|
||||||
cont();
|
cont();
|
||||||
}
|
}
|
||||||
}, false);
|
}, false);
|
||||||
gURLBar.setOverLink(aStr);
|
gURLBar.setOverLink(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the over-link but unlike setOverLinkWait does not assume that a
|
||||||
|
* transition will occur and therefore does not wait.
|
||||||
|
*
|
||||||
|
* @param str
|
||||||
|
* The over-link will be set to this string or cleared if this is falsey.
|
||||||
|
*/
|
||||||
|
function setOverLink(str) {
|
||||||
|
gURLBar.setOverLink(str);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -132,9 +194,33 @@ function setOverLink(aStr) {
|
||||||
*/
|
*/
|
||||||
function ensureOverLinkHidden() {
|
function ensureOverLinkHidden() {
|
||||||
let overLink = gURLBar._overLinkBox;
|
let overLink = gURLBar._overLinkBox;
|
||||||
if (window.getComputedStyle(overLink, null).opacity == 0)
|
if (window.getComputedStyle(overLink, null).opacity == 0) {
|
||||||
|
setOverLink("");
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
setOverLink("");
|
setOverLinkWait("");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Asserts that the over-link host label is a given string.
|
||||||
|
*
|
||||||
|
* @param str
|
||||||
|
* The host label should be this string.
|
||||||
|
*/
|
||||||
|
function hostLabelIs(str) {
|
||||||
|
let host = gURLBar._overLinkHostLabel;
|
||||||
|
is(host.value, str, "Over-link host label should be correct");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Asserts that the over-link path label is a given string.
|
||||||
|
*
|
||||||
|
* @param str
|
||||||
|
* The path label should be this string.
|
||||||
|
*/
|
||||||
|
function pathLabelIs(str) {
|
||||||
|
let path = gURLBar._overLinkPathLabel;
|
||||||
|
is(path.value, str, "Over-link path label should be correct");
|
||||||
|
}
|
||||||
|
|
|
@ -626,7 +626,7 @@
|
||||||
// Determine the pre-path and path of the over-link. Include the
|
// Determine the pre-path and path of the over-link. Include the
|
||||||
// path's leading slash in the pre-path so that if the path is
|
// path's leading slash in the pre-path so that if the path is
|
||||||
// truncated its leading slash is visible.
|
// truncated its leading slash is visible.
|
||||||
var re = new RegExp("([a-z0-9+.-]+://[^/]+/)(.*)");
|
var re = new RegExp("^([a-z0-9+.-]+://[^/]+/)(.*)$");
|
||||||
var match = re.exec(aURL);
|
var match = re.exec(aURL);
|
||||||
var host = match ? match[1] : "";
|
var host = match ? match[1] : "";
|
||||||
var path = match ? match[2] : aURL;
|
var path = match ? match[2] : aURL;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче