Fixed Issue #460: tests for Null promotion added.
diff --git a/LanguageFeatures/nnbd/Null_promotion_A01_t01.dart b/LanguageFeatures/nnbd/Null_promotion_A01_t01.dart
new file mode 100644
index 0000000..59273e0
--- /dev/null
+++ b/LanguageFeatures/nnbd/Null_promotion_A01_t01.dart
@@ -0,0 +1,59 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion A check of the form [e == null] or of the form [e is Null] where
+ * [e] has static type [T] promotes the type of [e] to [Null] in the [true]
+ * continuation, and to [NonNull(T)] in the [false] continuation.
+ *
+ * @description Check that [e] is promoted to [Null] in the [true] condition.
+ * @author iarkh@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable,nonfunction-type-aliases
+
+import "../../Utils/expect.dart";
+
+class A {}
+class B<T> {}
+
+typedef AA = A;
+typedef AAA = A?;
+
+void checkme(var x, var expectedType) {
+  Expect.equals(Null, x.runtimeType);
+  Expect.isTrue(x == null);
+  Expect.isTrue(x is Null);
+  Expect.isFalse(x is NonNull(expectedType));
+}
+
+main() {
+  checkme(null, Null);
+
+  A ? a = null;
+  checkme(a, A);
+
+  B? b1 = null;
+  checkme(b1, B);
+
+  B<int> ? b2 = null;
+  checkme(b2, B);
+
+  dynamic ? d = null;
+  checkme(d, dynamic);
+
+  Object ? o = null;
+  checkme(o, Object);
+
+  Null n = null;
+  checkme(n, Null);
+
+  AA ? aa = null;
+  checkme(aa, AA);
+  checkme(aa, A);
+
+  AAA aaa = null;
+  checkme(aaa, AAA);
+  checkme(aaa, A);
+}
diff --git a/LanguageFeatures/nnbd/Null_promotion_A01_t02.dart b/LanguageFeatures/nnbd/Null_promotion_A01_t02.dart
new file mode 100644
index 0000000..b8a48b2
--- /dev/null
+++ b/LanguageFeatures/nnbd/Null_promotion_A01_t02.dart
@@ -0,0 +1,57 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion A check of the form [e == null] or of the form [e is Null] where
+ * [e] has static type [T] promotes the type of [e] to [Null] in the [true]
+ * continuation, and to [NonNull(T)] in the [false] continuation.
+ *
+ * @description Check that [e] is promoted to [NonNull(T)] in the [false]
+ * condition.
+ * @author iarkh@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable,nonfunction-type-aliases
+
+import "../../Utils/expect.dart";
+
+class A {}
+class B<T> {}
+
+typedef AA = A;
+typedef AAA = A?;
+
+void checkme(var x, var expectedType) {
+  Expect.isFalse(x == null);
+  Expect.isFalse(x is Null);
+  Expect.isTrue(x is NonNull(expectedType));
+  Expect.isTrue(x is NonNull(Object));
+}
+
+main() {
+  A a1 = A();
+  checkme(a1, A);
+
+  A? a2 = A();
+  checkme(a2, A);
+
+  B b1 = B();
+  checkme(b1, B);
+
+  B? b2 = B();
+  checkme(b2, B);
+
+  B<int> b3 = B<int>();
+  checkme(b3, B);
+
+  B<int> ? b4 = B<int>();
+  checkme(b4, B);
+
+  dynamic d = 12345;
+  checkme(d, int);
+  checkme(d, dynamic);
+
+  Object o = "14";
+  checkme(o, String);
+}
diff --git a/LanguageFeatures/nnbd/Null_promotion_A02_t01.dart b/LanguageFeatures/nnbd/Null_promotion_A02_t01.dart
new file mode 100644
index 0000000..8ad2012
--- /dev/null
+++ b/LanguageFeatures/nnbd/Null_promotion_A02_t01.dart
@@ -0,0 +1,50 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion A check of the form [e != null] or of the form [e is T] where [e]
+ * has static type [T?] promotes the type of [e] to [T] in the [true]
+ * continuation, and to [Null] in the [false] continuation.
+ *
+ * @description Check that type of [e] is promoted to [T] in the [true]
+ * condition.
+ * @author iarkh@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable,nonfunction-type-aliases
+
+import "../../Utils/expect.dart";
+
+class A {}
+class B<T> {}
+
+typedef AA = A;
+typedef AAA = A?;
+
+void checkme(var x, var expectedType) {
+  Expect.isTrue(x != null);
+  Expect.isTrue(x is expectedType);
+}
+
+main() {
+  A ? a = A();
+  checkme(a, A);
+
+  B ? b1 = B();
+  checkme(b1, B);
+
+  B<int> ? b2 = B<int>();
+  checkme(b2, B);
+
+  Object ? o = 12345;
+  checkme(o, Object);
+
+  AA ? aa = A();
+  checkme(aa, AA);
+  checkme(aa, A);
+
+  AAA aaa = A();
+  checkme(aaa, AAA);
+  checkme(aaa, A);
+}
diff --git a/LanguageFeatures/nnbd/Null_promotion_A02_t02.dart b/LanguageFeatures/nnbd/Null_promotion_A02_t02.dart
new file mode 100644
index 0000000..6496f2d
--- /dev/null
+++ b/LanguageFeatures/nnbd/Null_promotion_A02_t02.dart
@@ -0,0 +1,55 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion A check of the form [e != null] or of the form [e is T] where [e]
+ * has static type [T?] promotes the type of [e] to [T] in the [true]
+ * continuation, and to [Null] in the [false] continuation.
+ *
+ * @description Check that type of [e] is promoted to [Null] in the [false]
+ * condition.
+ * @author iarkh@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable,nonfunction-type-aliases
+
+import "../../Utils/expect.dart";
+
+class A {}
+class B<T> {}
+
+typedef AA = A;
+typedef AAA = A?;
+
+void checkme(var x, var expectedType) {
+  Expect.isFalse(x != null);
+  Expect.isFalse(x is expectedType);
+}
+
+main() {
+  Expect.isFalse(null != null);
+
+  A ? a = null;
+  checkme(a, A);
+
+  B? b1 = null;
+  checkme(b1, B);
+
+  B<int> ? b2 = null;
+  checkme(b2, B);
+
+  dynamic ? d = null;
+  checkme(d, dynamic);
+
+  Object ? o = null;
+  checkme(o, Object);
+
+  AA ? aa = null;
+  checkme(aa, AA);
+  checkme(aa, A);
+
+  AAA aaa = null;
+  checkme(aaa, AAA);
+  checkme(aaa, A);
+}
diff --git a/LanguageFeatures/nnbd/Null_promotion_A03_t01.dart b/LanguageFeatures/nnbd/Null_promotion_A03_t01.dart
new file mode 100644
index 0000000..c90731d
--- /dev/null
+++ b/LanguageFeatures/nnbd/Null_promotion_A03_t01.dart
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion The static type of an expression [e!] is [NonNull(T)] where [T] is
+ * the static type of [e].
+ *
+ * @description Check that [e!] is [NonNull(T)] if [e] is of static type [T}.
+ * @author iarkh@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable,nonfunction-type-aliases
+
+import "../../Utils/expect.dart";
+
+class A {}
+class B<T> {}
+
+typedef AA = A;
+typedef AAA = A?;
+
+main() {
+  A a = A();
+  Expect.isTrue(a! is NonNull(A));
+
+  B b1 = B();
+  Expect.isTrue(b1! is NonNull(B));
+
+  B<int> b2 = B<int>();
+  Expect.isTrue(b2! is NonNull(B<int>));
+
+  AA aa = AA();
+  Expect.isTrue(aa! is NonNull(AA));
+
+  AAA aaa = AAA();
+  Expect.isTrue(aaa! is NonNull(AAA));
+}
diff --git a/LanguageFeatures/nnbd/Null_promotion_A04_t01.dart b/LanguageFeatures/nnbd/Null_promotion_A04_t01.dart
new file mode 100644
index 0000000..b7713c3
--- /dev/null
+++ b/LanguageFeatures/nnbd/Null_promotion_A04_t01.dart
@@ -0,0 +1,20 @@
+/*
+ * 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.
+ */
+/**
+ * @assertion The NonNull function defines the null-promoted version of a type,
+ * and is defined as follows.
+ *     NonNull(Null) = Never
+ *
+ * @description Check that NonNull(Null) = Never.
+ * @author iarkh@unipro.ru
+ */
+// SharedOptions=--enable-experiment=non-nullable
+
+import "../../Utils/expect.dart";
+
+main() {
+  Expect.isTrue(NonNull(int) == int);
+}