public void ConfigurationManager_GetHtmlTransformersSection_HtmlTransformers_ShouldDependOnLocations() { string physicalDirectoryPath = AppDomain.CurrentDomain.BaseDirectory; IFileTransfer fileTransfer = new FileTransfer(new FileSystem(), physicalDirectoryPath, physicalDirectoryPath); fileTransfer.AddFile(string.Format(CultureInfo.InvariantCulture, @"{0}\Configuration\Test-configurations\HtmlTransformersSectionTest.DifferentLocations.Web.config", AppDomain.CurrentDomain.BaseDirectory), Path.Combine(physicalDirectoryPath, "Web.config")); SimulatedVirtualPathProvider simulatedVirtualPathProvider = new SimulatedVirtualPathProvider(); simulatedVirtualPathProvider.VirtualFiles.CreateWithDefaultWebFormContentAndAddFile("/Default.aspx"); simulatedVirtualPathProvider.VirtualFiles.CreateWithDefaultWebFormContentAndAddFile("/FiveItemsUsingAddAndRemove/Default.aspx"); simulatedVirtualPathProvider.VirtualFiles.CreateWithDefaultWebFormContentAndAddFile("/NoItemsUsingClear/Default.aspx"); simulatedVirtualPathProvider.VirtualFiles.CreateWithDefaultWebFormContentAndAddFile("/ThreeItemsUsingRemove/Default.aspx"); simulatedVirtualPathProvider.VirtualFiles.CreateWithDefaultWebFormContentAndAddFile("/ThreeItemsUsingRemove/TwoItemsUsingAddAndRemove/Default.aspx"); simulatedVirtualPathProvider.VirtualFiles.CreateWithDefaultWebFormContentAndAddFile("/ThreeItemsUsingRemove/TwoItemsUsingAddAndRemove/NoItemsUsingRemove/Default.aspx"); using(VirtualApplicationHostProxy virtualApplicationHostProxy = new VirtualApplicationHostProxyFactory().Create(fileTransfer, simulatedVirtualPathProvider)) { virtualApplicationHostProxy.AnyApplicationEvent += delegate(HttpApplicationEvent httpApplicationEvent) { if(httpApplicationEvent != HttpApplicationEvent.PostRequestHandlerExecute) return; HttpRequest httpRequest = HttpContext.Current.Request; HtmlTransformerElementCollection htmlTransformers = ((HtmlTransformersSection) ConfigurationManager.GetSection("hansKindberg.web/htmlTransformers")).HtmlTransformers; if(httpRequest.RawUrl == "/Default.aspx") { Assert.AreEqual(5, htmlTransformers.Count); Assert.AreEqual("One", htmlTransformers[0].Name); Assert.AreEqual(typeof(HtmlTransformer), htmlTransformers[0].Type); Assert.AreEqual("Two", htmlTransformers[1].Name); Assert.AreEqual(typeof(HtmlTransformer), htmlTransformers[0].Type); Assert.AreEqual("Three", htmlTransformers[2].Name); Assert.AreEqual(typeof(HtmlTransformer), htmlTransformers[0].Type); Assert.AreEqual("Four", htmlTransformers[3].Name); Assert.AreEqual(typeof(HtmlTransformer), htmlTransformers[0].Type); Assert.AreEqual("Five", htmlTransformers[4].Name); Assert.AreEqual(typeof(HtmlTransformer), htmlTransformers[0].Type); return; } if(httpRequest.RawUrl == "/FiveItemsUsingAddAndRemove/Default.aspx") { Assert.AreEqual(5, htmlTransformers.Count); Assert.AreEqual("One", htmlTransformers[0].Name); Assert.AreEqual(typeof(HtmlTransformer), htmlTransformers[0].Type); Assert.AreEqual("Two", htmlTransformers[1].Name); Assert.AreEqual(typeof(HtmlTransformer), htmlTransformers[0].Type); Assert.AreEqual("Three", htmlTransformers[2].Name); Assert.AreEqual(typeof(HtmlTransformer), htmlTransformers[0].Type); Assert.AreEqual("Six", htmlTransformers[3].Name); Assert.AreEqual(typeof(HtmlTransformer), htmlTransformers[0].Type); Assert.AreEqual("Seven", htmlTransformers[4].Name); Assert.AreEqual(typeof(HtmlTransformer), htmlTransformers[0].Type); return; } if(httpRequest.RawUrl == "/NoItemsUsingClear/Default.aspx") { Assert.AreEqual(0, htmlTransformers.Count); return; } if(httpRequest.RawUrl == "/ThreeItemsUsingRemove/Default.aspx") { Assert.AreEqual(3, htmlTransformers.Count); Assert.AreEqual("One", htmlTransformers[0].Name); Assert.AreEqual(typeof(HtmlTransformer), htmlTransformers[0].Type); Assert.AreEqual("Two", htmlTransformers[1].Name); Assert.AreEqual(typeof(HtmlTransformer), htmlTransformers[0].Type); Assert.AreEqual("Three", htmlTransformers[2].Name); Assert.AreEqual(typeof(HtmlTransformer), htmlTransformers[0].Type); return; } if(httpRequest.RawUrl == "/ThreeItemsUsingRemove/TwoItemsUsingAddAndRemove/Default.aspx") { Assert.AreEqual(2, htmlTransformers.Count); Assert.AreEqual("Four", htmlTransformers[0].Name); Assert.AreEqual(typeof(HtmlTransformer), htmlTransformers[0].Type); Assert.AreEqual("Five", htmlTransformers[1].Name); Assert.AreEqual(typeof(HtmlTransformer), htmlTransformers[0].Type); return; } if(httpRequest.RawUrl == "/ThreeItemsUsingRemove/TwoItemsUsingAddAndRemove/NoItemsUsingRemove/Default.aspx") { Assert.AreEqual(0, htmlTransformers.Count); return; } throw new InvalidOperationException("There is an error in the test."); }; virtualApplicationHostProxy.Run(browsingSession => { RequestResult requestResult = browsingSession.ProcessRequest("/Default.aspx"); Exception exception = requestResult.LastException; if(exception != null) { if(exception is UnitTestAssertException) throw exception; Assert.Fail("{0}: {1}", requestResult.LastException.GetType(), requestResult.LastException.Message); } requestResult = browsingSession.ProcessRequest("/FiveItemsUsingAddAndRemove/Default.aspx"); exception = requestResult.LastException; if(exception != null) { if(exception is UnitTestAssertException) throw exception; Assert.Fail("{0}: {1}", requestResult.LastException.GetType(), requestResult.LastException.Message); } requestResult = browsingSession.ProcessRequest("/NoItemsUsingClear/Default.aspx"); exception = requestResult.LastException; if(exception != null) { if(exception is UnitTestAssertException) throw exception; Assert.Fail("{0}: {1}", requestResult.LastException.GetType(), requestResult.LastException.Message); } requestResult = browsingSession.ProcessRequest("/ThreeItemsUsingRemove/Default.aspx"); exception = requestResult.LastException; if(exception != null) { if(exception is UnitTestAssertException) throw exception; Assert.Fail("{0}: {1}", requestResult.LastException.GetType(), requestResult.LastException.Message); } requestResult = browsingSession.ProcessRequest("/ThreeItemsUsingRemove/TwoItemsUsingAddAndRemove/Default.aspx"); exception = requestResult.LastException; if(exception != null) { if(exception is UnitTestAssertException) throw exception; Assert.Fail("{0}: {1}", requestResult.LastException.GetType(), requestResult.LastException.Message); } requestResult = browsingSession.ProcessRequest("/ThreeItemsUsingRemove/TwoItemsUsingAddAndRemove/NoItemsUsingRemove/Default.aspx"); exception = requestResult.LastException; if(exception != null) { if(exception is UnitTestAssertException) throw exception; Assert.Fail("{0}: {1}", requestResult.LastException.GetType(), requestResult.LastException.Message); } }); } }