@theia/core
Version:
Theia is a cloud & desktop IDE framework implemented in TypeScript.
163 lines (145 loc) • 5.38 kB
text/typescript
// *****************************************************************************
// Copyright (C) 2018 TypeFox and others.
//
// This program and the accompanying materials are made available under the
// terms of the Eclipse Public License v. 2.0 which is available at
// http://www.eclipse.org/legal/epl-2.0.
//
// This Source Code may also be made available under the following Secondary
// Licenses when the conditions for such availability set forth in the Eclipse
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
// with the GNU Classpath Exception which is available at
// https://www.gnu.org/software/classpath/license.html.
//
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
// *****************************************************************************
import { expect } from 'chai';
import { TreeDecoratorService, AbstractTreeDecoratorService, TreeDecoration } from './tree-decorator';
class MockTreeDecoratorService extends AbstractTreeDecoratorService {
constructor() {
super([]);
}
}
describe('tree-decorator', () => {
describe('tree-decorator-service', () => {
const decoratorService: TreeDecoratorService = new MockTreeDecoratorService();
it('should inflate an empty object into an empty map', () => {
expect(decoratorService.inflateDecorators({})).to.be.empty;
});
it('should inflate an object into the corresponding map', () => {
const expected = new Map<string, TreeDecoration.Data[]>();
expected.set('id_1', [
{
tooltip: 'tooltip'
},
{
fontData: {
color: 'blue'
}
}
]);
expected.set('id_2', [
{
backgroundColor: 'yellow'
},
{
priority: 100
}
]);
expect(decoratorService.inflateDecorators(
{
'id_1': [
{
'tooltip': 'tooltip'
},
{
'fontData': {
'color': 'blue'
}
}
],
'id_2': [
{
'backgroundColor': 'yellow'
},
{
'priority': 100
}
]
}
)).to.be.deep.equal(expected);
});
it('should deflate an empty map into an empty object', () => {
expect(decoratorService.inflateDecorators({})).to.be.empty;
});
it('should inflate an object into the corresponding map', () => {
const decorations = new Map<string, TreeDecoration.Data[]>();
decorations.set('id_1', [
{
tooltip: 'tooltip'
},
{
fontData: {
color: 'blue'
}
}
]);
decorations.set('id_2', [
{
backgroundColor: 'yellow'
},
{
priority: 100
}
]);
expect(decoratorService.deflateDecorators(decorations)).to.be.deep.equal({
'id_1': [
{
'tooltip': 'tooltip'
},
{
'fontData': {
'color': 'blue'
}
}
],
'id_2': [
{
'backgroundColor': 'yellow'
},
{
'priority': 100
}
]
});
});
});
describe('caption-highlight', () => {
describe('range-contains', () => {
([
[1, 2, 3, false],
[0, 0, 1, true],
[1, 0, 1, true],
[1, 1, 1, true],
[2, 1, 1, true],
[3, 1, 1, false],
[1, 1, -100, false],
] as [number, number, number, boolean][]).forEach(test => {
const [input, offset, length, expected] = test;
it(`${input} should ${expected ? '' : 'not '}be contained in the [${offset}:${length}] range`, () => {
expect(TreeDecoration.CaptionHighlight.Range.contains(input, { offset, length })).to.be.equal(expected);
});
});
});
it('split', () => {
const actual = TreeDecoration.CaptionHighlight.split('alma', {
ranges: [{ offset: 0, length: 1 }]
});
expect(actual).has.lengthOf(2);
expect(actual[0].highlight).to.be.true;
expect(actual[0].data).to.be.equal('a');
expect(actual[1].highlight).to.be.undefined;
expect(actual[1].data).to.be.equal('lma');
});
});
});