//-----------------------------------------------------------------------
//
// Copyright (c) Andrew Arnott. All rights reserved.
//
//-----------------------------------------------------------------------
namespace DotNetOAuth.Test {
using System;
using System.Collections.Generic;
using Microsoft.VisualStudio.TestTools.UnitTesting;
///
/// Tests for the class.
///
[TestClass()]
public class MessageSerializerTest : TestBase {
[TestMethod, ExpectedException(typeof(ArgumentNullException))]
public void SerializeNull() {
var serializer = new ProtocolMessageSerializer();
serializer.Serialize(null);
}
[TestMethod, ExpectedException(typeof(ArgumentNullException))]
public void SerializeNullFields() {
var serializer = new ProtocolMessageSerializer();
serializer.Serialize(null, new Mocks.TestMessage());
}
[TestMethod, ExpectedException(typeof(ArgumentNullException))]
public void SerializeNullMessage() {
var serializer = new ProtocolMessageSerializer();
serializer.Serialize(new Dictionary(), null);
}
[TestMethod, ExpectedException(typeof(ProtocolException))]
public void SerializeInvalidMessage() {
var serializer = new ProtocolMessageSerializer();
Dictionary fields = new Dictionary(StringComparer.Ordinal);
Mocks.TestMessage message = new DotNetOAuth.Test.Mocks.TestMessage();
message.EmptyMember = "invalidvalue";
serializer.Serialize(message);
}
[TestMethod()]
public void SerializeTest() {
var serializer = new ProtocolMessageSerializer();
var message = new Mocks.TestMessage { Age = 15, Name = "Andrew", Location = new Uri("http://localhost") };
IDictionary actual = serializer.Serialize(message);
Assert.AreEqual(3, actual.Count);
// Test case sensitivity of generated dictionary
Assert.IsFalse(actual.ContainsKey("Age"));
Assert.IsTrue(actual.ContainsKey("age"));
// Test contents of dictionary
Assert.AreEqual("15", actual["age"]);
Assert.AreEqual("Andrew", actual["Name"]);
Assert.AreEqual("http://localhost/", actual["Location"]);
Assert.IsFalse(actual.ContainsKey("EmptyMember"));
}
[TestMethod]
public void SerializeToExistingDictionary() {
var serializer = new ProtocolMessageSerializer();
var message = new Mocks.TestMessage { Age = 15, Name = "Andrew" };
var fields = new Dictionary();
fields["someExtraField"] = "someValue";
serializer.Serialize(fields, message);
Assert.AreEqual(3, fields.Count);
Assert.AreEqual("15", fields["age"]);
Assert.AreEqual("Andrew", fields["Name"]);
Assert.AreEqual("someValue", fields["someExtraField"]);
}
[TestMethod, ExpectedException(typeof(ArgumentNullException))]
public void DeserializeNull() {
var serializer = new ProtocolMessageSerializer();
serializer.Deserialize(null);
}
[TestMethod()]
public void DeserializeSimple() {
var serializer = new ProtocolMessageSerializer();
Dictionary fields = new Dictionary(StringComparer.Ordinal);
// We deliberately do this OUT of alphabetical order (caps would go first),
// since DataContractSerializer demands things to be IN alphabetical order.
fields["age"] = "15";
fields["Name"] = "Andrew";
var actual = serializer.Deserialize(fields);
Assert.AreEqual(15, actual.Age);
Assert.AreEqual("Andrew", actual.Name);
Assert.IsNull(actual.EmptyMember);
}
[TestMethod]
public void DeserializeWithExtraFields() {
var serializer = new ProtocolMessageSerializer();
Dictionary fields = new Dictionary(StringComparer.Ordinal);
fields["age"] = "15";
fields["Name"] = "Andrew";
// Add some field that is not recognized by the class. This simulates a querystring with
// more parameters than are actually interesting to the protocol message.
fields["someExtraField"] = "asdf";
var actual = serializer.Deserialize(fields);
Assert.AreEqual(15, actual.Age);
Assert.AreEqual("Andrew", actual.Name);
Assert.IsNull(actual.EmptyMember);
}
[TestMethod, ExpectedException(typeof(ProtocolException))]
public void DeserializeEmpty() {
var serializer = new ProtocolMessageSerializer();
var fields = new Dictionary(StringComparer.Ordinal);
serializer.Deserialize(fields);
}
[TestMethod, ExpectedException(typeof(ProtocolException))]
public void DeserializeInvalidMessage() {
var serializer = new ProtocolMessageSerializer();
Dictionary fields = new Dictionary(StringComparer.Ordinal);
// Set an disallowed value.
fields["age"] = "-1";
serializer.Deserialize(fields);
}
}
}