forked from external/vscode-xml
Add First Test
This commit is contained in:
parent
e1d41f6025
commit
b9b6aec528
@ -87,7 +87,10 @@ export class V2XmlFormatter implements XmlFormatter {
|
|||||||
|
|
||||||
// entering StartTag.Attribute
|
// entering StartTag.Attribute
|
||||||
else if (location === Location.StartTag && [" ", "/", ">"].indexOf(cc) === -1) {
|
else if (location === Location.StartTag && [" ", "/", ">"].indexOf(cc) === -1) {
|
||||||
if (lastNonTextLocation === Location.AttributeValue && ((options.splitXmlnsOnFormat && xml.substr(i, 5).toLowerCase() === "xmlns") || options.splitAttributesOnFormat)) {
|
if (lastNonTextLocation === Location.AttributeValue
|
||||||
|
&& ((options.splitXmlnsOnFormat
|
||||||
|
&& xml.substr(i, 5).toLowerCase() === "xmlns")
|
||||||
|
|| options.splitAttributesOnFormat)) {
|
||||||
output += `${options.newLine}${this._getIndent(options, indentLevel)}`;
|
output += `${options.newLine}${this._getIndent(options, indentLevel)}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -118,6 +121,21 @@ export class V2XmlFormatter implements XmlFormatter {
|
|||||||
output += `>${options.newLine}`;
|
output += `>${options.newLine}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if this is an open tag followed by a line break, add an indent before the text (after the line break)
|
||||||
|
// TODO: there could be multiple lines of text here, so we'll need a less naive implementation at some point
|
||||||
|
else if (nc === "\r" || nc === "\n") {
|
||||||
|
output += `>${options.newLine}${this._getIndent(options, indentLevel)}`;
|
||||||
|
|
||||||
|
// fast-forward based on what type of line break was used
|
||||||
|
if (nc === "\r") {
|
||||||
|
i += 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
else {
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
else {
|
else {
|
||||||
output += ">";
|
output += ">";
|
||||||
}
|
}
|
||||||
@ -131,11 +149,16 @@ export class V2XmlFormatter implements XmlFormatter {
|
|||||||
indentLevel--;
|
indentLevel--;
|
||||||
|
|
||||||
// if the end tag immediately follows another end tag, add a line break and indent
|
// if the end tag immediately follows another end tag, add a line break and indent
|
||||||
|
// if the end tag immediately follows a line break, just add an indentation
|
||||||
// otherwise, this should be treated as a same-line end tag(ex. <element>text</element>)
|
// otherwise, this should be treated as a same-line end tag(ex. <element>text</element>)
|
||||||
if (lastNonTextLocation === Location.EndTag) {
|
if (lastNonTextLocation === Location.EndTag) {
|
||||||
output += `${options.newLine}${this._getIndent(options, indentLevel)}<`;
|
output += `${options.newLine}${this._getIndent(options, indentLevel)}<`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
else if (pc === "\n") {
|
||||||
|
output += `${this._getIndent(options, indentLevel)}<`;
|
||||||
|
}
|
||||||
|
|
||||||
else {
|
else {
|
||||||
output += "<";
|
output += "<";
|
||||||
}
|
}
|
||||||
|
@ -1,17 +1,42 @@
|
|||||||
//
|
|
||||||
// Note: This example test is leveraging the Mocha test framework.
|
|
||||||
// Please refer to their documentation on https://mochajs.org/ for help.
|
|
||||||
//
|
|
||||||
|
|
||||||
// The module 'assert' provides assertion methods from node
|
|
||||||
import * as assert from "assert";
|
import * as assert from "assert";
|
||||||
|
import { FormattingOptions } from "vscode";
|
||||||
|
|
||||||
// You can import and use all API from the 'vscode' module
|
import { TestDataLoader } from "./test-utils/test-data-loader";
|
||||||
// as well as import your extension to test it
|
|
||||||
import * as vscode from "vscode";
|
|
||||||
import * as myExtension from "../extension";
|
|
||||||
|
|
||||||
// Defines a Mocha test suite to group tests of similar kind together
|
import { XmlFormatter } from "../formatting/xml-formatter";
|
||||||
suite("Extension Tests", () => {
|
import { XmlFormattingOptions } from "../formatting/xml-formatting-options";
|
||||||
// TODO: implement tests
|
import { V2XmlFormatter } from "../formatting/formatters/v2-xml-formatter";
|
||||||
|
|
||||||
|
describe("V2XmlFormatter", () => {
|
||||||
|
|
||||||
|
const xmlFormatter = new V2XmlFormatter();
|
||||||
|
|
||||||
|
describe("#formatXml(xml, options)", () => {
|
||||||
|
|
||||||
|
const options = {
|
||||||
|
editorOptions: {
|
||||||
|
insertSpaces: true,
|
||||||
|
tabSize: 4
|
||||||
|
},
|
||||||
|
newLine: "\r\n",
|
||||||
|
removeCommentsOnMinify: false,
|
||||||
|
splitAttributesOnFormat: false,
|
||||||
|
splitXmlnsOnFormat: true
|
||||||
|
};
|
||||||
|
|
||||||
|
it("should handle basic XML", () => {
|
||||||
|
testFormatter(xmlFormatter, options, "basic");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
function testFormatter(xmlFormatter: XmlFormatter, options: XmlFormattingOptions, fileLabel: string): void {
|
||||||
|
const expectedFormattedXml = TestDataLoader.load(`${fileLabel}.formatted.xml`);
|
||||||
|
const unformattedXml = TestDataLoader.load(`${fileLabel}.unformatted.xml`);
|
||||||
|
|
||||||
|
const actualFormattedXml = xmlFormatter.formatXml(unformattedXml, options);
|
||||||
|
|
||||||
|
assert.equal(actualFormattedXml, expectedFormattedXml, "Actual formatted XML does not match expected formatted XML.");
|
||||||
|
}
|
||||||
|
@ -15,7 +15,7 @@ import * as testRunner from "vscode/lib/testrunner";
|
|||||||
// You can directly control Mocha options by uncommenting the following lines
|
// You can directly control Mocha options by uncommenting the following lines
|
||||||
// See https://github.com/mochajs/mocha/wiki/Using-mocha-programmatically#set-options for more info
|
// See https://github.com/mochajs/mocha/wiki/Using-mocha-programmatically#set-options for more info
|
||||||
testRunner.configure({
|
testRunner.configure({
|
||||||
ui: "tdd", // the TDD UI is being used in extension.test.ts (suite, test, etc.)
|
ui: "bdd",
|
||||||
useColors: true // colored output from test results
|
useColors: true // colored output from test results
|
||||||
});
|
});
|
||||||
|
|
||||||
|
3
src/test/test-data/basic.formatted.xml
Normal file
3
src/test/test-data/basic.formatted.xml
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<root>
|
||||||
|
<element>text</element>
|
||||||
|
</root>
|
1
src/test/test-data/basic.unformatted.xml
Normal file
1
src/test/test-data/basic.unformatted.xml
Normal file
@ -0,0 +1 @@
|
|||||||
|
<root><element>text</element></root>
|
7
src/test/test-utils/test-data-loader.ts
Normal file
7
src/test/test-utils/test-data-loader.ts
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
import * as fs from "fs";
|
||||||
|
|
||||||
|
export class TestDataLoader {
|
||||||
|
static load(fileName: string): string {
|
||||||
|
return fs.readFileSync(`${__dirname}/../../../src/test/test-data/${fileName}`, "UTF-8");
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user