Add support for and a few additional CFE-based tests

Change-Id: I8e52f41cc54341c4321e688ae46a6392e69f98ab
Reviewed-on: https://dart-review.googlesource.com/68500
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analysis_server/test/abstract_context.dart b/pkg/analysis_server/test/abstract_context.dart
index a270d2c..d57fbdb 100644
--- a/pkg/analysis_server/test/abstract_context.dart
+++ b/pkg/analysis_server/test/abstract_context.dart
@@ -60,6 +60,11 @@
 
   bool get previewDart2 => driver.analysisOptions.previewDart2;
 
+  /**
+   * Return `true` to enable the Dart 2.0 Common Front End.
+   */
+  bool get useCFE => false;
+
   void addFlutterPackage() {
     addMetaPackageSource();
     Folder libFolder = configureFlutterPackage(resourceProvider);
@@ -140,7 +145,8 @@
         new ContextRoot(resourceProvider.convertPath('/project'), [],
             pathContext: resourceProvider.pathContext),
         sourceFactory,
-        new AnalysisOptionsImpl());
+        new AnalysisOptionsImpl(),
+        enableKernelDriver: useCFE);
     scheduler.start();
     AnalysisEngine.instance.logger = PrintLogger.instance;
   }
diff --git a/pkg/analysis_server/test/integration/edit/get_statement_completion_test.dart b/pkg/analysis_server/test/integration/edit/get_statement_completion_test.dart
index d462006..347d0df 100644
--- a/pkg/analysis_server/test/integration/edit/get_statement_completion_test.dart
+++ b/pkg/analysis_server/test/integration/edit/get_statement_completion_test.dart
@@ -61,5 +61,5 @@
 
   @override
   @failingTest
-  Future test_statement_completion() => super.test_statement_completion();
+  test_statement_completion() => super.test_statement_completion();
 }
diff --git a/pkg/analysis_server/test/services/completion/postfix/postfix_completion_test.dart b/pkg/analysis_server/test/services/completion/postfix/postfix_completion_test.dart
index 244b2b2..6d35673 100644
--- a/pkg/analysis_server/test/services/completion/postfix/postfix_completion_test.dart
+++ b/pkg/analysis_server/test/services/completion/postfix/postfix_completion_test.dart
@@ -13,15 +13,25 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(_AssertTest);
+    defineReflectiveTests(_AssertTest_UseCfe);
     defineReflectiveTests(_ForTest);
+    defineReflectiveTests(_ForTest_UseCfe);
     defineReflectiveTests(_NegateTest);
+    defineReflectiveTests(_NegateTest_UseCfe);
     defineReflectiveTests(_IfTest);
+    defineReflectiveTests(_IfTest_UseCfe);
     defineReflectiveTests(_NotNullTest);
+    defineReflectiveTests(_NotNullTest_UseCfe);
     defineReflectiveTests(_ParenTest);
+    defineReflectiveTests(_ParenTest_UseCfe);
     defineReflectiveTests(_ReturnTest);
+    defineReflectiveTests(_ReturnTest_UseCfe);
     defineReflectiveTests(_SwitchTest);
+    defineReflectiveTests(_SwitchTest_UseCfe);
     defineReflectiveTests(_TryTest);
+    defineReflectiveTests(_TryTest_UseCfe);
     defineReflectiveTests(_WhileTest);
+    defineReflectiveTests(_WhileTest_UseCfe);
   });
 }
 
@@ -137,6 +147,12 @@
 }
 
 @reflectiveTest
+class _AssertTest_UseCfe extends _AssertTest {
+  @override
+  bool get useCFE => true;
+}
+
+@reflectiveTest
 class _ForTest extends PostfixCompletionTest {
   @failingTest
   test_for_invalid() async {
@@ -267,6 +283,12 @@
 }
 
 @reflectiveTest
+class _ForTest_UseCfe extends _ForTest {
+  @override
+  bool get useCFE => true;
+}
+
+@reflectiveTest
 class _IfTest extends PostfixCompletionTest {
   test_Else() async {
     await _prepareCompletion('.else', '''
@@ -324,6 +346,12 @@
 }
 
 @reflectiveTest
+class _IfTest_UseCfe extends _IfTest {
+  @override
+  bool get useCFE => true;
+}
+
+@reflectiveTest
 class _NegateTest extends PostfixCompletionTest {
   test_negate() async {
     await _prepareCompletion('.not', '''
@@ -427,6 +455,12 @@
 }
 
 @reflectiveTest
+class _NegateTest_UseCfe extends _NegateTest {
+  @override
+  bool get useCFE => true;
+}
+
+@reflectiveTest
 class _NotNullTest extends PostfixCompletionTest {
   test_nn() async {
     await _prepareCompletion('.nn', '''
@@ -535,6 +569,12 @@
 }
 
 @reflectiveTest
+class _NotNullTest_UseCfe extends _NotNullTest {
+  @override
+  bool get useCFE => true;
+}
+
+@reflectiveTest
 class _ParenTest extends PostfixCompletionTest {
   test_paren() async {
     await _prepareCompletion('.par', '''
@@ -551,6 +591,12 @@
 }
 
 @reflectiveTest
+class _ParenTest_UseCfe extends _ParenTest {
+  @override
+  bool get useCFE => true;
+}
+
+@reflectiveTest
 class _ReturnTest extends PostfixCompletionTest {
   test_return() async {
     await _prepareCompletion('.return', '''
@@ -567,6 +613,12 @@
 }
 
 @reflectiveTest
+class _ReturnTest_UseCfe extends _ReturnTest {
+  @override
+  bool get useCFE => true;
+}
+
+@reflectiveTest
 class _SwitchTest extends PostfixCompletionTest {
   test_return() async {
     await _prepareCompletion('.switch', '''
@@ -585,6 +637,12 @@
 }
 
 @reflectiveTest
+class _SwitchTest_UseCfe extends _SwitchTest {
+  @override
+  bool get useCFE => true;
+}
+
+@reflectiveTest
 class _TryTest extends PostfixCompletionTest {
   test_try() async {
     await _prepareCompletion('.try', '''
@@ -691,6 +749,12 @@
 }
 
 @reflectiveTest
+class _TryTest_UseCfe extends _TryTest {
+  @override
+  bool get useCFE => true;
+}
+
+@reflectiveTest
 class _WhileTest extends PostfixCompletionTest {
   test_while() async {
     await _prepareCompletion('.while', '''
@@ -707,3 +771,9 @@
 ''');
   }
 }
+
+@reflectiveTest
+class _WhileTest_UseCfe extends _WhileTest {
+  @override
+  bool get useCFE => true;
+}
diff --git a/pkg/analysis_server/test/services/completion/statement/statement_completion_test.dart b/pkg/analysis_server/test/services/completion/statement/statement_completion_test.dart
index e870159..bf2de54 100644
--- a/pkg/analysis_server/test/services/completion/statement/statement_completion_test.dart
+++ b/pkg/analysis_server/test/services/completion/statement/statement_completion_test.dart
@@ -13,16 +13,27 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(_DeclarationCompletionTest);
+    defineReflectiveTests(_DeclarationCompletionTest_UseCfe);
     defineReflectiveTests(_ControlFlowCompletionTest);
+    defineReflectiveTests(_ControlFlowCompletionTest_UseCfe);
     defineReflectiveTests(_DoCompletionTest);
+    defineReflectiveTests(_DoCompletionTest_UseCfe);
     defineReflectiveTests(_ExpressionCompletionTest);
+    defineReflectiveTests(_ExpressionCompletionTest_UseCfe);
     defineReflectiveTests(_ForCompletionTest);
+    defineReflectiveTests(_ForCompletionTest_UseCfe);
     defineReflectiveTests(_ForEachCompletionTest);
+    defineReflectiveTests(_ForEachCompletionTest_UseCfe);
     defineReflectiveTests(_IfCompletionTest);
+    defineReflectiveTests(_IfCompletionTest_UseCfe);
     defineReflectiveTests(_SimpleCompletionTest);
+    defineReflectiveTests(_SimpleCompletionTest_UseCfe);
     defineReflectiveTests(_SwitchCompletionTest);
+    defineReflectiveTests(_SwitchCompletionTest_UseCfe);
     defineReflectiveTests(_TryCompletionTest);
+    defineReflectiveTests(_TryCompletionTest_UseCfe);
     defineReflectiveTests(_WhileCompletionTest);
+    defineReflectiveTests(_WhileCompletionTest_UseCfe);
   });
 }
 
@@ -286,6 +297,12 @@
 }
 
 @reflectiveTest
+class _ControlFlowCompletionTest_UseCfe extends _ControlFlowCompletionTest {
+  @override
+  bool get useCFE => true;
+}
+
+@reflectiveTest
 class _DeclarationCompletionTest extends StatementCompletionTest {
   test_classNameNoBody() async {
     await _prepareCompletion(
@@ -453,6 +470,12 @@
 }
 
 @reflectiveTest
+class _DeclarationCompletionTest_UseCfe extends _DeclarationCompletionTest {
+  @override
+  bool get useCFE => true;
+}
+
+@reflectiveTest
 class _DoCompletionTest extends StatementCompletionTest {
   test_emptyCondition() async {
     await _prepareCompletion(
@@ -585,6 +608,16 @@
 }
 
 @reflectiveTest
+class _DoCompletionTest_UseCfe extends _DoCompletionTest {
+  @override
+  bool get useCFE => true;
+
+  @failingTest
+  @override
+  test_keywordOnly() => super.test_keywordOnly();
+}
+
+@reflectiveTest
 class _ExpressionCompletionTest extends StatementCompletionTest {
   test_listAssign() async {
     await _prepareCompletion(
@@ -802,6 +835,12 @@
 }
 
 @reflectiveTest
+class _ExpressionCompletionTest_UseCfe extends _ExpressionCompletionTest {
+  @override
+  bool get useCFE => true;
+}
+
+@reflectiveTest
 class _ForCompletionTest extends StatementCompletionTest {
   test_emptyCondition() async {
     await _prepareCompletion(
@@ -1040,6 +1079,20 @@
 }
 
 @reflectiveTest
+class _ForCompletionTest_UseCfe extends _ForCompletionTest {
+  @override
+  bool get useCFE => true;
+
+  @failingTest
+  @override
+  test_emptyInitializers() => super.test_emptyInitializers();
+
+  @failingTest
+  @override
+  test_emptyInitializersAfterBody() => super.test_emptyInitializersAfterBody();
+}
+
+@reflectiveTest
 class _ForEachCompletionTest extends StatementCompletionTest {
   test_emptyIdentifier() async {
     await _prepareCompletion(
@@ -1133,6 +1186,12 @@
 }
 
 @reflectiveTest
+class _ForEachCompletionTest_UseCfe extends _ForEachCompletionTest {
+  @override
+  bool get useCFE => true;
+}
+
+@reflectiveTest
 class _IfCompletionTest extends StatementCompletionTest {
   test_afterCondition() async {
     await _prepareCompletion(
@@ -1353,6 +1412,16 @@
 }
 
 @reflectiveTest
+class _IfCompletionTest_UseCfe extends _IfCompletionTest {
+  @override
+  bool get useCFE => true;
+
+  @failingTest
+  @override
+  test_keywordOnly() => super.test_keywordOnly();
+}
+
+@reflectiveTest
 class _SimpleCompletionTest extends StatementCompletionTest {
   test_enter() async {
     await _prepareCompletion(
@@ -1570,6 +1639,12 @@
 }
 
 @reflectiveTest
+class _SimpleCompletionTest_UseCfe extends _SimpleCompletionTest {
+  @override
+  bool get useCFE => true;
+}
+
+@reflectiveTest
 class _SwitchCompletionTest extends StatementCompletionTest {
   test_caseNoColon() async {
     await _prepareCompletion(
@@ -1682,6 +1757,12 @@
 }
 
 @reflectiveTest
+class _SwitchCompletionTest_UseCfe extends _SwitchCompletionTest {
+  @override
+  bool get useCFE => true;
+}
+
+@reflectiveTest
 class _TryCompletionTest extends StatementCompletionTest {
   test_catchOnly() async {
     await _prepareCompletion(
@@ -1938,6 +2019,12 @@
 }
 
 @reflectiveTest
+class _TryCompletionTest_UseCfe extends _TryCompletionTest {
+  @override
+  bool get useCFE => true;
+}
+
+@reflectiveTest
 class _WhileCompletionTest extends StatementCompletionTest {
   /*
      The implementation of completion for while-statements is shared with
@@ -1967,3 +2054,13 @@
         (s) => _after(s, 'while ('));
   }
 }
+
+@reflectiveTest
+class _WhileCompletionTest_UseCfe extends _WhileCompletionTest {
+  @override
+  bool get useCFE => true;
+
+  @failingTest
+  @override
+  test_keywordOnly() => super.test_keywordOnly();
+}
diff --git a/pkg/analysis_server/test/services/correction/assist_test.dart b/pkg/analysis_server/test/services/correction/assist_test.dart
index e165000..1fe73ee 100644
--- a/pkg/analysis_server/test/services/correction/assist_test.dart
+++ b/pkg/analysis_server/test/services/correction/assist_test.dart
@@ -25,6 +25,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AssistProcessorTest);
+    defineReflectiveTests(AssistProcessorTest_UseCFE);
   });
 }
 
@@ -6309,6 +6310,316 @@
   }
 }
 
+@reflectiveTest
+class AssistProcessorTest_UseCFE extends AssistProcessorTest {
+  @override
+  bool get useCFE => true;
+
+  // Many of these tests are failing because the CFE is not able to find the
+  // flutter package. It seems likely that there is a problem with the way the
+  // tests (or some underlying layer) is passing package resolution to the CFE.
+
+  @failingTest
+  @override
+  test_addTypeAnnotation_parameter_BAD_hasExplicitType() =>
+      super.test_addTypeAnnotation_parameter_BAD_hasExplicitType();
+
+  @failingTest
+  @override
+  test_addTypeAnnotation_parameter_BAD_noPropagatedType() =>
+      super.test_addTypeAnnotation_parameter_BAD_noPropagatedType();
+
+  @failingTest
+  @override
+  test_addTypeAnnotation_parameter_OK() =>
+      super.test_addTypeAnnotation_parameter_OK();
+
+  @failingTest
+  @override
+  test_convertToFinalField_OK_hasOverride() =>
+      super.test_convertToFinalField_OK_hasOverride();
+
+  @failingTest
+  @override
+  test_convertToFunctionSyntax_BAD_functionTypedParameter_insideParameterList() =>
+      super
+          .test_convertToFunctionSyntax_BAD_functionTypedParameter_insideParameterList();
+
+  @failingTest
+  @override
+  test_convertToFunctionSyntax_BAD_functionTypedParameter_noParameterTypes() =>
+      super
+          .test_convertToFunctionSyntax_BAD_functionTypedParameter_noParameterTypes();
+
+  @failingTest
+  @override
+  test_convertToFunctionSyntax_OK_functionTypedParameter_noReturnType_noTypeParameters() =>
+      super
+          .test_convertToFunctionSyntax_OK_functionTypedParameter_noReturnType_noTypeParameters();
+
+  @failingTest
+  @override
+  test_convertToFunctionSyntax_OK_functionTypedParameter_returnType() =>
+      super.test_convertToFunctionSyntax_OK_functionTypedParameter_returnType();
+
+  @failingTest
+  @override
+  test_convertToGetter_OK() => super.test_convertToGetter_OK();
+
+  @failingTest
+  @override
+  test_flutterConvertToChildren_BAD_childUnresolved() =>
+      super.test_flutterConvertToChildren_BAD_childUnresolved();
+
+  @failingTest
+  @override
+  test_flutterConvertToChildren_BAD_notOnChild() =>
+      super.test_flutterConvertToChildren_BAD_notOnChild();
+
+  @failingTest
+  @override
+  test_flutterConvertToChildren_OK_multiLine() =>
+      super.test_flutterConvertToChildren_OK_multiLine();
+
+  @failingTest
+  @override
+  test_flutterConvertToChildren_OK_newlineChild() =>
+      super.test_flutterConvertToChildren_OK_newlineChild();
+
+  @failingTest
+  @override
+  test_flutterConvertToChildren_OK_singleLine() =>
+      super.test_flutterConvertToChildren_OK_singleLine();
+
+  @failingTest
+  @override
+  test_flutterConvertToStatefulWidget_BAD_notClass() =>
+      super.test_flutterConvertToStatefulWidget_BAD_notClass();
+
+  @failingTest
+  @override
+  test_flutterConvertToStatefulWidget_BAD_notStatelessWidget() =>
+      super.test_flutterConvertToStatefulWidget_BAD_notStatelessWidget();
+
+  @failingTest
+  @override
+  test_flutterConvertToStatefulWidget_BAD_notWidget() =>
+      super.test_flutterConvertToStatefulWidget_BAD_notWidget();
+
+  @failingTest
+  @override
+  test_flutterConvertToStatefulWidget_OK() =>
+      super.test_flutterConvertToStatefulWidget_OK();
+
+  @failingTest
+  @override
+  test_flutterConvertToStatefulWidget_OK_empty() =>
+      super.test_flutterConvertToStatefulWidget_OK_empty();
+
+  @failingTest
+  @override
+  test_flutterConvertToStatefulWidget_OK_fields() =>
+      super.test_flutterConvertToStatefulWidget_OK_fields();
+
+  @failingTest
+  @override
+  test_flutterConvertToStatefulWidget_OK_getters() =>
+      super.test_flutterConvertToStatefulWidget_OK_getters();
+
+  @failingTest
+  @override
+  test_flutterConvertToStatefulWidget_OK_methods() =>
+      super.test_flutterConvertToStatefulWidget_OK_methods();
+
+  @failingTest
+  @override
+  test_flutterConvertToStatefulWidget_OK_tail() =>
+      super.test_flutterConvertToStatefulWidget_OK_tail();
+
+  @failingTest
+  @override
+  test_flutterMoveWidgetDown_BAD_last() =>
+      super.test_flutterMoveWidgetDown_BAD_last();
+
+  @failingTest
+  @override
+  test_flutterMoveWidgetDown_BAD_notInList() =>
+      super.test_flutterMoveWidgetDown_BAD_notInList();
+
+  @failingTest
+  @override
+  test_flutterMoveWidgetDown_OK() => super.test_flutterMoveWidgetDown_OK();
+
+  @failingTest
+  @override
+  test_flutterMoveWidgetUp_BAD_first() =>
+      super.test_flutterMoveWidgetUp_BAD_first();
+
+  @failingTest
+  @override
+  test_flutterMoveWidgetUp_BAD_notInList() =>
+      super.test_flutterMoveWidgetUp_BAD_notInList();
+
+  @failingTest
+  @override
+  test_flutterMoveWidgetUp_OK() => super.test_flutterMoveWidgetUp_OK();
+
+  @failingTest
+  @override
+  test_flutterRemoveWidget_BAD_childrenMultipleIntoChild() =>
+      super.test_flutterRemoveWidget_BAD_childrenMultipleIntoChild();
+
+  @failingTest
+  @override
+  test_flutterRemoveWidget_OK_childIntoChild_multiLine() =>
+      super.test_flutterRemoveWidget_OK_childIntoChild_multiLine();
+
+  @failingTest
+  @override
+  test_flutterRemoveWidget_OK_childIntoChild_singleLine() =>
+      super.test_flutterRemoveWidget_OK_childIntoChild_singleLine();
+
+  @failingTest
+  @override
+  test_flutterRemoveWidget_OK_childIntoChildren() =>
+      super.test_flutterRemoveWidget_OK_childIntoChildren();
+
+  @failingTest
+  @override
+  test_flutterRemoveWidget_OK_childrenOneIntoChild() =>
+      super.test_flutterRemoveWidget_OK_childrenOneIntoChild();
+
+  @failingTest
+  @override
+  test_flutterRemoveWidget_OK_childrenOneIntoReturn() =>
+      super.test_flutterRemoveWidget_OK_childrenOneIntoReturn();
+
+  @failingTest
+  @override
+  test_flutterRemoveWidget_OK_intoChildren() =>
+      super.test_flutterRemoveWidget_OK_intoChildren();
+
+  @failingTest
+  @override
+  test_flutterSwapWithChild_OK() => super.test_flutterSwapWithChild_OK();
+
+  @failingTest
+  @override
+  test_flutterSwapWithChild_OK_notFormatted() =>
+      super.test_flutterSwapWithChild_OK_notFormatted();
+
+  @failingTest
+  @override
+  test_flutterSwapWithParent_OK() => super.test_flutterSwapWithParent_OK();
+
+  @failingTest
+  @override
+  test_flutterSwapWithParent_OK_notFormatted() =>
+      super.test_flutterSwapWithParent_OK_notFormatted();
+
+  @failingTest
+  @override
+  test_flutterSwapWithParent_OK_outerIsInChildren() =>
+      super.test_flutterSwapWithParent_OK_outerIsInChildren();
+
+  @failingTest
+  @override
+  test_flutterWrapCenter_BAD_onCenter() =>
+      super.test_flutterWrapCenter_BAD_onCenter();
+
+  @failingTest
+  @override
+  test_flutterWrapCenter_OK() => super.test_flutterWrapCenter_OK();
+
+  @failingTest
+  @override
+  test_flutterWrapCenter_OK_implicitNew() =>
+      super.test_flutterWrapCenter_OK_implicitNew();
+
+  @failingTest
+  @override
+  test_flutterWrapCenter_OK_namedConstructor() =>
+      super.test_flutterWrapCenter_OK_namedConstructor();
+
+  @failingTest
+  @override
+  test_flutterWrapColumn_OK_coveredByWidget() =>
+      super.test_flutterWrapColumn_OK_coveredByWidget();
+
+  @failingTest
+  @override
+  test_flutterWrapColumn_OK_coversWidgets() =>
+      super.test_flutterWrapColumn_OK_coversWidgets();
+
+  @failingTest
+  @override
+  test_flutterWrapColumn_OK_implicitNew() =>
+      super.test_flutterWrapColumn_OK_implicitNew();
+
+  @failingTest
+  @override
+  test_flutterWrapPadding_BAD_onPadding() =>
+      super.test_flutterWrapPadding_BAD_onPadding();
+
+  @failingTest
+  @override
+  test_flutterWrapPadding_OK() => super.test_flutterWrapPadding_OK();
+
+  @failingTest
+  @override
+  test_flutterWrapRow_OK() => super.test_flutterWrapRow_OK();
+
+  @failingTest
+  @override
+  test_flutterWrapWidget_BAD_multiLine() =>
+      super.test_flutterWrapWidget_BAD_multiLine();
+
+  @failingTest
+  @override
+  test_flutterWrapWidget_BAD_singleLine() =>
+      super.test_flutterWrapWidget_BAD_singleLine();
+
+  @failingTest
+  @override
+  test_flutterWrapWidget_OK_multiLine() =>
+      super.test_flutterWrapWidget_OK_multiLine();
+
+  @failingTest
+  @override
+  test_flutterWrapWidget_OK_multiLines() =>
+      super.test_flutterWrapWidget_OK_multiLines();
+
+  @failingTest
+  @override
+  test_flutterWrapWidget_OK_multiLines_eol2() =>
+      super.test_flutterWrapWidget_OK_multiLines_eol2();
+
+  @failingTest
+  @override
+  test_flutterWrapWidget_OK_singleLine1() =>
+      super.test_flutterWrapWidget_OK_singleLine1();
+
+  @failingTest
+  @override
+  test_flutterWrapWidget_OK_singleLine2() =>
+      super.test_flutterWrapWidget_OK_singleLine2();
+
+  @failingTest
+  @override
+  test_flutterWrapWidget_OK_variable() =>
+      super.test_flutterWrapWidget_OK_variable();
+
+  @failingTest
+  @override
+  test_importAddShow_BAD_unresolvedUri() =>
+      super.test_importAddShow_BAD_unresolvedUri();
+
+  @failingTest
+  @override
+  test_removeTypeAnnotation_topLevelVariable_BAD_syntheticName() =>
+      super.test_removeTypeAnnotation_topLevelVariable_BAD_syntheticName();
+}
+
 class _DartAssistContextForValues implements DartAssistContext {
   @override
   final Source source;