| // Copyright (c) 2014, 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. |
| |
| library test.integration.analysis.outline; |
| |
| import 'package:analysis_testing/reflective_tests.dart'; |
| import 'package:unittest/unittest.dart'; |
| |
| import '../integration_tests.dart'; |
| |
| @ReflectiveTestCase() |
| class Test extends AbstractAnalysisServerIntegrationTest { |
| test_outline() { |
| String pathname = sourcePath('test.dart'); |
| String text = |
| r''' |
| class Class1 { |
| int field; |
| |
| void method() { |
| } |
| |
| static staticMethod() { |
| } |
| |
| get getter { |
| return null; |
| } |
| |
| set setter(value) { |
| } |
| } |
| |
| class Class2 { |
| } |
| '''; |
| writeFile(pathname, text); |
| standardAnalysisSetup(); |
| sendAnalysisSetSubscriptions({ |
| 'OUTLINE': [pathname] |
| }); |
| Map outline; |
| onAnalysisOutline.listen((params) { |
| expect(params['file'], equals(pathname)); |
| outline = params['outline']; |
| }); |
| return analysisFinished.then((_) { |
| expect(outline['element']['kind'], equals('COMPILATION_UNIT')); |
| expect(outline['offset'], equals(0)); |
| expect(outline['length'], equals(text.length)); |
| List classes = outline['children']; |
| expect(classes, hasLength(2)); |
| expect(classes[0]['element']['name'], equals('Class1')); |
| expect(classes[1]['element']['name'], equals('Class2')); |
| checkConnected(classes); |
| List members = classes[0]['children']; |
| expect(members, hasLength(5)); |
| expect(members[0]['element']['name'], equals('field')); |
| expect(members[1]['element']['name'], equals('method')); |
| expect(members[2]['element']['name'], equals('staticMethod')); |
| expect(members[3]['element']['name'], equals('getter')); |
| expect(members[4]['element']['name'], equals('setter')); |
| checkConnected(members); |
| }); |
| } |
| |
| /** |
| * Verify that the range of source text covered by the given outline objects |
| * is connected (the end of each object in the list corresponds to the start |
| * of the next). |
| */ |
| void checkConnected(List outlineObjects) { |
| for (int i = 0; i < outlineObjects.length - 1; i++) { |
| expect(outlineObjects[i + 1]['offset'], equals(outlineObjects[i]['offset'] |
| + outlineObjects[i]['length'])); |
| } |
| } |
| } |
| |
| main() { |
| runReflectiveTests(Test); |
| } |