<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>ClayCo's WebLog : Microsoft</title><link>http://blogs.msdn.com/clayco/archive/tags/Microsoft/default.aspx</link><description>Tags: Microsoft</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Full Test Pass</title><link>http://blogs.msdn.com/clayco/archive/2004/04/20/117197.aspx</link><pubDate>Wed, 21 Apr 2004 00:41:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:117197</guid><dc:creator>ClayCo</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/clayco/comments/117197.aspx</comments><wfw:commentRss>http://blogs.msdn.com/clayco/commentrss.aspx?PostID=117197</wfw:commentRss><description>&lt;P&gt;I haven't posted a lot in the last few weeks, and there's a succinct reason for that.&amp;nbsp; In fact, I can name it in three words:&amp;nbsp; Full Test Pass.&lt;/P&gt;
&lt;P&gt;The concept is close to what it sounds like.&amp;nbsp;&amp;nbsp;During the&amp;nbsp;earlier stages of product planning,&amp;nbsp;the test team for ASP.NET and the web development profile for Visual Studio used the time to plan its test coverage.&amp;nbsp; In total, we wrote descriptions of&amp;nbsp;over 40,000 test cases that we wanted to run.&amp;nbsp; In the span of about four weeks ending earlier this month, we took the time to acutally execute nearly all of them, many for the first time.&lt;/P&gt;
&lt;P&gt;Don't take that to mean&amp;nbsp;that we whittled away all the hours between whiles drinking beverages and playing foosball -- we are professionals, after all.&amp;nbsp; We used the time to automate a large subset of our tests, including our acceptance tests (tests that we run on each daily build of the product to get a rough sense of&amp;nbsp;its quality&amp;nbsp;and&amp;nbsp;catch really the big bugs).&amp;nbsp; Automation infrastructure -- the&amp;nbsp;libraries and components our&amp;nbsp;testcases use&amp;nbsp;to simplify automation and manage the process of reporting results to our testcase management database (named Mad Dog, if you can believe it) -- also took up a lot of time.&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;But 40,000 is a big number, and&amp;nbsp;in that number were a&amp;nbsp;lot of&amp;nbsp;scenarios that we just hadn't&amp;nbsp;tried yet.&amp;nbsp;&amp;nbsp;For example, one of the features I own is Control Designers, which is&amp;nbsp;the mechanism a custom control developer uses&amp;nbsp;to control the&amp;nbsp;appearance and behavior of her control in&amp;nbsp;Visual Studio's web design environment.&amp;nbsp;&amp;nbsp;As part of this, I test several&amp;nbsp;new host services that&amp;nbsp;are exposed by Visual Studio&amp;nbsp;which the authors of Control Designers&amp;nbsp;can use&amp;nbsp;to simplify their work.&amp;nbsp; One of these is an interface with the name IWebFormsBuilderUIService, which exposes methods for creating common UI dialogs, among them a URL editor.&amp;nbsp;&amp;nbsp;In Visual Basic .NET, the&amp;nbsp;code a control author would need to write&amp;nbsp;in order to use this would be something like this:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;Imports System.ComponentModel&lt;BR&gt;Imports System.ComponentModel.Design&lt;BR&gt;Imports System.Web.UI.Design&lt;BR&gt;Imports System.Web.UI&lt;BR&gt;Imports System&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;lt;Designer(GetType(ExampleControlDesigner)), . . . &amp;gt; Public Class ExampleControl&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Inherits System.Web.UI.WebControls.WebControl&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim _url As String&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Bindable(True), Category("Appearance"), DefaultValue("")&amp;gt; Property URL() As String&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Get&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Return _url&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Get&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set(ByVal Value As String)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _url = Value&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Set&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Property&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; . . .&lt;BR&gt;End Class&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;Public Class ExampleControlDesigner&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Inherits ControlDesigner&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Protected Overrides Sub OnClick(ByVal e As DesignerRegionEventArgs)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim iwfbuis as IWebFormsBuilderUIService&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim ctl As ExampleControl&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Mybase.OnClick(e)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ctl = Component&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; iwfbuis = GetService(GetType(IWebFormsBuilderUIService))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ctl.URL = iwfbuis.BuildUrl(Nothing, ctl.URL, RootDesigner.DocumentUrl, "Please Choose a URL", "", UrlBuilderOptions.None)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch ex as exception&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Msgbox(ex.Message)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end try&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UpdateDesignTimeHtml()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Sub&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; . . .&lt;BR&gt;End Class&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;The above code would bring up Visual Studio's&amp;nbsp;URL dialog when the user clicked on the control, and set the control's URL property to the user's selection.&lt;/P&gt;
&lt;P&gt;I&amp;nbsp;don't have any acceptance-level tests for IWebFormsBuilderUIService.BuildUrl, because even if this&amp;nbsp;method were completely busted beyond usability, it wouldn't especially hurt the other testers on our team or the other teams that depend on ASP.NET.&amp;nbsp; However,&amp;nbsp;I do have plenty of regular functional tests for the feature that&amp;nbsp;I plan to automate, and the plan for this area looks like this:
&lt;SCRIPT language=vbscript&gt;
	
	sub document_onclick()
		dim lWTop, lWLeft, e, lWidth, lHeight
		lWidth = 600:	lHeight = 350
		set e = window.event.srcElement
		lWTop = (window.screen.Height-lHeight) / 2
		lWLeft = (window.screen.Width-lWidth) / 2
		if left(e.id,2) = "tc"  then
			window.open "/MadDog/Reports/Testcase/frmTestcase.asp?lTestcaseID=" &amp; mid(e.id,3), "_blank", "resizable=yes,scrollbars=yes,height=" &amp; lHeight &amp; ",width=" &amp; lWidth &amp; ",status=no,toolbar=no,menubar=no,top=" &amp; lWTop &amp; ",left=" &amp; lWLeft &amp; ",location=no"
		elseif left(e.id,3) = "hdr" then
			if document.all("dv" &amp; mid(e.id,4)).style.display = "none" then
				document.all("dv" &amp; mid(e.id,4)).style.display = ""
			else
				document.all("dv" &amp; mid(e.id,4)).style.display = "none"	
			end if	
		end if			
	end sub
	
	sub document_onmouseover()
		if left(window.event.srcElement.id,2) = "tc"  then
			window.event.srcElement.style.fontweight = 700
		end if		
	end sub
	
	sub document_onmouseout()
		if left(window.event.srcElement.id,2) = "tc" then
			window.event.srcElement.style.fontweight = 400
		end if		
	end sub
	
	document.body.style.cursor = "wait"
&lt;/SCRIPT&gt;
 &lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;H2 style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; FONT-FAMILY: Tahoma, Arial"&gt;Testcase Breakout for BuildUrl&lt;/H2&gt;
&lt;DIV&gt;&lt;B&gt;&lt;FONT size=1&gt;Hierarchy: &lt;/FONT&gt;&lt;A href="http://mdwebvs8/maddog/reports/testcase/TCBreak.asp?id=52&amp;amp;bTopOnly=True"&gt;&lt;FONT size=1&gt;All Testcases&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt; -&amp;gt; &lt;/FONT&gt;&lt;A href="http://mdwebvs8/maddog/reports/testcase/TCBreak.asp?id=115996&amp;amp;bTopOnly=True"&gt;&lt;FONT size=1&gt;Web.NET&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt; -&amp;gt; &lt;/FONT&gt;&lt;A href="http://mdwebvs8/maddog/reports/testcase/TCBreak.asp?id=101872&amp;amp;bTopOnly=True"&gt;&lt;FONT size=1&gt;Page &amp;amp; Controls&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt; -&amp;gt; &lt;/FONT&gt;&lt;A href="http://mdwebvs8/maddog/reports/testcase/TCBreak.asp?id=101876&amp;amp;bTopOnly=True"&gt;&lt;FONT size=1&gt;Page Framework&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt; -&amp;gt; &lt;/FONT&gt;&lt;A href="http://mdwebvs8/maddog/reports/testcase/TCBreak.asp?id=136026&amp;amp;bTopOnly=True"&gt;&lt;FONT size=1&gt;Designers&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt; -&amp;gt; &lt;/FONT&gt;&lt;A href="http://mdwebvs8/maddog/reports/testcase/TCBreak.asp?id=116313&amp;amp;bTopOnly=True"&gt;&lt;FONT size=1&gt;Control Designers Extensibility&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt; -&amp;gt; &lt;/FONT&gt;&lt;A href="http://mdwebvs8/maddog/reports/testcase/TCBreak.asp?id=116388&amp;amp;bTopOnly=True"&gt;&lt;FONT size=1&gt;Host Services&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt; -&amp;gt; &lt;/FONT&gt;&lt;A href="http://mdwebvs8/maddog/reports/testcase/TCBreak.asp?id=145600&amp;amp;bTopOnly=True"&gt;&lt;FONT size=1&gt;IWebFormsBuilderUIService&lt;/FONT&gt;&lt;/A&gt;&lt;/B&gt;&lt;BR&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;BR&gt;
&lt;TABLE cellSpacing=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=TDhdr width=30&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDhdr width=660&gt;&lt;B class=b1 id=hdr145602&gt;&lt;FONT size=1&gt;BuildUrl&lt;/FONT&gt;&lt;/B&gt;&lt;/TD&gt;
&lt;TD class=TDhdr width=100&gt;&lt;A href="mailto:ClayCo?subject=Comments on area All Testcases -&gt; Web.NET -&gt; Page &amp;amp; Controls -&gt; Page Framework -&gt; Designers -&gt; Control Designers Extensibility -&gt; Host Services -&gt; IWebFormsBuilderUIService -&gt; BuildUrl" &lt; a&gt;&lt;FONT size=1&gt;ClayCo&lt;/FONT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;DIV id=dv145602&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=TDarea width=60&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDarea width=630&gt;
&lt;STYLE&gt;
    td.header {border:1px solid; background-color:ivory; width:150px; font-weight:bold}
    td.content {border:1px solid}
&lt;/STYLE&gt;

&lt;TABLE cellSpacing=0 cols=2 cellPadding=2 width="100%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=header&gt;&lt;FONT size=1&gt;Area Description &lt;/FONT&gt;&lt;/TD&gt;
&lt;TD width="100%"&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=content colSpan=2 border="0"&gt;&lt;FONT size=1&gt;Host-implemented method for bringing up its own URI-picking dialog. &lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/TD&gt;
&lt;TD class=TDarea width=100&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=TDitem width=60&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDitem id=tc433165 title="Click for Testcase Details" style="FONT-WEIGHT: 400" width=630&gt;&lt;FONT size=1&gt;BuildUrl01 - Call and (from Venus) cancel the dialog&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDitem width=100&gt;&lt;FONT size=1&gt;Pri 2, Coding&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=TDscen width=90&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDscen width=600&gt;&lt;FONT size=1&gt;1) Verify initialURL is returned.&lt;BR&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDscen width=100&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=TDitem width=60&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDitem id=tc433166 title="Click for Testcase Details" style="FONT-WEIGHT: 400" width=630&gt;&lt;FONT size=1&gt;BuildUrl02 - Call (from ControlDesigner) and enter (from Venus) an absolute URL&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDitem width=100&gt;&lt;FONT size=1&gt;Pri 2, Coding&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=TDscen width=90&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDscen width=600&gt;&lt;FONT size=1&gt;&lt;I&gt;Abstract:&lt;/I&gt;&lt;BR&gt;All scenarios assume UrlBuilderOptions is set to NoAbsolute unless stated otherwise.&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDscen width=100&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=TDscen width=90&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDscen width=600&gt;&lt;FONT size=1&gt;&lt;I&gt;Scenarios:&lt;/I&gt;&lt;BR&gt;1) Use http://localhost/&amp;lt;currentapp&amp;gt;, verify relative conversion&lt;BR&gt;2) Call same with UrlBuilderOptions set to None, verify no conversion&lt;BR&gt;3) Use http://localhost/&amp;lt;currentapp&amp;gt;/, verify relative conversion&lt;BR&gt;4) Use http://localhost/&amp;lt;currentapp&amp;gt;/Page2.aspx, verify relative conversion&lt;BR&gt;5) Use https://localhost/AnotherApp/Page.aspx, verify relative conversion&lt;BR&gt;6) Use ftp://ftp.is.co.za/rfc/rfc1808.txt&lt;BR&gt;7) Use gopher://spinaltap.micro.umn.edu/00/Weather/California/Los%20Angeles&lt;BR&gt;8) Use mailto:clayco@microsoft.com&lt;BR&gt;9) Use news:comp.infosystems.www.servers.unix&lt;BR&gt;10) Use telnet://melvyl.ucop.edu/&lt;BR&gt;11) Use http://localhost/a/./g.aspx, verify relative conversion&lt;BR&gt;12) Call same with UrlBuilderOptions set to None, verify no conversion&lt;BR&gt;13) Use http://localhost/a/b/../g.aspx, verify relative conversion&lt;BR&gt;14) Call same with UrlBuilderOptions set to None, verify no conversion&lt;BR&gt;15) Use http://localhost/test., verify relative conversion&lt;BR&gt;16) Call same with UrlBuilderOptions set to None, verify no conversion&lt;BR&gt;17) Use http://localhost/.aspx, verify relative conversion&lt;BR&gt;18) Call same with UrlBuilderOptions set to None, verify no conversion&lt;BR&gt;19) Use http://localhost/..aspx, verify relative conversion&lt;BR&gt;20) Call same with UrlBuilderOptions set to None, verify no conversion&lt;BR&gt;21) Use 256-character URI&lt;BR&gt;22) Use string containing Arabic Letter Khah and U+4E2E (catch).&lt;BR&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDscen width=100&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=TDitem width=60&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDitem id=tc433167 title="Click for Testcase Details" width=630&gt;&lt;FONT size=1&gt;BuildUrl03 - Call (from ControlDesigner) and enter (from Venus) a relative URL&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDitem width=100&gt;&lt;FONT size=1&gt;Pri 2, Coding&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=TDscen width=90&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDscen width=600&gt;&lt;FONT size=1&gt;&lt;I&gt;Abstract:&lt;/I&gt;&lt;BR&gt;All scenarios assume UrlBuilderOptions is set to NoAbsolute unless stated otherwise.&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDscen width=100&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=TDscen width=90&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDscen width=600&gt;&lt;FONT size=1&gt;&lt;I&gt;Scenarios:&lt;/I&gt;&lt;BR&gt;1) Use //localhost/&amp;lt;currentapp&amp;gt;/Page2.aspx, verify an app-relative URL is returned&lt;BR&gt;2) Call same with UrlBuilderOptions set to None, verify absolute conversion&lt;BR&gt;3) Use /&amp;lt;currentapp&amp;gt;/Page2.aspx, verify an app-relative URL is returned&lt;BR&gt;4) Call same with UrlBuilderOptions set to None, verify absolute conversion&lt;BR&gt;5) Use Page2.aspx&lt;BR&gt;6) Call same with UrlBuilderOptions set to None, verify absolute conversion&lt;BR&gt;7) Use //www.yahoo.com:80/, verify an absolute URL is returned&lt;BR&gt;8) Use /./Page2.aspx, verify an app-relative URL is returned&lt;BR&gt;9) Call same with UrlBuilderOptions set to None, verify absolute conversion&lt;BR&gt;10) Use /../Page2.aspx&lt;BR&gt;11) Call same with UrlBuilderOptions set to None, verify absolute conversion&lt;BR&gt;12) Use http.aspx&lt;BR&gt;13) Call same with UrlBuilderOptions set to None, verify absolute conversion&lt;BR&gt;14) Use test.&lt;BR&gt;15) Call same with UrlBuilderOptions set to None, verify absolute conversion&lt;BR&gt;16) Use .aspx&lt;BR&gt;17) Call same with UrlBuilderOptions set to None, verify absolute conversion&lt;BR&gt;18) Use test..&lt;BR&gt;19) Call same with UrlBuilderOptions set to None, verify absolute conversion&lt;BR&gt;20) Use ..aspx&lt;BR&gt;21) Call same with UrlBuilderOptions set to None, verify absolute conversion&lt;BR&gt;22) Use ./../test.aspx, verify an app-relative URL is returned&lt;BR&gt;23) Call same with UrlBuilderOptions set to None, verify absolute conversion&lt;BR&gt;24) Use ./SubDir/., verify an app-relative URL is returned&lt;BR&gt;25) Call same with UrlBuilderOptions set to None, verify absolute conversion&lt;BR&gt;26) Use SubDir/./Page2.aspx&lt;BR&gt;27) Call same with UrlBuilderOptions set to None, verify absolute conversion&lt;BR&gt;28) Use SubDir/../Page2.aspx&lt;BR&gt;29) Call same with UrlBuilderOptions set to None, verify absolute conversion&lt;BR&gt;30) Use Test;x=1/./Page2.aspx&lt;BR&gt;31) Call same with UrlBuilderOptions set to None, verify absolute conversion&lt;BR&gt;32) Use Test;x=1/../Page2.aspx&lt;BR&gt;33) Call same with UrlBuilderOptions set to None, verify absolute conversion&lt;BR&gt;34) Use ., verify an app-relative URL is returned&lt;BR&gt;35) Call same with UrlBuilderOptions set to None, verify absolute conversion&lt;BR&gt;36) Use ./, verify an app-relative URL is returned&lt;BR&gt;37) Call same with UrlBuilderOptions set to None, verify absolute conversion&lt;BR&gt;38) Use ..&lt;BR&gt;39) Call same with UrlBuilderOptions set to None, verify absolute conversion&lt;BR&gt;40) Use ../&lt;BR&gt;41) Call same with UrlBuilderOptions set to None, verify absolute conversion&lt;BR&gt;42) Use ../Page2.aspx&lt;BR&gt;43) Call same with UrlBuilderOptions set to None, verify absolute conversion&lt;BR&gt;44) Use ../..&lt;BR&gt;45) Call same with UrlBuilderOptions set to None, verify absolute conversion&lt;BR&gt;46) Use ../../&lt;BR&gt;47) Call same with UrlBuilderOptions set to None, verify absolute conversion&lt;BR&gt;48) Use ../../Page2.aspx&lt;BR&gt;49) Call same with UrlBuilderOptions set to None, verify absolute conversion&lt;BR&gt;50) Use 256-character URI&lt;BR&gt;51) Use string containing Arabic Letter Ghain and U+3A2E (lift up).&lt;BR&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDscen width=100&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=TDitem width=60&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDitem id=tc433168 title="Click for Testcase Details" width=630&gt;&lt;FONT size=1&gt;BuildUrl04 - InitialUrl paramerter scenarios&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDitem width=100&gt;&lt;FONT size=1&gt;Pri 2, Coding&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=TDscen width=90&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDscen width=600&gt;&lt;FONT size=1&gt;1) Use current web application folder's absolute URL, verify UI in Venus&lt;BR&gt;2) Use current web application folder's relative URL, verify UI in Venus&lt;BR&gt;3) Use current Page's URL, verify UI in Venus&lt;BR&gt;4) Use image file URL, verify UI in Venus&lt;BR&gt;5) Use absolute path to virtual sibling directory, verify UI in Venus&lt;BR&gt;6) Use non-existent absolute path to sibling directory, verify UI in Venus&lt;BR&gt;7) Use absolute path to virtual parent directory, verify UI in Venus&lt;BR&gt;8) Use absolute path to virtual child directory, verify UI in Venus&lt;BR&gt;9) Use relative path to virtual sibling directory, verify UI in Venus&lt;BR&gt;10) Use relative path to virtual parent directory, verify UI in Venus&lt;BR&gt;11) Use relative path to virtual child directory, verify UI in Venus&lt;BR&gt;12) Use http://, ftp://, and file:// URLs to test machine, verify UI in Venus&lt;BR&gt;13) Use URL to another machine, verify UI in Venus&lt;BR&gt;14) Use http://www.microsoft.com/, verify error&lt;BR&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDscen width=100&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=TDitem width=60&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDitem id=tc433171 title="Click for Testcase Details" width=630&gt;&lt;FONT size=1&gt;BuildUrl05 - BaseUrl parameter scenarios&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDitem width=100&gt;&lt;FONT size=1&gt;Pri 2, Coding&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=TDscen width=90&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDscen width=600&gt;&lt;FONT size=1&gt;&lt;I&gt;Abstract:&lt;/I&gt;&lt;BR&gt;All scenarios assume UrlBuilderOptions is set to NoAbsolute unless stated otherwise.&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDscen width=100&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=TDscen width=90&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDscen width=600&gt;&lt;FONT size=1&gt;&lt;I&gt;Scenarios:&lt;/I&gt;&lt;BR&gt;1) Use current web application folder's absolute URL, verify relative URL calculation&lt;BR&gt;2) Use current web application folder's relative URL, verify relative URL calculation&lt;BR&gt;3) Use current Page's URL, verify relative URL calculation&lt;BR&gt;4) Use image file URL, verify relative URL calculation&lt;BR&gt;5) Use absolute path to virtual sibling directory, verify relative URL calculation&lt;BR&gt;6) Use absolute path to virtual parent directory, verify relative URL calculation&lt;BR&gt;7) Use absolute path to virtual child directory, verify relative URL calculation&lt;BR&gt;8) Use relative path to virtual sibling directory, verify relative URL calculation&lt;BR&gt;9) Use relative path to virtual parent directory, verify relative URL calculation&lt;BR&gt;10) Use relative path to virtual child directory, verify relative URL calculation&lt;BR&gt;11) Use http://, ftp://, and file:// URLs to the same machine, verify absolute URLs are used&lt;BR&gt;12) Use URL to another machine, verify relative and absolute paths on local and remote machines.&lt;BR&gt;13) Use http://www.microsoft.com/, verify absolute paths get used.&lt;BR&gt;14) Use String.Empty, verify absolute paths get used.&lt;BR&gt;15) Use current web application folder's absolute URL when options is None, verify absolute URL&lt;BR&gt;16) Use current web application folder's relative URL when options is None, verify absolute URL&lt;BR&gt;17) Use current Page's URL when options is None, verify absolute URL&lt;BR&gt;18) Use image file URL when options is None when options is None, verify absolute URL&lt;BR&gt;19) Use absolute path to virtual sibling directory when options is None, verify absolute URL&lt;BR&gt;20) Use absolute path to virtual parent directory when options is None, verify absolute URL&lt;BR&gt;21) Use absolute path to virtual child directory when options is None, verify absolute URL&lt;BR&gt;22) Use relative path to virtual sibling directory when options is None, verify absolute URL&lt;BR&gt;23) Use relative path to virtual parent directory when options is None, verify absolute URL&lt;BR&gt;24) Use relative path to virtual child directory when options is None, verify absolute URL&lt;BR&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDscen width=100&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=TDitem width=60&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDitem id=tc433172 title="Click for Testcase Details" width=630&gt;&lt;FONT size=1&gt;BuildUrl06 - Caption parameters&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDitem width=100&gt;&lt;FONT size=1&gt;Pri 2, Coding&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=TDscen width=90&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDscen width=600&gt;&lt;FONT size=1&gt;&lt;I&gt;Abstract:&lt;/I&gt;&lt;BR&gt;Perform standard string tests and verify in Venus&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDscen width=100&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=TDscen width=90&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDscen width=600&gt;&lt;FONT size=1&gt;&lt;I&gt;Scenarios:&lt;/I&gt;&lt;BR&gt;1) S1) Verify default property value&lt;BR&gt;2) S2) Verify attribute value is not in HTML view&lt;BR&gt;3) S3) Set to all numbers&lt;BR&gt;4) S4) Set attribute to (nothing) in HTML view&lt;BR&gt;5) S5) Set to 1 character&lt;BR&gt;6) S6) Set attribute to space in HTML view&lt;BR&gt;7) S7) Set attribute without quotes in HTML view&lt;BR&gt;8) S8) Set property to DblQuote-space-DblQuote in Design view&lt;BR&gt;9) S9) Set property to Quote-space-Quote in Design view&lt;BR&gt;10) S10) set property to: DblQuote-Quote-&amp;amp;-Quote-DblQuote; verify&lt;BR&gt;11) S11) set attribute to: 3DblQuote-'''abc'''-3DblQuote; verify&lt;BR&gt;12) S12) set attribute to: DblQuote-@#$%-CrLf-GreaterThan-)(*^-DblQuote; verify&lt;BR&gt;13) S13) Set property to "dadadada" in prop grid&lt;BR&gt;14) S14) Set to long string&lt;BR&gt;15) S15) Set to a random intl string and verify&lt;BR&gt;16) S16) Set to an Intl string of problem characters&lt;BR&gt;17) S17) Set to a random unicode string&lt;BR&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDscen width=100&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=TDitem width=60&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDitem id=tc433173 title="Click for Testcase Details" width=630&gt;&lt;FONT size=1&gt;BuildUrl07 - Filter parameter scenarios&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDitem width=100&gt;&lt;FONT size=1&gt;Pri 2, Coding&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=TDscen width=90&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDscen width=600&gt;&lt;FONT size=1&gt;&lt;I&gt;Abstract:&lt;/I&gt;&lt;BR&gt;Use Standard String tests and verify expected value in Venus&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDscen width=100&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=TDscen width=90&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDscen width=600&gt;&lt;FONT size=1&gt;&lt;I&gt;Scenarios:&lt;/I&gt;&lt;BR&gt;1) S1) Verify default property value&lt;BR&gt;2) S2) Verify attribute value is not in HTML view&lt;BR&gt;3) S3) Set to all numbers&lt;BR&gt;4) S4) Set attribute to (nothing) in HTML view&lt;BR&gt;5) S5) Set to 1 character&lt;BR&gt;6) S6) Set attribute to space in HTML view&lt;BR&gt;7) S7) Set attribute without quotes in HTML view&lt;BR&gt;8) S8) Set property to DblQuote-space-DblQuote in Design view&lt;BR&gt;9) S9) Set property to Quote-space-Quote in Design view&lt;BR&gt;10) S10) set property to: DblQuote-Quote-&amp;amp;-Quote-DblQuote; verify&lt;BR&gt;11) S11) set attribute to: 3DblQuote-'''abc'''-3DblQuote; verify&lt;BR&gt;12) S12) set attribute to: DblQuote-@#$%-CrLf-GreaterThan-)(*^-DblQuote; verify&lt;BR&gt;13) S13) Set property to "dadadada" in prop grid&lt;BR&gt;14) S14) Set to long string&lt;BR&gt;15) S15) Set to a random intl string and verify&lt;BR&gt;16) S16) Set to an Intl string of problem characters&lt;BR&gt;17) S17) Set to a random unicode string&lt;BR&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDscen width=100&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;FONT size=1&gt;
&lt;HR&gt;
&lt;/FONT&gt;
&lt;P&gt;&lt;FONT size=1&gt;&lt;B&gt;Testcase Summary Info:&lt;/B&gt; &lt;/FONT&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=30&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDsum width=200&gt;&lt;FONT size=1&gt;Design:&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDsum&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDsum width=200&gt;&lt;FONT size=1&gt;Pending Scenario Review:&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDsum&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width=30&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDsum width=200&gt;&lt;FONT size=1&gt;Coding:&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDsum&gt;&lt;FONT size=1&gt;7&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDsum width=200&gt;&lt;FONT size=1&gt;Pending Code Review:&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDsum&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width=30&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDsum width=200&gt;&lt;FONT size=1&gt;Complete:&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDsum&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDsum width=200&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDsum&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD&gt;&lt;FONT size=1&gt;&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDtot&gt;&lt;FONT size=1&gt;Total:&lt;/FONT&gt;&lt;/TD&gt;
&lt;TD class=TDtot&gt;&lt;FONT size=1&gt;7&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;This is typical -- every feature area has a lot more tests defined for it than get will ever be run on&amp;nbsp;any given&amp;nbsp;build.&amp;nbsp; We rely on testers using the builds for ad-hoc testing and writing automation to find bugs, and rely on automated tests to catch regressions in later builds.&amp;nbsp; We also use full test passes like this to get a deeper sense of the product's quality at a few key intervals (such as earlier this month -- we wanted to catch isses in advance of the first large-scale Beta release of the product and get a sense of how much more work is needed to stabilize the product's quality before we ship).&lt;/P&gt;
&lt;P dir=ltr&gt;And we did find bugs.&amp;nbsp; In the above test plan, the very first test case failed during the full test pass.&amp;nbsp; If a user clicked &amp;#8220;Cancel&amp;#8221; in the URL dialog, an empty string was returned by the method, rather than the initialURL parameter value.&amp;nbsp; This has already been fixed, by the way.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=117197" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/clayco/archive/tags/My+Job/default.aspx">My Job</category><category domain="http://blogs.msdn.com/clayco/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.msdn.com/clayco/archive/tags/Microsoft/default.aspx">Microsoft</category></item></channel></rss>