import { describe, it } from '@ephox/bedrock-client';
import { DomUniverse, type Universe } from '@ephox/boss';
import { Arr, Fun } from '@ephox/katamari';
import { SugarElement, Traverse } from '@ephox/sugar';
import { assert } from 'chai';
import * as TextZones from 'ephox/robin/api/general/TextZones';
import { ZoneViewports } from 'ephox/robin/api/general/ZoneViewports';
// Strip out the bits of an actual Zone that aren't compatible with assert.deepEqual
interface AssertableZone {
readonly words: string[];
readonly lang: string;
}
describe('browser.robin.LanguageOverrideTest', () => {
const top = SugarElement.fromHtml('
' +
'
Hello world
' +
'
This is multi-lingual content
' +
'
'
);
const walk = (universe: Universe): AssertableZone[] => {
const start = Traverse.firstChild(top).getOrDie();
const end = Traverse.lastChild(top).getOrDie();
const walkResult = TextZones.range(universe, start, 0, end, 2, 'default', ZoneViewports.anything());
return Arr.map(walkResult.zones, (zone) => ({
words: Arr.map(zone.words, (w) => w.word),
lang: zone.lang
}));
};
const normal = DomUniverse();
const override: Universe = {
...normal,
property: Fun.constant({
...normal.property(),
getLanguage: (ele: SugarElement) => normal.property().getLanguage(ele).map((lang) => 'custom:' + lang)
})
};
it('TINY-7570: Correctly marks languages', () => {
const zones = walk(normal);
assert.deepEqual(zones, [
{
lang: 'en',
words: [ 'Hello', 'world' ]
}, {
lang: 'default',
words: [ 'This', 'is' ]
}, {
lang: 'pt',
words: [ 'multi-lingual', 'content' ]
}
]);
});
it('TINY-7570: Correctly marks overridden languages', () => {
const zones = walk(override);
assert.deepEqual(zones, [
{
lang: 'custom:en',
words: [ 'Hello', 'world' ]
}, {
lang: 'default',
words: [ 'This', 'is' ]
}, {
lang: 'custom:pt',
words: [ 'multi-lingual', 'content' ]
}
]);
});
});