зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1823048 [wpt PR 39057] - Test which XSLT functions are defined, a=testonly
Automatic update from web-platform-tests Test which XSLT functions are defined This currently expects only functions defined in XSLT 1.0 (and references) to be defined. This matches what all browsers currently implement. -- wpt-commits: d963cd40e87f20bbfaaffdb9eca2e539bac4d631 wpt-pr: 39057
This commit is contained in:
Родитель
150156e0df
Коммит
952131bf81
|
@ -0,0 +1,252 @@
|
|||
const xslt_functions = [
|
||||
"QName",
|
||||
"abs",
|
||||
"accumulator-after",
|
||||
"accumulator-before",
|
||||
"adjust-date-to-timezone",
|
||||
"adjust-dateTime-to-timezone",
|
||||
"adjust-time-to-timezone",
|
||||
"analyze-string",
|
||||
"apply",
|
||||
"available-environment-variables",
|
||||
"available-system-properties",
|
||||
"avg",
|
||||
"base-uri",
|
||||
"boolean",
|
||||
"ceiling",
|
||||
"codepoint-equal",
|
||||
"codepoints-to-string",
|
||||
"collation-key",
|
||||
"collection",
|
||||
"compare",
|
||||
"concat",
|
||||
"contains",
|
||||
"contains-token",
|
||||
"copy-of",
|
||||
"count",
|
||||
"current",
|
||||
"current-date",
|
||||
"current-dateTime",
|
||||
"current-group",
|
||||
"current-grouping-key",
|
||||
"current-merge-group",
|
||||
"current-merge-key",
|
||||
"current-output-uri",
|
||||
"current-time",
|
||||
"data",
|
||||
"dateTime",
|
||||
"day-from-date",
|
||||
"day-from-dateTime",
|
||||
"days-from-duration",
|
||||
"deep-equal",
|
||||
"default-collation",
|
||||
"default-language",
|
||||
"distinct-values",
|
||||
"doc",
|
||||
"doc-available",
|
||||
"document",
|
||||
"document-uri",
|
||||
"element-available",
|
||||
"element-with-id",
|
||||
"empty",
|
||||
"encode-for-uri",
|
||||
"ends-with",
|
||||
"environment-variable",
|
||||
"error",
|
||||
"escape-html-uri",
|
||||
"exactly-one",
|
||||
"exists",
|
||||
"false",
|
||||
"filter",
|
||||
"floor",
|
||||
"fold-left",
|
||||
"fold-right",
|
||||
"for-each",
|
||||
"for-each-pair",
|
||||
"format-date",
|
||||
"format-dateTime",
|
||||
"format-integer",
|
||||
"format-number",
|
||||
"format-time",
|
||||
"function-arity",
|
||||
"function-available",
|
||||
"function-lookup",
|
||||
"function-name",
|
||||
"generate-id",
|
||||
"has-children",
|
||||
"head",
|
||||
"hours-from-dateTime",
|
||||
"hours-from-duration",
|
||||
"hours-from-time",
|
||||
"id",
|
||||
"idref",
|
||||
"implicit-timezone",
|
||||
"in-scope-prefixes",
|
||||
"index-of",
|
||||
"innermost",
|
||||
"insert-before",
|
||||
"iri-to-uri",
|
||||
"json-doc",
|
||||
"json-to-xml",
|
||||
"key",
|
||||
"lang",
|
||||
"last",
|
||||
"load-xquery-module",
|
||||
"local-name",
|
||||
"local-name-from-QName",
|
||||
"lower-case",
|
||||
"matches",
|
||||
"max",
|
||||
"min",
|
||||
"minutes-from-dateTime",
|
||||
"minutes-from-duration",
|
||||
"minutes-from-time",
|
||||
"month-from-date",
|
||||
"month-from-dateTime",
|
||||
"months-from-duration",
|
||||
"name",
|
||||
"namespace-uri",
|
||||
"namespace-uri-for-prefix",
|
||||
"namespace-uri-from-QName",
|
||||
"nilled",
|
||||
"node-name",
|
||||
"normalize-space",
|
||||
"normalize-unicode",
|
||||
"not",
|
||||
"number",
|
||||
"one-or-more",
|
||||
"outermost",
|
||||
"parse-ietf-date",
|
||||
"parse-json",
|
||||
"parse-xml",
|
||||
"parse-xml-fragment",
|
||||
"path",
|
||||
"position",
|
||||
"prefix-from-QName",
|
||||
"put",
|
||||
"random-number-generator",
|
||||
"regex-group",
|
||||
"remove",
|
||||
"replace",
|
||||
"resolve-QName",
|
||||
"resolve-uri",
|
||||
"reverse",
|
||||
"root",
|
||||
"round",
|
||||
"round-half-to-even",
|
||||
"seconds-from-dateTime",
|
||||
"seconds-from-duration",
|
||||
"seconds-from-time",
|
||||
"serialize",
|
||||
"snapshot",
|
||||
"sort",
|
||||
"starts-with",
|
||||
"static-base-uri",
|
||||
"stream-available",
|
||||
"string",
|
||||
"string-join",
|
||||
"string-length",
|
||||
"string-to-codepoints",
|
||||
"subsequence",
|
||||
"substring",
|
||||
"substring-after",
|
||||
"substring-before",
|
||||
"sum",
|
||||
"system-property",
|
||||
"tail",
|
||||
"timezone-from-date",
|
||||
"timezone-from-dateTime",
|
||||
"timezone-from-time",
|
||||
"tokenize",
|
||||
"trace",
|
||||
"transform",
|
||||
"translate",
|
||||
"true",
|
||||
"type-available",
|
||||
"unordered",
|
||||
"unparsed-entity-public-id",
|
||||
"unparsed-entity-uri",
|
||||
"unparsed-text",
|
||||
"unparsed-text-available",
|
||||
"unparsed-text-lines",
|
||||
"upper-case",
|
||||
"uri-collection",
|
||||
"xml-to-json",
|
||||
"year-from-date",
|
||||
"year-from-dateTime",
|
||||
"years-from-duration",
|
||||
"zero-or-one",
|
||||
];
|
||||
|
||||
const xslt1_functions = [
|
||||
"boolean",
|
||||
"ceiling",
|
||||
"concat",
|
||||
"contains",
|
||||
"count",
|
||||
"current",
|
||||
"document",
|
||||
"element-available",
|
||||
"false",
|
||||
"floor",
|
||||
"format-number",
|
||||
"function-available",
|
||||
"generate-id",
|
||||
"id",
|
||||
"key",
|
||||
"lang",
|
||||
"last",
|
||||
"local-name",
|
||||
"name",
|
||||
"namespace-uri",
|
||||
"normalize-space",
|
||||
"not",
|
||||
"number",
|
||||
"position",
|
||||
"round",
|
||||
"starts-with",
|
||||
"string",
|
||||
"string-length",
|
||||
"substring",
|
||||
"substring-after",
|
||||
"substring-before",
|
||||
"sum",
|
||||
"system-property",
|
||||
"translate",
|
||||
"true",
|
||||
"unparsed-entity-uri",
|
||||
];
|
||||
|
||||
for (const fn of xslt_functions) {
|
||||
test(() => {
|
||||
const xsltSrc = `<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
||||
<xsl:output method="html" encoding="utf-8" version="5"/>
|
||||
<xsl:template match="/">
|
||||
<xsl:choose>
|
||||
<xsl:when test='function-available("${fn}")'>
|
||||
<div>available</div>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<div>unavailable</div>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:template>
|
||||
</xsl:stylesheet>`;
|
||||
|
||||
const processor = new XSLTProcessor();
|
||||
const parser = new DOMParser();
|
||||
processor.importStylesheet(
|
||||
parser.parseFromString(xsltSrc, "application/xml")
|
||||
);
|
||||
const output = processor.transformToFragment(
|
||||
parser.parseFromString("<x/>", "application/xml"),
|
||||
document
|
||||
);
|
||||
|
||||
// Note we only expect functions defined in XSLT 1.0 to be defined.
|
||||
assert_equals(
|
||||
output.textContent.trim(),
|
||||
xslt1_functions.indexOf(fn) >= 0 ? "available" : "unavailable"
|
||||
);
|
||||
}, fn);
|
||||
}
|
Загрузка…
Ссылка в новой задаче