abi.js
Version:
[![typescript-icon]][typescript-link] [![license-icon]][license-link] [![status-icon]][status-link] [![ci-icon]][ci-link] [![twitter-icon]][twitter-link]
112 lines (101 loc) • 3.03 kB
text/typescript
import { expect, test } from 'bun:test';
import {
Component,
Doc,
Element,
Node,
Slot,
Tag,
Template,
Text,
component,
doc,
element,
template,
text,
} from './view';
test('Test doc', () => {
const _doc = doc(element('html'), 'html');
expect(_doc).toBeInstanceOf(Doc);
expect(_doc.root).toBeInstanceOf(Node);
expect(_doc.render()).toEqual('<!DOCTYPE html><html></html>');
});
test('Test text', () => {
const txt = text('Hello', {
fr_CI: 'Salut',
});
expect(txt).toBeInstanceOf(Text);
expect(txt).toBeInstanceOf(Node);
expect(txt.value).toEqual('Hello');
expect(txt.render()).toEqual('Hello');
expect(txt.render('fr_CI')).toEqual('Salut');
expect(txt.translateTo('fr_CI')).toEqual('Salut');
expect(Text.translate('Salut').to('en_US')).toEqual('Hello');
expect(Text.translate('Salut').to('fr_CI')).toEqual('Salut');
});
test('Test component', () => {
const cmp = component(
'MyHello',
{
name: 'Sigui',
age: 27,
},
element('p', {}, text('Hello'), element('b', {}, text('Sigui'))),
element('p', {}, text('Age'), element('b', {}, text('25'))),
);
expect(cmp).toBeInstanceOf(Component);
expect(cmp).toBeInstanceOf(Node);
expect(cmp).toBeInstanceOf(Tag);
expect(cmp.slot).toBeInstanceOf(Slot);
expect(cmp.slot).toBeInstanceOf(Node);
expect(cmp.is_empty).toBeFalse();
expect(cmp.slot.render()).toEqual(
'<p>Hello<b>Sigui</b></p><p>Age<b>25</b></p>',
);
expect(cmp.render()).toEqual(
'<MyHello name="Sigui" age="27"><p>Hello<b>Sigui</b></p><p>Age<b>25</b></p></MyHello>',
);
});
test('Test element', () => {
const elt = element(
'div',
{
id: 'MyDiv',
},
text('Hello'),
element('b', {}, text('World')),
);
expect(elt).toBeInstanceOf(Element);
expect(elt).toBeInstanceOf(Node);
expect(elt).toBeInstanceOf(Tag);
expect(elt.slot).toBeInstanceOf(Slot);
expect(elt.slot).toBeInstanceOf(Node);
expect(elt.is_empty).toBeFalse();
expect(elt.slot.render()).toEqual('Hello<b>World</b>');
expect(elt.render()).toEqual('<div id="MyDiv">Hello<b>World</b></div>');
});
test('Test inline element', () => {
const elt = element('br');
const c_elt = element('br', {}, text('content'));
expect(elt.is_inline).toBeTrue();
expect(c_elt.is_inline).toBeTrue();
expect(elt.is_empty).toBeTrue();
expect(c_elt.is_empty).toBeFalse();
expect(elt.is_paired).toBeFalse();
expect(c_elt.is_paired).toBeFalse();
expect(elt.is_custom).toBeFalse();
});
test('Test paired element', () => {
const elt = element('p');
expect(elt.is_inline).toBeFalse();
expect(elt.is_empty).toBeTrue();
expect(elt.is_paired).toBeTrue();
expect(elt.is_custom).toBeFalse();
});
test('Test template', () => {
const tpl = template`p[id="myP" class="my-4 mx-8" title='It\'s a Hello World'] { Bonjour le monde }`;
const r =
'<p id="myP" class="my-4 mx-8" title="It\'s a Hello World">Bonjour le monde</p>';
expect(tpl).toBeInstanceOf(Template);
expect(tpl.render()).toEqual(r);
});