mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-08-03 19:21:32 -07:00
6834ba4c6d
- Add a language chip row above the Available list; pick one or more languages to narrow the repo index, or "All" to clear - Show language display names (e.g. "Japanese") instead of raw tags, and an "N of M" count on the Available heading - Add language-filter.ts with collectLanguages/toggleLanguage/pruneSelection/filterByLanguage/languageLabel, plus tests
50 lines
1.6 KiB
TypeScript
50 lines
1.6 KiB
TypeScript
import test from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import {
|
|
collectLanguages,
|
|
filterByLanguage,
|
|
languageLabel,
|
|
pruneSelection,
|
|
toggleLanguage,
|
|
} from './language-filter';
|
|
|
|
const ext = (lang: string, name = lang) => ({ lang, name });
|
|
|
|
test('languageLabel names known tags and falls back to the raw code', () => {
|
|
assert.equal(languageLabel('ja'), 'Japanese');
|
|
assert.equal(languageLabel('all'), 'Multi-language');
|
|
assert.equal(languageLabel('zzzz'), 'ZZZZ');
|
|
});
|
|
|
|
test('collectLanguages dedupes, puts multi-language first, then sorts by name', () => {
|
|
// English, German, Japanese — display names, not codes.
|
|
assert.deepEqual(collectLanguages([ext('ja'), ext('de'), ext('ja'), ext('all'), ext('en')]), [
|
|
'all',
|
|
'en',
|
|
'de',
|
|
'ja',
|
|
]);
|
|
});
|
|
|
|
test('toggleLanguage adds, removes, and empties back to All', () => {
|
|
const one = toggleLanguage(new Set(), 'ja');
|
|
assert.deepEqual([...one], ['ja']);
|
|
const two = toggleLanguage(one, 'en');
|
|
assert.deepEqual([...two].sort(), ['en', 'ja']);
|
|
assert.deepEqual([...toggleLanguage(two, 'ja')], ['en']);
|
|
assert.equal(toggleLanguage(one, 'ja').size, 0);
|
|
});
|
|
|
|
test('pruneSelection drops languages no repository offers any more', () => {
|
|
assert.deepEqual([...pruneSelection(new Set(['ja', 'de']), ['ja', 'en'])], ['ja']);
|
|
});
|
|
|
|
test('filterByLanguage keeps everything when nothing is selected', () => {
|
|
const extensions = [ext('ja'), ext('en'), ext('all')];
|
|
assert.deepEqual(filterByLanguage(extensions, new Set()), extensions);
|
|
assert.deepEqual(
|
|
filterByLanguage(extensions, new Set(['ja', 'all'])).map((extension) => extension.name),
|
|
['ja', 'all'],
|
|
);
|
|
});
|