Просмотр исходного кода

* AppSettingsExpressionBuilder.cs: fixed GetAppSetting, should convert to property type
* added AppSettingsExpressionBuilderTest.cs

svn path=/trunk/mcs/; revision=91832

Vladimir Krasnov 18 лет назад
Родитель
Сommit
86e69e623f

+ 9 - 2
mcs/class/System.Web/System.Web.Compilation/AppSettingsExpressionBuilder.cs

@@ -36,6 +36,7 @@ using System.ComponentModel;
 using System.Configuration;
 using System.Web.Configuration;
 using System.Web.UI;
+using System.Reflection;
 
 namespace System.Web.Compilation {
 
@@ -60,8 +61,14 @@ namespace System.Web.Compilation {
 		public static object GetAppSetting (string key, Type targetType, string propertyName)
 		{
 			try {
-				TypeConverter converter = TypeDescriptor.GetConverter (targetType);
-				return converter.ConvertFrom (GetAppSetting (key));
+				object value = GetAppSetting (key);
+
+				PropertyInfo pi = targetType.GetProperty(propertyName);
+				if (pi == null)
+					return value.ToString ();
+
+				TypeConverter converter = TypeDescriptor.GetConverter (pi.PropertyType);
+				return converter.ConvertFrom (value);
 			}
 			catch (NotSupportedException) {
 				throw new InvalidOperationException (String.Format ("Could not convert app setting {0} to type {1}", key, targetType));

+ 5 - 0
mcs/class/System.Web/System.Web.Compilation/ChangeLog

@@ -1,3 +1,8 @@
+2007-12-23  Vladimir Krasnov  <[email protected]>
+
+	* AppSettingsExpressionBuilder.cs: fixed GetAppSetting, should convert
+	to property type
+
 2007-12-21  Marek Habersack  <[email protected]>
 
 	* BaseCompiler.cs: Refactoring. Move the provider creation code to

+ 1 - 0
mcs/class/System.Web/System.Web_test.dll.sources

@@ -49,6 +49,7 @@ System.Web/StaticSiteMapProviderTest.cs
 System.Web/TraceContextRecordTest.cs
 System.Web.Compilation/ClientBuildManagerParameterTest.cs
 System.Web.Compilation/TemplateControlCompilerTest.cs
+System.Web.Compilation/AppSettingsExpressionBuilderTest.cs
 System.Web.Configuration/AnonymousIdentificationSectionTest.cs
 System.Web.Configuration/AssemblyCollectionTest.cs
 System.Web.Configuration/AssemblyInfoTest.cs

+ 102 - 0
mcs/class/System.Web/Test/System.Web.Compilation/AppSettingsExpressionBuilderTest.cs

@@ -0,0 +1,102 @@
+//
+// Tests for System.Web.UI.WebControls.ListBoxTest.cs
+//
+// Author:
+//  Vladimir Krasnov ([email protected])
+//
+
+//
+// Copyright (C) 2005 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+#if NET_2_0
+
+using NUnit.Framework;
+using System;
+using System.IO;
+using System.Drawing;
+using System.Collections.Specialized;
+using System.Globalization;
+using System.Web;
+using System.Web.UI;
+using System.Web.UI.WebControls;
+using System.Data;
+using MonoTests.stand_alone.WebHarness;
+using MonoTests.SystemWeb.Framework;
+using System.Web.Compilation;
+
+namespace MonoTests.System.Web.Compilation
+{
+	public class SettingTestingType
+	{
+		private string strProp;
+		private int intProp;
+
+		public string StrProp
+		{
+			get { return strProp; }
+			set { strProp = value; }
+		}
+
+		public int IntProp
+		{
+			get { return intProp; }
+			set { intProp = value; }
+		}
+	}
+
+	[TestFixture]
+	public class AppSettingsExpressionBuilderTest
+	{
+
+		[Test]
+		[Category ("NunitWeb")]
+		public void GetAppSetting1 ()
+		{
+			PageDelegates pd = new PageDelegates ();
+			pd.Load = GetAppSetting_Load1;
+			WebTest test = new WebTest (new PageInvoker (pd));
+			string html = test.Run ();
+
+		}
+
+		public static void GetAppSetting_Load1 (Page p)
+		{
+			object o = AppSettingsExpressionBuilder.GetAppSetting ("strvalue", typeof (SettingTestingType), "StrProp");
+			Assert.AreEqual (typeof (string), o.GetType (), "GetAppSetting1 #1");
+			Assert.AreEqual ("str", o, "GetAppSetting1 #2");
+
+			o = AppSettingsExpressionBuilder.GetAppSetting ("strvalue", typeof (SettingTestingType), "NotExistsProp");
+			Assert.AreEqual (typeof (string), o.GetType (), "GetAppSetting1 #3");
+			Assert.AreEqual ("str", o, "GetAppSetting1 #4");
+
+			o = AppSettingsExpressionBuilder.GetAppSetting ("intvalue", typeof (SettingTestingType), "IntProp");
+			Assert.AreEqual (typeof (int), o.GetType (), "GetAppSetting1 #5");
+			Assert.AreEqual (123, o, "GetAppSetting1 #6");
+
+			o = AppSettingsExpressionBuilder.GetAppSetting ("intvalue", typeof (SettingTestingType), "NotExistsProp");
+			Assert.AreEqual (typeof (string), o.GetType (), "GetAppSetting1 #7");
+			Assert.AreEqual ("123", o, "GetAppSetting1 #8");
+		}
+	}
+}
+#endif

+ 4 - 0
mcs/class/System.Web/Test/System.Web.Compilation/ChangeLog

@@ -1,3 +1,7 @@
+2007-12-23  Vladimir Krasnov <[email protected]>
+
+	* added AppSettingsExpressionBuilderTest.cs
+
 2006-06-21 Andrew Skiba <[email protected]>
 
 	* TemplateControlCompilerTest.cs: NunitWeb refactoring

+ 4 - 0
mcs/class/System.Web/Test/mainsoft/NunitWeb/NunitWeb/Resources/Web.config

@@ -1,5 +1,9 @@
 <?xml version="1.0" encoding="utf-8" ?>
 <configuration>
+  <appSettings>
+    <add key="strvalue" value="str" />
+    <add key="intvalue" value="123" />
+  </appSettings>
   <system.web>
     <siteMap enabled="true"/>
     <compilation debug="true">

+ 4 - 0
mcs/class/System.Web/Test/mainsoft/NunitWeb/NunitWeb/Resources/Web.mono.config

@@ -1,5 +1,9 @@
 <?xml version="1.0" encoding="utf-8" ?>
 <configuration>
+  <appSettings>
+    <add key="strvalue" value="str" />
+    <add key="intvalue" value="123" />
+  </appSettings>
   <system.web>
     <siteMap enabled="true"/>
       <compilation debug="true">