Pārlūkot izejas kodu

2008-10-09 Marek Habersack <[email protected]>

	* WebTest.cs: made the Host property internal. It is used to
	access the host's application domain when necessary in some
	tests.

	* MyTemplateControls.cs: added

2008-10-09  Marek Habersack  <[email protected]>

	* NunitWebResources/TemplateControlParsingTest.aspx: added

2008-10-09  Marek Habersack  <[email protected]>

	* TemplateControlCompilerTest.cs: compile the file on 1.1 as well.
	Added a test for template parsing in compound controls.

svn path=/trunk/mcs/; revision=115324
Marek Habersack 17 gadi atpakaļ
vecāks
revīzija
4e78b2f2ff

+ 2 - 1
mcs/class/System.Web/Makefile

@@ -143,7 +143,8 @@ TEST_RESOURCE_FILES = \
 	Test/mainsoft/NunitWebResources/RedirectOnError.aspx \
 	Test/mainsoft/NunitWebResources/TestCapability.browser \
 	Test/mainsoft/NunitWebResources/PageWithAdapter.aspx \
-	Test/mainsoft/MainsoftWebTest/nunitweb_config.xml 
+	Test/mainsoft/MainsoftWebTest/nunitweb_config.xml \
+	Test/mainsoft/NunitWebResources/TemplateControlParsingTest.aspx
 
 RESX_DIST =  resources/TranslationResources.resx
 ifeq (net_2_0, $(PROFILE))

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

@@ -24,6 +24,7 @@ mainsoft/NunitWeb/NunitWeb/HandlerInvoker.cs
 mainsoft/NunitWeb/NunitWeb/MyHandler.cs
 mainsoft/NunitWeb/NunitWeb/MyHost.cs
 mainsoft/NunitWeb/NunitWeb/MyPageHandlerFactory.cs
+mainsoft/NunitWeb/NunitWeb/MyTemplateControls.cs
 mainsoft/NunitWeb/NunitWeb/PageDelegates.cs
 mainsoft/NunitWeb/NunitWeb/PageInvoker.cs
 mainsoft/NunitWeb/NunitWeb/PostableRequest.cs

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

@@ -1,3 +1,8 @@
+2008-10-09  Marek Habersack  <[email protected]>
+
+	* TemplateControlCompilerTest.cs: compile the file on 1.1 as well.
+	Added a test for template parsing in compound controls.
+
 2008-02-08  Gert Driesen  <[email protected]>
 
 	* AppSettingsExpressionBuilderTest.cs: Added and improved tests for

+ 22 - 4
mcs/class/System.Web/Test/System.Web.Compilation/TemplateControlCompilerTest.cs

@@ -1,5 +1,4 @@
-#if NET_2_0
-
+using System;
 using MonoTests.SystemWeb.Framework;
 using NUnit.Framework;
 using System.Web.UI.WebControls;
@@ -31,14 +30,33 @@ namespace MonoTests.System.Web.Compilation {
 			WebTest.CopyResource (GetType (), "ReadOnlyPropertyControl.ascx", "ReadOnlyPropertyControl.ascx");
 			new WebTest ("ReadOnlyPropertyBind.aspx").Run ();
 		}
+
+		[Test]
+		public void ChildTemplatesTest ()
+		{
+			try {
+				WebTest.Host.AppDomain.AssemblyResolve += new ResolveEventHandler (ResolveAssemblyHandler);
+				WebTest.CopyResource (GetType (), "TemplateControlParsingTest.aspx", "TemplateControlParsingTest.aspx");
+				new WebTest ("TemplateControlParsingTest.aspx").Run ();
+			} finally {
+				WebTest.Host.AppDomain.AssemblyResolve -= new ResolveEventHandler (ResolveAssemblyHandler);
+			}
+		}
+		
 		[TestFixtureTearDown]
 		public void TearDown ()
 		{
 			Thread.Sleep (100);
 			WebTest.Unload ();
 		}
+
+		public static Assembly ResolveAssemblyHandler (object sender, ResolveEventArgs e)
+		{
+			if (e.Name != "System.Web_test")
+				return null;
+
+			return Assembly.GetExecutingAssembly ();
+		}
 	}
 }
 
-#endif
-

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

@@ -1,3 +1,7 @@
+2008-10-09  Marek Habersack  <[email protected]>
+
+	* NunitWebResources/TemplateControlParsingTest.aspx: added
+
 2008-07-28  Marek Habersack  <[email protected]>
 
 	* NunitWeb/Makefile (NunitWeb.dll): added dependency on

+ 8 - 0
mcs/class/System.Web/Test/mainsoft/NunitWeb/NunitWeb/ChangeLog

@@ -1,3 +1,11 @@
+2008-10-09  Marek Habersack  <[email protected]>
+
+	* WebTest.cs: made the Host property internal. It is used to
+	access the host's application domain when necessary in some
+	tests.
+
+	* MyTemplateControls.cs: added
+
 2008-07-28  Marek Habersack  <[email protected]>
 
 	* StandardUrl.cs: added a new standard url -

+ 117 - 0
mcs/class/System.Web/Test/mainsoft/NunitWeb/NunitWeb/MyTemplateControls.cs

@@ -0,0 +1,117 @@
+using System;
+using System.Web;
+using System.Web.UI;
+using System.Web.UI.WebControls;
+
+namespace MyTemplateControls
+{
+  public class TestTemplateItemEventArgs : EventArgs
+  {
+    TestTemplateItem item;
+
+    public TestTemplateItem Item {
+      get { return item; }
+    }
+
+    public TestTemplateItemEventArgs (TestTemplateItem item)
+    {
+      this.item = item;
+    }
+  }
+
+  public delegate void TestTemplateItemCreatedEventHandler (TestTemplateControl sender, TestTemplateItemEventArgs args);
+  
+  public class TestTemplateControl : WebControl, INamingContainer
+  {
+    public event TestTemplateItemCreatedEventHandler ItemCreated;
+
+    TestContainerControl container;
+    
+    public TestContainerControl Container {
+      get { return container; }
+    }
+
+    public TestTemplateControl ()
+    {
+      container = new TestContainerControl (this);
+    }
+
+    protected override void CreateChildControls ()
+    {
+      Controls.Clear ();
+      container.AddItem ();
+      Controls.Add (container);
+    }
+    
+    internal void OnItemCreated (TestTemplateItem item)
+    {
+      TestTemplateItemCreatedEventHandler eh = ItemCreated;
+
+      if (eh != null)
+	eh (this, new TestTemplateItemEventArgs (item));
+    }
+  }
+
+  public class TestContainerControl : WebControl, INamingContainer
+  {
+    TestTemplateControl owner;
+    ITemplate itemTemplate;
+    
+    [PersistenceMode (PersistenceMode.InnerProperty)]
+    [TemplateContainer (typeof (TestTemplateItem))]
+    public ITemplate ItemTemplate {
+      get { return itemTemplate; }
+      set { itemTemplate = value; }
+    }
+    
+    public TestTemplateControl Owner {
+      get { return owner; }
+    }
+
+    public TestContainerControl (TestTemplateControl owner)
+    {
+      this.owner = owner;
+    }
+
+    public void AddItem ()
+    {
+      TestTemplateItem item = new TestTemplateItem (this);
+      item.SetupItem ();
+      Controls.Add (item);
+    }
+  }
+  
+  sealed class DefaultTemplate : ITemplate
+  {
+    void ITemplate.InstantiateIn (Control container)
+    {
+      Label label = new Label ();
+      label.Text = "Default Template Label";
+
+      container.Controls.Add (label);
+    }
+  }
+  
+  public class TestTemplateItem : Control, INamingContainer
+  {
+    TestContainerControl container;
+
+    public TestTemplateItem (TestContainerControl container)
+    {
+      this.container = container;
+    }
+    
+    public void SetupItem ()
+    {
+      ITemplate template;
+
+      if (container.ItemTemplate == null)
+	template = new DefaultTemplate ();
+      else
+	template = container.ItemTemplate;
+
+      template.InstantiateIn (this);
+      container.Owner.OnItemCreated (this);
+    }
+  }
+}

+ 1 - 1
mcs/class/System.Web/Test/mainsoft/NunitWeb/NunitWeb/WebTest.cs

@@ -104,7 +104,7 @@ namespace MonoTests.SystemWeb.Framework
 		}
 
 		static MyHost host;
-		private static MyHost Host
+		internal static MyHost Host
 		{
 			get {
 				EnsureHosting ();

+ 23 - 0
mcs/class/System.Web/Test/mainsoft/NunitWebResources/TemplateControlParsingTest.aspx

@@ -0,0 +1,23 @@
+<%@ Page Language="C#" %>
+<%@ Register Assembly="System.Web_test" Namespace="MyTemplateControls" TagPrefix="mc" %>
+<script runat="server">
+  void TemplateControl2_ItemCreated (TestTemplateControl sender, TestTemplateItemEventArgs args)
+  {
+     PlaceHolder ph = args.Item.FindControl ("PlaceHolder1") as PlaceHolder;
+     if (ph == null)
+        throw new InvalidOperationException ("Missing PlaceHolder1 - template children processing is broken in TemplateCompiler.");
+  }
+</script>
+<html><head><title>Templates test</title></head>
+  <body>
+    <form runat="server">
+      <mc:TestTemplateControl runat="server" id="templateControl2" OnItemCreated="TemplateControl2_ItemCreated">
+	<Container>
+	  <ItemTemplate>
+	    <asp:PlaceHolder runat="server" id="PlaceHolder1"/>
+	  </ItemTemplate>
+	</Container>
+      </mc:TestTemplateControl>
+    </form>
+  </body>
+</html>