aboutsummaryrefslogtreecommitdiffstats
path: root/vanilla/node_modules/istanbul-lib-report/lib/xml-writer.js
diff options
context:
space:
mode:
authorAdam Mathes <adam@adammathes.com>2026-02-13 21:34:48 -0800
committerAdam Mathes <adam@adammathes.com>2026-02-13 21:34:48 -0800
commit76cb9c2a39d477a64824a985ade40507e3bbade1 (patch)
tree41e997aa9c6f538d3a136af61dae9424db2005a9 /vanilla/node_modules/istanbul-lib-report/lib/xml-writer.js
parent819a39a21ac992b1393244a4c283bbb125208c69 (diff)
downloadneko-76cb9c2a39d477a64824a985ade40507e3bbade1.tar.gz
neko-76cb9c2a39d477a64824a985ade40507e3bbade1.tar.bz2
neko-76cb9c2a39d477a64824a985ade40507e3bbade1.zip
feat(vanilla): add testing infrastructure and tests (NK-wjnczv)
Diffstat (limited to 'vanilla/node_modules/istanbul-lib-report/lib/xml-writer.js')
-rw-r--r--vanilla/node_modules/istanbul-lib-report/lib/xml-writer.js90
1 files changed, 90 insertions, 0 deletions
diff --git a/vanilla/node_modules/istanbul-lib-report/lib/xml-writer.js b/vanilla/node_modules/istanbul-lib-report/lib/xml-writer.js
new file mode 100644
index 0000000..a32550e
--- /dev/null
+++ b/vanilla/node_modules/istanbul-lib-report/lib/xml-writer.js
@@ -0,0 +1,90 @@
+'use strict';
+/*
+ Copyright 2012-2015, Yahoo Inc.
+ Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.
+ */
+const INDENT = ' ';
+
+function attrString(attrs) {
+ return Object.entries(attrs || {})
+ .map(([k, v]) => ` ${k}="${v}"`)
+ .join('');
+}
+
+/**
+ * a utility class to produce well-formed, indented XML
+ * @param {ContentWriter} contentWriter the content writer that this utility wraps
+ * @constructor
+ */
+class XMLWriter {
+ constructor(contentWriter) {
+ this.cw = contentWriter;
+ this.stack = [];
+ }
+
+ indent(str) {
+ return this.stack.map(() => INDENT).join('') + str;
+ }
+
+ /**
+ * writes the opening XML tag with the supplied attributes
+ * @param {String} name tag name
+ * @param {Object} [attrs=null] attrs attributes for the tag
+ */
+ openTag(name, attrs) {
+ const str = this.indent(`<${name + attrString(attrs)}>`);
+ this.cw.println(str);
+ this.stack.push(name);
+ }
+
+ /**
+ * closes an open XML tag.
+ * @param {String} name - tag name to close. This must match the writer's
+ * notion of the tag that is currently open.
+ */
+ closeTag(name) {
+ if (this.stack.length === 0) {
+ throw new Error(`Attempt to close tag ${name} when not opened`);
+ }
+ const stashed = this.stack.pop();
+ const str = `</${name}>`;
+
+ if (stashed !== name) {
+ throw new Error(
+ `Attempt to close tag ${name} when ${stashed} was the one open`
+ );
+ }
+ this.cw.println(this.indent(str));
+ }
+
+ /**
+ * writes a tag and its value opening and closing it at the same time
+ * @param {String} name tag name
+ * @param {Object} [attrs=null] attrs tag attributes
+ * @param {String} [content=null] content optional tag content
+ */
+ inlineTag(name, attrs, content) {
+ let str = '<' + name + attrString(attrs);
+ if (content) {
+ str += `>${content}</${name}>`;
+ } else {
+ str += '/>';
+ }
+ str = this.indent(str);
+ this.cw.println(str);
+ }
+
+ /**
+ * closes all open tags and ends the document
+ */
+ closeAll() {
+ this.stack
+ .slice()
+ .reverse()
+ .forEach(name => {
+ this.closeTag(name);
+ });
+ }
+}
+
+module.exports = XMLWriter;