diff options
author | Andrew Arnott <andrewarnott@gmail.com> | 2009-11-02 08:43:17 -0800 |
---|---|---|
committer | Andrew Arnott <andrewarnott@gmail.com> | 2009-11-02 08:43:17 -0800 |
commit | 7a9d0f3530cb367768dfa18c82c795380f783f71 (patch) | |
tree | fdd00279cf56438f805935035137fa929f3493f0 /src | |
parent | 0beee6342329d9cac4cf9228427485ffadccd209 (diff) | |
download | DotNetOpenAuth-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')
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. |