#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;
+}