| Index: pkg/analysis_server/test/services/completion/keyword_contributor_test.dart
|
| diff --git a/pkg/analysis_server/test/services/completion/keyword_contributor_test.dart b/pkg/analysis_server/test/services/completion/keyword_contributor_test.dart
|
| index c41cee72c535dc284650132793b5ee4f53329b87..bf3c027f3d80f27ce01b6075a8666663dbec6aee 100644
|
| --- a/pkg/analysis_server/test/services/completion/keyword_contributor_test.dart
|
| +++ b/pkg/analysis_server/test/services/completion/keyword_contributor_test.dart
|
| @@ -79,6 +79,28 @@ class KeywordContributorTest extends AbstractCompletionTest {
|
|
|
| static const List<Keyword> STMT_START_IN_CLASS = const [
|
| Keyword.ASSERT,
|
| + Keyword.CONST,
|
| + Keyword.DO,
|
| + Keyword.FINAL,
|
| + Keyword.FOR,
|
| + Keyword.IF,
|
| + Keyword.NEW,
|
| + Keyword.RETHROW,
|
| + Keyword.RETURN,
|
| + Keyword.SUPER,
|
| + Keyword.SWITCH,
|
| + Keyword.THIS,
|
| + Keyword.THROW,
|
| + Keyword.TRY,
|
| + Keyword.VAR,
|
| + Keyword.VOID,
|
| + Keyword.WHILE
|
| + ];
|
| +
|
| + static const List<Keyword> STMT_START_IN_LOOP_IN_CLASS = const [
|
| + Keyword.ASSERT,
|
| + Keyword.BREAK,
|
| + Keyword.CONST,
|
| Keyword.CONTINUE,
|
| Keyword.DO,
|
| Keyword.FINAL,
|
| @@ -99,8 +121,9 @@ class KeywordContributorTest extends AbstractCompletionTest {
|
|
|
| static const List<Keyword> STMT_START_IN_SWITCH_IN_CLASS = const [
|
| Keyword.ASSERT,
|
| + Keyword.BREAK,
|
| Keyword.CASE,
|
| - Keyword.CONTINUE,
|
| + Keyword.CONST,
|
| Keyword.DEFAULT,
|
| Keyword.DO,
|
| Keyword.FINAL,
|
| @@ -121,8 +144,9 @@ class KeywordContributorTest extends AbstractCompletionTest {
|
|
|
| static const List<Keyword> STMT_START_IN_SWITCH_OUTSIDE_CLASS = const [
|
| Keyword.ASSERT,
|
| + Keyword.BREAK,
|
| Keyword.CASE,
|
| - Keyword.CONTINUE,
|
| + Keyword.CONST,
|
| Keyword.DEFAULT,
|
| Keyword.DO,
|
| Keyword.FINAL,
|
| @@ -141,6 +165,26 @@ class KeywordContributorTest extends AbstractCompletionTest {
|
|
|
| static const List<Keyword> STMT_START_OUTSIDE_CLASS = const [
|
| Keyword.ASSERT,
|
| + Keyword.CONST,
|
| + Keyword.DO,
|
| + Keyword.FINAL,
|
| + Keyword.FOR,
|
| + Keyword.IF,
|
| + Keyword.NEW,
|
| + Keyword.RETHROW,
|
| + Keyword.RETURN,
|
| + Keyword.SWITCH,
|
| + Keyword.THROW,
|
| + Keyword.TRY,
|
| + Keyword.VAR,
|
| + Keyword.VOID,
|
| + Keyword.WHILE
|
| + ];
|
| +
|
| + static const List<Keyword> STMT_START_IN_LOOP_OUTSIDE_CLASS = const [
|
| + Keyword.ASSERT,
|
| + Keyword.BREAK,
|
| + Keyword.CONST,
|
| Keyword.CONTINUE,
|
| Keyword.DO,
|
| Keyword.FINAL,
|
| @@ -158,6 +202,7 @@ class KeywordContributorTest extends AbstractCompletionTest {
|
| ];
|
|
|
| static const List<Keyword> EXPRESSION_START_INSTANCE = const [
|
| + Keyword.CONST,
|
| Keyword.FALSE,
|
| Keyword.NEW,
|
| Keyword.NULL,
|
| @@ -167,6 +212,7 @@ class KeywordContributorTest extends AbstractCompletionTest {
|
| ];
|
|
|
| static const List<Keyword> EXPRESSION_START_NO_INSTANCE = const [
|
| + Keyword.CONST,
|
| Keyword.FALSE,
|
| Keyword.NEW,
|
| Keyword.NULL,
|
| @@ -539,6 +585,20 @@ class KeywordContributorTest extends AbstractCompletionTest {
|
| assertSuggestKeywords([Keyword.THIS]);
|
| }
|
|
|
| + test_do_break_continue() {
|
| + addTestSource('main() {do {^} while (true);}');
|
| + expect(computeFast(), isTrue);
|
| + assertSuggestKeywords(STMT_START_IN_LOOP_OUTSIDE_CLASS,
|
| + relevance: DART_RELEVANCE_KEYWORD);
|
| + }
|
| +
|
| + test_do_break_continue2() {
|
| + addTestSource('class A {foo() {do {^} while (true);}}');
|
| + expect(computeFast(), isTrue);
|
| + assertSuggestKeywords(STMT_START_IN_LOOP_IN_CLASS,
|
| + relevance: DART_RELEVANCE_KEYWORD);
|
| + }
|
| +
|
| test_empty() {
|
| addTestSource('^');
|
| expect(computeFast(), isTrue);
|
| @@ -546,6 +606,20 @@ class KeywordContributorTest extends AbstractCompletionTest {
|
| relevance: DART_RELEVANCE_HIGH);
|
| }
|
|
|
| + test_for_break_continue() {
|
| + addTestSource('main() {for (int x in myList) {^}}');
|
| + expect(computeFast(), isTrue);
|
| + assertSuggestKeywords(STMT_START_IN_LOOP_OUTSIDE_CLASS,
|
| + relevance: DART_RELEVANCE_KEYWORD);
|
| + }
|
| +
|
| + test_for_break_continue2() {
|
| + addTestSource('class A {foo() {for (int x in myList) {^}}}');
|
| + expect(computeFast(), isTrue);
|
| + assertSuggestKeywords(STMT_START_IN_LOOP_IN_CLASS,
|
| + relevance: DART_RELEVANCE_KEYWORD);
|
| + }
|
| +
|
| test_for_expression_in() {
|
| addTestSource('main() {for (int x i^)}');
|
| expect(computeFast(), isTrue);
|
| @@ -561,15 +635,13 @@ class KeywordContributorTest extends AbstractCompletionTest {
|
| test_for_expression_init() {
|
| addTestSource('main() {for (int x = i^)}');
|
| expect(computeFast(), isTrue);
|
| - assertSuggestKeywords(
|
| - [Keyword.FALSE, Keyword.NEW, Keyword.NULL, Keyword.TRUE]);
|
| + assertSuggestKeywords(EXPRESSION_START_NO_INSTANCE);
|
| }
|
|
|
| test_for_expression_init2() {
|
| addTestSource('main() {for (int x = in^)}');
|
| expect(computeFast(), isTrue);
|
| - assertSuggestKeywords(
|
| - [Keyword.FALSE, Keyword.NEW, Keyword.NULL, Keyword.TRUE]);
|
| + assertSuggestKeywords(EXPRESSION_START_NO_INSTANCE);
|
| }
|
|
|
| test_function_async() {
|
| @@ -960,6 +1032,12 @@ class A {
|
| expect(request.replacementLength, 3);
|
| }
|
|
|
| + test_is_expression() {
|
| + addTestSource('main() {if (x is^)}');
|
| + expect(computeFast(), isTrue);
|
| + assertSuggestKeywords([Keyword.IS], relevance: DART_RELEVANCE_HIGH);
|
| + }
|
| +
|
| test_library() {
|
| addTestSource('library foo;^');
|
| expect(computeFast(), isTrue);
|
| @@ -1291,6 +1369,20 @@ class A {
|
| assertSuggestKeywords(STMT_START_IN_SWITCH_IN_CLASS);
|
| }
|
|
|
| + test_while_break_continue() {
|
| + addTestSource('main() {while (true) {^}}');
|
| + expect(computeFast(), isTrue);
|
| + assertSuggestKeywords(STMT_START_IN_LOOP_OUTSIDE_CLASS,
|
| + relevance: DART_RELEVANCE_KEYWORD);
|
| + }
|
| +
|
| + test_while_break_continue2() {
|
| + addTestSource('class A {foo() {while (true) {^}}}');
|
| + expect(computeFast(), isTrue);
|
| + assertSuggestKeywords(STMT_START_IN_LOOP_IN_CLASS,
|
| + relevance: DART_RELEVANCE_KEYWORD);
|
| + }
|
| +
|
| void _appendCompletions(
|
| StringBuffer msg, Iterable<String> completions, Iterable<String> other) {
|
| List<String> sorted = completions.toList();
|
|
|