<% '******************************************************************** ' 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 %>