123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- /* Copyright 2020 Mozilla Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- import { SimpleXMLParser, XMLParserBase } from "../../src/core/xml_parser.js";
- import { parseXFAPath } from "../../src/core/core_utils.js";
- describe("XML", function () {
- describe("searchNode", function () {
- it("should search a node with a given path in xml tree", function () {
- const xml = `
- <a>
- <b>
- <c a="123"/>
- <d/>
- <e>
- <f>
- <g a="321"/>
- </f>
- </e>
- <c a="456"/>
- <c a="789"/>
- <h/>
- <c a="101112"/>
- </b>
- <h>
- <i/>
- <j/>
- <k>
- <g a="654"/>
- </k>
- </h>
- <b>
- <g a="987"/>
- <h/>
- <g a="121110"/>
- </b>
- </a>`;
- const root = new SimpleXMLParser({ hasAttributes: true }).parseFromString(
- xml
- ).documentElement;
- function getAttr(path) {
- return root.searchNode(parseXFAPath(path), 0).attributes[0].value;
- }
- expect(getAttr("b.g")).toEqual("321");
- expect(getAttr("e.f.g")).toEqual("321");
- expect(getAttr("e.g")).toEqual("321");
- expect(getAttr("g")).toEqual("321");
- expect(getAttr("h.g")).toEqual("654");
- expect(getAttr("b[0].g")).toEqual("321");
- expect(getAttr("b[1].g")).toEqual("987");
- expect(getAttr("b[1].g[0]")).toEqual("987");
- expect(getAttr("b[1].g[1]")).toEqual("121110");
- expect(getAttr("c")).toEqual("123");
- expect(getAttr("c[1]")).toEqual("456");
- expect(getAttr("c[2]")).toEqual("789");
- expect(getAttr("c[3]")).toEqual("101112");
- });
- it("should dump a xml tree", function () {
- const xml = `
- <a>
- <b>
- <c a="123"/>
- <d>hello</d>
- <e>
- <f>
- <g a="321"/>
- </f>
- </e>
- <c a="456"/>
- <c a="789"/>
- <h/>
- <c a="101112"/>
- </b>
- <h>
- <i/>
- <j/>
- <k>
W😂rld
<g a="654"/>
- </k>
- </h>
- <b>
- <g a="987"/>
- <h/>
- <g a="121110"/>
- </b>
- </a>`;
- const root = new SimpleXMLParser({ hasAttributes: true }).parseFromString(
- xml
- ).documentElement;
- const buffer = [];
- root.dump(buffer);
- expect(buffer.join("").replace(/\s+/g, "")).toEqual(
- xml.replace(/\s+/g, "")
- );
- });
- });
- it("should parse processing instructions", function () {
- const xml = `
- <a>
- <?foo bar?>
- <?foo bar oof?>
- <?foo?>
- </a>`;
- const pi = [];
- class MyParser extends XMLParserBase {
- onPi(name, value) {
- pi.push([name, value]);
- }
- }
- new MyParser().parseXml(xml);
- expect(pi).toEqual([
- ["foo", "bar"],
- ["foo", "bar oof"],
- ["foo", ""],
- ]);
- });
- });
|