Hash :
9cae4461
Author :
Date :
2021-04-17T22:26:40
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
'use strict';
const { assert } = require('chai');
const TokenStreamTransformer = require('./helper/token-stream-transformer');
const TestCase = require('./helper/test-case');
describe('The token stream transformer', function () {
it('should handle all kinds of simple transformations', function () {
const tokens = [
{ type: 'type', content: 'content' },
'string'
];
const expected = [
['type', 'content'],
'string'
];
assert.deepEqual(TokenStreamTransformer.simplify(tokens), expected);
});
it('should handle nested structures', function () {
const tokens = [
{
type: 'type',
content: [
{
type: 'insideType',
content: [
{ type: 'insideInsideType', content: 'content' }
]
}
]
}
];
const expected = [
['type', [
['insideType', [
['insideInsideType', 'content']
]]
]]
];
assert.deepEqual(TokenStreamTransformer.simplify(tokens), expected);
});
it('should strip empty tokens', function () {
const tokenStream = [
'',
'\r\n',
'\t',
' '
];
const expectedSimplified = [];
assert.deepEqual(TokenStreamTransformer.simplify(tokenStream), expectedSimplified);
});
it('should strip empty token tree branches', function () {
const tokenStream = [
{
type: 'type',
content: [
'',
{ type: 'nested', content: [''] },
''
]
},
''
];
const expectedSimplified = [
['type', [
['nested', []]
]]
];
assert.deepEqual(TokenStreamTransformer.simplify(tokenStream), expectedSimplified);
});
it('should ignore all properties in tokens except value and content', function () {
const tokenStream = [
{ type: 'type', content: 'content', alias: 'alias' }
];
const expectedSimplified = [
['type', 'content']
];
assert.deepEqual(TokenStreamTransformer.simplify(tokenStream), expectedSimplified);
});
});
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(
() => {
TestCase.parseLanguageNames('a+b!+c!');
},
'There are multiple main languages defined.'
);
});
});