Bug 523089. Fix serialization of [*|foo] selectors. r=dbaron

This commit is contained in:
Boris Zbarsky 2009-10-20 13:27:47 -04:00
Родитель 23154b2bd7
Коммит ba3dae1bf7
2 изменённых файлов: 69 добавлений и 8 удалений

Просмотреть файл

@ -651,17 +651,22 @@ nsCSSSelector::AppendToStringWithoutCombinatorsOrNegations
while (list != nsnull) {
aString.Append(PRUnichar('['));
// Append the namespace prefix
if (list->mNameSpace > 0) {
if (list->mNameSpace == kNameSpaceID_Unknown) {
aString.Append(PRUnichar('*'));
aString.Append(PRUnichar('|'));
} else if (list->mNameSpace != kNameSpaceID_None) {
if (aSheet) {
nsXMLNameSpaceMap *sheetNS = aSheet->GetNameSpaceMap();
// will return null if namespace was the default
nsIAtom *prefixAtom = sheetNS->FindPrefix(list->mNameSpace);
if (prefixAtom) {
nsAutoString prefix;
prefixAtom->ToString(prefix);
aString.Append(prefix);
aString.Append(PRUnichar('|'));
}
// Default namespaces don't apply to attribute selectors, so
// we must have a useful prefix.
NS_ASSERTION(prefixAtom,
"How did we end up with a namespace if the prefix "
"is unknown?");
nsAutoString prefix;
prefixAtom->ToString(prefix);
aString.Append(prefix);
aString.Append(PRUnichar('|'));
}
}
// Append the attribute name

Просмотреть файл

@ -398,6 +398,62 @@ function run() {
function (doc) { return doc.getElementsByTagName("test");}
);
test_selector_in_html(
'@namespace url("test");',
'*|*[foo]',
'<test foo="bar"/>',
function (doc) { return doc.getElementsByTagName("test");},
function (doc) { return []; }
);
test_selector_in_html(
'@namespace url("test");',
'*|*[|foo]',
'<test foo="bar"/>',
function (doc) { return doc.getElementsByTagName("test");},
function (doc) { return []; }
);
test_selector_in_html(
'@namespace test url("test");',
'*|*[test|foo]',
'<test foo="bar"/>',
function (doc) { return []; },
function (doc) { return doc.getElementsByTagName("test");}
);
test_selector_in_html(
'@namespace test url("test");',
'*|*[test|foo]',
'<test xmlns:t="test" t:foo="bar"/>',
function (doc) { return doc.getElementsByTagName("test");},
function (doc) { return []; }
);
test_selector_in_html(
'@namespace url("test");',
'*|*[foo]',
'<test xmlns:t="test" t:foo="bar"/>',
function (doc) { return []; },
function (doc) { return doc.getElementsByTagName("test");}
);
test_selector_in_html(
'@namespace url("test");',
'*|*[*|foo]',
'<test xmlns:t="test" t:foo="bar"/>',
function (doc) { return doc.getElementsByTagName("test");},
function (doc) { return []; }
);
test_selector_in_html(
'',
'*|*[*|foo]',
'<test xmlns:t="test" t:foo="bar"/>',
function (doc) { return doc.getElementsByTagName("test");},
function (doc) { return []; }
);
SimpleTest.finish();
}