| // Copyright (c) 2023, 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. |
| // |
| // SharedObjects=ffi_test_functions |
| |
| import 'dart:ffi'; |
| import 'dart:typed_data'; |
| |
| import 'dylib_utils.dart'; |
| |
| final ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions"); |
| void main() { |
| // Force dlopen so @Native lookups in DynamicLibrary.process() succeed. |
| dlopenGlobalPlatformSpecific('ffi_test_functions'); |
| |
| testMixed(); |
| testManyHandlesAllDifferent(); |
| testManyHandlesAllSame(); |
| } |
| |
| void testMixed() { |
| callUpdateNode( |
| id: 42, |
| label: 'A: root', |
| labelAttributes: <Object>[], |
| rect: Object(), |
| transform: Float64List(0), |
| childrenInTraversalOrder: Int32List.fromList(<int>[84, 96]), |
| childrenInHitTestOrder: Int32List.fromList(<int>[96, 84]), |
| actions: 0, |
| flags: 0, |
| maxValueLength: 0, |
| currentValueLength: 0, |
| textSelectionBase: 0, |
| textSelectionExtent: 0, |
| platformViewId: 0, |
| scrollChildren: 0, |
| scrollIndex: 0, |
| scrollPosition: 0.0, |
| scrollExtentMax: 0.0, |
| scrollExtentMin: 0.0, |
| elevation: 0.0, |
| thickness: 0.0, |
| hint: '', |
| hintAttributes: <Object>[], |
| value: '', |
| valueAttributes: <Object>[], |
| increasedValue: '', |
| increasedValueAttributes: <Object>[], |
| decreasedValue: '', |
| decreasedValueAttributes: <Object>[], |
| tooltip: 'tooltip', |
| additionalActions: Int32List(0), |
| ); |
| } |
| |
| void callUpdateNode({ |
| required int id, |
| required int flags, |
| required int actions, |
| required int maxValueLength, |
| required int currentValueLength, |
| required int textSelectionBase, |
| required int textSelectionExtent, |
| required int platformViewId, |
| required int scrollChildren, |
| required int scrollIndex, |
| required double scrollPosition, |
| required double scrollExtentMax, |
| required double scrollExtentMin, |
| required double elevation, |
| required double thickness, |
| required Object rect, |
| required String label, |
| required List<Object> labelAttributes, |
| required String value, |
| required List<Object> valueAttributes, |
| required String increasedValue, |
| required List<Object> increasedValueAttributes, |
| required String decreasedValue, |
| required List<Object> decreasedValueAttributes, |
| required String hint, |
| required List<Object> hintAttributes, |
| String? tooltip, |
| Object? textDirection, |
| required Float64List transform, |
| required Int32List childrenInTraversalOrder, |
| required Int32List childrenInHitTestOrder, |
| required Int32List additionalActions, |
| }) { |
| updateNode( |
| nullptr, |
| id, |
| flags, |
| actions, |
| maxValueLength, |
| currentValueLength, |
| textSelectionBase, |
| textSelectionExtent, |
| platformViewId, |
| scrollChildren, |
| scrollIndex, |
| scrollPosition, |
| scrollExtentMax, |
| scrollExtentMin, |
| 3.0, |
| 4.0, |
| 5.0, |
| 6.0, |
| elevation, |
| thickness, |
| label, |
| labelAttributes, |
| value, |
| valueAttributes, |
| increasedValue, |
| increasedValueAttributes, |
| decreasedValue, |
| decreasedValueAttributes, |
| hint, |
| hintAttributes, |
| tooltip ?? '', |
| textDirection != null ? 1 : 0, |
| transform, |
| childrenInTraversalOrder, |
| childrenInHitTestOrder, |
| additionalActions, |
| ); |
| } |
| |
| @Native< |
| Void Function( |
| Pointer<Void>, |
| Int32, |
| Int32, |
| Int32, |
| Int32, |
| Int32, |
| Int32, |
| Int32, |
| Int32, |
| Int32, |
| Int32, |
| Double, |
| Double, |
| Double, |
| Double, |
| Double, |
| Double, |
| Double, |
| Double, |
| Double, |
| Handle, |
| Handle, |
| Handle, |
| Handle, |
| Handle, |
| Handle, |
| Handle, |
| Handle, |
| Handle, |
| Handle, |
| Handle, |
| Int32, |
| Handle, |
| Handle, |
| Handle, |
| Handle, |
| )>( |
| symbol: 'SemanticsUpdateBuilderUpdateNode', |
| ) |
| external void updateNode( |
| Pointer<Void> this_, |
| int id, |
| int flags, |
| int actions, |
| int maxValueLength, |
| int currentValueLength, |
| int textSelectionBase, |
| int textSelectionExtent, |
| int platformViewId, |
| int scrollChildren, |
| int scrollIndex, |
| double scrollPosition, |
| double scrollExtentMax, |
| double scrollExtentMin, |
| double left, |
| double top, |
| double right, |
| double bottom, |
| double elevation, |
| double thickness, |
| String label, |
| List<Object> labelAttributes, |
| String value, |
| List<Object> valueAttributes, |
| String increasedValue, |
| List<Object> increasedValueAttributes, |
| String decreasedValue, |
| List<Object> decreasedValueAttributes, |
| String hint, |
| List<Object> hintAttributes, |
| String tooltip, |
| int textDirection, |
| Float64List transform, |
| Int32List childrenInTraversalOrder, |
| Int32List childrenInHitTestOrder, |
| Int32List additionalActions, |
| ); |
| |
| void testManyHandlesAllDifferent() { |
| manyHandlesAllDifferent( |
| 'foo0', |
| 'foo1', |
| 'foo2', |
| 'foo3', |
| 'foo4', |
| 'foo5', |
| 'foo6', |
| 'foo7', |
| 'foo8', |
| 'foo9', |
| 'foo10', |
| 'foo11', |
| 'foo12', |
| 'foo13', |
| 'foo14', |
| 'foo15', |
| 'foo16', |
| 'foo17', |
| 'foo18', |
| 'foo19', |
| ); |
| } |
| |
| /// Only invoked with 20 different const String arguments. |
| @Native< |
| Void Function( |
| Handle, |
| Handle, |
| Handle, |
| Handle, |
| Handle, |
| Handle, |
| Handle, |
| Handle, |
| Handle, |
| Handle, |
| Handle, |
| Handle, |
| Handle, |
| Handle, |
| Handle, |
| Handle, |
| Handle, |
| Handle, |
| Handle, |
| Handle, |
| )>( |
| symbol: 'ManyHandles', |
| ) |
| external void manyHandlesAllDifferent( |
| Object a0, |
| Object a1, |
| Object a2, |
| Object a3, |
| Object a4, |
| Object a5, |
| Object a6, |
| Object a7, |
| Object a8, |
| Object a9, |
| Object a10, |
| Object a11, |
| Object a12, |
| Object a13, |
| Object a14, |
| Object a15, |
| Object a16, |
| Object a17, |
| Object a18, |
| Object a19, |
| ); |
| |
| void testManyHandlesAllSame() { |
| manyHandlesAllSame( |
| 'foo0', |
| 'foo0', |
| 'foo0', |
| 'foo0', |
| 'foo0', |
| 'foo0', |
| 'foo0', |
| 'foo0', |
| 'foo0', |
| 'foo0', |
| 'foo0', |
| 'foo0', |
| 'foo0', |
| 'foo0', |
| 'foo0', |
| 'foo0', |
| 'foo0', |
| 'foo0', |
| 'foo0', |
| 'foo0', |
| ); |
| } |
| |
| /// Only invoked with 20 equal const String arguments. |
| @Native< |
| Void Function( |
| Handle, |
| Handle, |
| Handle, |
| Handle, |
| Handle, |
| Handle, |
| Handle, |
| Handle, |
| Handle, |
| Handle, |
| Handle, |
| Handle, |
| Handle, |
| Handle, |
| Handle, |
| Handle, |
| Handle, |
| Handle, |
| Handle, |
| Handle, |
| )>( |
| symbol: 'ManyHandles', |
| ) |
| external void manyHandlesAllSame( |
| Object a0, |
| Object a1, |
| Object a2, |
| Object a3, |
| Object a4, |
| Object a5, |
| Object a6, |
| Object a7, |
| Object a8, |
| Object a9, |
| Object a10, |
| Object a11, |
| Object a12, |
| Object a13, |
| Object a14, |
| Object a15, |
| Object a16, |
| Object a17, |
| Object a18, |
| Object a19, |
| ); |