diff --git a/__tests__/lib/__snapshots__/sort.js.snap b/__tests__/lib/__snapshots__/sort.js.snap index ff8f5c7cc..134b42c51 100644 --- a/__tests__/lib/__snapshots__/sort.js.snap +++ b/__tests__/lib/__snapshots__/sort.js.snap @@ -107,3 +107,29 @@ Array [ }, ] `; + +exports[`sort toc with files absolute path 2`] = ` +Array [ + Object { + "context": Object { + "sortKey": "a", + }, + "memberof": "classB", + "name": "apples", + }, + Object { + "context": Object { + "sortKey": "c", + }, + "memberof": "classB", + "name": "bananas", + }, + Object { + "context": Object { + "sortKey": "b", + }, + "memberof": "classB", + "name": "carrot", + }, +] +`; diff --git a/__tests__/lib/sort.js b/__tests__/lib/sort.js index df6ca8856..cdc7b2a11 100644 --- a/__tests__/lib/sort.js +++ b/__tests__/lib/sort.js @@ -1,4 +1,5 @@ -var sort = require('../../src/sort'), path = require('path'); +var sort = require('../../src/sort'), + path = require('path'); test('sort stream alphanumeric', function() { var apples = { context: { sortKey: 'a' }, name: 'apples' }; @@ -204,3 +205,31 @@ test('sort toc with files absolute path', function() { }) ).toMatchSnapshot(); }); + +test('sort toc with files absolute path', function() { + var apples = { + context: { sortKey: 'a' }, + name: 'apples', + memberof: 'classB' + }; + var carrot = { + context: { sortKey: 'b' }, + name: 'carrot', + memberof: 'classB' + }; + var bananas = { + context: { sortKey: 'c' }, + name: 'bananas', + memberof: 'classB' + }; + + var snowflake = { + name: 'snowflake', + file: path.join(__dirname, '../fixture/snowflake.md') + }; + expect( + sort([carrot, apples, bananas], { + sortOrder: 'alpha' + }) + ).toMatchSnapshot(); +}); diff --git a/src/sort.js b/src/sort.js index 2bc54bd51..0a8b0176f 100644 --- a/src/sort.js +++ b/src/sort.js @@ -94,25 +94,21 @@ module.exports = function sortDocs(comments: Array, options: Object) { return fixed.concat(unfixed); }; -function compare(a: string, b: string) { - return a.localeCompare(b, undefined, { caseFirst: 'upper' }); -} - -function compareCommentsByName(a, b) { - var akey = a.memberof || a.name; - var bkey = b.memberof || b.name; +function compareCommentsByName(a: Comment, b: Comment): number { + const akey: ?string = a.name; + const bkey: ?string = b.name; if (akey && bkey) { - return compare(akey, bkey); + return akey.localeCompare(bkey, undefined, { caseFirst: 'upper' }); } return 0; } -function compareCommentsBySourceLocation(a, b) { +function compareCommentsBySourceLocation(a: Comment, b: Comment): number { return a.context.sortKey.localeCompare(b.context.sortKey); } -function sortComments(comments, sortOrder) { +function sortComments(comments: Array, sortOrder: string) { return comments.sort( sortOrder === 'alpha' ? compareCommentsByName