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();
+ }
+}