Add failing tests of operator semantics under nnbd

Change-Id: I3a3f366083d8b1e68a78670b199864172d43cc35
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/101840
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/equality_expressions_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/equality_expressions_test.dart
new file mode 100644
index 0000000..c78c359
--- /dev/null
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/equality_expressions_test.dart
@@ -0,0 +1,80 @@
+// 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:analyzer/dart/analysis/features.dart';
+import 'package:analyzer/src/generated/engine.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../driver_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(EqualTest);
+    defineReflectiveTests(EqualWithNnbdTest);
+    defineReflectiveTests(NotEqualTest);
+    defineReflectiveTests(NotEqualWithNnbdTest);
+  });
+}
+
+@reflectiveTest
+class EqualTest extends DriverResolutionTest {
+  test_simple() async {
+    addTestFile('''
+void f(Object a, Object b) {
+  var c = a == b;
+  print(c);
+}
+''');
+    await resolveTestFile();
+    assertType(findNode.simple('c)'), 'bool');
+  }
+}
+
+@reflectiveTest
+class EqualWithNnbdTest extends EqualTest {
+  @override
+  AnalysisOptionsImpl get analysisOptions => AnalysisOptionsImpl()
+    ..contextFeatures = new FeatureSet.forTesting(
+        sdkVersion: '2.3.0', additionalFeatures: [Feature.non_nullable]);
+
+  @override
+  bool get typeToStringWithNullability => true;
+
+  @failingTest
+  @override
+  test_simple() async {
+    await super.test_simple();
+  }
+}
+
+@reflectiveTest
+class NotEqualTest extends DriverResolutionTest {
+  test_simple() async {
+    addTestFile('''
+void f(Object a, Object b) {
+  var c = a != b;
+  print(c);
+}
+''');
+    await resolveTestFile();
+    assertType(findNode.simple('c)'), 'bool');
+  }
+}
+
+@reflectiveTest
+class NotEqualWithNnbdTest extends NotEqualTest {
+  @override
+  AnalysisOptionsImpl get analysisOptions => AnalysisOptionsImpl()
+    ..contextFeatures = new FeatureSet.forTesting(
+        sdkVersion: '2.3.0', additionalFeatures: [Feature.non_nullable]);
+
+  @override
+  bool get typeToStringWithNullability => true;
+
+  @failingTest
+  @override
+  test_simple() async {
+    await super.test_simple();
+  }
+}
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/logical_boolean_expressions_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/logical_boolean_expressions_test.dart
new file mode 100644
index 0000000..3c2e6ae
--- /dev/null
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/logical_boolean_expressions_test.dart
@@ -0,0 +1,80 @@
+// 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:analyzer/dart/analysis/features.dart';
+import 'package:analyzer/src/generated/engine.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../driver_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(LogicalAndTest);
+    defineReflectiveTests(LogicalAndWithNnbdTest);
+    defineReflectiveTests(LogicalOrTest);
+    defineReflectiveTests(LogicalOrWithNnbdTest);
+  });
+}
+
+@reflectiveTest
+class LogicalAndTest extends DriverResolutionTest {
+  test_simple() async {
+    addTestFile('''
+void f(bool a, bool b) {
+  var c = a && b;
+  print(c);
+}
+''');
+    await resolveTestFile();
+    assertType(findNode.simple('c)'), 'bool');
+  }
+}
+
+@reflectiveTest
+class LogicalAndWithNnbdTest extends LogicalAndTest {
+  @override
+  AnalysisOptionsImpl get analysisOptions => AnalysisOptionsImpl()
+    ..contextFeatures = new FeatureSet.forTesting(
+        sdkVersion: '2.3.0', additionalFeatures: [Feature.non_nullable]);
+
+  @override
+  bool get typeToStringWithNullability => true;
+
+  @failingTest
+  @override
+  test_simple() async {
+    await super.test_simple();
+  }
+}
+
+@reflectiveTest
+class LogicalOrTest extends DriverResolutionTest {
+  test_simple() async {
+    addTestFile('''
+void f(bool a, bool b) {
+  var c = a || b;
+  print(c);
+}
+''');
+    await resolveTestFile();
+    assertType(findNode.simple('c)'), 'bool');
+  }
+}
+
+@reflectiveTest
+class LogicalOrWithNnbdTest extends LogicalOrTest {
+  @override
+  AnalysisOptionsImpl get analysisOptions => AnalysisOptionsImpl()
+    ..contextFeatures = new FeatureSet.forTesting(
+        sdkVersion: '2.3.0', additionalFeatures: [Feature.non_nullable]);
+
+  @override
+  bool get typeToStringWithNullability => true;
+
+  @failingTest
+  @override
+  test_simple() async {
+    await super.test_simple();
+  }
+}
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/prefix_expressions_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/prefix_expressions_test.dart
new file mode 100644
index 0000000..2857a42
--- /dev/null
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/prefix_expressions_test.dart
@@ -0,0 +1,47 @@
+// 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:analyzer/dart/analysis/features.dart';
+import 'package:analyzer/src/generated/engine.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../driver_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(NotTest);
+    defineReflectiveTests(NotWithNnbdTest);
+  });
+}
+
+@reflectiveTest
+class NotTest extends DriverResolutionTest {
+  test_simple() async {
+    addTestFile('''
+void f(bool a) {
+  var b = !a;
+  print(b);
+}
+''');
+    await resolveTestFile();
+    assertType(findNode.simple('b)'), 'bool');
+  }
+}
+
+@reflectiveTest
+class NotWithNnbdTest extends NotTest {
+  @override
+  AnalysisOptionsImpl get analysisOptions => AnalysisOptionsImpl()
+    ..contextFeatures = new FeatureSet.forTesting(
+        sdkVersion: '2.3.0', additionalFeatures: [Feature.non_nullable]);
+
+  @override
+  bool get typeToStringWithNullability => true;
+
+  @failingTest
+  @override
+  test_simple() async {
+    await super.test_simple();
+  }
+}
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/test_all.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/test_all.dart
index 54ada38..8d7aae0 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/test_all.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/test_all.dart
@@ -4,14 +4,22 @@
 
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
+import 'equality_expressions_test.dart' as equality_expressions;
 import 'list_literal_test.dart' as list_literal;
+import 'logical_boolean_expressions_test.dart' as logical_boolean_expressions;
 import 'map_literal_test.dart' as map_literal;
+import 'prefix_expressions_test.dart' as prefix_expressions;
 import 'set_literal_test.dart' as set_literal;
+import 'type_test_expressions_test.dart' as type_test_expressions;
 
 main() {
   defineReflectiveSuite(() {
+    equality_expressions.main();
     list_literal.main();
+    logical_boolean_expressions.main();
     map_literal.main();
+    prefix_expressions.main();
     set_literal.main();
+    type_test_expressions.main();
   }, name: 'type inference');
 }
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/type_test_expressions_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/type_test_expressions_test.dart
new file mode 100644
index 0000000..4d51ccc
--- /dev/null
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/type_test_expressions_test.dart
@@ -0,0 +1,80 @@
+// 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:analyzer/dart/analysis/features.dart';
+import 'package:analyzer/src/generated/engine.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../driver_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(IsNotTest);
+    defineReflectiveTests(IsNotWithNnbdTest);
+    defineReflectiveTests(IsTest);
+    defineReflectiveTests(IsWithNnbdTest);
+  });
+}
+
+@reflectiveTest
+class IsNotTest extends DriverResolutionTest {
+  test_simple() async {
+    addTestFile('''
+void f(Object a) {
+  var b = a is! String;
+  print(b);
+}
+''');
+    await resolveTestFile();
+    assertType(findNode.simple('b)'), 'bool');
+  }
+}
+
+@reflectiveTest
+class IsNotWithNnbdTest extends IsNotTest {
+  @override
+  AnalysisOptionsImpl get analysisOptions => AnalysisOptionsImpl()
+    ..contextFeatures = new FeatureSet.forTesting(
+        sdkVersion: '2.3.0', additionalFeatures: [Feature.non_nullable]);
+
+  @override
+  bool get typeToStringWithNullability => true;
+
+  @failingTest
+  @override
+  test_simple() async {
+    await super.test_simple();
+  }
+}
+
+@reflectiveTest
+class IsTest extends DriverResolutionTest {
+  test_simple() async {
+    addTestFile('''
+void f(Object a) {
+  var b = a is String;
+  print(b);
+}
+''');
+    await resolveTestFile();
+    assertType(findNode.simple('b)'), 'bool');
+  }
+}
+
+@reflectiveTest
+class IsWithNnbdTest extends IsTest {
+  @override
+  AnalysisOptionsImpl get analysisOptions => AnalysisOptionsImpl()
+    ..contextFeatures = new FeatureSet.forTesting(
+        sdkVersion: '2.3.0', additionalFeatures: [Feature.non_nullable]);
+
+  @override
+  bool get typeToStringWithNullability => true;
+
+  @failingTest
+  @override
+  test_simple() async {
+    await super.test_simple();
+  }
+}