|  | 
|  | 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