#1237. Added tests for Array wrong types
diff --git a/LibTest/ffi/Array/Array.multi_A03_t01.dart b/LibTest/ffi/Array/Array.multi_A03_t01.dart
new file mode 100644
index 0000000..8abd322
--- /dev/null
+++ b/LibTest/ffi/Array/Array.multi_A03_t01.dart
@@ -0,0 +1,33 @@
+// Copyright (c) 2021, 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
+/// const Array<T extends NativeType>.multi(List<int> dimensions)
+///  Const constructor to specify Array dimensions in Structs.
+///
+///  class MyStruct extends Struct {
+///  @Array.multi([2, 2, 2])
+///  external Array<Array<Array<Uint8>>> threeDimensionalInlineArray;
+///
+/// @Array.multi([2, 2, 2, 2, 2, 2, 2, 2])
+///  external Array<Array<Array<Array<Array<Array<Array<Array<Uint8>>>>>>>> eightDimensionalInlineArray;
+///  }
+///  Do not invoke in normal code.
+///
+/// @description Checks the case when Array has a non-existing type
+/// @author sgrekhov@unipro.ru
+
+import 'dart:ffi';
+
+class MyStruct extends Struct {
+  @Array.multi([16])
+  external Array<SomeNotExistingType> a;
+//               ^^^^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
+
+main() {
+  MyStruct? ms;
+}
diff --git a/LibTest/ffi/Array/Array.multi_A03_t02.dart b/LibTest/ffi/Array/Array.multi_A03_t02.dart
new file mode 100644
index 0000000..db369f5
--- /dev/null
+++ b/LibTest/ffi/Array/Array.multi_A03_t02.dart
@@ -0,0 +1,52 @@
+// Copyright (c) 2021, 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
+/// const Array<T extends NativeType>.multi(List<int> dimensions)
+///  Const constructor to specify Array dimensions in Structs.
+///
+///  class MyStruct extends Struct {
+///  @Array.multi([2, 2, 2])
+///  external Array<Array<Array<Uint8>>> threeDimensionalInlineArray;
+///
+/// @Array.multi([2, 2, 2, 2, 2, 2, 2, 2])
+///  external Array<Array<Array<Array<Array<Array<Array<Array<Uint8>>>>>>>> eightDimensionalInlineArray;
+///  }
+///  Do not invoke in normal code.
+///
+/// @description Checks that it is a compile time error if Array type is not
+/// subtype of [NativeType]
+/// @author sgrekhov@unipro.ru
+
+import 'dart:ffi';
+
+class MyStruct extends Struct {
+  @Array.multi([16])
+  external Array<String> a1;
+//               ^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  @Array.multi([16])
+  external Array<void> a2;
+//               ^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  @Array.multi([16])
+  external Array<dynamic> a3;
+//               ^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  @Array.multi([16])
+  external Array<Null> a4;
+//               ^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
+
+main() {
+  MyStruct? ms;
+}
diff --git a/LibTest/ffi/Array/Array.multi_A03_t03.dart b/LibTest/ffi/Array/Array.multi_A03_t03.dart
new file mode 100644
index 0000000..7faae05
--- /dev/null
+++ b/LibTest/ffi/Array/Array.multi_A03_t03.dart
@@ -0,0 +1,46 @@
+// Copyright (c) 2021, 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
+/// const Array<T extends NativeType>.multi(List<int> dimensions)
+///  Const constructor to specify Array dimensions in Structs.
+///
+///  class MyStruct extends Struct {
+///  @Array.multi([2, 2, 2])
+///  external Array<Array<Array<Uint8>>> threeDimensionalInlineArray;
+///
+/// @Array.multi([2, 2, 2, 2, 2, 2, 2, 2])
+///  external Array<Array<Array<Array<Array<Array<Array<Array<Uint8>>>>>>>> eightDimensionalInlineArray;
+///  }
+///  Do not invoke in normal code.
+///
+/// @description Checks that it is a compile time error if Array type is not
+/// subtype of [NativeType]
+/// @author sgrekhov@unipro.ru
+
+import 'dart:ffi';
+
+class MyStruct extends Struct {
+  @Array.multi([16])
+  external Array<int> a1;
+//               ^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  @Array.multi([16])
+  external Array<double> a2;
+//               ^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  @Array.multi([16])
+  external Array<num> a3;
+//               ^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
+
+main() {
+  MyStruct? ms;
+}
diff --git a/LibTest/ffi/Array/Array.multi_A03_t04.dart b/LibTest/ffi/Array/Array.multi_A03_t04.dart
new file mode 100644
index 0000000..e2eafba
--- /dev/null
+++ b/LibTest/ffi/Array/Array.multi_A03_t04.dart
@@ -0,0 +1,60 @@
+// Copyright (c) 2021, 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
+/// const Array<T extends NativeType>.multi(List<int> dimensions)
+///  Const constructor to specify Array dimensions in Structs.
+///
+///  class MyStruct extends Struct {
+///  @Array.multi([2, 2, 2])
+///  external Array<Array<Array<Uint8>>> threeDimensionalInlineArray;
+///
+/// @Array.multi([2, 2, 2, 2, 2, 2, 2, 2])
+///  external Array<Array<Array<Array<Array<Array<Array<Array<Uint8>>>>>>>> eightDimensionalInlineArray;
+///  }
+///  Do not invoke in normal code.
+///
+/// @description Checks that it is a compile time error if Array type is
+/// subtype of [NativeType] but not the supported one
+/// @author sgrekhov@unipro.ru
+
+import 'dart:ffi';
+
+import 'package:ffi/ffi.dart';
+
+class MyStruct extends Struct {
+  @Array.multi([16])
+  external Array<Void> a1;
+//               ^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  @Array.multi([16])
+  external Array<NativeFunction> a2;
+//               ^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  @Array.multi([16])
+  external Array<Opaque> a3;
+//               ^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  @Array.multi([16])
+  external Array<Union> a4;
+//               ^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  @Array.multi([16])
+  external Array<Struct> a5;
+//               ^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
+
+main() {
+  MyStruct? ms;
+}
diff --git a/LibTest/ffi/Array/Array_A02_t03.dart b/LibTest/ffi/Array/Array_A02_t03.dart
index 1b3a5a7..0ee5765 100644
--- a/LibTest/ffi/Array/Array_A02_t03.dart
+++ b/LibTest/ffi/Array/Array_A02_t03.dart
@@ -26,7 +26,6 @@
 /// @author sgrekhov@unipro.ru
 
 import "dart:ffi";
-import "package:ffi/ffi.dart";
 
 class MyStruct extends Struct {
   @Array(2)
@@ -39,5 +38,5 @@
 }
 
 void main() {
-  MyStruct ms;
+  MyStruct? ms;
 }
diff --git a/LibTest/ffi/Array/Array_A03_t01.dart b/LibTest/ffi/Array/Array_A03_t01.dart
new file mode 100644
index 0000000..3737cb4
--- /dev/null
+++ b/LibTest/ffi/Array/Array_A03_t01.dart
@@ -0,0 +1,39 @@
+// Copyright (c) 2021, 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
+/// const Array<T extends NativeType>(
+/// int dimension1,
+///  [int dimension2,
+///  int dimension3,
+///  int dimension4,
+///  int dimension5]
+///  )
+///  Const constructor to specify Array dimensions in Structs.
+///
+///  class MyStruct extends Struct {
+///  @Array(8)
+///  external Array<Uint8> inlineArray;
+///
+///  @Array(2, 2, 2)
+///  external Array<Array<Array<Uint8>>> threeDimensionalInlineArray;
+///  }
+///  Do not invoke in normal code.
+///
+/// @description Checks the case when Array has a non-existing type
+/// @author sgrekhov@unipro.ru
+
+import 'dart:ffi';
+
+class MyStruct extends Struct {
+  @Array(16)
+  external Array<SomeNotExistingType> a;
+//               ^^^^^^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
+
+main() {
+  MyStruct? ms;
+}
diff --git a/LibTest/ffi/Array/Array_A03_t02.dart b/LibTest/ffi/Array/Array_A03_t02.dart
new file mode 100644
index 0000000..f39ddc7
--- /dev/null
+++ b/LibTest/ffi/Array/Array_A03_t02.dart
@@ -0,0 +1,58 @@
+// Copyright (c) 2021, 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
+/// const Array<T extends NativeType>(
+/// int dimension1,
+///  [int dimension2,
+///  int dimension3,
+///  int dimension4,
+///  int dimension5]
+///  )
+///  Const constructor to specify Array dimensions in Structs.
+///
+///  class MyStruct extends Struct {
+///  @Array(8)
+///  external Array<Uint8> inlineArray;
+///
+///  @Array(2, 2, 2)
+///  external Array<Array<Array<Uint8>>> threeDimensionalInlineArray;
+///  }
+///  Do not invoke in normal code.
+///
+/// @description Checks that it is a compile time error if Array type is not
+/// subtype of [NativeType]
+/// @author sgrekhov@unipro.ru
+
+import 'dart:ffi';
+
+class MyStruct extends Struct {
+  @Array(16)
+  external Array<String> a1;
+//               ^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  @Array(16)
+  external Array<void> a2;
+//               ^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  @Array(16)
+  external Array<dynamic> a3;
+//               ^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  @Array(16)
+  external Array<Null> a4;
+//               ^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
+
+main() {
+  MyStruct? ms;
+}
diff --git a/LibTest/ffi/Array/Array_A03_t03.dart b/LibTest/ffi/Array/Array_A03_t03.dart
new file mode 100644
index 0000000..e3a240a
--- /dev/null
+++ b/LibTest/ffi/Array/Array_A03_t03.dart
@@ -0,0 +1,52 @@
+// Copyright (c) 2021, 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
+/// const Array<T extends NativeType>(
+/// int dimension1,
+///  [int dimension2,
+///  int dimension3,
+///  int dimension4,
+///  int dimension5]
+///  )
+///  Const constructor to specify Array dimensions in Structs.
+///
+///  class MyStruct extends Struct {
+///  @Array(8)
+///  external Array<Uint8> inlineArray;
+///
+///  @Array(2, 2, 2)
+///  external Array<Array<Array<Uint8>>> threeDimensionalInlineArray;
+///  }
+///  Do not invoke in normal code.
+///
+/// @description Checks that it is a compile time error if Array type is not
+/// subtype of [NativeType]
+/// @author sgrekhov@unipro.ru
+
+import 'dart:ffi';
+
+class MyStruct extends Struct {
+  @Array(16)
+  external Array<int> a1;
+//               ^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  @Array(16)
+  external Array<double> a2;
+//               ^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  @Array(16)
+  external Array<num> a3;
+//               ^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
+
+main() {
+  MyStruct? ms;
+}
diff --git a/LibTest/ffi/Array/Array_A03_t04.dart b/LibTest/ffi/Array/Array_A03_t04.dart
new file mode 100644
index 0000000..22776d8
--- /dev/null
+++ b/LibTest/ffi/Array/Array_A03_t04.dart
@@ -0,0 +1,66 @@
+// Copyright (c) 2021, 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
+/// const Array<T extends NativeType>(
+/// int dimension1,
+///  [int dimension2,
+///  int dimension3,
+///  int dimension4,
+///  int dimension5]
+///  )
+///  Const constructor to specify Array dimensions in Structs.
+///
+///  class MyStruct extends Struct {
+///  @Array(8)
+///  external Array<Uint8> inlineArray;
+///
+///  @Array(2, 2, 2)
+///  external Array<Array<Array<Uint8>>> threeDimensionalInlineArray;
+///  }
+///  Do not invoke in normal code.
+///
+/// @description Checks that it is a compile time error if Array type is
+/// subtype of [NativeType] but not the supported one
+/// @author sgrekhov@unipro.ru
+
+import 'dart:ffi';
+
+import 'package:ffi/ffi.dart';
+
+class MyStruct extends Struct {
+  @Array(16)
+  external Array<Void> a1;
+//               ^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  @Array(16)
+  external Array<NativeFunction> a2;
+//               ^^^^^^^^^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  @Array(16)
+  external Array<Opaque> a3;
+//               ^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  @Array(16)
+  external Array<Union> a4;
+//               ^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+  @Array(16)
+  external Array<Struct> a5;
+//               ^^^^^^
+// [analyzer] unspecified
+// [cfe] unspecified
+}
+
+main() {
+  MyStruct? ms;
+}