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

86 строки
2.5 KiB
C#
Исходник Обычный вид История

2016-05-26 16:06:52 +03:00
//
// Unit tests for NSCoder
//
// Authors:
// Rolf Bjarne Kvinge <rolf@xamarin.com>
//
// Copyright 2014 Xamarin Inc. All rights reserved.
//
using System;
using System.IO;
using System.Net;
using System.Runtime.InteropServices;
#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 CoderTest {
[Test]
public void EncodeDecodeTest ()
{
var buffer = new byte[] { 3, 14, 15 };
var obj = new NSString ();
byte[] data;
var ptr = Marshal.AllocHGlobal (buffer.Length);
for (int i = 0; i < buffer.Length; i++)
Marshal.WriteByte (ptr, i, buffer [i]);
using (var mutableData = new NSMutableData (1024)) {
using (var coder = new NSKeyedArchiver (mutableData)) {
coder.Encode (obj, "obj");
coder.Encode (buffer, "buffer");
coder.Encode (Int32.MaxValue, "int32");
coder.Encode (float.MaxValue, "float");
coder.Encode (double.MaxValue, "double");
coder.Encode (true, "bool");
coder.Encode (long.MaxValue, "long");
coder.Encode (buffer, 2, 1, "buffer2");
#if XAMCORE_2_0
coder.Encode (nint.MaxValue, "nint");
#endif
coder.EncodeBlock (ptr, buffer.Length, "block");
coder.FinishEncoding ();
}
using (var decoder = new NSKeyedUnarchiver (mutableData)) {
Assert.IsNotNull (decoder.DecodeObject ("obj"));
var buf = decoder.DecodeBytes ("buffer");
Assert.AreEqual (buf.Length, buffer.Length, "buffer.length");
for (int i = 0; i < buf.Length; i++)
Assert.AreEqual (buf [i], buffer [i], "buffer [" + i.ToString () + "]");
Assert.AreEqual (Int32.MaxValue, decoder.DecodeInt ("int32"));
Assert.AreEqual (float.MaxValue, decoder.DecodeFloat ("float"));
Assert.AreEqual (true, decoder.DecodeBool ("bool"));
Assert.AreEqual (long.MaxValue, decoder.DecodeLong ("long"));
buf = decoder.DecodeBytes ("buffer2");
Assert.AreEqual (buf.Length, buffer.Length, "buffer2.length");
for (int i = 0; i < buf.Length; i++)
Assert.AreEqual (buf [i], buffer [i], "buffer2 [" + i.ToString () + "]");
#if XAMCORE_2_0
Assert.AreEqual (nint.MaxValue, decoder.DecodeNInt ("nint"));
#endif
buf = decoder.DecodeBytes ("block");
Assert.AreEqual (buf.Length, buffer.Length, "block.length");
for (int i = 0; i < buf.Length; i++)
Assert.AreEqual (buf [i], buffer [i], "block [" + i.ToString () + "]");
}
}
Marshal.FreeHGlobal (ptr);
}
}
}