mirror of
https://github.com/facebook/docusaurus.git
synced 2025-12-26 01:33:02 +00:00
198 lines
4.4 KiB
TypeScript
198 lines
4.4 KiB
TypeScript
/**
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
|
|
import type {TOCItem} from '@docusaurus/types';
|
|
import {filterTOC} from '../tocUtils';
|
|
|
|
describe('filterTOC', () => {
|
|
test('filter a toc with all heading levels', () => {
|
|
const toc: TOCItem[] = [
|
|
{
|
|
id: 'alpha',
|
|
level: 1,
|
|
value: 'alpha',
|
|
children: [
|
|
{
|
|
id: 'bravo',
|
|
level: 2,
|
|
value: 'Bravo',
|
|
children: [
|
|
{
|
|
id: 'charlie',
|
|
level: 3,
|
|
value: 'Charlie',
|
|
children: [
|
|
{
|
|
id: 'delta',
|
|
level: 4,
|
|
value: 'Delta',
|
|
children: [
|
|
{
|
|
id: 'echo',
|
|
level: 5,
|
|
value: 'Echo',
|
|
children: [
|
|
{
|
|
id: 'foxtrot',
|
|
level: 6,
|
|
value: 'Foxtrot',
|
|
children: [],
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
];
|
|
|
|
expect(filterTOC({toc, minHeadingLevel: 2, maxHeadingLevel: 2})).toEqual([
|
|
{
|
|
id: 'bravo',
|
|
level: 2,
|
|
value: 'Bravo',
|
|
children: [],
|
|
},
|
|
]);
|
|
|
|
expect(filterTOC({toc, minHeadingLevel: 3, maxHeadingLevel: 3})).toEqual([
|
|
{
|
|
id: 'charlie',
|
|
level: 3,
|
|
value: 'Charlie',
|
|
children: [],
|
|
},
|
|
]);
|
|
|
|
expect(filterTOC({toc, minHeadingLevel: 2, maxHeadingLevel: 3})).toEqual([
|
|
{
|
|
id: 'bravo',
|
|
level: 2,
|
|
value: 'Bravo',
|
|
children: [
|
|
{
|
|
id: 'charlie',
|
|
level: 3,
|
|
value: 'Charlie',
|
|
children: [],
|
|
},
|
|
],
|
|
},
|
|
]);
|
|
|
|
expect(filterTOC({toc, minHeadingLevel: 2, maxHeadingLevel: 4})).toEqual([
|
|
{
|
|
id: 'bravo',
|
|
level: 2,
|
|
value: 'Bravo',
|
|
children: [
|
|
{
|
|
id: 'charlie',
|
|
level: 3,
|
|
value: 'Charlie',
|
|
children: [
|
|
{
|
|
id: 'delta',
|
|
level: 4,
|
|
value: 'Delta',
|
|
children: [],
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
]);
|
|
});
|
|
|
|
// It's not 100% clear exactly how the TOC should behave under weird heading levels provided by the user
|
|
// Adding a test so that behavior stays the same over time
|
|
test('filter invalid heading levels (but possible) TOC', () => {
|
|
const toc: TOCItem[] = [
|
|
{
|
|
id: 'charlie',
|
|
level: 3,
|
|
value: 'Charlie',
|
|
children: [],
|
|
},
|
|
{
|
|
id: 'bravo',
|
|
level: 2,
|
|
value: 'Bravo',
|
|
children: [
|
|
{
|
|
id: 'delta',
|
|
level: 4,
|
|
value: 'Delta',
|
|
children: [],
|
|
},
|
|
],
|
|
},
|
|
];
|
|
|
|
expect(filterTOC({toc, minHeadingLevel: 2, maxHeadingLevel: 2})).toEqual([
|
|
{
|
|
id: 'bravo',
|
|
level: 2,
|
|
value: 'Bravo',
|
|
children: [],
|
|
},
|
|
]);
|
|
|
|
expect(filterTOC({toc, minHeadingLevel: 3, maxHeadingLevel: 3})).toEqual([
|
|
{
|
|
id: 'charlie',
|
|
level: 3,
|
|
value: 'Charlie',
|
|
children: [],
|
|
},
|
|
]);
|
|
|
|
expect(filterTOC({toc, minHeadingLevel: 4, maxHeadingLevel: 4})).toEqual([
|
|
{
|
|
id: 'delta',
|
|
level: 4,
|
|
value: 'Delta',
|
|
children: [],
|
|
},
|
|
]);
|
|
|
|
expect(filterTOC({toc, minHeadingLevel: 2, maxHeadingLevel: 3})).toEqual([
|
|
{
|
|
id: 'charlie',
|
|
level: 3,
|
|
value: 'Charlie',
|
|
children: [],
|
|
},
|
|
{
|
|
id: 'bravo',
|
|
level: 2,
|
|
value: 'Bravo',
|
|
children: [],
|
|
},
|
|
]);
|
|
|
|
expect(filterTOC({toc, minHeadingLevel: 3, maxHeadingLevel: 4})).toEqual([
|
|
{
|
|
id: 'charlie',
|
|
level: 3,
|
|
value: 'Charlie',
|
|
children: [],
|
|
},
|
|
{
|
|
id: 'delta',
|
|
level: 4,
|
|
value: 'Delta',
|
|
children: [],
|
|
},
|
|
]);
|
|
});
|
|
});
|