<?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</title><link>http://blogs.msdn.com/clayco/default.aspx</link><description>He's just a tester</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><item><title>A New Language Tag?</title><link>http://blogs.msdn.com/clayco/archive/2004/04/01/106053.aspx</link><pubDate>Fri, 02 Apr 2004 01:22:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:106053</guid><dc:creator>ClayCo</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/clayco/comments/106053.aspx</comments><wfw:commentRss>http://blogs.msdn.com/clayco/commentrss.aspx?PostID=106053</wfw:commentRss><description>&lt;P&gt;Those of you who&amp;nbsp;know about&amp;nbsp;&lt;A href="http://www.faqs.org/rfcs/rfc3066.html"&gt;RFC 3066&lt;/A&gt;&amp;nbsp;know&amp;nbsp;that it's&amp;nbsp;the standard which describes the tags that you should use to identify the language of&amp;nbsp;an HTML or XML&amp;nbsp;document's contents.&amp;nbsp; For example, in XHTML you'd&amp;nbsp;code something like:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;. . .&lt;BR&gt;&amp;lt;html xmlns="&lt;/FONT&gt;&lt;A href="http://www.w3.org/1999/xhtml"&gt;&lt;FONT size=2&gt;http://www.w3.org/1999/xhtml&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=2&gt;" &lt;STRONG&gt;xml:lang="fr"&lt;/STRONG&gt; &amp;gt;&lt;BR&gt;. . .&lt;BR&gt;&amp;lt;/html&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;to tell the world that your page is in French.&amp;nbsp; RFC 3066 (albeit with a few differences)&amp;nbsp;is also the syntax&amp;nbsp;of the&amp;nbsp;culture names&amp;nbsp;used by System.Globalization.CultureInfo.&amp;nbsp; &lt;/P&gt;
&lt;P dir=ltr&gt;What you may not have known is that there's a way to request new tags in case you need to extend the existing language tagging mechanism.&amp;nbsp; This can be very useful if you need to indicate a language variety that isn't easily described with a language-and-country combination.&amp;nbsp; On the other hand,&amp;nbsp;well, I'll let today's request speak for itself:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P dir=ltr&gt;&lt;FONT face="Courier New" size=2&gt;LANGUAGE TAG REGISTRATION FORM&lt;/FONT&gt;&lt;/P&gt;
&lt;P dir=ltr&gt;&lt;FONT face="Courier New" size=2&gt;Name of requester&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : Jon Hanna&lt;BR&gt;E-mail address of requester: jon [at] &lt;A href="http://www.hackcraft.net/"&gt;hackcraft.net&lt;/A&gt;&lt;BR&gt;Tag to be registered&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : en-Spam-porn&lt;/FONT&gt;&lt;/P&gt;
&lt;P dir=ltr&gt;&lt;FONT face="Courier New" size=2&gt;English name of language&amp;nbsp;&amp;nbsp; : Pornographic Spam English&lt;/FONT&gt;&lt;/P&gt;
&lt;P dir=ltr&gt;&lt;FONT face="Courier New" size=2&gt;Native name of language (transcribed into ASCII):&lt;BR&gt;Pr0n Freespeech ohbsehkzq!&lt;/FONT&gt;&lt;/P&gt;
&lt;P dir=ltr&gt;&lt;FONT face="Courier New" size=2&gt;Reference to published description of the language (book or article):&lt;BR&gt;Your deleted mail folder&lt;/FONT&gt;&lt;/P&gt;
&lt;P dir=ltr&gt;&lt;FONT face="Courier New" size=2&gt;Any other relevant information:&lt;BR&gt;The relationship between this dialect and other forms of English is&lt;BR&gt;tenuous and perhaps more a matter of historical accident than any&lt;BR&gt;stronger linguistic relationship. Some would argue that it is a&lt;BR&gt;separate language, and some that it isn't a language at all but&lt;BR&gt;illiterate gibberish, however considering it to be a dialect of English&lt;BR&gt;is perhaps the most balanced position.&lt;/FONT&gt;&lt;/P&gt;
&lt;P dir=ltr&gt;&lt;FONT face="Courier New" size=2&gt;Interestingly, it is the probably the only dialect of any language that&lt;BR&gt;can be encoded entirely in US-ASCII without doing any (further) violence&lt;BR&gt;to the language. Conversely, it is also probably the only language that&lt;BR&gt;can be inscribed with the use of a diacritical mark on every single&lt;BR&gt;character, even spaces.&lt;/FONT&gt;&lt;/P&gt;
&lt;P dir=ltr&gt;&lt;FONT face="Courier New" size=2&gt;The dialect appears to have very complicated punctuation rules, so&lt;BR&gt;complicated that there is strong evidence that no one fully understands&lt;BR&gt;them. The exclamation mark (U+0021, and no doubt U+203C once they&lt;BR&gt;discover it) appears not to be a punctuation character within the&lt;BR&gt;dialect, but a symbol of some sort of religious or superstitious&lt;BR&gt;fascination within the user community. The anthropologist might refer&lt;BR&gt;to this as a "fetish", though he or she would be wise not to lead any&lt;BR&gt;member of the user community to believe that he or she had any interest&lt;BR&gt;in fetishes.&lt;/FONT&gt;&lt;/P&gt;
&lt;P dir=ltr&gt;&lt;FONT face="Courier New" size=2&gt;Despite widespread belief to the contrary it appears that some people&lt;BR&gt;really do have this as their first, and indeed only, language. These&lt;BR&gt;people would be to be pitied, if we could have the luxury of doing so&lt;BR&gt;without actually coming into contact with them or their dialect.&lt;/FONT&gt;&lt;/P&gt;
&lt;P dir=ltr&gt;&lt;FONT face="Courier New" size=2&gt;The pun is considered the highest form of expression within the dialect,&lt;BR&gt;although no user of the dialect has ever demonstrated any talent at&lt;BR&gt;creating them.&lt;/FONT&gt;&lt;/P&gt;
&lt;P dir=ltr&gt;&lt;FONT face="Courier New" size=2&gt;Special Treatment -&lt;/FONT&gt;&lt;/P&gt;
&lt;P dir=ltr&gt;&lt;FONT face="Courier New" size=2&gt;Traditionally the dialect is encoded with whatever charset is believed&lt;BR&gt;most likely to confuse a filter. Adoption of the UCS is increasingly&lt;BR&gt;common amongst the user community as it provides a source of yet more&lt;BR&gt;characters that look a bit like other characters.&lt;/FONT&gt;&lt;/P&gt;
&lt;P dir=ltr&gt;&lt;FONT face="Courier New" size=2&gt;Semantic software should not attempt to differentiate between definite&lt;BR&gt;and indefinite articles or should treat them specially. These are not&lt;BR&gt;used as they are in other dialects of English where they specify a&lt;BR&gt;particular or a general example of the associated noun, but rather to&lt;BR&gt;reflect a self-deluding belief in universality of a fetish item as the&lt;BR&gt;user community has a strong religious belief that we are all equally&lt;BR&gt;pathetic perverts to themselves. This religious belief contains a&lt;BR&gt;strong emphasis on proselytising for which the user community eagerly&lt;BR&gt;adapt new communication technologies including those produced by the&lt;BR&gt;IETF.&lt;/FONT&gt;&lt;/P&gt;
&lt;P dir=ltr&gt;&lt;FONT face="Courier New" size=2&gt;In rich-text formats in which the text can be coloured there is a&lt;BR&gt;strong preference towards red.&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr style="MARGIN-RIGHT: 0px"&gt;I'll readily admit that this is probably the most articulate request for a new language tag in a long time, and that reading it left me with only one question:&amp;nbsp; &lt;FONT color=#ff0000&gt;&lt;FONT size=4&gt;Ar&amp;#234; y&amp;#216;u`l00ki.ng 4_&amp;#228; g&amp;#245;od t|m&amp;#233;?&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;P dir=ltr style="MARGIN-RIGHT: 0px"&gt;For those of you wondering how serious this request could be, consider today's date.&amp;nbsp; For everyone else, please remember that you have two weeks (starting today) to &lt;A href="mailto:ietf-languages@iana.org"&gt;comment&lt;/A&gt; on the request.&lt;BR&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=106053" width="1" height="1"&gt;</description><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/Everything+Else/default.aspx">Everything Else</category></item><item><title>Performance, Stress, and other fancy stuff</title><link>http://blogs.msdn.com/clayco/archive/2004/03/01/82385.aspx</link><pubDate>Tue, 02 Mar 2004 03:01:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:82385</guid><dc:creator>ClayCo</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/clayco/comments/82385.aspx</comments><wfw:commentRss>http://blogs.msdn.com/clayco/commentrss.aspx?PostID=82385</wfw:commentRss><description>&lt;P&gt;In response to my first post, &lt;A href="http://scottwater.com/blog"&gt;Scott&lt;/A&gt; asked a very topical question:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;Not sure if this falls in your basket or not, but I would be interest in any tips or tricks for memory profiling ASP.NET applications.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;Well, Scott, I'm pleased that you're interested in this subject, because it's a very good way to introduce how we're testing the performance of ASP.NET under stress.&amp;nbsp; For a grounding on the subject, I encourage anyone interested in this subject&amp;nbsp;to start by reading &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/monitor_perf.asp"&gt;this&lt;/A&gt;.&amp;nbsp; It's an article written by Thomas Marquardt, a developer (and former tester) on our team who did a lot of work creating the test infrastructure we're using today.&amp;nbsp; It should also handily answer your question.&lt;/P&gt;
&lt;P dir=ltr&gt;The other reason why this&amp;nbsp;I want to point you to this article&amp;nbsp;is that the source code for one of the test tools used for stress automation, QQQ.exe, can be downloaded there.&amp;nbsp; QQQ is a tool that monitors performance counters for the ASP.NET worker process and automatically attaches a debugger if any of a few different critical thresholds are reached.&amp;nbsp; We&amp;nbsp;use this with the Web Application Stress Tool (which, in the long tradition of giving things names that will freak out&amp;nbsp;everybody in marketing, is also called &amp;#8220;&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=e2c0585a-062a-439e-a67d-75a89aa36495&amp;amp;displaylang=en"&gt;Homer&lt;/A&gt;&amp;#8221;) to simulate the process of&amp;nbsp;multiple users making large&amp;nbsp;quantities of requests to&amp;nbsp;the server and catching the problems that arise.&amp;nbsp; These tools, combined with&amp;nbsp;some &lt;A href="http://www.microsoft.com/whdc/ddk/debugging/installx86.mspx"&gt;debugging tools&lt;/A&gt;, scripts for automatically re-imaging the test machines and launching stress, and (naturally) the test pages themselves, are the way in which we stress-test the product.&lt;/P&gt;
&lt;P dir=ltr&gt;The tests themselves cover a pretty broad swath of scenarios.&amp;nbsp;&amp;nbsp;As you'd expect,&amp;nbsp;we have tests simulating high traffic in a production environment with all managed code, but we also have tests for&amp;nbsp;pages that inter-operate with COM&amp;nbsp;components and call data methods.&amp;nbsp;&amp;nbsp;We also&amp;nbsp;check how ASP.NET handles some more esoteric scenarios.&amp;nbsp; What happens if&amp;nbsp; the user changes machine.config every few minutes, causing the application to restart?&amp;nbsp; What if there's a memory leak in the user's applications?&amp;nbsp; What if the worker process crashes?&amp;nbsp; The process model, of course,&amp;nbsp;should gracefully recover from these hiccups.&amp;nbsp; In all of these scenarios, the pages we use for stress testing are also functional tests that we use for regular verification of the product, so we can get as close to simulating real-life workloads and traffic as possible.&lt;/P&gt;
&lt;P dir=ltr&gt;I used to debug stress, so a lot of this comes from memory (it's like riding a bicycle), but special thanks go to (fellow tester) Vladimir Kritchko for pointing me to the latest stress infrastructure documentation.&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=82385" 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></item><item><title>Welcome</title><link>http://blogs.msdn.com/clayco/archive/2004/02/24/79595.aspx</link><pubDate>Wed, 25 Feb 2004 02:23:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:79595</guid><dc:creator>ClayCo</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/clayco/comments/79595.aspx</comments><wfw:commentRss>http://blogs.msdn.com/clayco/commentrss.aspx?PostID=79595</wfw:commentRss><description>&lt;P&gt;I'm a software tester, and I work on ASP.NET.&lt;/P&gt;
&lt;P&gt;Are you still reading?&amp;nbsp; Interesting.&lt;/P&gt;
&lt;P&gt;ASP.NET's&amp;nbsp;test team isn't something you hear much about, and nobody who tests the product&amp;nbsp;ranks among the &lt;A href="http://weblogs.asp.net/scottgu"&gt;best&lt;/A&gt; &lt;A href="http://weblogs.asp.net/shankun"&gt;known&lt;/A&gt; &lt;A href="http://weblogs.asp.net/rhoward"&gt;team&lt;/A&gt; &lt;A href="http://www.nikhilk.net/"&gt;members&lt;/A&gt;&amp;nbsp;in our product group (the organizational unit that includes testers, developers, and program managers working on the same closely-related set of products).&amp;nbsp; However, the importance of the test&amp;nbsp;team around&amp;nbsp;here is hardly minimal.&amp;nbsp;&amp;nbsp;Just to give you some sense of proportion, testers make up over half of the product group's members.&lt;/P&gt;
&lt;P&gt;I'm going to start this weblog by describing&amp;nbsp;in hopefully&amp;nbsp;not too much&amp;nbsp;detail the&amp;nbsp;way in which ASP.NET is getting tested; as I think you'll learn, this is&amp;nbsp;different from the kind and level of testing you may have seen (or done) in other products.&amp;nbsp; We have our reasons for&amp;nbsp;testing the way we do, and&amp;nbsp;maybe you can find value in hearing about how we do it.&lt;/P&gt;
&lt;P&gt;I also want to talk about ASP.NET itself,&amp;nbsp;with&amp;nbsp;attention on&amp;nbsp;the new features in it that I test.&amp;nbsp; As soon as I'm done with my overview of how we test ASP.NET in all of its glory, I hope to share with you something useful about Smart Navigation, the ContentPager control, control designers, and the other nifty things I happen to test for a living.&lt;/P&gt;
&lt;P&gt;Of course, your suggestions are important; I want to share with you the things you want to know about to the greatest of my ability, so don't be afraid to give me your feedback.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=79595" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/clayco/archive/tags/My+Job/default.aspx">My Job</category></item></channel></rss>