| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library test.services.completion.dart.local; | 5 library test.services.completion.dart.local; |
| 6 | 6 |
| 7 import 'package:analysis_server/src/services/completion/local_computer.dart'; | 7 import 'package:analysis_server/src/services/completion/local_computer.dart'; |
| 8 import '../../reflective_tests.dart'; | |
| 9 import 'package:unittest/unittest.dart'; | 8 import 'package:unittest/unittest.dart'; |
| 10 | 9 |
| 10 import '../../reflective_tests.dart'; |
| 11 import 'completion_test_util.dart'; | 11 import 'completion_test_util.dart'; |
| 12 | 12 |
| 13 main() { | 13 main() { |
| 14 groupSep = ' | '; | 14 groupSep = ' | '; |
| 15 runReflectiveTests(LocalComputerTest); | 15 runReflectiveTests(LocalComputerTest); |
| 16 } | 16 } |
| 17 | 17 |
| 18 @ReflectiveTestCase() | 18 @ReflectiveTestCase() |
| 19 class LocalComputerTest extends AbstractCompletionTest { | 19 class LocalComputerTest extends AbstractCompletionTest { |
| 20 | 20 |
| 21 @override | 21 @override |
| 22 void setUp() { | 22 void setUp() { |
| 23 super.setUp(); | 23 super.setUp(); |
| 24 computer = new LocalComputer(); | 24 computer = new LocalComputer(); |
| 25 } | 25 } |
| 26 | 26 |
| 27 test_block() { | 27 test_BinaryExpression_LHS() { |
| 28 // SimpleIdentifier BinaryExpression VariableDeclaration |
| 29 // VariableDeclarationList VariableDeclarationStatement |
| 30 addTestSource('main() {int a = 1, b = ^ + 2;}'); |
| 31 expect(computeFast(), isTrue); |
| 32 assertSuggestLocalVariable('a', 'int'); |
| 33 assertNotSuggested('b'); |
| 34 } |
| 35 |
| 36 test_BinaryExpression_RHS() { |
| 37 // SimpleIdentifier BinaryExpression VariableDeclaration |
| 38 // VariableDeclarationList VariableDeclarationStatement |
| 39 addTestSource('main() {int a = 1, b = 2 + ^;}'); |
| 40 expect(computeFast(), isTrue); |
| 41 assertSuggestLocalVariable('a', 'int'); |
| 42 assertNotSuggested('b'); |
| 43 } |
| 44 |
| 45 test_Block() { |
| 46 // Block BlockFunctionBody |
| 28 addTestSource('class A {a() {var f; {var x;} ^ var g;}}'); | 47 addTestSource('class A {a() {var f; {var x;} ^ var g;}}'); |
| 29 expect(computeFast(), isTrue); | 48 expect(computeFast(), isTrue); |
| 49 assertSuggestClass('A'); |
| 30 assertSuggestLocalVariable('f', null); | 50 assertSuggestLocalVariable('f', null); |
| 31 assertNotSuggested('g'); | 51 assertNotSuggested('g'); |
| 32 assertNotSuggested('x'); | 52 assertNotSuggested('x'); |
| 33 } | 53 } |
| 34 | 54 |
| 35 test_catch() { | 55 test_CatchClause_typed() { |
| 56 // Block CatchClause TryStatement |
| 36 addTestSource('class A {a() {try{} on E catch (e) {^}}}'); | 57 addTestSource('class A {a() {try{} on E catch (e) {^}}}'); |
| 37 expect(computeFast(), isTrue); | 58 expect(computeFast(), isTrue); |
| 38 assertSuggestParameter('e', 'E'); | 59 assertSuggestParameter('e', 'E'); |
| 39 } | 60 } |
| 40 | 61 |
| 41 test_catch2() { | 62 test_CatchClause_untyped() { |
| 63 // Block CatchClause TryStatement |
| 42 addTestSource('class A {a() {try{} catch (e, s) {^}}}'); | 64 addTestSource('class A {a() {try{} catch (e, s) {^}}}'); |
| 43 expect(computeFast(), isTrue); | 65 expect(computeFast(), isTrue); |
| 44 assertSuggestParameter('e', null); | 66 assertSuggestParameter('e', null); |
| 45 assertSuggestParameter('s', 'StackTrace'); | 67 assertSuggestParameter('s', 'StackTrace'); |
| 46 } | 68 } |
| 47 | 69 |
| 48 test_compilationUnit_declarations() { | 70 test_ClassDeclaration_body() { |
| 49 addTestSource('@deprecated class A {^} class _B {} A T;'); | 71 // ClassDeclaration CompilationUnit |
| 72 addTestSource( // |
| 73 'import "boo.dart" as x;' // |
| 74 ' @deprecated class A {^}' // |
| 75 ' class _B {}' // |
| 76 ' A T;'); |
| 50 expect(computeFast(), isTrue); | 77 expect(computeFast(), isTrue); |
| 51 var a = assertSuggestClass('A'); | 78 var a = assertSuggestClass('A'); |
| 52 expect(a.element.isDeprecated, isTrue); | 79 expect(a.element.isDeprecated, isTrue); |
| 53 expect(a.element.isPrivate, isFalse); | 80 expect(a.element.isPrivate, isFalse); |
| 54 var b = assertSuggestClass('_B'); | 81 var b = assertSuggestClass('_B'); |
| 55 expect(b.element.isDeprecated, isFalse); | 82 expect(b.element.isDeprecated, isFalse); |
| 56 expect(b.element.isPrivate, isTrue); | 83 expect(b.element.isPrivate, isTrue); |
| 57 assertSuggestTopLevelVar('T', 'A'); | 84 assertSuggestTopLevelVar('T', 'A'); |
| 58 } | |
| 59 | |
| 60 test_compilationUnit_directives() { | |
| 61 addTestSource('import "boo.dart" as x; class A {^}'); | |
| 62 expect(computeFast(), isTrue); | |
| 63 assertSuggestLibraryPrefix('x'); | 85 assertSuggestLibraryPrefix('x'); |
| 64 } | 86 } |
| 65 | 87 |
| 66 test_field_name() { | 88 test_ExpressionStatement_name() { |
| 89 // ExpressionStatement Block |
| 90 addTestSource('class A {a() {var f; A ^}}'); |
| 91 expect(computeFast(), isTrue); |
| 92 assertNotSuggested('A'); |
| 93 assertNotSuggested('a'); |
| 94 assertNotSuggested('f'); |
| 95 } |
| 96 |
| 97 test_FieldDeclaration_name() { |
| 98 // SimpleIdentifier VariableDeclaration VariableDeclarationList |
| 99 // FieldDeclaration |
| 67 addTestSource('class A {B ^}}'); | 100 addTestSource('class A {B ^}}'); |
| 68 expect(computeFast(), isTrue); | 101 expect(computeFast(), isTrue); |
| 69 assertNotSuggested('A'); | 102 assertNotSuggested('A'); |
| 70 } | 103 } |
| 71 | 104 |
| 72 test_field_name2() { | 105 test_ForEachStatement_body_typed() { |
| 73 addTestSource('class A {var ^}}'); | 106 // Block ForEachStatement |
| 107 addTestSource('main(args) {for (int foo in bar) {^}}'); |
| 74 expect(computeFast(), isTrue); | 108 expect(computeFast(), isTrue); |
| 75 assertNotSuggested('A'); | 109 assertSuggestLocalVariable('foo', 'int'); |
| 76 } | 110 } |
| 77 | 111 |
| 78 test_for() { | 112 test_ForEachStatement_body_untyped() { |
| 113 // Block ForEachStatement |
| 114 addTestSource('main(args) {for (foo in bar) {^}}'); |
| 115 expect(computeFast(), isTrue); |
| 116 assertSuggestLocalVariable('foo', null); |
| 117 } |
| 118 |
| 119 test_ForStatement_body() { |
| 120 // Block ForStatement |
| 79 addTestSource('main(args) {for (int i; i < 10; ++i) {^}}'); | 121 addTestSource('main(args) {for (int i; i < 10; ++i) {^}}'); |
| 80 expect(computeFast(), isTrue); | 122 expect(computeFast(), isTrue); |
| 81 assertSuggestLocalVariable('i', 'int'); | 123 assertSuggestLocalVariable('i', 'int'); |
| 82 } | 124 } |
| 83 | 125 |
| 84 test_forEach() { | 126 test_FunctionExpression_body_function() { |
| 85 addTestSource('main(args) {for (foo in bar) {^}}'); | 127 // Block BlockFunctionBody FunctionExpression |
| 86 expect(computeFast(), isTrue); | |
| 87 assertSuggestLocalVariable('foo', null); | |
| 88 } | |
| 89 | |
| 90 test_forEach2() { | |
| 91 addTestSource('main(args) {for (int foo in bar) {^}}'); | |
| 92 expect(computeFast(), isTrue); | |
| 93 assertSuggestLocalVariable('foo', 'int'); | |
| 94 } | |
| 95 | |
| 96 test_function() { | |
| 97 addTestSource('String foo(List args) {x.then((R b) {^});}'); | 128 addTestSource('String foo(List args) {x.then((R b) {^});}'); |
| 98 expect(computeFast(), isTrue); | 129 expect(computeFast(), isTrue); |
| 99 var f = assertSuggestFunction('foo', 'String', false); | 130 var f = assertSuggestFunction('foo', 'String', false); |
| 100 expect(f.element.isPrivate, isFalse); | 131 expect(f.element.isPrivate, isFalse); |
| 101 assertSuggestParameter('args', 'List'); | 132 assertSuggestParameter('args', 'List'); |
| 102 assertSuggestParameter('b', 'R'); | 133 assertSuggestParameter('b', 'R'); |
| 103 } | 134 } |
| 104 | 135 |
| 105 test_getters() { | 136 test_InstanceCreationExpression() { |
| 137 // SimpleIdentifier TypeName ConstructorName InstanceCreationExpression |
| 138 addTestSource('class A {a() {var f; {var x;} new ^}} class B { }'); |
| 139 expect(computeFast(), isTrue); |
| 140 assertSuggestClass('A'); |
| 141 assertSuggestClass('B'); |
| 142 // TODO (danrubel) should only suggest types |
| 143 //assertNotSuggested('a'); |
| 144 assertSuggestMethod('a', 'A', null); |
| 145 //assertNotSuggested('f'); |
| 146 assertSuggestLocalVariable('f', null); |
| 147 assertNotSuggested('x'); |
| 148 } |
| 149 |
| 150 test_MethodDeclaration_body_getters() { |
| 151 // Block BlockFunctionBody MethodDeclaration |
| 106 addTestSource('class A {@deprecated X get f => 0; Z a() {^} get _g => 1;}'); | 152 addTestSource('class A {@deprecated X get f => 0; Z a() {^} get _g => 1;}'); |
| 107 expect(computeFast(), isTrue); | 153 expect(computeFast(), isTrue); |
| 108 var a = assertSuggestMethod('a', 'A', 'Z'); | 154 var a = assertSuggestMethod('a', 'A', 'Z'); |
| 109 expect(a.element.isDeprecated, isFalse); | 155 expect(a.element.isDeprecated, isFalse); |
| 110 expect(a.element.isPrivate, isFalse); | 156 expect(a.element.isPrivate, isFalse); |
| 111 var f = assertSuggestGetter('f', 'X'); | 157 var f = assertSuggestGetter('f', 'X'); |
| 112 expect(f.element.isDeprecated, isTrue); | 158 expect(f.element.isDeprecated, isTrue); |
| 113 expect(f.element.isPrivate, isFalse); | 159 expect(f.element.isPrivate, isFalse); |
| 114 var g = assertSuggestGetter('_g', null); | 160 var g = assertSuggestGetter('_g', null); |
| 115 expect(g.element.isDeprecated, isFalse); | 161 expect(g.element.isDeprecated, isFalse); |
| 116 expect(g.element.isPrivate, isTrue); | 162 expect(g.element.isPrivate, isTrue); |
| 117 } | 163 } |
| 118 | 164 |
| 119 test_local_name() { | 165 test_MethodDeclaration_members() { |
| 120 addTestSource('class A {a() {var f; A ^}}'); | 166 // Block BlockFunctionBody MethodDeclaration |
| 121 expect(computeFast(), isTrue); | |
| 122 assertNotSuggested('A'); | |
| 123 assertNotSuggested('a'); | |
| 124 assertNotSuggested('f'); | |
| 125 } | |
| 126 | |
| 127 test_local_name2() { | |
| 128 addTestSource('class _A {a() {var f; var ^}}'); | |
| 129 expect(computeFast(), isTrue); | |
| 130 assertNotSuggested('A'); | |
| 131 assertNotSuggested('a'); | |
| 132 assertNotSuggested('f'); | |
| 133 } | |
| 134 | |
| 135 test_members() { | |
| 136 addTestSource('class A {@deprecated X f; Z _a() {^} var _g;}'); | 167 addTestSource('class A {@deprecated X f; Z _a() {^} var _g;}'); |
| 137 expect(computeFast(), isTrue); | 168 expect(computeFast(), isTrue); |
| 138 var a = assertSuggestMethod('_a', 'A', 'Z'); | 169 var a = assertSuggestMethod('_a', 'A', 'Z'); |
| 139 expect(a.element.isDeprecated, isFalse); | 170 expect(a.element.isDeprecated, isFalse); |
| 140 expect(a.element.isPrivate, isTrue); | 171 expect(a.element.isPrivate, isTrue); |
| 141 var f = assertSuggestGetter('f', 'X'); | 172 var f = assertSuggestGetter('f', 'X'); |
| 142 expect(f.element.isDeprecated, isTrue); | 173 expect(f.element.isDeprecated, isTrue); |
| 143 expect(f.element.isPrivate, isFalse); | 174 expect(f.element.isPrivate, isFalse); |
| 144 var g = assertSuggestGetter('_g', null); | 175 var g = assertSuggestGetter('_g', null); |
| 145 expect(g.element.isDeprecated, isFalse); | 176 expect(g.element.isDeprecated, isFalse); |
| 146 expect(g.element.isPrivate, isTrue); | 177 expect(g.element.isPrivate, isTrue); |
| 147 } | 178 } |
| 148 | 179 |
| 149 test_methodParam_named() { | 180 test_MethodDeclaration_parameters_named() { |
| 181 // Block BlockFunctionBody MethodDeclaration |
| 150 addTestSource('class A {@deprecated Z a(X x, {y: boo}) {^}}'); | 182 addTestSource('class A {@deprecated Z a(X x, {y: boo}) {^}}'); |
| 151 expect(computeFast(), isTrue); | 183 expect(computeFast(), isTrue); |
| 152 var a = assertSuggestMethod('a', 'A', 'Z'); | 184 var a = assertSuggestMethod('a', 'A', 'Z'); |
| 153 expect(a.element.isDeprecated, isTrue); | 185 expect(a.element.isDeprecated, isTrue); |
| 154 expect(a.element.isPrivate, isFalse); | 186 expect(a.element.isPrivate, isFalse); |
| 155 assertSuggestParameter('x', 'X'); | 187 assertSuggestParameter('x', 'X'); |
| 156 assertSuggestParameter('y', null); | 188 assertSuggestParameter('y', null); |
| 157 } | 189 } |
| 158 | 190 |
| 159 test_methodParam_positional() { | 191 test_MethodDeclaration_parameters_positional() { |
| 192 // Block BlockFunctionBody MethodDeclaration |
| 160 addTestSource('class A {Z a(X x, [int y=1]) {^}}'); | 193 addTestSource('class A {Z a(X x, [int y=1]) {^}}'); |
| 161 expect(computeFast(), isTrue); | 194 expect(computeFast(), isTrue); |
| 162 assertSuggestMethod('a', 'A', 'Z'); | 195 assertSuggestMethod('a', 'A', 'Z'); |
| 163 assertSuggestParameter('x', 'X'); | 196 assertSuggestParameter('x', 'X'); |
| 164 assertSuggestParameter('y', 'int'); | 197 assertSuggestParameter('y', 'int'); |
| 165 } | 198 } |
| 166 | 199 |
| 167 test_topLevelVar_name() { | 200 test_TopLevelVariableDeclaration_typed_name() { |
| 201 // SimpleIdentifier VariableDeclaration VariableDeclarationList |
| 202 // TopLevelVariableDeclaration |
| 168 addTestSource('class A {} B ^'); | 203 addTestSource('class A {} B ^'); |
| 169 expect(computeFast(), isTrue); | 204 expect(computeFast(), isTrue); |
| 170 assertNotSuggested('A'); | 205 assertNotSuggested('A'); |
| 171 } | 206 } |
| 172 | 207 |
| 173 test_topLevelVar_name2() { | 208 test_TopLevelVariableDeclaration_untyped_name() { |
| 209 // SimpleIdentifier VariableDeclaration VariableDeclarationList |
| 210 // TopLevelVariableDeclaration |
| 174 addTestSource('class A {} var ^'); | 211 addTestSource('class A {} var ^'); |
| 175 expect(computeFast(), isTrue); | 212 expect(computeFast(), isTrue); |
| 176 assertNotSuggested('A'); | 213 assertNotSuggested('A'); |
| 177 } | 214 } |
| 178 | 215 |
| 179 test_variableDeclaration() { | 216 test_VariableDeclarationStatement_name() { |
| 180 addTestSource('main() {int a = 1, b = 2 + ^;}'); | 217 // SimpleIdentifier VariableDeclaration VariableDeclarationList |
| 218 // VariableDeclarationStatement |
| 219 addTestSource('class _A {a() {var f; var ^}}'); |
| 181 expect(computeFast(), isTrue); | 220 expect(computeFast(), isTrue); |
| 182 assertSuggestLocalVariable('a', 'int'); | 221 assertNotSuggested('A'); |
| 183 assertNotSuggested('b'); | 222 assertNotSuggested('a'); |
| 223 assertNotSuggested('f'); |
| 224 } |
| 225 |
| 226 test_VariableDeclaration_RHS() { |
| 227 |
| 228 // VariableDeclaration VariableDeclarationList VariableDeclarationStat
ement |
| 229 addTestSource('class A {a() {var f; {var x;} var e = ^ var g;}}'); |
| 230 expect(computeFast(), isTrue); |
| 231 assertSuggestClass('A'); |
| 232 assertSuggestLocalVariable('f', null); |
| 233 assertNotSuggested('g'); |
| 234 assertNotSuggested('x'); |
| 184 } | 235 } |
| 185 } | 236 } |
| OLD | NEW |