Skip to content

Commit ab61821

Browse files
authored
Merge pull request #447 from fortran-lang/gnikit/issue423
Gnikit/issue423
2 parents 1dd14e9 + c38cf91 commit ab61821

File tree

6 files changed

+140
-4
lines changed

6 files changed

+140
-4
lines changed

.eslintignore

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1 @@
11
*.js
2-
test/**/index.ts
3-
test/**/runTest.ts

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
4646

4747
### Added
4848

49+
- Added unittests for the formatting providers
50+
([#423](https://github.com/fortran-lang/vscode-fortran-support/issues/423))
4951
- Added GitHub Actions environment to dependabot
5052
- Adds support for Intel (ifort) and LLVM (flang) compilers
5153
([#291](https://github.com/krvajal/vscode-fortran-support/issues/291))

test/formatting-provider.test.ts

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import { strictEqual } from 'assert';
2+
import { FortranFormattingProvider } from '../src/features/formatting-provider';
3+
import * as vscode from 'vscode';
4+
import * as path from 'path';
5+
import { LoggingService } from '../src/services/logging-service';
6+
import { spawnSync } from 'child_process';
7+
8+
suite('Formatting tests', () => {
9+
let doc: vscode.TextDocument;
10+
const fmt = new FortranFormattingProvider(new LoggingService());
11+
const fileUri = vscode.Uri.file(
12+
path.resolve(__dirname, '../../test/resources/formatting_test.f90')
13+
);
14+
15+
suiteSetup(async function (): Promise<void> {
16+
spawnSync('pip', ['install', '--user', '--upgrade', 'findent']);
17+
spawnSync('pip', ['install', '--user', '--upgrade', 'fprettify']);
18+
doc = await vscode.workspace.openTextDocument(fileUri);
19+
await vscode.window.showTextDocument(doc);
20+
console.log('Open file: ' + fileUri.toString());
21+
});
22+
23+
test('Using findent', async () => {
24+
const fmt = new FortranFormattingProvider(new LoggingService());
25+
fmt['formatter'] = 'findent';
26+
const edits = await fmt['doFormatFindent'](doc);
27+
strictEqual(
28+
edits[0].newText.toString(),
29+
`program main
30+
implicit none
31+
integer :: i, j
32+
do i = 1, 5
33+
do j = 1, 5
34+
if (i == j) then
35+
print *, i
36+
end if
37+
end do
38+
end do
39+
end program main
40+
`
41+
);
42+
});
43+
44+
test('Using fprettify', async () => {
45+
fmt['formatter'] = 'fprettify';
46+
const edits = await fmt['doFormatFprettify'](doc);
47+
const ref = `program main
48+
implicit none
49+
integer :: i, j
50+
do i = 1, 5
51+
do j = 1, 5
52+
if (i == j) then
53+
print *, i
54+
end if
55+
end do
56+
end do
57+
end program main
58+
`;
59+
strictEqual(edits[0].newText.toString(), ref);
60+
});
61+
});

test/resources/formatting_test.f90

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
program main
2+
implicit none
3+
integer :: i, j
4+
do i = 1, 5
5+
do j = 1, 5
6+
if (i == j) then
7+
print *, i
8+
end if
9+
end do
10+
end do
11+
end program main
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
>program main
2+
#^^^^^^^ source.fortran.free meta.program.fortran keyword.control.program.fortran
3+
# ^ source.fortran.free meta.program.fortran
4+
# ^^^^ source.fortran.free meta.program.fortran entity.name.program.fortran
5+
>implicit none
6+
#^^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.implicit.fortran keyword.other.implicit.fortran
7+
# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.implicit.fortran
8+
# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.statement.implicit.fortran keyword.other.none.fortran
9+
>integer :: i, j
10+
#^^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran storage.type.integer.fortran
11+
# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.attribute-list.type-specification-statements.fortran
12+
# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran keyword.operator.double-colon.fortran
13+
# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.name-list.fortran
14+
# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran
15+
# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.name-list.fortran
16+
# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.specification.type.fortran meta.name-list.fortran meta.parameter.fortran
17+
>do i = 1, 5
18+
#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran keyword.control.do.fortran
19+
# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.loop-control.fortran
20+
# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.loop-control.fortran meta.parameter.fortran
21+
# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.loop-control.fortran
22+
# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.loop-control.fortran keyword.operator.assignment.fortran
23+
# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.loop-control.fortran
24+
# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.loop-control.fortran constant.numeric.fortran
25+
# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.loop-control.fortran
26+
# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.loop-control.fortran constant.numeric.fortran
27+
>do j = 1, 5
28+
#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.block.do.unlabeled.fortran keyword.control.do.fortran
29+
# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.block.do.unlabeled.fortran meta.loop-control.fortran
30+
# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.block.do.unlabeled.fortran meta.loop-control.fortran meta.parameter.fortran
31+
# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.block.do.unlabeled.fortran meta.loop-control.fortran
32+
# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.block.do.unlabeled.fortran meta.loop-control.fortran keyword.operator.assignment.fortran
33+
# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.block.do.unlabeled.fortran meta.loop-control.fortran
34+
# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.block.do.unlabeled.fortran meta.loop-control.fortran constant.numeric.fortran
35+
# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.block.do.unlabeled.fortran meta.loop-control.fortran
36+
# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.block.do.unlabeled.fortran meta.loop-control.fortran constant.numeric.fortran
37+
>if (i == j) then
38+
#^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.block.do.unlabeled.fortran keyword.control.if.fortran
39+
# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.block.do.unlabeled.fortran meta.expression.control.logical.fortran
40+
# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.block.do.unlabeled.fortran meta.expression.control.logical.fortran punctuation.parentheses.left.fortran
41+
# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.block.do.unlabeled.fortran meta.expression.control.logical.fortran meta.parameter.fortran
42+
# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.block.do.unlabeled.fortran meta.expression.control.logical.fortran
43+
# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.block.do.unlabeled.fortran meta.expression.control.logical.fortran keyword.logical.fortran.modern
44+
# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.block.do.unlabeled.fortran meta.expression.control.logical.fortran
45+
# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.block.do.unlabeled.fortran meta.expression.control.logical.fortran meta.parameter.fortran
46+
# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.block.do.unlabeled.fortran meta.expression.control.logical.fortran punctuation.parentheses.right.fortran
47+
# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.block.do.unlabeled.fortran
48+
# ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.block.do.unlabeled.fortran keyword.control.then.fortran
49+
>print *, i
50+
#^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.block.do.unlabeled.fortran meta.block.if.fortran keyword.control.print.fortran
51+
# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.block.do.unlabeled.fortran meta.block.if.fortran
52+
# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.block.do.unlabeled.fortran meta.block.if.fortran keyword.operator.power.fortran
53+
# ^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.block.do.unlabeled.fortran meta.block.if.fortran
54+
# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.block.do.unlabeled.fortran meta.block.if.fortran meta.parameter.fortran
55+
>end if
56+
#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.block.do.unlabeled.fortran keyword.control.endif.fortran
57+
>end do
58+
#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.block.do.unlabeled.fortran keyword.control.enddo.fortran
59+
>end do
60+
#^^^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran keyword.control.enddo.fortran
61+
>end program main
62+
#^^^^^^^^^^^ source.fortran.free meta.program.fortran keyword.control.endprogram.fortran
63+
# ^ source.fortran.free meta.program.fortran
64+
# ^^^^ source.fortran.free meta.program.fortran entity.name.program.fortran

test/runTest.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@ async function main() {
66
try {
77
// The folder containing the Extension Manifest package.json
88
// Passed to `--extensionDevelopmentPath`
9-
const extensionDevelopmentPath = path.resolve(__dirname, '../');
9+
const extensionDevelopmentPath = path.resolve(__dirname, '../../');
1010

1111
// The path to the extension test runner script
1212
// Passed to --extensionTestsPath
1313
const extensionTestsPath = path.resolve(__dirname, './index');
1414

15-
const launchArgs = ['--disable-extensions', '--install-extension ms-vscode.cpptools'];
15+
const launchArgs = ['--disable-extensions', '--install-extension', 'ms-vscode.cpptools'];
1616
// Download VS Code, unzip it and run the integration test
1717
await runTests({
1818
launchArgs,

0 commit comments

Comments
 (0)