prism/tests/testrunner-tests.js

144 lines
2.7 KiB
JavaScript

'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.'
);
});
});