blob: d05263aefbe9d68f51436f3c274f2a928e5f00fa [file] [log] [blame]
import './index';
import { $ } from 'common-sk/modules/dom';
import { assert } from 'chai';
let container = document.createElement('div');
document.body.appendChild(container);
afterEach(function () {
container.innerHTML = '';
});
describe('sort-sk', function () {
it('sorts numerically by default', function () {
return window.customElements.whenDefined('sort-sk').then(() => {
container.innerHTML = `
<sort-sk target=stuffToBeSorted>
<button id=cluster data-key=clustersize data-default=up>Cluster Size</button>
<button id=size data-key=stepsize>Step Size</button>
</sort-sk>
<div id=stuffToBeSorted>
<pre data-clustersize=10 data-stepsize=1.2>Size=10 Step=1.2</pre>
<pre data-clustersize=50 data-stepsize=0.5>Size=50 Step=0.5</pre>
<pre data-clustersize=100 data-stepsize=0.6>Size=100 Step=0.6</pre>
</div>`;
const getValues = (name: string) =>
$<HTMLPreElement>('#stuffToBeSorted pre', container).map(
(ele) => +(ele.dataset[name] || '')
);
const clusterButton = container.querySelector<HTMLButtonElement>(
'#cluster'
)!;
const stepButton = container.querySelector<HTMLButtonElement>('#size')!;
clusterButton.click();
assert.deepEqual(
[100, 50, 10],
getValues('clustersize'),
'Defaults to up, so sort down on first click.'
);
clusterButton.click();
assert.deepEqual(
[10, 50, 100],
getValues('clustersize'),
'Switch to up.'
);
stepButton.click();
assert.deepEqual(
[1.2, 0.6, 0.5],
getValues('stepsize'),
'No default, so start sorting down.'
);
stepButton.click();
assert.deepEqual([0.5, 0.6, 1.2], getValues('stepsize'), 'Switch to up.');
});
});
it('sorts alphabetically with alpha attribute', function () {
return window.customElements.whenDefined('sort-sk').then(() => {
container.innerHTML = `
<sort-sk target=stuffToBeSorted2>
<button id=name data-key=name data-default=down data-sort-type=alpha>Name</button>
<button id=level data-key=level data-sort-type=alpha>Level</button>
</sort-sk>
<div id=stuffToBeSorted2>
<pre data-name=foo data-level=alpha>foo alpha</pre>
<pre data-name=baz data-level=beta >baz beta</pre>
<pre data-name=bar data-level=gamma>bar gamma</pre>
</div>
`;
const getValues = (name: string) =>
$<HTMLPreElement>('#stuffToBeSorted2 pre', container).map(
(ele) => ele.dataset[name]
);
const nameButton = container.querySelector<HTMLButtonElement>('#name')!;
const levelButton = container.querySelector<HTMLButtonElement>('#level')!;
nameButton.click();
assert.deepEqual(
['bar', 'baz', 'foo'],
getValues('name'),
'Defaults to down, so sort up.'
);
nameButton.click();
assert.deepEqual(
['foo', 'baz', 'bar'],
getValues('name'),
'Now switch to down.'
);
levelButton.click();
assert.deepEqual(
['gamma', 'beta', 'alpha'],
getValues('level'),
'No default, so sort down.'
);
levelButton.click();
assert.deepEqual(
['alpha', 'beta', 'gamma'],
getValues('level'),
'Now switch to up.'
);
});
});
});