2016-05-26 16:06:52 +03:00
using System ;
using System.Collections ;
using System.Collections.Generic ;
using NUnit.Framework ;
using Foundation ;
namespace MonoTouchFixtures.Foundation {
[TestFixture]
2021-03-16 17:15:30 +03:00
[Preserve (AllMembers = true)]
2016-05-26 16:06:52 +03:00
public class NSMutableArray1Test {
[Test]
public void Ctor ( )
{
using ( var arr = new NSMutableArray < NSDate > ( ) ) {
2020-07-17 09:48:09 +03:00
Assert . AreEqual ( ( nuint ) 0 , arr . Count , "Count" ) ;
2016-05-26 16:06:52 +03:00
}
}
[Test]
public void Ctor_Capacity ( )
{
using ( var arr = new NSMutableArray < NSString > ( 1 ) ) {
2020-07-17 09:48:09 +03:00
Assert . AreEqual ( ( nuint ) 0 , arr . Count , "Count" ) ;
2016-05-26 16:06:52 +03:00
}
}
[Test]
public void ContainsTest ( )
{
var v = ( NSString ) "value" ;
var v2 = ( NSString ) "value 2" ;
using ( var arr = new NSMutableArray < NSString > ( v , v ) ) {
Assert . Throws < ArgumentNullException > ( ( ) = > arr . Contains ( null ) , "Contains ANE" ) ;
Assert . IsTrue ( arr . Contains ( v ) , "Contains 1" ) ;
Assert . IsFalse ( arr . Contains ( v2 ) , "Contains 2" ) ;
}
}
[Test]
public void IndexOfTest ( )
{
var v1 = ( NSString ) "1" ;
var v2 = ( NSString ) "2" ;
using ( var arr = new NSMutableArray < NSString > ( v1 ) ) {
Assert . Throws < ArgumentNullException > ( ( ) = > arr . IndexOf ( null ) , "IndexOf ANE" ) ;
2020-07-17 09:48:09 +03:00
Assert . AreEqual ( ( nuint ) 0 , arr . IndexOf ( v1 ) , "IndexOf 1" ) ;
Assert . AreEqual ( ( nuint ) nint . MaxValue , arr . IndexOf ( v2 ) , "IndxOf 2" ) ; // [NSArray indexOfObject:] returns NSNotFound = NSIntegerMax when object isn't found in the array
2016-05-26 16:06:52 +03:00
}
}
[Test]
public void AddTest ( )
{
var v1 = ( NSString ) "1" ;
var v2 = ( NSString ) "2" ;
using ( var arr = new NSMutableArray < NSString > ( v1 ) ) {
2020-07-17 09:48:09 +03:00
Assert . AreEqual ( ( nuint ) 1 , arr . Count , "Count 1" ) ;
2016-05-26 16:06:52 +03:00
Assert . Throws < ArgumentNullException > ( ( ) = > arr . Add ( null ) , "Add ANE" ) ;
arr . Add ( v2 ) ;
2020-07-17 09:48:09 +03:00
Assert . AreEqual ( ( nuint ) 2 , arr . Count , "Count 2" ) ;
2016-05-26 16:06:52 +03:00
Assert . AreSame ( v2 , arr [ 1 ] , "idx[1]" ) ;
}
}
[Test]
public void InsertTest ( )
{
var v1 = ( NSString ) "1" ;
var v2 = ( NSString ) "2" ;
var v3 = ( NSString ) "3" ;
using ( var arr = new NSMutableArray < NSString > ( v1 , v3 ) ) {
2020-07-17 09:48:09 +03:00
Assert . AreEqual ( ( nuint ) 2 , arr . Count , "Insert 1" ) ;
2016-05-26 16:06:52 +03:00
Assert . Throws < ArgumentNullException > ( ( ) = > arr . Insert ( null , 0 ) , "Insert ANE" ) ;
Assert . Throws < IndexOutOfRangeException > ( ( ) = > arr . Insert ( v2 , - 1 ) , "Insert AOORE 1" ) ;
Assert . Throws < IndexOutOfRangeException > ( ( ) = > arr . Insert ( v2 , 3 ) , "Insert AOORE 2" ) ;
arr . Insert ( v2 , 1 ) ;
2020-07-17 09:48:09 +03:00
Assert . AreEqual ( ( nuint ) 3 , arr . Count , "Insert 2" ) ;
2016-05-26 16:06:52 +03:00
Assert . AreSame ( v1 , arr [ 0 ] , "[0]" ) ;
Assert . AreSame ( v2 , arr [ 1 ] , "[1]" ) ;
Assert . AreSame ( v3 , arr [ 2 ] , "[2]" ) ;
}
2019-09-11 19:59:45 +03:00
using ( var arr = new NSMutableArray < NSString > ( ) ) {
Assert . DoesNotThrow ( ( ) = > arr . Insert ( v1 , 0 ) , "Insert into empty array" ) ;
}
2016-05-26 16:06:52 +03:00
}
[Test]
public void ReplaceObjectTest ( )
{
var v1 = ( NSString ) "1" ;
var v2 = ( NSString ) "2" ;
var v3 = ( NSString ) "3" ;
using ( var arr = new NSMutableArray < NSString > ( v1 , v3 ) ) {
2020-07-17 09:48:09 +03:00
Assert . AreEqual ( ( nuint ) 2 , arr . Count , "ReplaceObject 1" ) ;
2016-05-26 16:06:52 +03:00
Assert . AreSame ( v1 , arr [ 0 ] , "a [0]" ) ;
Assert . AreSame ( v3 , arr [ 1 ] , "a [1]" ) ;
Assert . Throws < ArgumentNullException > ( ( ) = > arr . ReplaceObject ( 0 , null ) , "Insert ANE" ) ;
Assert . Throws < IndexOutOfRangeException > ( ( ) = > arr . ReplaceObject ( - 1 , v2 ) , "Insert AOORE 1" ) ;
Assert . Throws < IndexOutOfRangeException > ( ( ) = > arr . ReplaceObject ( 3 , v2 ) , "Insert AOORE 2" ) ;
arr . ReplaceObject ( 1 , v2 ) ;
2020-07-17 09:48:09 +03:00
Assert . AreEqual ( ( nuint ) 2 , arr . Count , "ReplaceObject 2" ) ;
2016-05-26 16:06:52 +03:00
Assert . AreSame ( v1 , arr [ 0 ] , "b [0]" ) ;
Assert . AreSame ( v2 , arr [ 1 ] , "b [1]" ) ;
}
}
[Test]
public void AddObjectsTest ( )
{
var v1 = ( NSString ) "1" ;
var v2 = ( NSString ) "2" ;
var v3 = ( NSString ) "3" ;
using ( var arr = new NSMutableArray < NSString > ( ) ) {
Assert . Throws < ArgumentNullException > ( ( ) = > arr . AddObjects ( ( NSString [ ] ) null ) , "AddObjects ANE 1" ) ;
2020-07-17 09:48:09 +03:00
Assert . AreEqual ( ( nuint ) 0 , arr . Count , "Count 1" ) ;
2016-05-26 16:06:52 +03:00
Assert . Throws < ArgumentNullException > ( ( ) = > arr . AddObjects ( new NSString [ ] { null } ) , "AddObjects ANE 2" ) ;
2020-07-17 09:48:09 +03:00
Assert . AreEqual ( ( nuint ) 0 , arr . Count , "Count 2" ) ;
2016-05-26 16:06:52 +03:00
Assert . Throws < ArgumentNullException > ( ( ) = > arr . AddObjects ( new NSString [ ] { v1 , null , v3 } ) , "AddObjects ANE 3" ) ;
2020-07-17 09:48:09 +03:00
Assert . AreEqual ( ( nuint ) 0 , arr . Count , "Count 3" ) ;
2016-05-26 16:06:52 +03:00
arr . AddObjects ( v1 , v2 ) ;
2020-07-17 09:48:09 +03:00
Assert . AreEqual ( ( nuint ) 2 , arr . Count , "AddObjects 1" ) ;
2016-05-26 16:06:52 +03:00
Assert . AreSame ( v1 , arr [ 0 ] , "a [0]" ) ;
Assert . AreSame ( v2 , arr [ 1 ] , "a [1]" ) ;
}
}
[Test]
public void InsertObjectsTest ( )
{
var v1 = ( NSString ) "1" ;
var v2 = ( NSString ) "2" ;
var v3 = ( NSString ) "3" ;
var v4 = ( NSString ) "4" ;
using ( var arr = new NSMutableArray < NSString > ( v1 , v2 ) ) {
var iset = new NSMutableIndexSet ( ) ;
iset . Add ( 1 ) ;
iset . Add ( 2 ) ;
Assert . Throws < ArgumentNullException > ( ( ) = > arr . InsertObjects ( ( NSString [ ] ) null , iset ) , "InsertObjects ANE 1" ) ;
2020-07-17 09:48:09 +03:00
Assert . AreEqual ( ( nuint ) 2 , arr . Count , "Count 1" ) ;
2016-05-26 16:06:52 +03:00
Assert . Throws < ArgumentNullException > ( ( ) = > arr . InsertObjects ( new NSString [ ] { null , null } , iset ) , "InsertObjects ANE 2" ) ;
2020-07-17 09:48:09 +03:00
Assert . AreEqual ( ( nuint ) 2 , arr . Count , "Count 2" ) ;
2016-05-26 16:06:52 +03:00
Assert . Throws < ArgumentNullException > ( ( ) = > arr . InsertObjects ( new NSString [ ] { v1 , null } , iset ) , "InsertObjects ANE 3" ) ;
2020-07-17 09:48:09 +03:00
Assert . AreEqual ( ( nuint ) 2 , arr . Count , "Count 3" ) ;
2016-05-26 16:06:52 +03:00
Assert . Throws < ArgumentNullException > ( ( ) = > arr . InsertObjects ( new NSString [ ] { v1 } , null ) , "InsertObjects ANE 4" ) ;
2020-07-17 09:48:09 +03:00
Assert . AreEqual ( ( nuint ) 2 , arr . Count , "Count 4" ) ;
2016-05-26 16:06:52 +03:00
arr . InsertObjects ( new NSString [ ] { v3 , v4 } , iset ) ;
2020-07-17 09:48:09 +03:00
Assert . AreEqual ( ( nuint ) 4 , arr . Count , "InsertObjects 1" ) ;
2016-05-26 16:06:52 +03:00
Assert . AreSame ( v1 , arr [ 0 ] , "a [0]" ) ;
Assert . AreSame ( v3 , arr [ 1 ] , "a [1]" ) ;
Assert . AreSame ( v4 , arr [ 2 ] , "a [2]" ) ;
Assert . AreSame ( v2 , arr [ 3 ] , "a [3]" ) ;
iset . Clear ( ) ;
iset . Add ( 9 ) ;
Assert . Throws < IndexOutOfRangeException > ( ( ) = > arr . InsertObjects ( new NSString [ ] { v1 } , iset ) , "InsertObjects ANE 5" ) ;
}
}
[Test]
public void IndexerTest ( )
{
var v1 = ( NSString ) "1" ;
var v2 = ( NSString ) "2" ;
var v3 = ( NSString ) "3" ;
using ( var arr = new NSMutableArray < NSString > ( v1 , v2 ) ) {
arr [ 1 ] = v3 ;
2020-07-17 09:48:09 +03:00
Assert . AreEqual ( ( nuint ) 2 , arr . Count , "a 1" ) ;
2016-05-26 16:06:52 +03:00
Assert . AreSame ( v1 , arr [ 0 ] , "a [0]" ) ;
Assert . AreSame ( v3 , arr [ 1 ] , "a [1]" ) ;
Assert . Throws < ArgumentNullException > ( ( ) = > arr [ 0 ] = null , "ANE 1" ) ;
Assert . Throws < IndexOutOfRangeException > ( ( ) = > arr [ 2 ] = v3 , "IOORE 1" ) ;
}
}
[Test]
public void IEnumerableTest ( )
{
const int C = 16 * 2 + 3 ; // NSFastEnumerator has a array of size 16, use more than that, and not an exact multiple.
using ( var arr = new NSMutableArray < NSString > ( ) ) {
for ( int i = 0 ; i < C ; i + + )
arr . Add ( ( NSString ) i . ToString ( ) ) ;
2020-07-17 09:48:09 +03:00
Assert . AreEqual ( ( nuint ) C , arr . Count , "Count 1" ) ;
2016-05-26 16:06:52 +03:00
var lst = new List < NSString > ( ) ;
foreach ( NSString a in ( IEnumerable ) arr ) {
Assert . IsNotNull ( a , "null item iterator" ) ;
Assert . IsFalse ( lst . Contains ( a ) , "duplicated item iterator" ) ;
Assert . AreEqual ( lst . Count . ToString ( ) , ( string ) a , "#" + lst . Count . ToString ( ) ) ;
lst . Add ( a ) ;
}
Assert . AreEqual ( C , lst . Count , "iterator count" ) ;
}
}
[Test]
public void IEnumerable1Test ( )
{
const int C = 16 * 2 + 3 ; // NSFastEnumerator has a array of size 16, use more than that, and not an exact multiple.
using ( var arr = new NSMutableArray < NSString > ( ) ) {
for ( int i = 0 ; i < C ; i + + )
arr . Add ( ( NSString ) i . ToString ( ) ) ;
2020-07-17 09:48:09 +03:00
Assert . AreEqual ( ( nuint ) C , arr . Count , "Count 1" ) ;
2016-05-26 16:06:52 +03:00
var lst = new List < NSString > ( ) ;
foreach ( var a in ( IEnumerable < NSString > ) arr ) {
Assert . IsNotNull ( a , "null item iterator" ) ;
Assert . IsFalse ( lst . Contains ( a ) , "duplicated item iterator" ) ;
Assert . AreEqual ( lst . Count . ToString ( ) , ( string ) a , "#" + lst . Count . ToString ( ) ) ;
lst . Add ( a ) ;
}
Assert . AreEqual ( C , lst . Count , "iterator count" ) ;
}
}
}
}