|
| 1 | +// Copyright (c) Microsoft Corporation. All rights reserved. |
| 2 | +// Licensed under the MIT License. |
| 3 | + |
| 4 | +import { expect } from 'chai'; |
| 5 | +import * as path from 'path'; |
| 6 | +import { CancellationTokenSource, FoldingRange, FoldingRangeKind, workspace } from 'vscode'; |
| 7 | +import { DocStringFoldingProvider } from '../../client/providers/docStringFoldingProvider'; |
| 8 | + |
| 9 | +type FileFoldingRanges = { file: string; ranges: FoldingRange[] }; |
| 10 | +const pythonFilesPath = path.join(__dirname, '..', '..', '..', 'src', 'test', 'pythonFiles', 'folding'); |
| 11 | + |
| 12 | +// tslint:disable-next-line:max-func-body-length |
| 13 | +suite('Provider - Folding Provider', () => { |
| 14 | + const docStringFileAndExpectedFoldingRanges: FileFoldingRanges[] = [ |
| 15 | + { |
| 16 | + file: path.join(pythonFilesPath, 'attach_server.py'), ranges: [ |
| 17 | + new FoldingRange(0, 14), new FoldingRange(44, 73, FoldingRangeKind.Comment), |
| 18 | + new FoldingRange(95, 143), new FoldingRange(149, 150, FoldingRangeKind.Comment), |
| 19 | + new FoldingRange(305, 313), new FoldingRange(320, 322) |
| 20 | + ] |
| 21 | + }, |
| 22 | + { |
| 23 | + file: path.join(pythonFilesPath, 'visualstudio_ipython_repl.py'), ranges: [ |
| 24 | + new FoldingRange(0, 14), new FoldingRange(78, 79, FoldingRangeKind.Comment), |
| 25 | + new FoldingRange(81, 82, FoldingRangeKind.Comment), new FoldingRange(92, 93, FoldingRangeKind.Comment), |
| 26 | + new FoldingRange(108, 109, FoldingRangeKind.Comment), new FoldingRange(139, 140, FoldingRangeKind.Comment), |
| 27 | + new FoldingRange(169, 170, FoldingRangeKind.Comment), new FoldingRange(275, 277, FoldingRangeKind.Comment), |
| 28 | + new FoldingRange(319, 320, FoldingRangeKind.Comment) |
| 29 | + ] |
| 30 | + }, |
| 31 | + { |
| 32 | + file: path.join(pythonFilesPath, 'visualstudio_py_debugger.py'), ranges: [ |
| 33 | + new FoldingRange(0, 15, FoldingRangeKind.Comment), new FoldingRange(22, 25, FoldingRangeKind.Comment), |
| 34 | + new FoldingRange(47, 48, FoldingRangeKind.Comment), new FoldingRange(69, 70, FoldingRangeKind.Comment), |
| 35 | + new FoldingRange(96, 97, FoldingRangeKind.Comment), new FoldingRange(105, 106, FoldingRangeKind.Comment), |
| 36 | + new FoldingRange(141, 142, FoldingRangeKind.Comment), new FoldingRange(149, 162, FoldingRangeKind.Comment), |
| 37 | + new FoldingRange(165, 166, FoldingRangeKind.Comment), new FoldingRange(207, 208, FoldingRangeKind.Comment), |
| 38 | + new FoldingRange(235, 237, FoldingRangeKind.Comment), new FoldingRange(240, 241, FoldingRangeKind.Comment), |
| 39 | + new FoldingRange(300, 301, FoldingRangeKind.Comment), new FoldingRange(334, 335, FoldingRangeKind.Comment), |
| 40 | + new FoldingRange(346, 348, FoldingRangeKind.Comment), new FoldingRange(499, 500, FoldingRangeKind.Comment), |
| 41 | + new FoldingRange(558, 559, FoldingRangeKind.Comment), new FoldingRange(602, 604, FoldingRangeKind.Comment), |
| 42 | + new FoldingRange(608, 609, FoldingRangeKind.Comment), new FoldingRange(612, 614, FoldingRangeKind.Comment), |
| 43 | + new FoldingRange(637, 638, FoldingRangeKind.Comment) |
| 44 | + ] |
| 45 | + }, |
| 46 | + { |
| 47 | + file: path.join(pythonFilesPath, 'visualstudio_py_repl.py'), ranges: [] |
| 48 | + } |
| 49 | + ]; |
| 50 | + |
| 51 | + docStringFileAndExpectedFoldingRanges.forEach(item => { |
| 52 | + test(`Test Docstring folding regions '${path.basename(item.file)}'`, async () => { |
| 53 | + const document = await workspace.openTextDocument(item.file); |
| 54 | + const provider = new DocStringFoldingProvider(); |
| 55 | + const ranges = await provider.provideFoldingRanges(document, {}, new CancellationTokenSource().token); |
| 56 | + expect(ranges).to.be.lengthOf(item.ranges.length); |
| 57 | + ranges!.forEach(range => { |
| 58 | + const index = item.ranges |
| 59 | + .findIndex(searchItem => searchItem.start === range.start && |
| 60 | + searchItem.end === range.end); |
| 61 | + expect(index).to.be.greaterThan(-1, `${range.start}, ${range.end} not found`); |
| 62 | + }); |
| 63 | + }); |
| 64 | + }); |
| 65 | +}); |
0 commit comments