summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAndrew Arnott <andrewarnott@gmail.com>2009-11-02 08:43:17 -0800
committerAndrew Arnott <andrewarnott@gmail.com>2009-11-02 08:43:17 -0800
commit7a9d0f3530cb367768dfa18c82c795380f783f71 (patch)
treefdd00279cf56438f805935035137fa929f3493f0 /src
parent0beee6342329d9cac4cf9228427485ffadccd209 (diff)
downloadDotNetOpenAuth-7a9d0f3530cb367768dfa18c82c795380f783f71.zip
DotNetOpenAuth-7a9d0f3530cb367768dfa18c82c795380f783f71.tar.gz
DotNetOpenAuth-7a9d0f3530cb367768dfa18c82c795380f783f71.tar.bz2
Brought the UI extensions' lang parameter up to the new UI 0.5 DRAFT spec.
Diffstat (limited to 'src')
-rw-r--r--src/DotNetOpenAuth.Test/OpenId/Extensions/UI/UIRequestTests.cs21
-rw-r--r--src/DotNetOpenAuth/Messaging/Reflection/MessagePart.cs2
-rw-r--r--src/DotNetOpenAuth/OpenId/Extensions/UI/UIRequest.cs8
3 files changed, 24 insertions, 7 deletions
diff --git a/src/DotNetOpenAuth.Test/OpenId/Extensions/UI/UIRequestTests.cs b/src/DotNetOpenAuth.Test/OpenId/Extensions/UI/UIRequestTests.cs
index f69fc8b..7a60a32 100644
--- a/src/DotNetOpenAuth.Test/OpenId/Extensions/UI/UIRequestTests.cs
+++ b/src/DotNetOpenAuth.Test/OpenId/Extensions/UI/UIRequestTests.cs
@@ -16,15 +16,30 @@ namespace DotNetOpenAuth.Test.OpenId.Extensions.UI {
public void Defaults() {
UIRequest request = new UIRequest();
Assert.AreEqual("popup", request.Mode);
- Assert.AreEqual(CultureInfo.CurrentUICulture, request.LanguagePreference);
+ Assert.AreEqual(1, request.LanguagePreference.Length);
+ Assert.AreEqual(CultureInfo.CurrentUICulture, request.LanguagePreference[0]);
}
[TestMethod]
- public void LanguagePreferenceEncoding() {
+ public void LanguagePreferenceEncodingDecoding() {
var request = new UIRequest();
- request.LanguagePreference = new CultureInfo("en-US");
MessageDictionary dictionary = this.MessageDescriptions.GetAccessor(request);
+
+ request.LanguagePreference = new[] { new CultureInfo("en-US") };
Assert.AreEqual("en-US", dictionary["lang"]);
+
+ request.LanguagePreference = new[] { new CultureInfo("en-US"), new CultureInfo("es-ES") };
+ Assert.AreEqual("en-US,es-ES", dictionary["lang"]);
+
+ // Now test decoding
+ dictionary["lang"] = "en-US";
+ Assert.AreEqual(1, request.LanguagePreference.Length);
+ Assert.AreEqual(new CultureInfo("en-US"), request.LanguagePreference[0]);
+
+ dictionary["lang"] = "en-US,es-ES";
+ Assert.AreEqual(2, request.LanguagePreference.Length);
+ Assert.AreEqual(new CultureInfo("en-US"), request.LanguagePreference[0]);
+ Assert.AreEqual(new CultureInfo("es-ES"), request.LanguagePreference[1]);
}
[TestMethod]
diff --git a/src/DotNetOpenAuth/Messaging/Reflection/MessagePart.cs b/src/DotNetOpenAuth/Messaging/Reflection/MessagePart.cs
index b02e52c..f4bc3fe 100644
--- a/src/DotNetOpenAuth/Messaging/Reflection/MessagePart.cs
+++ b/src/DotNetOpenAuth/Messaging/Reflection/MessagePart.cs
@@ -10,6 +10,7 @@ namespace DotNetOpenAuth.Messaging.Reflection {
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
+ using System.Linq;
using System.Net.Security;
using System.Reflection;
using System.Xml;
@@ -69,6 +70,7 @@ namespace DotNetOpenAuth.Messaging.Reflection {
Map<Identifier>(id => id.ToString(), str => Identifier.Parse(str));
Map<bool>(value => value.ToString().ToLowerInvariant(), str => bool.Parse(str));
Map<CultureInfo>(c => c.Name, str => new CultureInfo(str));
+ Map<CultureInfo[]>(cs => string.Join(",", cs.Select(c => c.Name).ToArray()), str => str.Split(',').Select(s => new CultureInfo(s)).ToArray());
}
/// <summary>
diff --git a/src/DotNetOpenAuth/OpenId/Extensions/UI/UIRequest.cs b/src/DotNetOpenAuth/OpenId/Extensions/UI/UIRequest.cs
index d67d932..841da4b 100644
--- a/src/DotNetOpenAuth/OpenId/Extensions/UI/UIRequest.cs
+++ b/src/DotNetOpenAuth/OpenId/Extensions/UI/UIRequest.cs
@@ -57,18 +57,18 @@ namespace DotNetOpenAuth.OpenId.Extensions.UI {
/// Initializes a new instance of the <see cref="UIRequest"/> class.
/// </summary>
public UIRequest() {
- this.LanguagePreference = CultureInfo.CurrentUICulture;
+ this.LanguagePreference = new[] { CultureInfo.CurrentUICulture };
}
/// <summary>
- /// Gets or sets the user's preferred language.
+ /// Gets or sets the list of user's preferred languages, sorted in decreasing preferred order.
/// </summary>
/// <value>The default is the <see cref="CultureInfo.CurrentUICulture"/> of the thread that created this instance.</value>
/// <remarks>
- /// The user's preferred language, reusing the Language Tag format used by the [Language Preference Attribute] (axschema.org, “Language Preference Attribute,” .) for [OpenID Attribute Exchange] (Hardt, D., Bufu, J., and J. Hoyt, “OpenID Attribute Exchange 1.0,” .) and defined in [RFC4646] (Phillips, A. and M. Davis, “Tags for Identifying Languages,” .). For example "en-US" represents the English language as spoken in the United States, and "fr-CA" represents the French language spoken in Canada.
+ /// The user's preferred languages as a [BCP 47] language priority list, represented as a comma-separated list of BCP 47 basic language ranges in descending priority order. For instance, the value "fr-CA,fr-FR,en-CA" represents the preference for French spoken in Canada, French spoken in France, followed by English spoken in Canada.
/// </remarks>
[MessagePart("lang", AllowEmpty = false)]
- public CultureInfo LanguagePreference { get; set; }
+ public CultureInfo[] LanguagePreference { get; set; }
/// <summary>
/// Gets the style of UI that the RP is hosting the OP's authentication page in.