|  | <%
'********************************************************************
' Name: ASPUnitRunner.asp
'
' Purpose: Contains the UnitRunner class which is used to render the unit testing UI
'********************************************************************
'********************************************************************
' Include Files
'********************************************************************
%>
<!-- #include file="ASPUnit.asp"-->
<%
Const ALL_TESTCONTAINERS = "All Test Containers"
Const ALL_TESTCASES = "All Test Cases"
Const FRAME_PARAMETER = "UnitRunner"
Const FRAME_SELECTOR = "selector"
Const FRAME_RESULTS = "results"
Const STYLESHEET = "aspunit/include/ASPUnit.css"
Const SCRIPTFILE = "aspunit/include/ASPUnitRunner.js"
Class UnitRunner
	Private m_dicTestContainer
	Private Sub Class_Initialize()
		Set m_dicTestContainer = CreateObject("Scripting.Dictionary")
	End Sub
	Public Sub AddTestContainer(oTestContainer)
		m_dicTestContainer.Add TypeName(oTestContainer), oTestContainer
	End Sub
	Public Function Display()
		If (Request.QueryString(FRAME_PARAMETER) = FRAME_SELECTOR) Then
			DisplaySelector
		ElseIf (Request.QueryString(FRAME_PARAMETER) = FRAME_RESULTS) Then
			DisplayResults
		Else
			ShowFrameSet
		End if
	End Function
'********************************************************************
' Frameset
'********************************************************************
	Private Function ShowFrameSet()
%>
<HTML>
<HEAD>
<TITLE>ASPUnit Test Runner</TITLE>
</HEAD>
<FRAMESET ROWS="70, *" BORDER=0 FRAMEBORDER=0 FRAMESPACING=0>
	<FRAME NAME="<% = FRAME_SELECTOR %>" src="<% = GetSelectorFrameSrc %>" marginwidth="0" marginheight="0" scrolling="auto" border=0 frameborder=0 noresize>
	<FRAME NAME="<% = FRAME_RESULTS %>" src="<% = GetResultsFrameSrc %>" marginwidth="0" marginheight="0" scrolling="auto" border=0 frameborder=0 noresize>
</FRAMESET>
<%
	End Function
	Private Function GetSelectorFrameSrc()
		GetSelectorFrameSrc = Request.ServerVariables("SCRIPT_NAME") & "?" & FRAME_PARAMETER & "=" & FRAME_SELECTOR
	End Function
	Private Function GetResultsFrameSrc()
		GetResultsFrameSrc = Request.ServerVariables("SCRIPT_NAME") & "?" & FRAME_PARAMETER & "=" & FRAME_RESULTS
	End Function
'********************************************************************
' Selector Frame
'********************************************************************
	Private Function DisplaySelector()
%>
<HTML>
<HEAD>
<LINK REL="stylesheet" HREF="<% = STYLESHEET %>" MEDIA="screen" TYPE="text/css">
<SCRIPT>
function ComboBoxUpdate(strSelectorFrameSrc, strSelectorFrameName)
{
	document.frmSelector.action = strSelectorFrameSrc;
	document.frmSelector.target = strSelectorFrameName;
	document.frmSelector.submit();
}
</SCRIPT>
</HEAD>
<BODY>
		<FORM NAME="frmSelector" ACTION="<% = GetResultsFrameSrc %>" TARGET="<% = FRAME_RESULTS %>" METHOD=POST>
			<TABLE class='Form'>
				<TR>
				    <TD>
						<INPUT TYPE="Submit" NAME="cmdRun" class="Submit" VALUE="Run Tests">
					</TD>
					<TD ALIGN="right">Test:</TD>
					<TD>
						<SELECT NAME="cboTestContainers" OnChange="ComboBoxUpdate('<% = GetSelectorFrameSrc %>', '<% = FRAME_SELECTOR %>');">
						<OPTION><% = ALL_TESTCONTAINERS %>
<%
							AddTestContainers
%>
						</SELECT>
					</TD>
					<TD ALIGN="right">Test Method:</TD>
					<TD>
						<SELECT NAME="cboTestCases">
						<OPTION><% = ALL_TESTCASES %>
<%
							AddTestMethods
%>
						</SELECT>
					<TD>
						<INPUT TYPE="checkbox" NAME="chkShowSuccess"> Show Passing Tests</INPUT>
					</TD>
					</TD>
				</TR>
			</TABLE>
		</FORM>
</BODY>
</HTML>
<%
	End Function
	Private Function AddTestContainers()
		Dim oTestContainer, sTestContainer
		For Each oTestContainer In m_dicTestContainer.Items()
			sTestContainer = TypeName(oTestContainer)
			If (sTestContainer = Request.Form("cboTestContainers")) Then
				Response.Write("<OPTION SELECTED>" & sTestContainer)
			Else
				Response.Write("<OPTION>" & sTestContainer)
			End If
		Next
	End Function
	Private Function AddTestMethods()
		Dim oTestContainer, sContainer, sTestMethod
		If (Request.Form("cboTestContainers") <> ALL_TESTCONTAINERS And Request.Form("cboTestContainers") <> "") Then
			sContainer = CStr(Request.Form("cboTestContainers"))
			Set oTestContainer = m_dicTestContainer.Item(sContainer)
			For Each sTestMethod In oTestContainer.TestCaseNames()
				Response.Write("<OPTION>" & sTestMethod)
			Next
		End If
	End Function
	Private Function TestName(oResult)
		If (oResult.TestCase Is Nothing) Then
			TestName = ""
		Else
			TestName = TypeName(oResult.TestCase.TestContainer) & "." & oResult.TestCase.TestMethod
		End If
	End Function
'********************************************************************
' Results Frame
'********************************************************************
	Private Function DisplayResults()
%>
<HTML>
<HEAD>
<LINK REL="stylesheet" HREF="<% = STYLESHEET %>" MEDIA="screen" TYPE="text/css">
</HEAD>
<BODY>
<%
		Dim oTestResult, oTestSuite
		Set oTestResult = New TestResult
		' Create TestSuite
		Set oTestSuite = BuildTestSuite()
		' Run Tests
		oTestSuite.Run oTestResult
		' Display Results
		DisplayResultsTable oTestResult
%>
</BODY>
</HTML>
<%
	End Function
	Private Function BuildTestSuite()
		Dim oTestSuite, oTestContainer, sContainer
		Set oTestSuite = New TestSuite
		If (Request.Form("cmdRun") <> "") Then
			If (Request.Form("cboTestContainers") = ALL_TESTCONTAINERS) Then
				For Each oTestContainer In m_dicTestContainer.Items()
					If Not(oTestContainer Is Nothing) Then
						oTestSuite.AddAllTestCases oTestContainer
					End If
				Next
			Else
				sContainer = CStr(Request.Form("cboTestContainers"))
				Set oTestContainer = m_dicTestContainer.Item(sContainer)
				Dim sTestMethod
				sTestMethod = Request.Form("cboTestCases")
				If (sTestMethod = ALL_TESTCASES) Then
					oTestSuite.AddAllTestCases oTestContainer
				Else
					oTestSuite.AddTestCase oTestContainer, sTestMethod
				End If
			End If
		End If
		Set BuildTestSuite = oTestSuite
	End Function
	Private Function DisplayResultsTable(oTestResult)
%>
			<TABLE BORDER="1" class='Results'>
				<TR><TH WIDTH="10%" class="Type">Type</TH><TH WIDTH="20%" class="Test">Test</TH><TH WIDTH="70%" class="Desc">Description</TH></TR>
<%
		If Not(oTestResult Is Nothing) Then
			Dim oResult
			If (Request.Form("chkShowSuccess") <> "") Then
	                        For Each oResult in oTestResult.Successes
					Response.Write("	<TR CLASS=""success""><TD class='Type'>Success</TD><TD class='Test'>" & TestName(oResult) & "</TD><TD class='Desc'>" & oResult.Source & oResult.Description & "</TD></TR>")
	                        Next
	                End If
			For Each oResult In oTestResult.Errors
				Response.Write("	<TR CLASS=""error""><TD class='Type'>Error</TD><TD class='Test'>" & TestName(oResult) & "</TD><TD class='Desc'>" & oResult.Source & " (" & Trim(oResult.ErrNumber) & "): " & oResult.Description & "</TD></TR>")
			Next
			For Each oResult In oTestResult.Failures
				Response.Write("	<TR CLASS=""warning""><TD class='Type'>Failure</TD><TD class='Test'>" & TestName(oResult) & "</TD><TD class='Desc'>" & oResult.Description & "</TD></TR>")
			Next
			Response.Write "	<TR><TD ALIGN=""center"" COLSPAN=3 class='" & ResultRowClass(oTestResult) & "'>" & "Tests: " & oTestResult.RunTests & ", Errors: " & oTestResult.Errors.Count & ", Failures: " & oTestResult.Failures.Count & "</TD></TR>"
		End If
%>
			</TABLE>
<%
	End Function
	
	Private Function ResultRowClass(oTestResult)
	    if oTestResult.Errors.Count > 0 then
	        ResultRowClass = "error"
	    elseif oTestResult.Failures.Count > 0 then
	        ResultRowClass = "warning"
	    elseif oTestResult.Successes.Count > 0 then
	        ResultRowClass = "success"
	    end if
	End Function
	Public Sub OnStartTest()
	End Sub
	Public Sub OnEndTest()
	End Sub
	Public Sub OnError()
	End Sub
	Public Sub OnFailure()
	End Sub
        Public Sub OnSuccess()
        End Sub
End Class
%>
 |