| // Copyright (c) 2019, 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:test/test.dart'; |
| import 'package:test_reflective_loader/test_reflective_loader.dart'; |
| |
| import 'server_abstract.dart'; |
| |
| void main() { |
| defineReflectiveSuite(() { |
| defineReflectiveTests(ClosingLabelsTest); |
| }); |
| } |
| |
| @reflectiveTest |
| class ClosingLabelsTest extends AbstractLspAnalysisServerTest { |
| @override |
| void setUp() { |
| super.setUp(); |
| |
| // These tests reference classes/constructors that don't exist. |
| failTestOnErrorDiagnostic = false; |
| } |
| |
| Future<void> test_afterChange() async { |
| var initialContent = 'void f() {}'; |
| var updatedContent = ''' |
| Widget build(BuildContext context) { |
| return new Row( // Row 1:9 |
| children: <Widget>[ // Widget[] 2:14 |
| new Text('a'), |
| new Text('b'), |
| ], // /Widget[] 5:5 |
| ); // /Row 6:3 |
| } |
| '''; |
| await initialize(initializationOptions: {'closingLabels': true}); |
| |
| var labelsUpdateBeforeChange = waitForClosingLabels(mainFileUri); |
| await openFile(mainFileUri, initialContent); |
| var labelsBeforeChange = await labelsUpdateBeforeChange; |
| |
| var labelsUpdateAfterChange = waitForClosingLabels(mainFileUri); |
| await replaceFile(1, mainFileUri, updatedContent); |
| var labelsAfterChange = await labelsUpdateAfterChange; |
| |
| expect(labelsBeforeChange, isEmpty); |
| expect(labelsAfterChange, hasLength(2)); |
| |
| var first = labelsAfterChange.first; |
| var second = labelsAfterChange.last; |
| |
| expect(first.label, equals('Row')); |
| expect(first.range.start.line, equals(1)); |
| expect(first.range.start.character, equals(9)); |
| expect(first.range.end.line, equals(6)); |
| expect(first.range.end.character, equals(3)); |
| |
| expect(second.label, equals('<Widget>[]')); |
| expect(second.range.start.line, equals(2)); |
| expect(second.range.start.character, equals(14)); |
| expect(second.range.end.line, equals(5)); |
| expect(second.range.end.character, equals(5)); |
| } |
| |
| Future<void> test_initial() async { |
| var content = ''' |
| Widget build(BuildContext context) { |
| return new Row( // Row 1:9 |
| children: <Widget>[ // Widget[] 2:14 |
| new Text('a'), |
| new Text('b'), |
| ], // /Widget[] 5:5 |
| ); // /Row 6:3 |
| } |
| '''; |
| await initialize(initializationOptions: {'closingLabels': true}); |
| |
| var closingLabelsUpdate = waitForClosingLabels(mainFileUri); |
| await openFile(mainFileUri, content); |
| var labels = await closingLabelsUpdate; |
| |
| expect(labels, hasLength(2)); |
| var first = labels.first; |
| var second = labels.last; |
| |
| expect(first.label, equals('Row')); |
| expect(first.range.start.line, equals(1)); |
| expect(first.range.start.character, equals(9)); |
| expect(first.range.end.line, equals(6)); |
| expect(first.range.end.character, equals(3)); |
| |
| expect(second.label, equals('<Widget>[]')); |
| expect(second.range.start.line, equals(2)); |
| expect(second.range.start.character, equals(14)); |
| expect(second.range.end.line, equals(5)); |
| expect(second.range.end.character, equals(5)); |
| } |
| } |