| "use strict"; |
| |
| var assert = require("chai").assert; |
| var TokenStreamTransformer = require("./helper/token-stream-transformer"); |
| var TestCase = require("./helper/test-case"); |
| |
| |
| //region Token Stream Transformer |
| describe("The token stream transformer", |
| function () { |
| it("should handle all kinds of simple transformations", |
| function () { |
| var tokens = [ |
| {type: "type", content: "content"}, |
| "string" |
| ]; |
| |
| var expected = [ |
| ["type", "content"], |
| "string" |
| ]; |
| |
| assert.deepEqual(TokenStreamTransformer.simplify(tokens), expected); |
| } |
| ); |
| |
| |
| it("should handle nested structures", |
| function () { |
| var tokens = [ |
| { |
| type: "type", |
| content: [ |
| { |
| type: "insideType", content: |
| [ |
| {type: "insideInsideType", content: "content"} |
| ] |
| } |
| ] |
| } |
| ]; |
| |
| var expected = [ |
| ["type", [ |
| ["insideType", [ |
| ["insideInsideType", "content"] |
| ]] |
| ]] |
| ]; |
| |
| assert.deepEqual(TokenStreamTransformer.simplify(tokens), expected); |
| } |
| ); |
| |
| |
| it("should strip empty tokens", |
| function () { |
| var tokenStream = [ |
| "", |
| "\r\n", |
| "\t", |
| " " |
| ]; |
| |
| var expectedSimplified = []; |
| |
| assert.deepEqual(TokenStreamTransformer.simplify(tokenStream), expectedSimplified); |
| } |
| ); |
| |
| |
| it("should strip empty token tree branches", |
| function () { |
| var tokenStream = [ |
| { |
| type: "type", |
| content: [ |
| ["", ""], |
| "", |
| {type: "nested", content: [""]} |
| ] |
| }, |
| [[[[[[[""]]]]]]] |
| ]; |
| |
| var expectedSimplified = [ |
| ["type", [ |
| ["nested", []] |
| ]] |
| ]; |
| |
| assert.deepEqual(TokenStreamTransformer.simplify(tokenStream), expectedSimplified); |
| } |
| ); |
| |
| |
| it("should ignore all properties in tokens except value and content", |
| function () { |
| |
| var tokenStream = [ |
| {type: "type", content: "content", alias: "alias"} |
| ]; |
| |
| var expectedSimplified = [ |
| ["type", "content"] |
| ]; |
| |
| assert.deepEqual(TokenStreamTransformer.simplify(tokenStream), expectedSimplified); |
| } |
| ); |
| } |
| ); |
| //endregion |
| |
| |
| //region Language name parsing |
| describe("The language name parsing", |
| function () { |
| it("should use the last language as the main language if no language is specified", |
| function () { |
| assert.deepEqual( |
| TestCase.parseLanguageNames("a"), |
| { |
| languages: ["a"], |
| mainLanguage: "a" |
| } |
| ); |
| |
| assert.deepEqual( |
| TestCase.parseLanguageNames("a+b+c"), |
| { |
| languages: ["a", "b", "c"], |
| mainLanguage: "c" |
| } |
| ); |
| } |
| ); |
| |
| |
| it("should use the specified language as main language", |
| function () { |
| assert.deepEqual( |
| TestCase.parseLanguageNames("a+b!+c"), |
| { |
| languages: ["a", "b", "c"], |
| mainLanguage: "b" |
| } |
| ); |
| } |
| ); |
| |
| |
| it("should throw an error if there are multiple main languages", |
| function () { |
| assert.throw( |
| function () { |
| TestCase.parseLanguageNames("a+b!+c!"); |
| }, |
| "There are multiple main languages defined." |
| ); |
| } |
| ); |
| } |
| ); |
| //endregion |