blob: f095930b69dffd3ee5005aae0695bc621fb7f430 [file] [log] [blame] [edit]
// Copyright (c) 2024, 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.
// Objective C support is only available on mac.
@TestOn('mac-os')
library;
import 'dart:ffi';
import 'package:objective_c/objective_c.dart';
import 'package:test/test.dart';
void main() {
group('NSMutableArray', () {
setUpAll(() {
// TODO(https://github.com/dart-lang/native/issues/1068): Remove this.
DynamicLibrary.open('test/objective_c.dylib');
});
test('filled', () {
final obj = NSObject();
final array = NSMutableArray.filled(3, obj);
expect(array.length, 3);
expect(array.elementAt(0), obj);
expect(array.elementAt(1), obj);
expect(array.elementAt(2), obj);
expect(array[0], obj);
expect(array[1], obj);
expect(array[2], obj);
});
test('of', () {
final obj1 = NSObject();
final obj2 = NSObject();
final obj3 = NSObject();
final obj4 = NSObject();
final obj5 = NSObject();
final expected = [obj1, obj2, obj3, obj4, obj5];
final array = NSMutableArray.of(expected);
expect(array.length, 5);
final actual = <ObjCObjectBase>[];
for (final value in array) {
actual.add(value);
}
expect(actual, expected);
});
test('length setter', () {
final array = NSMutableArray.filled(3, NSObject());
expect(array.length, 3);
expect(() => array.length = 4, throwsA(isA<RangeError>()));
expect(() => array.length = -1, throwsA(isA<RangeError>()));
array.length = 3;
expect(array.length, 3);
array.length = 2;
expect(array.length, 2);
array.length = 0;
expect(array.length, 0);
});
test('element setter', () {
final obj1 = NSObject();
final obj2 = NSObject();
final obj3 = NSObject();
final obj4 = NSObject();
final obj5 = NSObject();
final array = NSMutableArray.of([obj1, obj2, obj3]);
array[1] = obj4;
expect(array, [obj1, obj4, obj3]);
array[2] = obj5;
expect(array, [obj1, obj4, obj5]);
});
test('add', () {
final obj1 = NSObject();
final obj2 = NSObject();
final obj3 = NSObject();
final obj4 = NSObject();
final obj5 = NSObject();
final array = NSMutableArray();
expect(array.length, 0);
array.add(obj1);
array.add(obj2);
expect(array.length, 2);
expect(array, [obj1, obj2]);
array.addAll([obj3, obj4, obj5]);
expect(array.length, 5);
expect(array, [obj1, obj2, obj3, obj4, obj5]);
});
test('List mixin', () {
final obj1 = NSObject();
final obj2 = NSObject();
final obj3 = NSObject();
final obj4 = NSObject();
final obj5 = NSObject();
final array = NSMutableArray.of([obj1, obj2, obj3, obj4, obj5]);
array.setRange(1, 4, [obj5, obj1, obj2]);
expect(array, [obj1, obj5, obj1, obj2, obj5]);
expect(array.remove(obj2), isTrue);
expect(array, [obj1, obj5, obj1, obj5]);
expect(array.sublist(1, 3), [obj5, obj1]);
});
});
}