| // Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| import 'package:analysis_server/lsp_protocol/protocol.dart' as lsp; |
| import 'package:analyzer/source/source_range.dart'; |
| import 'package:test/test.dart'; |
| import 'package:test_reflective_loader/test_reflective_loader.dart'; |
| |
| import 'utils/test_code_format.dart'; |
| |
| void main() { |
| defineReflectiveSuite(() { |
| defineReflectiveTests(TestCodeFormatTest); |
| }); |
| } |
| |
| @reflectiveTest |
| class TestCodeFormatTest { |
| void test_caret() { |
| final rawCode = ''' |
| int ^a = 1 |
| '''; |
| final expectedCode = ''' |
| int a = 1 |
| '''; |
| final code = TestCode.parse(rawCode); |
| expect(code.rawCode, rawCode); |
| expect(code.code, expectedCode); |
| |
| expect(code.positions, hasLength(1)); |
| expect(code.position.offset, 4); |
| expect(code.position.offset, code.positions[0].offset); |
| expect(code.position.lsp, lsp.Position(line: 0, character: 4)); |
| expect(code.position.lsp, code.positions[0].lsp); |
| |
| expect(code.ranges, isEmpty); |
| } |
| |
| void test_noMarkers() { |
| final rawCode = ''' |
| int a = 1; |
| '''; |
| final code = TestCode.parse(rawCode); |
| expect(code.rawCode, rawCode); |
| expect(code.code, rawCode); // no difference |
| expect(code.positions, isEmpty); |
| expect(code.ranges, isEmpty); |
| } |
| |
| void test_nonPositionCaret() { |
| final rawCode = ''' |
| String /*0*/a = '^^^'; |
| '''; |
| final expectedCode = ''' |
| String a = '^^^'; |
| '''; |
| final code = TestCode.parse(rawCode, treatCaretAsPosition: false); |
| expect(code.rawCode, rawCode); |
| expect(code.code, expectedCode); |
| |
| expect(code.positions, hasLength(1)); |
| expect(code.position.offset, 7); |
| expect(code.position.offset, code.positions[0].offset); |
| expect(code.position.lsp, lsp.Position(line: 0, character: 7)); |
| expect(code.position.lsp, code.positions[0].lsp); |
| |
| expect(code.ranges, isEmpty); |
| } |
| |
| void test_positions() { |
| final rawCode = ''' |
| int /*0*/a = 1;/*1*/ |
| int b/*2*/ = 2; |
| '''; |
| final expectedCode = ''' |
| int a = 1; |
| int b = 2; |
| '''; |
| final code = TestCode.parse(rawCode); |
| expect(code.rawCode, rawCode); |
| expect(code.code, expectedCode); |
| expect(code.ranges, isEmpty); |
| |
| expect(code.positions[0].offset, 4); |
| expect(code.positions[1].offset, 10); |
| expect(code.positions[2].offset, 16); |
| |
| expect(code.positions[0].lsp, lsp.Position(line: 0, character: 4)); |
| expect(code.positions[1].lsp, lsp.Position(line: 0, character: 10)); |
| expect(code.positions[2].lsp, lsp.Position(line: 1, character: 5)); |
| } |
| |
| void test_positions_reused() { |
| final rawCode = ''' |
| /*0*/ /*1*/ /*0*/ |
| '''; |
| expect(() => TestCode.parse(rawCode), throwsArgumentError); |
| } |
| |
| void test_positions_reusedCaret() { |
| final rawCode = ''' |
| ^ ^ |
| '''; |
| expect(() => TestCode.parse(rawCode), throwsArgumentError); |
| } |
| |
| void test_positions_reusedCaretNumber() { |
| final rawCode = ''' |
| /*1*/ ^ |
| '''; |
| expect(() => TestCode.parse(rawCode), throwsArgumentError); |
| } |
| |
| void test_ranges() { |
| final rawCode = ''' |
| int /*[0*/a = 1;/*0]*/ |
| /*[1*/int b = 2;/*1]*/ |
| '''; |
| final expectedCode = ''' |
| int a = 1; |
| int b = 2; |
| '''; |
| final code = TestCode.parse(rawCode); |
| expect(code.rawCode, rawCode); |
| expect(code.code, expectedCode); |
| expect(code.positions, isEmpty); |
| |
| expect(code.ranges, hasLength(2)); |
| expect(code.ranges[0].sourceRange, SourceRange(4, 6)); |
| expect(code.ranges[1].sourceRange, SourceRange(11, 10)); |
| expect( |
| code.ranges[0].lsp, |
| lsp.Range( |
| start: lsp.Position(line: 0, character: 4), |
| end: lsp.Position(line: 0, character: 10))); |
| expect( |
| code.ranges[1].lsp, |
| lsp.Range( |
| start: lsp.Position(line: 1, character: 0), |
| end: lsp.Position(line: 1, character: 10))); |
| |
| expect(code.ranges[0].text, 'a = 1;'); |
| expect(code.ranges[1].text, 'int b = 2;'); |
| } |
| |
| void test_ranges_endReused() { |
| final rawCode = ''' |
| /*[0*/ /*0]*/ |
| /*[1*/ /*0]*/ |
| '''; |
| expect(() => TestCode.parse(rawCode), throwsArgumentError); |
| } |
| |
| void test_ranges_endWithoutStart() { |
| final rawCode = ''' |
| /*0]*/ |
| '''; |
| expect(() => TestCode.parse(rawCode), throwsArgumentError); |
| } |
| |
| void test_ranges_startReused() { |
| final rawCode = ''' |
| /*[0*/ /*0]*/ |
| /*[0*/ /*1]*/ |
| '''; |
| expect(() => TestCode.parse(rawCode), throwsArgumentError); |
| } |
| |
| void test_ranges_startWithoutEnd() { |
| final rawCode = ''' |
| /*[0*/ |
| '''; |
| expect(() => TestCode.parse(rawCode), throwsArgumentError); |
| } |
| } |