| /** |
| * @license |
| * Copyright 2016 Google LLC |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| import '../test/common-test-setup'; |
| import {FileInfoStatus, SpecialFilePath} from '../constants/constants'; |
| import { |
| addUnmodifiedFiles, |
| computeDisplayPath, |
| isMagicPath, |
| specialFilePathCompare, |
| truncatePath, |
| } from './path-list-util'; |
| import {hasOwnProperty} from './common-util'; |
| import {assert} from '@open-wc/testing'; |
| import {FileNameToFileInfoMap} from '../types/common'; |
| |
| suite('path-list-utl tests', () => { |
| test('special sort', () => { |
| const testFiles = [ |
| '/a.h', |
| '/MERGE_LIST', |
| '/a.cpp', |
| '/COMMIT_MSG', |
| '/asdasd', |
| '/mrPeanutbutter.py', |
| ]; |
| assert.deepEqual(testFiles.sort(specialFilePathCompare), [ |
| '/COMMIT_MSG', |
| '/MERGE_LIST', |
| '/a.h', |
| '/a.cpp', |
| '/asdasd', |
| '/mrPeanutbutter.py', |
| ]); |
| }); |
| |
| test('special file path sorting', () => { |
| assert.deepEqual( |
| ['.b', '/COMMIT_MSG', '.a', 'file'].sort(specialFilePathCompare), |
| ['/COMMIT_MSG', '.a', '.b', 'file'] |
| ); |
| |
| assert.deepEqual( |
| ['.b', '/COMMIT_MSG', 'foo/bar/baz.cc', 'foo/bar/baz.h'].sort( |
| specialFilePathCompare |
| ), |
| ['/COMMIT_MSG', '.b', 'foo/bar/baz.h', 'foo/bar/baz.cc'] |
| ); |
| |
| assert.deepEqual( |
| ['.b', '/COMMIT_MSG', 'foo/bar/baz.cc', 'foo/bar/baz.hpp'].sort( |
| specialFilePathCompare |
| ), |
| ['/COMMIT_MSG', '.b', 'foo/bar/baz.hpp', 'foo/bar/baz.cc'] |
| ); |
| |
| assert.deepEqual( |
| ['.b', '/COMMIT_MSG', 'foo/bar/baz.cc', 'foo/bar/baz.hxx'].sort( |
| specialFilePathCompare |
| ), |
| ['/COMMIT_MSG', '.b', 'foo/bar/baz.hxx', 'foo/bar/baz.cc'] |
| ); |
| |
| assert.deepEqual( |
| ['foo/bar.h', 'foo/bar.hxx', 'foo/bar.hpp'].sort(specialFilePathCompare), |
| ['foo/bar.h', 'foo/bar.hpp', 'foo/bar.hxx'] |
| ); |
| |
| // Regression test for Issue 15635 |
| assert.deepEqual( |
| ['manager.cc', 'manager.hh'].sort(specialFilePathCompare), |
| ['manager.hh', 'manager.cc'] |
| ); |
| |
| // Regression test for Issue 4448. |
| assert.deepEqual( |
| [ |
| 'minidump/minidump_memory_writer.cc', |
| 'minidump/minidump_memory_writer.h', |
| 'minidump/minidump_thread_writer.cc', |
| 'minidump/minidump_thread_writer.h', |
| ].sort(specialFilePathCompare), |
| [ |
| 'minidump/minidump_memory_writer.h', |
| 'minidump/minidump_memory_writer.cc', |
| 'minidump/minidump_thread_writer.h', |
| 'minidump/minidump_thread_writer.cc', |
| ] |
| ); |
| |
| // Regression test for Issue 4545. |
| assert.deepEqual(['task_test.go', 'task.go'].sort(specialFilePathCompare), [ |
| 'task.go', |
| 'task_test.go', |
| ]); |
| }); |
| |
| test('file display name', () => { |
| assert.equal(computeDisplayPath('/foo/bar/baz'), '/foo/bar/baz'); |
| assert.equal(computeDisplayPath('/foobarbaz'), '/foobarbaz'); |
| assert.equal(computeDisplayPath('/COMMIT_MSG'), 'Commit message'); |
| assert.equal(computeDisplayPath('/MERGE_LIST'), 'Merge list'); |
| }); |
| |
| test('isMagicPath', () => { |
| assert.isFalse(isMagicPath(undefined)); |
| assert.isFalse(isMagicPath('/foo.cc')); |
| assert.isTrue(isMagicPath('/COMMIT_MSG')); |
| assert.isTrue(isMagicPath('/MERGE_LIST')); |
| }); |
| |
| test('patchset level comments are hidden', () => { |
| const commentedPaths = { |
| [SpecialFilePath.PATCHSET_LEVEL_COMMENTS]: true, |
| 'file1.txt': true, |
| }; |
| |
| const files: FileNameToFileInfoMap = { |
| 'file2.txt': { |
| status: FileInfoStatus.REWRITTEN, |
| size_delta: 10, |
| size: 10, |
| }, |
| }; |
| addUnmodifiedFiles(files, commentedPaths); |
| assert.equal(files['file1.txt'].status, FileInfoStatus.UNMODIFIED); |
| assert.equal(files['file2.txt'].status, FileInfoStatus.REWRITTEN); |
| assert.isFalse( |
| hasOwnProperty(files, SpecialFilePath.PATCHSET_LEVEL_COMMENTS) |
| ); |
| }); |
| |
| test('truncatePath with long path should add ellipsis', () => { |
| let path = 'level1/level2/level3/level4/file.js'; |
| let shortenedPath = truncatePath(path); |
| // The expected path is truncated with an ellipsis. |
| const expectedPath = '\u2026/file.js'; |
| assert.equal(shortenedPath, expectedPath); |
| |
| path = 'level2/file.js'; |
| shortenedPath = truncatePath(path); |
| assert.equal(shortenedPath, expectedPath); |
| }); |
| |
| test('truncatePath with threshold', () => { |
| let path = 'level1/level2/level3/level4/file.js'; |
| let shortenedPath = truncatePath(path, 2); |
| // The expected path is truncated with an ellipsis. |
| const expectedPath = '\u2026/level4/file.js'; |
| assert.equal(shortenedPath, expectedPath); |
| |
| path = 'level2/file.js'; |
| shortenedPath = truncatePath(path, 2); |
| assert.equal(shortenedPath, path); |
| }); |
| |
| test('truncatePath with short path should not add ellipsis', () => { |
| const path = 'file.js'; |
| const expectedPath = 'file.js'; |
| const shortenedPath = truncatePath(path); |
| assert.equal(shortenedPath, expectedPath); |
| }); |
| }); |