import { expect, fixture, html } from '@open-wc/testing';
import '../lion-textarea.js';
describe('', () => {
it(`can be used with the following declaration
~~~
~~~`, async () => {
const el = await fixture(``);
expect(el.querySelector('textarea').nodeName).to.equal('TEXTAREA');
});
it('has default minRows and maxRows', async () => {
const el = await fixture(``);
expect(el.rows).to.equal(2);
expect(el.maxRows).to.equal(6);
});
it('supports initial modelValue', async () => {
const el = await fixture(
html`
`,
);
expect(el.querySelector('textarea').value).to.equal('From value attribute');
});
it('adjusts height based on content', async () => {
const el = await fixture(``);
const initialHeight = el.offsetHeight;
el.modelValue = 'batman\nand\nrobin\nand\ncatwoman';
await el.updateComplete;
const hightWith5TextLines = el.offsetHeight;
expect(hightWith5TextLines > initialHeight).to.equal(true);
el.modelValue = 'batman';
await el.updateComplete;
const hightWith1Line = el.offsetHeight;
expect(hightWith1Line < hightWith5TextLines).to.equal(true);
});
it(`starts growing when content is bigger than "rows"
'and stops growing after property "maxRows" is reached`, async () => {
const el = await fixture(``);
return [1, 2, 3, 4, 5, 6, 7, 8].reduce(async (heightPromise, i) => {
const oldHeight = await heightPromise;
el.modelValue += '\n';
await el.updateComplete;
const newHeight = el.offsetHeight;
if (i > el.maxRows) {
// stop growing
expect(newHeight).to.equal(oldHeight);
} else if (i > el.rows) {
// growing normally
expect(newHeight >= oldHeight).to.equal(true);
}
return Promise.resolve(newHeight);
}, Promise.resolve(0));
});
it('stops shrinking after property "rows" is reached', async () => {
const el = await fixture(
html`
`,
);
expect(el.scrollHeight).to.be.equal(el.clientHeight);
const oneRowHeight = el.clientHeight;
el.rows = 3;
el.resizeTextarea();
await el.updateComplete;
expect(oneRowHeight)
.to.be.below(el.clientHeight)
.and.to.be.below(el.scrollHeight);
});
});