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