153 lines
6.3 KiB
C#
153 lines
6.3 KiB
C#
|
// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
|
|||
|
|
|||
|
using System;
|
|||
|
using System.IO;
|
|||
|
using System.Runtime.Serialization;
|
|||
|
using System.Runtime.Serialization.Json;
|
|||
|
using System.Xml.Serialization;
|
|||
|
|
|||
|
namespace Microsoft.TestCommon
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// MSTest utility for testing code operating against a stream.
|
|||
|
/// </summary>
|
|||
|
public class SerializerAssert
|
|||
|
{
|
|||
|
private static SerializerAssert singleton = new SerializerAssert();
|
|||
|
|
|||
|
public static SerializerAssert Singleton { get { return singleton; } }
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Creates a <see cref="Stream"/>, serializes <paramref name="objectInstance"/> to it using
|
|||
|
/// <see cref="XmlSerializer"/>, rewinds the stream and calls <see cref="codeThatChecks"/>.
|
|||
|
/// </summary>
|
|||
|
/// <param name="type">The type to serialize. It cannot be <c>null</c>.</param>
|
|||
|
/// <param name="objectInstance">The value to serialize.</param>
|
|||
|
/// <param name="codeThatChecks">Code to check the contents of the stream.</param>
|
|||
|
public void UsingXmlSerializer(Type type, object objectInstance, Action<Stream> codeThatChecks)
|
|||
|
{
|
|||
|
if (type == null)
|
|||
|
{
|
|||
|
throw new ArgumentNullException("type");
|
|||
|
}
|
|||
|
|
|||
|
if (codeThatChecks == null)
|
|||
|
{
|
|||
|
throw new ArgumentNullException("codeThatChecks");
|
|||
|
}
|
|||
|
|
|||
|
XmlSerializer serializer = new XmlSerializer(type);
|
|||
|
|
|||
|
using (MemoryStream stream = new MemoryStream())
|
|||
|
{
|
|||
|
serializer.Serialize(stream, objectInstance);
|
|||
|
|
|||
|
stream.Flush();
|
|||
|
stream.Seek(0L, SeekOrigin.Begin);
|
|||
|
|
|||
|
codeThatChecks(stream);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Creates a <see cref="Stream"/>, serializes <paramref name="objectInstance"/> to it using
|
|||
|
/// <see cref="XmlSerializer"/>, rewinds the stream and calls <see cref="codeThatChecks"/>.
|
|||
|
/// </summary>
|
|||
|
/// <typeparam name="T">The type to serialize.</typeparam>
|
|||
|
/// <param name="objectInstance">The value to serialize.</param>
|
|||
|
/// <param name="codeThatChecks">Code to check the contents of the stream.</param>
|
|||
|
public void UsingXmlSerializer<T>(T objectInstance, Action<Stream> codeThatChecks)
|
|||
|
{
|
|||
|
UsingXmlSerializer(typeof(T), objectInstance, codeThatChecks);
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Creates a <see cref="Stream"/>, serializes <paramref name="objectInstance"/> to it using
|
|||
|
/// <see cref="DataContractSerializer"/>, rewinds the stream and calls <see cref="codeThatChecks"/>.
|
|||
|
/// </summary>
|
|||
|
/// <param name="type">The type to serialize. It cannot be <c>null</c>.</param>
|
|||
|
/// <param name="objectInstance">The value to serialize.</param>
|
|||
|
/// <param name="codeThatChecks">Code to check the contents of the stream.</param>
|
|||
|
public void UsingDataContractSerializer(Type type, object objectInstance, Action<Stream> codeThatChecks)
|
|||
|
{
|
|||
|
if (type == null)
|
|||
|
{
|
|||
|
throw new ArgumentNullException("type");
|
|||
|
}
|
|||
|
|
|||
|
if (codeThatChecks == null)
|
|||
|
{
|
|||
|
throw new ArgumentNullException("codeThatChecks");
|
|||
|
}
|
|||
|
|
|||
|
DataContractSerializer serializer = new DataContractSerializer(type);
|
|||
|
|
|||
|
using (MemoryStream stream = new MemoryStream())
|
|||
|
{
|
|||
|
serializer.WriteObject(stream, objectInstance);
|
|||
|
|
|||
|
stream.Flush();
|
|||
|
stream.Seek(0L, SeekOrigin.Begin);
|
|||
|
|
|||
|
codeThatChecks(stream);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Creates a <see cref="Stream"/>, serializes <paramref name="objectInstance"/> to it using
|
|||
|
/// <see cref="DataContractSerializer"/>, rewinds the stream and calls <see cref="codeThatChecks"/>.
|
|||
|
/// </summary>
|
|||
|
/// <typeparam name="T">The type to serialize.</typeparam>
|
|||
|
/// <param name="objectInstance">The value to serialize.</param>
|
|||
|
/// <param name="codeThatChecks">Code to check the contents of the stream.</param>
|
|||
|
public void UsingDataContractSerializer<T>(T objectInstance, Action<Stream> codeThatChecks)
|
|||
|
{
|
|||
|
UsingDataContractSerializer(typeof(T), objectInstance, codeThatChecks);
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Creates a <see cref="Stream"/>, serializes <paramref name="objectInstance"/> to it using
|
|||
|
/// <see cref="DataContractJsonSerializer"/>, rewinds the stream and calls <see cref="codeThatChecks"/>.
|
|||
|
/// </summary>
|
|||
|
/// <param name="type">The type to serialize. It cannot be <c>null</c>.</param>
|
|||
|
/// <param name="objectInstance">The value to serialize.</param>
|
|||
|
/// <param name="codeThatChecks">Code to check the contents of the stream.</param>
|
|||
|
public static void UsingDataContractJsonSerializer(Type type, object objectInstance, Action<Stream> codeThatChecks)
|
|||
|
{
|
|||
|
if (type == null)
|
|||
|
{
|
|||
|
throw new ArgumentNullException("type");
|
|||
|
}
|
|||
|
|
|||
|
if (codeThatChecks == null)
|
|||
|
{
|
|||
|
throw new ArgumentNullException("codeThatChecks");
|
|||
|
}
|
|||
|
|
|||
|
DataContractJsonSerializer serializer = new DataContractJsonSerializer(type);
|
|||
|
|
|||
|
using (MemoryStream stream = new MemoryStream())
|
|||
|
{
|
|||
|
serializer.WriteObject(stream, objectInstance);
|
|||
|
|
|||
|
stream.Flush();
|
|||
|
stream.Seek(0L, SeekOrigin.Begin);
|
|||
|
|
|||
|
codeThatChecks(stream);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Creates a <see cref="Stream"/>, serializes <paramref name="objectInstance"/> to it using
|
|||
|
/// <see cref="DataContractJsonSerializer"/>, rewinds the stream and calls <see cref="codeThatChecks"/>.
|
|||
|
/// </summary>
|
|||
|
/// <typeparam name="T">The type to serialize.</typeparam>
|
|||
|
/// <param name="objectInstance">The value to serialize.</param>
|
|||
|
/// <param name="codeThatChecks">Code to check the contents of the stream.</param>
|
|||
|
public void UsingDataContractJsonSerializer<T>(T objectInstance, Action<Stream> codeThatChecks)
|
|||
|
{
|
|||
|
UsingDataContractJsonSerializer(typeof(T), objectInstance, codeThatChecks);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|