Bug fix: when only files outsiders group was present, no catch-all outsiders group was added automatically. Same for folders-only outsiders group.
Cosmetics: wildcard patters for root like '/*' or '/...' produced a non matchable sort spec in the main sorting spec. The sort spec in wildcards tree was ok.
This commit is contained in:
parent
4bca9735f2
commit
d3e11708a4
|
@ -436,6 +436,86 @@ describe('SortingSpecProcessor', () => {
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const txtInputSimplistic1: string = `
|
||||||
|
target-folder: /*
|
||||||
|
/:files
|
||||||
|
//folders
|
||||||
|
`
|
||||||
|
|
||||||
|
const expectedSortSpecForSimplistic1: { [key: string]: CustomSortSpec } = {
|
||||||
|
"/": {
|
||||||
|
groups: [{
|
||||||
|
filesOnly: true,
|
||||||
|
order: CustomSortOrder.alphabetical,
|
||||||
|
type: CustomSortGroupType.Outsiders
|
||||||
|
}, {
|
||||||
|
order: CustomSortOrder.alphabetical,
|
||||||
|
type: CustomSortGroupType.Outsiders
|
||||||
|
}],
|
||||||
|
outsidersFilesGroupIdx: 0,
|
||||||
|
outsidersGroupIdx: 1,
|
||||||
|
targetFoldersPaths: ['/*']
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const expectedWildcardMatchingTreeForSimplistic1 = {
|
||||||
|
"matchAll": {
|
||||||
|
groups: [{
|
||||||
|
filesOnly: true,
|
||||||
|
order: CustomSortOrder.alphabetical,
|
||||||
|
type: CustomSortGroupType.Outsiders
|
||||||
|
}, {
|
||||||
|
order: CustomSortOrder.alphabetical,
|
||||||
|
type: CustomSortGroupType.Outsiders
|
||||||
|
}],
|
||||||
|
outsidersFilesGroupIdx: 0,
|
||||||
|
outsidersGroupIdx: 1,
|
||||||
|
targetFoldersPaths: ['/*']
|
||||||
|
},
|
||||||
|
"subtree": {}
|
||||||
|
}
|
||||||
|
|
||||||
|
const txtInputSimplistic2: string = `
|
||||||
|
target-folder: /
|
||||||
|
/:files
|
||||||
|
//folders
|
||||||
|
`
|
||||||
|
|
||||||
|
const expectedSortSpecForSimplistic2: { [key: string]: CustomSortSpec } = {
|
||||||
|
"/": {
|
||||||
|
groups: [{
|
||||||
|
filesOnly: true,
|
||||||
|
order: CustomSortOrder.alphabetical,
|
||||||
|
type: CustomSortGroupType.Outsiders
|
||||||
|
}, {
|
||||||
|
order: CustomSortOrder.alphabetical,
|
||||||
|
type: CustomSortGroupType.Outsiders
|
||||||
|
}],
|
||||||
|
outsidersFilesGroupIdx: 0,
|
||||||
|
outsidersGroupIdx: 1,
|
||||||
|
targetFoldersPaths: ['/']
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
describe('SortingSpecProcessor', () => {
|
||||||
|
let processor: SortingSpecProcessor;
|
||||||
|
beforeEach(() => {
|
||||||
|
processor = new SortingSpecProcessor();
|
||||||
|
});
|
||||||
|
it('should recognize the simplistic sorting spec to put files first (wildcard /* rule)', () => {
|
||||||
|
const inputTxtArr: Array<string> = txtInputSimplistic1.split('\n')
|
||||||
|
const result = processor.parseSortSpecFromText(inputTxtArr, 'mock-folder', 'custom-name-note.md')
|
||||||
|
expect(result?.sortSpecByPath).toEqual(expectedSortSpecForSimplistic1)
|
||||||
|
expect(result?.sortSpecByWildcard.tree).toEqual(expectedWildcardMatchingTreeForSimplistic1)
|
||||||
|
})
|
||||||
|
it('should recognize the simplistic sorting spec to put files first (direct / rule)', () => {
|
||||||
|
const inputTxtArr: Array<string> = txtInputSimplistic2.split('\n')
|
||||||
|
const result = processor.parseSortSpecFromText(inputTxtArr, 'mock-folder', 'custom-name-note.md')
|
||||||
|
expect(result?.sortSpecByPath).toEqual(expectedSortSpecForSimplistic2)
|
||||||
|
expect(result?.sortSpecByWildcard).toBeUndefined()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
const txtInputItemsToHideWithDupsSortSpec: string = `
|
const txtInputItemsToHideWithDupsSortSpec: string = `
|
||||||
target-folder: AAA
|
target-folder: AAA
|
||||||
/--hide: SomeFileToHide.md
|
/--hide: SomeFileToHide.md
|
||||||
|
|
|
@ -326,20 +326,23 @@ enum WildcardPriority {
|
||||||
|
|
||||||
const stripWildcardPatternSuffix = (path: string): [path: string, priority: number] => {
|
const stripWildcardPatternSuffix = (path: string): [path: string, priority: number] => {
|
||||||
if (path.endsWith(MATCH_ALL_SUFFIX)) {
|
if (path.endsWith(MATCH_ALL_SUFFIX)) {
|
||||||
|
path = path.slice(0, -MATCH_ALL_SUFFIX.length)
|
||||||
return [
|
return [
|
||||||
path.slice(0, -MATCH_ALL_SUFFIX.length),
|
path.length > 0 ? path : '/',
|
||||||
WildcardPriority.MATCH_ALL
|
WildcardPriority.MATCH_ALL
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
if (path.endsWith(MATCH_CHILDREN_1_SUFFIX)) {
|
if (path.endsWith(MATCH_CHILDREN_1_SUFFIX)) {
|
||||||
|
path = path.slice(0, -MATCH_CHILDREN_1_SUFFIX.length)
|
||||||
return [
|
return [
|
||||||
path.slice(0, -MATCH_CHILDREN_1_SUFFIX.length),
|
path.length > 0 ? path : '/',
|
||||||
WildcardPriority.MATCH_CHILDREN,
|
WildcardPriority.MATCH_CHILDREN,
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
if (path.endsWith(MATCH_CHILDREN_2_SUFFIX)) {
|
if (path.endsWith(MATCH_CHILDREN_2_SUFFIX)) {
|
||||||
|
path = path.slice(0, -MATCH_CHILDREN_2_SUFFIX.length)
|
||||||
return [
|
return [
|
||||||
path.slice(0, -MATCH_CHILDREN_2_SUFFIX.length),
|
path.length > 0 ? path : '/',
|
||||||
WildcardPriority.MATCH_CHILDREN
|
WildcardPriority.MATCH_CHILDREN
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -732,7 +735,7 @@ export class SortingSpecProcessor {
|
||||||
console.warn(`Inconsistent Outsiders sorting group definition in sort spec for folder '${last(spec.targetFoldersPaths)}'`)
|
console.warn(`Inconsistent Outsiders sorting group definition in sort spec for folder '${last(spec.targetFoldersPaths)}'`)
|
||||||
}
|
}
|
||||||
// For consistency and to simplify sorting code later on, implicitly append a single catch-all Outsiders group
|
// For consistency and to simplify sorting code later on, implicitly append a single catch-all Outsiders group
|
||||||
if (!outsidersGroupForFiles && !outsidersGroupForFolders) {
|
if (!(outsidersGroupForFiles && outsidersGroupForFolders)) {
|
||||||
spec.outsidersGroupIdx = spec.groups.length
|
spec.outsidersGroupIdx = spec.groups.length
|
||||||
spec.groups.push({
|
spec.groups.push({
|
||||||
type: CustomSortGroupType.Outsiders
|
type: CustomSortGroupType.Outsiders
|
||||||
|
|
Loading…
Reference in New Issue