xamarin-macios/tests/monotouch-test/Foundation/ArrayTest.cs

120 строки
3.0 KiB
C#

//
// Unit tests for NSArray
//
// Authors:
// Sebastien Pouliot <sebastien@xamarin.com>
//
// Copyright 2012 Xamarin Inc. All rights reserved.
//
using System;
using Foundation;
using ObjCRuntime;
using Security;
using NUnit.Framework;
namespace MonoTouchFixtures.Foundation {
[TestFixture]
[Preserve (AllMembers = true)]
public class NSArrayTest {
[Test]
public void FromStrings_Null ()
{
Assert.Throws <ArgumentNullException> (() => NSArray.FromStrings (null), "null");
using (var a = NSArray.FromStrings (new string [1])) {
Assert.That (a.Count, Is.EqualTo ((nuint) 1), "null item");
Assert.IsNull (a.GetItem <NSString> (0), "0");
}
}
[Test]
public void Null ()
{
using (var a = NSArray.FromNSObjects (NSNull.Null)) {
Assert.That (a.Count, Is.EqualTo ((nuint) 1), "Count");
Assert.IsNull (a.GetItem<NSNull> (0), "0");
}
}
int comparator_count;
// the new NSObject are often, but not always, in ascending order
// (because of how we allocate them) so we sort the other way
NSComparisonResult Comparator (NSObject obj1, NSObject obj2)
{
comparator_count++;
return (NSComparisonResult) (long) ((nint) obj2.Handle - (nint) obj1.Handle);
}
[Test]
public void Sort ()
{
comparator_count = 0;
using (var obj1 = new NSObject ())
using (var obj2 = new NSObject ())
using (var a = new NSMutableArray ()) {
a.Add (obj1);
a.Add (a);
a.Add (obj2);
using (var s = a.Sort (Comparator)) {
Assert.That ((nuint) s.ValueAt (0), Is.GreaterThan ((nuint) s.ValueAt (1)), "0");
Assert.That ((nuint) s.ValueAt (1), Is.GreaterThan ((nuint) s.ValueAt (2)), "1");
}
}
Assert.That (comparator_count, Is.GreaterThanOrEqualTo (2), "2+");
}
int evaluator_count;
bool Evaluator (NSObject evaluatedObject, NSDictionary bindings)
{
evaluator_count++;
return (evaluatedObject is NSMutableArray);
}
[Test]
public void Filter ()
{
evaluator_count = 0;
using (var obj1 = new NSObject ())
using (var obj2 = new NSObject ())
using (var a = new NSMutableArray ()) {
a.Add (obj1);
a.Add (a);
a.Add (obj2);
using (NSPredicate p = NSPredicate.FromExpression (Evaluator))
using (var f = a.Filter (p)) {
Assert.That (f.ValueAt (0), Is.EqualTo (a.Handle), "0");
Assert.That (f.Count, Is.EqualTo ((nuint) 1), "Count");
}
}
Assert.That (evaluator_count, Is.EqualTo (3), "3");
}
[Test]
public void INativeObjects ()
{
using (var policy = SecPolicy.CreateSslPolicy (true, "mail.xamarin.com")) {
using (var a = NSArray.FromObjects (policy)) {
var b = NSArray.ArrayFromHandle<SecPolicy> (a.Handle);
Assert.AreNotSame (a, b);
}
}
}
[Test]
public void FromNSObjects ()
{
using (var a = NSArray.FromNSObjects (null)) {
// on the managed side we have an empty array
Assert.That (a.Count, Is.EqualTo ((nuint) 0), "Count");
// and a valid native instance (or some other API might fail)
Assert.That (a.Handle, Is.Not.EqualTo (IntPtr.Zero), "Handle");
}
}
}
}