pupcaps
Version:
PupCaps! : A script to add stylish captions to your videos.
211 lines (198 loc) • 5.99 kB
text/typescript
import {expect} from 'chai';
import {Caption, haveSameWords, readWords, splitText} from '../../src/common/captions';
it('haveSameWords', () => {
// Given
const cue1 = 'vous [avez] lancé en septembre';
const cue2 = 'vous avez lancé [en] septembre';
const cue3 = 'que [vous] recrutez';
const caption1: Caption = {
index: 1,
startTimeMs: 0,
endTimeMs: 0,
words: readWords(cue1),
};
const caption2: Caption = {
index: 2,
startTimeMs: 0,
endTimeMs: 0,
words: readWords(cue2),
};
const caption3: Caption = {
index: 2,
startTimeMs: 0,
endTimeMs: 0,
words: readWords(cue3),
};
// When
const sameWords1 = haveSameWords(caption1, caption2);
const sameWords2 = haveSameWords(caption1, caption3);
// Then
expect(sameWords1).to.be.true;
expect(sameWords2).to.be.false;
});
it('splitText', () => {
// Given
const text1 = 'votre [projet] Basalt !';
const text2 = 'votre projet [Basalt !]';
// When
const tokens1 = splitText(text1);
const tokens2 = splitText(text2);
// Then
expect(tokens1).to.be.deep.equals([
'votre',
'[projet]',
'Basalt !',
]);
expect(tokens2).to.be.deep.equals([
'votre',
'projet',
'[Basalt !]',
]);
});
describe('readCaptions', () => {
it('when no highlighted', () => {
const words = readWords('La vie est belle!');
expect(words).to.have.lengthOf(4);
expect(words).to.deep.equal([
{
rawWord: 'La',
isHighlighted: false,
isBeforeHighlighted: false,
isAfterHighlighted: false,
},
{
rawWord: 'vie',
isHighlighted: false,
isBeforeHighlighted: false,
isAfterHighlighted: false,
},
{
rawWord: 'est',
isHighlighted: false,
isBeforeHighlighted: false,
isAfterHighlighted: false,
},
{
rawWord: 'belle!',
isHighlighted: false,
isBeforeHighlighted: false,
isAfterHighlighted: false,
}
]);
});
it('when one highlighted', () => {
const words = readWords('La vie [est] belle!');
expect(words).to.have.lengthOf(4);
expect(words).to.deep.equal([
{
rawWord: 'La',
isHighlighted: false,
isBeforeHighlighted: true,
isAfterHighlighted: false,
},
{
rawWord: 'vie',
isHighlighted: false,
isBeforeHighlighted: true,
isAfterHighlighted: false,
},
{
rawWord: 'est',
isHighlighted: true,
isBeforeHighlighted: false,
isAfterHighlighted: false,
},
{
rawWord: 'belle!',
isHighlighted: false,
isBeforeHighlighted: false,
isAfterHighlighted: true,
}
]);
});
it('when many highlighted', () => {
const words = readWords('La [vie] [est] belle!');
expect(words).to.have.lengthOf(4);
expect(words).to.deep.equal([
{
rawWord: 'La',
isHighlighted: false,
isBeforeHighlighted: true,
isAfterHighlighted: false,
},
{
rawWord: 'vie',
isHighlighted: true,
isBeforeHighlighted: false,
isAfterHighlighted: false,
},
{
rawWord: 'est',
isHighlighted: true,
isBeforeHighlighted: false,
isAfterHighlighted: false,
},
{
rawWord: 'belle!',
isHighlighted: false,
isBeforeHighlighted: false,
isAfterHighlighted: true,
}
]);
});
it('when many highlighted together', () => {
const words = readWords('La [vie est] belle!');
expect(words).to.have.lengthOf(3);
expect(words).to.deep.equal([
{
rawWord: 'La',
isHighlighted: false,
isBeforeHighlighted: true,
isAfterHighlighted: false,
},
{
rawWord: 'vie est',
isHighlighted: true,
isBeforeHighlighted: false,
isAfterHighlighted: false,
},
{
rawWord: 'belle!',
isHighlighted: false,
isBeforeHighlighted: false,
isAfterHighlighted: true,
}
]);
});
it('when highlighted word has CSS class', () => {
const words = readWords('La [vie](red) est belle!');
expect(words).to.have.lengthOf(4);
expect(words).to.deep.equal([
{
rawWord: 'La',
isHighlighted: false,
isBeforeHighlighted: true,
isAfterHighlighted: false,
},
{
rawWord: 'vie',
isHighlighted: true,
isBeforeHighlighted: false,
isAfterHighlighted: false,
highlightClass: 'red',
},
{
rawWord: 'est',
isHighlighted: false,
isBeforeHighlighted: false,
isAfterHighlighted: true,
},
{
rawWord: 'belle!',
isHighlighted: false,
isBeforeHighlighted: false,
isAfterHighlighted: true,
}
]);
});
});