Add First Test
This commit is contained in:
		
							parent
							
								
									e1d41f6025
								
							
						
					
					
						commit
						b9b6aec528
					
				
					 6 changed files with 88 additions and 29 deletions
				
			
		| 
						 | 
					@ -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 { XmlFormatter } from "../formatting/xml-formatter";
 | 
				
			||||||
import * as myExtension from "../extension";
 | 
					import { XmlFormattingOptions } from "../formatting/xml-formatting-options";
 | 
				
			||||||
 | 
					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");
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Defines a Mocha test suite to group tests of similar kind together
 | 
					 | 
				
			||||||
suite("Extension Tests", () => {
 | 
					 | 
				
			||||||
    // TODO: implement tests
 | 
					 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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…
	
	Add table
		
		Reference in a new issue