1 //
2 // System.Web.HttpBrowserCapabilitiesTest.cs - Unit tests for System.Web.HttpBrowserCapabilities
3 //
4 // Author:
5 //	Adar Wesley <adarw@mainsoft.com>
6 //
7 // Copyright (C) 2007 Mainsoft, Inc (http://www.mainsoft.com)
8 //
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
16 //
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
19 //
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27 //
28 using System;
29 using System.Web;
30 using System.Web.UI;
31 using System.IO;
32 using NUnit.Framework;
33 using MonoTests.SystemWeb.Framework;
34 using MonoTests.System.Web.UI;
35 using System.Text;
36 using System.Web.Configuration;
37 using System.Threading;
38 
39 namespace MonoTests.System.Web
40 {
41 	[TestFixture]
42 	[Ignore ("adapters.browser depends on net_4_x_System.Web_test.dll")]
43 	public class AppBrowsersTest
44 	{
45 		[TestFixtureSetUp]
TestFixtureSetUp()46 		public void TestFixtureSetUp ()
47 		{
48 			WebTest.CleanApp();
49 			WebTest.CopyResource(typeof(HttpBrowserCapabilitiesTest), "TestCapability.browser",
50 				Path.Combine("App_Browsers", "TestCapability.browser"));
51 			WebTest.CopyResource (GetType (), "adapters.browser",
52 	        	Path.Combine("App_Browsers", "adapters.browser"));
53 		}
54 
55 		[TestFixtureTearDown]
TestFixtureTearDown()56 		public void TestFixtureTearDown ()
57 		{
58 			WebTest.CleanApp();
59 		}
60 
61 		[Test]
62 		[Category ("NunitWeb")]
AppBrowsersCapabilities()63 		public void AppBrowsersCapabilities ()
64 		{
65 			WebTest t = new WebTest (PageInvoker.CreateOnLoad (AppBrowsersCapabilities_OnLoad));
66 			t.Request.UserAgent = "testUserAgent";
67 			t.Run ();
68 		}
69 
AppBrowsersCapabilities_OnLoad(Page p)70 		public static void AppBrowsersCapabilities_OnLoad (Page p)
71 		{
72 			HttpRequest request = p.Request;
73 			HttpCapabilitiesBase caps = request.Browser;
74 
75 			Assert.IsFalse (String.IsNullOrEmpty(caps.Browser), "Browser");
76 			Assert.AreEqual ("testUserAgent", request.UserAgent, "AppBrowsersCapabilities #1");
77 			Assert.AreEqual ("testUserAgent", caps[""], "AppBrowsersCapabilities #2");
78 			Assert.AreEqual ("default", caps["notChanged"], "AppBrowsersCapabilities #3");
79 			Assert.AreEqual ("uaInOrig:testUserAgent", caps["capturedInOrigNode"], "AppBrowsersCapabilities #4");
80 			Assert.AreEqual ("added", caps["addedInRefNode"], "AppBrowsersCapabilities #5");
81 			Assert.AreEqual ("changed", caps["changedInRefNode"], "AppBrowsersCapabilities #6");
82 			Assert.AreEqual ("uaInRef:testUserAgent", caps["capturedInRefNode"], "AppBrowsersCapabilities #7");
83 			// This property is inherited from browscap.ini
84 			Assert.AreEqual ("0", caps["majorver"], "AppBrowsersCapabilities #8");
85 			// This capability uses multiple substitutions
86 			Assert.AreEqual ("uaInOrig:testUserAgent uaInRef:testUserAgent", caps["multipleSubstitutions"],
87 			                 "AppBrowsersCapabilities #9");
88 			Assert.AreEqual ("10%*$100=$10", caps["specialCharsInValue"],
89 			                 "AppBrowsersCapabilities #10");
90 		}
91 
92 		[Test]
93 		[Category ("NunitWeb")]
CompatBrowserIE7()94 		public void CompatBrowserIE7 ()
95 		{
96 			WebTest t = new WebTest (PageInvoker.CreateOnLoad (CompatBrowserIE7_OnLoad));
97 			t.Request.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)";
98 			t.Run ();
99 		}
100 
CompatBrowserIE7_OnLoad(Page p)101 		public static void CompatBrowserIE7_OnLoad (Page p)
102 		{
103 			HttpRequest request = p.Request;
104 			HttpCapabilitiesBase caps = request.Browser;
105 
106 			Assert.AreEqual ("added", caps["addedInIE6to9RefNode"], "CompatBrowserIE7 #1");
107 		}
108 
109 		[Test]
110 		[Category ("NunitWeb")]
TagWriter()111 		public void TagWriter()
112 		{
113 			WebTest t = new WebTest (PageInvoker.CreateOnLoad (TagWriter_OnLoad));
114 			t.Request.UserAgent = "testUserAgent";
115 			t.Run ();
116 		}
117 
TagWriter_OnLoad(Page p)118 		public static void TagWriter_OnLoad (Page p)
119 		{
120 			HttpRequest request = p.Request;
121 			HttpCapabilitiesBase caps = request.Browser;
122 
123 			Assert.AreEqual (typeof(CustomHtmlTextWriter), caps.TagWriter, "TagWriter #1");
124 		}
125 
126 		[Test]
127 		[Category ("NunitWeb")]
CreateHtmlTextWriter()128 		public void CreateHtmlTextWriter()
129 		{
130 			WebTest t = new WebTest (PageInvoker.CreateOnLoad (CreateHtmlTextWriter_OnLoad));
131 			t.Request.UserAgent = "testUserAgent";
132 			t.Run ();
133 			Assert.IsTrue(t.Response.Body.Contains(@"renderedby=""CustomHtmlTextWriter"""),
134 				"CreateHtmlTextWriter #2");
135 		}
136 
CreateHtmlTextWriter_OnLoad(Page p)137 		public static void CreateHtmlTextWriter_OnLoad (Page p)
138 		{
139 			HttpRequest request = p.Request;
140 			HttpCapabilitiesBase caps = request.Browser;
141 
142 			Assert.AreEqual (typeof(CustomHtmlTextWriter),
143 				caps.CreateHtmlTextWriter(new StringWriter()).GetType(),
144 				"CreateHtmlTextWriter #1");
145 		}
146 
147 		[Test]
148 		[Category ("NunitWeb")]
Adapter()149 		public void Adapter ()
150 		{
151 			WebTest t = new WebTest (PageInvoker.CreateOnInit (Adapter_Init));
152 			t.Request.UserAgent = "testUserAgent";
153 			string html = t.Run ();
154 		}
155 
Adapter_Init(Page p)156 		public static void Adapter_Init (Page p)
157 		{
158 		        Customadaptercontrol ctrl = new Customadaptercontrol ();
159 		        p.Controls.Add (ctrl);
160 		        ctrl.Load += new EventHandler (Adapter_ctrl_Load);
161 		}
162 
Adapter_ctrl_Load(object sender, EventArgs e)163 		static void Adapter_ctrl_Load (object sender, EventArgs e)
164 		{
165 		        Assert.IsNotNull (((Customadaptercontrol) sender).Adapter, "Adapter Failed#1");
166 		        Assert.AreEqual ("MonoTests.System.Web.UI.Customadapter", ((Customadaptercontrol) sender).Adapter.ToString (),
167 		        	"Adapter Failed#2");
168 		}
169 
170 		[Test]
171 		[Category ("NunitWeb")]
ResolveAdapter_1()172 		public void ResolveAdapter_1 ()
173 		{
174 			WebTest t = new WebTest (PageInvoker.CreateOnInit (ResolveAdapter_Init));
175 			t.Request.UserAgent = "testUserAgent";
176 			string html = t.Run ();
177 		}
178 
ResolveAdapter_Init(Page p)179 		public static void ResolveAdapter_Init (Page p)
180 		{
181 		        Customadaptercontrol ctrl = new Customadaptercontrol ();
182 		        p.Controls.Add (ctrl);
183 		        ctrl.Load += new EventHandler (ResolveAdapter_ctrl_Load);
184 
185 		        Customadaptercontrol derivedCtrl = new DerivedCustomadaptercontrol ();
186 		        p.Controls.Add (derivedCtrl);
187 		        derivedCtrl.Load += new EventHandler (ResolveAdapter_derivedCtrl_Load);
188 		}
189 
ResolveAdapter_ctrl_Load(object sender, EventArgs e)190 		static void ResolveAdapter_ctrl_Load (object sender, EventArgs e)
191 		{
192 		        Assert.IsNotNull (((Customadaptercontrol) sender).ResolveAdapter (), "ResolveAdapter Failed#1");
193 		        Assert.AreEqual ("MonoTests.System.Web.UI.Customadapter", ((Customadaptercontrol) sender).ResolveAdapter ().ToString (),
194 		        	"ResolveAdapter Failed#2");
195 		}
196 
ResolveAdapter_derivedCtrl_Load(object sender, EventArgs e)197 		static void ResolveAdapter_derivedCtrl_Load (object sender, EventArgs e)
198 		{
199 		        Assert.IsNotNull (((Customadaptercontrol) sender).ResolveAdapter (), "ResolveAdapter Failed#2");
200 		        Assert.AreEqual ("MonoTests.System.Web.UI.Customadapter", ((Customadaptercontrol) sender).ResolveAdapter ().ToString (),
201 		        	"ResolveAdapter Failed#2");
202 		}
203 	}
204 
205 	public class CustomHtmlTextWriter : HtmlTextWriter
206 	{
CustomHtmlTextWriter(TextWriter tw)207 		public CustomHtmlTextWriter (TextWriter tw)
208 			: base (tw)
209 		{
210 		}
211 
WriteBeginTag(string s)212 		public override void WriteBeginTag(string s)
213 		{
214 			AddAttribute("renderedby", "CustomHtmlTextWriter");
215 			base.WriteBeginTag(s);
216 		}
217 	}
218 
219 	class DerivedCustomadaptercontrol : Customadaptercontrol
220 	{
DerivedCustomadaptercontrol()221 		internal  DerivedCustomadaptercontrol () : base ()
222 		{
223 		}
224 	}
225 
226 
227 }
228