api.js/tests/search/split-keyword-test.ts

372 lines
6.6 KiB
TypeScript

import { splitKeyword } from '../../lib/data/search/split';
describe('Splitting keywords', () => {
test('Bad entries', () => {
expect(splitKeyword('')).toBeUndefined();
expect(splitKeyword('-')).toBeUndefined();
expect(splitKeyword('prefix:mdi')).toBeUndefined();
expect(splitKeyword('palette=true')).toBeUndefined();
expect(splitKeyword('bad,entry')).toBeUndefined();
// Too many prefix entries
expect(splitKeyword('mdi:home mdi-light:home')).toBeUndefined();
});
test('Prefixes', () => {
// 'mdi-home'
expect(splitKeyword('mdi-home')).toEqual({
searches: [
{
prefixes: ['mdi'],
prefix: 'mdi', // leftover from internal function
keywords: [],
partial: 'home',
},
{
keywords: ['mdi'],
partial: 'home',
test: ['mdi-home'],
},
],
params: {},
});
expect(splitKeyword('mdi-home', false)).toEqual({
searches: [
{
prefixes: ['mdi'],
prefix: 'mdi', // leftover from internal function
keywords: ['home'],
},
{
keywords: ['mdi', 'home'],
test: ['mdi-home'],
},
],
params: {},
});
// 'mdi:home'
expect(splitKeyword('mdi:home')).toEqual({
searches: [
{
prefixes: ['mdi'],
keywords: [],
partial: 'home',
},
],
params: {},
});
expect(splitKeyword('mdi:home', false)).toEqual({
searches: [
{
prefixes: ['mdi'],
keywords: ['home'],
},
],
params: {},
});
// 'prefix:mdi home'
expect(splitKeyword('prefix:mdi home')).toEqual({
searches: [
{
prefixes: ['mdi'],
keywords: [],
partial: 'home',
},
],
params: {},
});
expect(splitKeyword('prefix:mdi home', false)).toEqual({
searches: [
{
prefixes: ['mdi'],
keywords: ['home'],
},
],
params: {},
});
// 'prefix=mdi home'
expect(splitKeyword('prefix=mdi home')).toEqual({
searches: [
{
prefixes: ['mdi'],
keywords: [],
partial: 'home',
},
],
params: {},
});
expect(splitKeyword('prefix=mdi home', false)).toEqual({
searches: [
{
prefixes: ['mdi'],
keywords: ['home'],
},
],
params: {},
});
// 'prefixes:mdi home'
expect(splitKeyword('prefixes:mdi home')).toEqual({
searches: [
{
prefixes: ['mdi'],
keywords: [],
partial: 'home',
},
],
params: {},
});
expect(splitKeyword('prefixes:mdi home', false)).toEqual({
searches: [
{
prefixes: ['mdi'],
keywords: ['home'],
},
],
params: {},
});
// 'prefixes:fa6-,mdi- home'
expect(splitKeyword('prefixes:fa6-,mdi- home')).toEqual({
searches: [
{
prefixes: ['fa6-', 'mdi-'],
keywords: [],
partial: 'home',
},
],
params: {},
});
expect(splitKeyword('prefixes:fa6-,mdi- home', false)).toEqual({
searches: [
{
prefixes: ['fa6-', 'mdi-'],
keywords: ['home'],
},
],
params: {},
});
// 'prefixes=mdi* home'
expect(splitKeyword('prefixes=mdi* home')).toEqual({
searches: [
{
prefixes: ['mdi', 'mdi-'],
keywords: [],
partial: 'home',
},
],
params: {},
});
expect(splitKeyword('prefixes=mdi* home', false)).toEqual({
searches: [
{
prefixes: ['mdi', 'mdi-'],
keywords: ['home'],
},
],
params: {},
});
// 'mdi-light home'
expect(splitKeyword('mdi-light home')).toEqual({
searches: [
{
prefixes: ['mdi-light'],
prefix: 'mdi-light',
keywords: [],
partial: 'home',
},
{
prefixes: ['mdi'],
prefix: 'mdi',
keywords: ['light'],
partial: 'home',
},
{
keywords: ['mdi', 'light'],
test: ['mdi-light'],
partial: 'home',
},
],
params: {},
});
expect(splitKeyword('mdi-light home', false)).toEqual({
searches: [
{
prefixes: ['mdi-light'],
prefix: 'mdi-light',
keywords: ['home'],
},
{
prefixes: ['mdi'],
prefix: 'mdi',
keywords: ['light', 'home'],
},
{
keywords: ['mdi', 'light', 'home'],
test: ['mdi-light'],
},
],
params: {},
});
// 'mdi-light home-outline'
expect(splitKeyword('mdi-light home-outline')).toEqual({
searches: [
{
prefixes: ['mdi-light'],
prefix: 'mdi-light',
keywords: ['home'],
partial: 'outline',
test: ['home-outline'],
},
{
prefixes: ['mdi'],
prefix: 'mdi',
keywords: ['light', 'home'],
partial: 'outline',
test: ['home-outline'],
},
{
keywords: ['mdi', 'light', 'home'],
partial: 'outline',
test: ['mdi-light', 'home-outline'],
},
],
params: {},
});
expect(splitKeyword('mdi-light home-outline', false)).toEqual({
searches: [
{
prefixes: ['mdi-light'],
prefix: 'mdi-light',
keywords: ['home', 'outline'],
test: ['home-outline'],
},
{
prefixes: ['mdi'],
prefix: 'mdi',
keywords: ['light', 'home', 'outline'],
test: ['home-outline'],
},
{
keywords: ['mdi', 'light', 'home', 'outline'],
test: ['mdi-light', 'home-outline'],
},
],
params: {},
});
});
test('Keywords', () => {
expect(splitKeyword('home palette:true')).toEqual({
searches: [
{
keywords: [],
partial: 'home',
},
],
params: {
palette: true,
},
});
expect(splitKeyword('home palette=0')).toEqual({
searches: [
{
keywords: [],
partial: 'home',
},
],
params: {
palette: false,
},
});
expect(splitKeyword('home prefixes=mdi*,fa6-')).toEqual({
searches: [
{
prefixes: ['mdi', 'mdi-', 'fa6-'],
keywords: [],
partial: 'home',
},
],
params: {},
});
expect(splitKeyword('home prefix=mdi palette=1', false)).toEqual({
searches: [
{
prefixes: ['mdi'],
keywords: ['home'],
},
],
params: {
palette: true,
},
});
expect(splitKeyword('home style:fill')).toEqual({
searches: [
{
keywords: [],
partial: 'home',
},
],
params: {
style: 'fill',
},
});
expect(splitKeyword('home style=stroke')).toEqual({
searches: [
{
keywords: [],
partial: 'home',
},
],
params: {
style: 'stroke',
},
});
expect(splitKeyword('home fill=true')).toEqual({
searches: [
{
keywords: [],
partial: 'home',
},
],
params: {
style: 'fill',
},
});
expect(splitKeyword('home stroke=true')).toEqual({
searches: [
{
keywords: [],
partial: 'home',
},
],
params: {
style: 'stroke',
},
});
// Too short for partial
expect(splitKeyword('a')).toEqual({
searches: [
{
keywords: ['a'],
},
],
params: {},
});
});
});