summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAndrew Arnott <andrewarnott@gmail.com>2009-06-06 16:46:15 -0700
committerAndrew Arnott <andrewarnott@gmail.com>2009-06-06 16:46:15 -0700
commit22366139f5bc3b5d308d78b6620b517bc794042c (patch)
tree45c5613f0e528f6b827441fe6671f9a4c89a3920 /src
parentddf0b1632e9ccceca514bfee6f65c5786b078dcd (diff)
downloadDotNetOpenAuth-22366139f5bc3b5d308d78b6620b517bc794042c.zip
DotNetOpenAuth-22366139f5bc3b5d308d78b6620b517bc794042c.tar.gz
DotNetOpenAuth-22366139f5bc3b5d308d78b6620b517bc794042c.tar.bz2
Fixed some failing unit tests and some associated product bugs.
Diffstat (limited to 'src')
-rw-r--r--src/DotNetOpenAuth.Test/OAuth/ChannelElements/SigningBindingElementBaseTests.cs2
-rw-r--r--src/DotNetOpenAuth.Test/OAuth/ChannelElements/UriOrOobEncodingTests.cs10
-rw-r--r--src/DotNetOpenAuth.Test/OAuth/ProtocolTests.cs2
-rw-r--r--src/DotNetOpenAuth/DotNetOpenAuth.csproj1
-rw-r--r--src/DotNetOpenAuth/Messaging/Reflection/IMessagePartNullEncoder.cs18
-rw-r--r--src/DotNetOpenAuth/Messaging/Reflection/MessagePart.cs9
-rw-r--r--src/DotNetOpenAuth/Messaging/Reflection/ValueMapping.cs26
-rw-r--r--src/DotNetOpenAuth/OAuth/ChannelElements/UriOrOobEncoding.cs22
-rw-r--r--src/DotNetOpenAuth/OAuth/Messages/SignedMessageBase.cs2
-rw-r--r--src/DotNetOpenAuth/OAuth/Protocol.cs6
-rw-r--r--src/DotNetOpenAuth/Yadis/HtmlParser.cs4
11 files changed, 74 insertions, 28 deletions
diff --git a/src/DotNetOpenAuth.Test/OAuth/ChannelElements/SigningBindingElementBaseTests.cs b/src/DotNetOpenAuth.Test/OAuth/ChannelElements/SigningBindingElementBaseTests.cs
index 32ccf9e..6e566c8 100644
--- a/src/DotNetOpenAuth.Test/OAuth/ChannelElements/SigningBindingElementBaseTests.cs
+++ b/src/DotNetOpenAuth.Test/OAuth/ChannelElements/SigningBindingElementBaseTests.cs
@@ -64,7 +64,7 @@ namespace DotNetOpenAuth.Test.ChannelElements {
internal static UnauthorizedTokenRequest CreateTestRequestTokenMessage(MessageDescriptionCollection messageDescriptions, MessageReceivingEndpoint endpoint) {
endpoint = endpoint ?? new MessageReceivingEndpoint("https://www.google.com/accounts/OAuthGetRequestToken", HttpDeliveryMethods.AuthorizationHeaderRequest | HttpDeliveryMethods.GetRequest);
- UnauthorizedTokenRequest message = new UnauthorizedTokenRequest(endpoint, Protocol.Default.Version);
+ UnauthorizedTokenRequest message = new UnauthorizedTokenRequest(endpoint, Protocol.V10.Version);
message.ConsumerKey = "nerdbank.org";
((ITamperResistantOAuthMessage)message).ConsumerSecret = "nerdbanksecret";
var signedMessage = (ITamperResistantOAuthMessage)message;
diff --git a/src/DotNetOpenAuth.Test/OAuth/ChannelElements/UriOrOobEncodingTests.cs b/src/DotNetOpenAuth.Test/OAuth/ChannelElements/UriOrOobEncodingTests.cs
index 6616cc3..40fc93e 100644
--- a/src/DotNetOpenAuth.Test/OAuth/ChannelElements/UriOrOobEncodingTests.cs
+++ b/src/DotNetOpenAuth.Test/OAuth/ChannelElements/UriOrOobEncodingTests.cs
@@ -1,5 +1,5 @@
//-----------------------------------------------------------------------
-// <copyright file="UriOrOobEncoderTests.cs" company="Andrew Arnott">
+// <copyright file="UriOrOobEncodingTests.cs" company="Andrew Arnott">
// Copyright (c) Andrew Arnott. All rights reserved.
// </copyright>
//-----------------------------------------------------------------------
@@ -9,8 +9,8 @@ namespace DotNetOpenAuth.Test.OAuth.ChannelElements {
using System.Collections.Generic;
using System.Linq;
using System.Text;
- using Microsoft.VisualStudio.TestTools.UnitTesting;
using DotNetOpenAuth.OAuth.ChannelElements;
+ using Microsoft.VisualStudio.TestTools.UnitTesting;
[TestClass]
public class UriOrOobEncodingTests : TestBase {
@@ -22,11 +22,11 @@ namespace DotNetOpenAuth.Test.OAuth.ChannelElements {
}
/// <summary>
- /// Verifies encoding null URIs results in the value "oob".
+ /// Verifies null value encoding
/// </summary>
[TestMethod]
- public void EncodeNullValueToOob() {
- Assert.AreEqual("oob", this.encoding.Encode(null));
+ public void NullValueEncoding() {
+ Assert.AreEqual("oob", this.encoding.EncodedNullValue);
}
/// <summary>
diff --git a/src/DotNetOpenAuth.Test/OAuth/ProtocolTests.cs b/src/DotNetOpenAuth.Test/OAuth/ProtocolTests.cs
index a6c7306..ce8070b 100644
--- a/src/DotNetOpenAuth.Test/OAuth/ProtocolTests.cs
+++ b/src/DotNetOpenAuth.Test/OAuth/ProtocolTests.cs
@@ -12,7 +12,7 @@ namespace DotNetOpenAuth.Test {
public class ProtocolTests {
[TestMethod]
public void Default() {
- Assert.AreSame(Protocol.V10, Protocol.Default);
+ Assert.AreSame(Protocol.V10a, Protocol.Default);
}
[TestMethod]
diff --git a/src/DotNetOpenAuth/DotNetOpenAuth.csproj b/src/DotNetOpenAuth/DotNetOpenAuth.csproj
index 471c325d..7ec6f96 100644
--- a/src/DotNetOpenAuth/DotNetOpenAuth.csproj
+++ b/src/DotNetOpenAuth/DotNetOpenAuth.csproj
@@ -222,6 +222,7 @@
<Compile Include="Messaging\NetworkDirectWebResponse.cs" />
<Compile Include="Messaging\OutgoingWebResponseActionResult.cs" />
<Compile Include="Messaging\Reflection\IMessagePartEncoder.cs" />
+ <Compile Include="Messaging\Reflection\IMessagePartNullEncoder.cs" />
<Compile Include="Messaging\Reflection\MessageDescriptionCollection.cs" />
<Compile Include="OAuth\ChannelElements\IConsumerCertificateProvider.cs" />
<Compile Include="OAuth\ChannelElements\IConsumerTokenManager.cs" />
diff --git a/src/DotNetOpenAuth/Messaging/Reflection/IMessagePartNullEncoder.cs b/src/DotNetOpenAuth/Messaging/Reflection/IMessagePartNullEncoder.cs
new file mode 100644
index 0000000..7581550
--- /dev/null
+++ b/src/DotNetOpenAuth/Messaging/Reflection/IMessagePartNullEncoder.cs
@@ -0,0 +1,18 @@
+//-----------------------------------------------------------------------
+// <copyright file="IMessagePartNullEncoder.cs" company="Andrew Arnott">
+// Copyright (c) Andrew Arnott. All rights reserved.
+// </copyright>
+//-----------------------------------------------------------------------
+
+namespace DotNetOpenAuth.Messaging.Reflection {
+ /// <summary>
+ /// A message part encoder that has a special encoding for a null value.
+ /// </summary>
+ public interface IMessagePartNullEncoder : IMessagePartEncoder {
+ /// <summary>
+ /// Gets the string representation to include in a serialized message
+ /// when the message part has a <c>null</c> value.
+ /// </summary>
+ string EncodedNullValue { get; }
+ }
+}
diff --git a/src/DotNetOpenAuth/Messaging/Reflection/MessagePart.cs b/src/DotNetOpenAuth/Messaging/Reflection/MessagePart.cs
index 0e26860..493ed71 100644
--- a/src/DotNetOpenAuth/Messaging/Reflection/MessagePart.cs
+++ b/src/DotNetOpenAuth/Messaging/Reflection/MessagePart.cs
@@ -113,10 +113,7 @@ namespace DotNetOpenAuth.Messaging.Reflection {
str => str != null ? Convert.ChangeType(str, this.memberDeclaredType, CultureInfo.InvariantCulture) : null);
}
} else {
- var encoder = GetEncoder(attribute.Encoder);
- this.converter = new ValueMapping(
- obj => encoder.Encode(obj),
- str => encoder.Decode(str));
+ this.converter = new ValueMapping(GetEncoder(attribute.Encoder));
}
// readonly and const fields are considered legal, and "constants" for message transport.
@@ -286,7 +283,7 @@ namespace DotNetOpenAuth.Messaging.Reflection {
/// An instance of the appropriate type for setting the member.
/// </returns>
private object ToValue(string value) {
- return value == null ? null : this.converter.StringToValue(value);
+ return this.converter.StringToValue(value);
}
/// <summary>
@@ -297,7 +294,7 @@ namespace DotNetOpenAuth.Messaging.Reflection {
/// The string representation of the member's value.
/// </returns>
private string ToString(object value) {
- return value == null ? null : this.converter.ValueToString(value);
+ return this.converter.ValueToString(value);
}
/// <summary>
diff --git a/src/DotNetOpenAuth/Messaging/Reflection/ValueMapping.cs b/src/DotNetOpenAuth/Messaging/Reflection/ValueMapping.cs
index bdc2d7f..332274e 100644
--- a/src/DotNetOpenAuth/Messaging/Reflection/ValueMapping.cs
+++ b/src/DotNetOpenAuth/Messaging/Reflection/ValueMapping.cs
@@ -14,12 +14,12 @@ namespace DotNetOpenAuth.Messaging.Reflection {
/// <summary>
/// The mapping function that converts some custom type to a string.
/// </summary>
- internal Func<object, string> ValueToString;
+ internal readonly Func<object, string> ValueToString;
/// <summary>
/// The mapping function that converts a string to some custom type.
/// </summary>
- internal Func<string, object> StringToValue;
+ internal readonly Func<string, object> StringToValue;
/// <summary>
/// Initializes a new instance of the <see cref="ValueMapping"/> struct.
@@ -27,16 +27,24 @@ namespace DotNetOpenAuth.Messaging.Reflection {
/// <param name="toString">The mapping function that converts some custom type to a string.</param>
/// <param name="toValue">The mapping function that converts a string to some custom type.</param>
internal ValueMapping(Func<object, string> toString, Func<string, object> toValue) {
- if (toString == null) {
- throw new ArgumentNullException("toString");
- }
-
- if (toValue == null) {
- throw new ArgumentNullException("toValue");
- }
+ ErrorUtilities.VerifyArgumentNotNull(toString, "toString");
+ ErrorUtilities.VerifyArgumentNotNull(toValue, "toValue");
this.ValueToString = toString;
this.StringToValue = toValue;
}
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ValueMapping"/> struct.
+ /// </summary>
+ /// <param name="encoder">The encoder.</param>
+ internal ValueMapping(IMessagePartEncoder encoder) {
+ ErrorUtilities.VerifyArgumentNotNull(encoder, "encoder");
+ var nullEncoder = encoder as IMessagePartNullEncoder;
+ string nullString = nullEncoder != null ? nullEncoder.EncodedNullValue : null;
+
+ this.ValueToString = obj => (obj != null) ? encoder.Encode(obj) : nullString;
+ this.StringToValue = str => (str != null) ? encoder.Decode(str) : null;
+ }
}
}
diff --git a/src/DotNetOpenAuth/OAuth/ChannelElements/UriOrOobEncoding.cs b/src/DotNetOpenAuth/OAuth/ChannelElements/UriOrOobEncoding.cs
index a31c7ca..5aedc9d 100644
--- a/src/DotNetOpenAuth/OAuth/ChannelElements/UriOrOobEncoding.cs
+++ b/src/DotNetOpenAuth/OAuth/ChannelElements/UriOrOobEncoding.cs
@@ -9,13 +9,14 @@ namespace DotNetOpenAuth.OAuth.ChannelElements {
using System.Collections.Generic;
using System.Linq;
using System.Text;
+ using DotNetOpenAuth.Messaging;
using DotNetOpenAuth.Messaging.Reflection;
/// <summary>
/// An URI encoder that translates null <see cref="Uri"/> references as "oob"
/// instead of an empty/missing argument.
/// </summary>
- internal class UriOrOobEncoding : IMessagePartEncoder {
+ internal class UriOrOobEncoding : IMessagePartNullEncoder {
/// <summary>
/// The string constant "oob", used to indicate an out-of-band configuration.
/// </summary>
@@ -24,9 +25,22 @@ namespace DotNetOpenAuth.OAuth.ChannelElements {
/// <summary>
/// Initializes a new instance of the <see cref="UriOrOobEncoding"/> class.
/// </summary>
- internal UriOrOobEncoding() {
+ public UriOrOobEncoding() {
}
+ #region IMessagePartNullEncoder Members
+
+ /// <summary>
+ /// Gets the string representation to include in a serialized message
+ /// when the message part has a <c>null</c> value.
+ /// </summary>
+ /// <value></value>
+ public string EncodedNullValue {
+ get { return OutOfBandConfiguration; }
+ }
+
+ #endregion
+
#region IMessagePartEncoder Members
/// <summary>
@@ -37,8 +51,10 @@ namespace DotNetOpenAuth.OAuth.ChannelElements {
/// The <paramref name="value"/> in string form, ready for message transport.
/// </returns>
public string Encode(object value) {
+ ErrorUtilities.VerifyArgumentNotNull(value, "value");
+
Uri uriValue = (Uri)value;
- return uriValue != null ? uriValue.AbsoluteUri : OutOfBandConfiguration;
+ return uriValue.AbsoluteUri;
}
/// <summary>
diff --git a/src/DotNetOpenAuth/OAuth/Messages/SignedMessageBase.cs b/src/DotNetOpenAuth/OAuth/Messages/SignedMessageBase.cs
index eb85cb5..1d8ca21 100644
--- a/src/DotNetOpenAuth/OAuth/Messages/SignedMessageBase.cs
+++ b/src/DotNetOpenAuth/OAuth/Messages/SignedMessageBase.cs
@@ -165,7 +165,7 @@ namespace DotNetOpenAuth.OAuth.Messages {
[MessagePart("oauth_version", IsRequired = false)]
private string OAuthVersion {
get {
- return Version.ToString();
+ return Protocol.Lookup(Version).PublishedVersion;
}
set {
diff --git a/src/DotNetOpenAuth/OAuth/Protocol.cs b/src/DotNetOpenAuth/OAuth/Protocol.cs
index 9417efa..b0a53fb 100644
--- a/src/DotNetOpenAuth/OAuth/Protocol.cs
+++ b/src/DotNetOpenAuth/OAuth/Protocol.cs
@@ -89,6 +89,7 @@ namespace DotNetOpenAuth.OAuth {
/// Initializes a new instance of the <see cref="Protocol"/> class.
/// </summary>
internal Protocol() {
+ this.PublishedVersion = "1.0";
}
/// <summary>
@@ -97,6 +98,11 @@ namespace DotNetOpenAuth.OAuth {
internal Version Version { get; private set; }
/// <summary>
+ /// Gets the version to declare on the wire.
+ /// </summary>
+ internal string PublishedVersion { get; private set; }
+
+ /// <summary>
/// Gets the namespace to use for this version of the protocol.
/// </summary>
internal string DataContractNamespace {
diff --git a/src/DotNetOpenAuth/Yadis/HtmlParser.cs b/src/DotNetOpenAuth/Yadis/HtmlParser.cs
index a6b64c1..406cb4b 100644
--- a/src/DotNetOpenAuth/Yadis/HtmlParser.cs
+++ b/src/DotNetOpenAuth/Yadis/HtmlParser.cs
@@ -98,8 +98,8 @@ namespace DotNetOpenAuth.Yadis {
/// <param name="attribute">The attribute.</param>
/// <returns>A filtered sequence of attributes.</returns>
internal static IEnumerable<T> WithAttribute<T>(this IEnumerable<T> sequence, string attribute) where T : HtmlControl {
- Contract.Requires<ArgumentNullException>(sequence != null);
- Contract.Requires<ArgumentException>(!String.IsNullOrEmpty(attribute));
+ Contract.Requires(sequence != null);
+ Contract.Requires(!String.IsNullOrEmpty(attribute));
return sequence.Where(tag => tag.Attributes[attribute] != null);
}