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

72 строки
2.2 KiB
C#

//
// Unit tests for NSUrlRequest
//
// Authors:
// Sebastien Pouliot <sebastien@xamarin.com>
//
// Copyright 2015 Xamarin Inc. All rights reserved.
//
#if XAMCORE_2_0
using Foundation;
using ObjCRuntime;
#else
using MonoTouch.Foundation;
using MonoTouch.ObjCRuntime;
#endif
using NUnit.Framework;
namespace MonoTouchFixtures.Foundation {
[TestFixture]
[Preserve (AllMembers = true)]
public class UrlRequestTest {
[Test]
public void Mutability_30744 ()
{
using (var s1 = new NSString ("Authorization"))
using (var s2 = new NSString ("ok"))
using (var s3 = new NSString ("fail"))
using (var md = NSMutableDictionary.FromObjectAndKey (s2, s1))
using (var ur = new NSUrlRequest ())
using (var mur = (NSMutableUrlRequest)ur.MutableCopy ()) {
Assert.Null (ur.Headers, "NSUrlRequest / Headers / null");
Assert.Null (mur.Headers, "NSMutableUrlRequest / Headers / null");
mur.Headers = md;
// that a bit like lying, we still consider it an NSMutableDictionary but it't not mutable
Assert.That (mur.Headers, Is.TypeOf (typeof (NSMutableDictionary)), "NSMutableDictionary");
#if !MONOMAC // No Simulator for mac
// that would crash on devices
// NSInternalInconsistencyException -[__NSCFDictionary setObject:forKey:]: mutating method sent to immutable object
if (Runtime.Arch == Arch.SIMULATOR) {
bool native_exception = false;
try {
mur.Headers.SetValueForKey (s3, s1);
Assert.Fail ("exception immutability");
} catch {
native_exception = true;
}
Assert.True (native_exception, "non-mutable NSDictionary");
// the original NSMutableDictionary is fine - but it's not what's being used, i.e. property is "copy"
md.Remove (s1);
Assert.That (md.Count, Is.EqualTo (0), "1");
Assert.That (mur.Headers.Count, Is.EqualTo (1), "2");
md.SetValueForKey (s3, s1);
Assert.That (md.Count, Is.EqualTo (1), "3");
Assert.That (mur.Headers.Count, Is.EqualTo (1), "40");
Assert.AreNotSame (md, mur.Headers, "!same");
}
#endif
// https://www.bignerdranch.com/blog/about-mutability/
Assert.That (mur.Headers.Class.Name, Is.EqualTo ("__NSCFDictionary"), "__NSCFDictionary");
}
}
}
}