<?xml version="1.0"?>

<st-source>
<time-stamp>From Squeak3.9 on 28 September 2007 at 9:03:07 pm</time-stamp>
<version>SeasideTesting-R1.4-mb.18.mcz      28 September 2007 9:02:38 pm</version>

<class>
<name>SCAnchorDemo</name>
<environment>Seaside</environment>
<super>Seaside.WAComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Examples</category>
<attributes>
<package>SeasideTesting-Examples</package>
</attributes>
</class>

<class>
<name>SCAnswerChecker</name>
<environment>Seaside</environment>
<super>Seaside.WADecoration</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>hasAnswer answerValue</inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Core</category>
<attributes>
<package>SeasideTesting-Core</package>
</attributes>
</class>

<class>
<name>SCBrowserSimulator</name>
<environment>Seaside</environment>
<super>Core.Object</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>history cookies responseSema baseUrl</inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Core</category>
<attributes>
<package>SeasideTesting-Core</package>
</attributes>
</class>

<class>
<name>SCComponentTestCase</name>
<environment>Seaside</environment>
<super>XProgramming.SUnit.TestCase</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>app browser pseudomain handler debugging responseSema runnerTask</inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Core</category>
<attributes>
<package>SeasideTesting-Core</package>
</attributes>
</class>

<class>
<name>SCAnchorDemoTest</name>
<environment>Seaside</environment>
<super>Seaside.SCComponentTestCase</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Examples</category>
<attributes>
<package>SeasideTesting-Examples</package>
</attributes>
</class>

<class>
<name>SCCanvasComponentTest</name>
<environment>Seaside</environment>
<super>Seaside.SCComponentTestCase</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Examples</category>
<attributes>
<package>SeasideTesting-Examples</package>
</attributes>
</class>

<class>
<name>SCDoNothingTask</name>
<environment>Seaside</environment>
<super>Seaside.WATask</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Examples</category>
<attributes>
<package>SeasideTesting-Examples</package>
</attributes>
</class>

<class>
<name>SCDoNothingTaskTest</name>
<environment>Seaside</environment>
<super>Seaside.SCComponentTestCase</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Examples</category>
<attributes>
<package>SeasideTesting-Examples</package>
</attributes>
</class>

<class>
<name>SCExceptionDuringCallback</name>
<environment>Seaside</environment>
<super>Seaside.WAComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Examples</category>
<attributes>
<package>SeasideTesting-Examples</package>
</attributes>
</class>

<class>
<name>SCExceptionDuringCallbackTest</name>
<environment>Seaside</environment>
<super>Seaside.SCComponentTestCase</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Examples</category>
<attributes>
<package>SeasideTesting-Examples</package>
</attributes>
</class>

<class>
<name>SCExceptionDuringRendering</name>
<environment>Seaside</environment>
<super>Seaside.WAComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Examples</category>
<attributes>
<package>SeasideTesting-Examples</package>
</attributes>
</class>

<class>
<name>SCExceptionDuringRenderingTest</name>
<environment>Seaside</environment>
<super>Seaside.SCComponentTestCase</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Examples</category>
<attributes>
<package>SeasideTesting-Examples</package>
</attributes>
</class>

<class>
<name>SCFileDownloadComponent</name>
<environment>Seaside</environment>
<super>Seaside.WAComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Examples</category>
<attributes>
<package>SeasideTesting-Examples</package>
</attributes>
</class>

<comment>
<class-id>Seaside.SCFileDownloadComponent</class-id>
<body>Seaside tutorial
http://www.shaffer-consulting.com/david/Seaside/RenderingBasics/index.html
testing various components
</body>
</comment>

<class>
<name>SCFileDownloadComponentTest</name>
<environment>Seaside</environment>
<super>Seaside.SCComponentTestCase</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Examples</category>
<attributes>
<package>SeasideTesting-Examples</package>
</attributes>
</class>

<comment>
<class-id>Seaside.SCFileDownloadComponentTest</class-id>
<body>Thanks to Liliana Ivan for furnishing this test case.</body>
</comment>

<class>
<name>SCFormDemo</name>
<environment>Seaside</environment>
<super>Seaside.WAComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>name age</inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Examples</category>
<attributes>
<package>SeasideTesting-Examples</package>
</attributes>
</class>

<class>
<name>SCFormDemoTest</name>
<environment>Seaside</environment>
<super>Seaside.SCComponentTestCase</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Examples</category>
<attributes>
<package>SeasideTesting-Examples</package>
</attributes>
</class>

<class>
<name>SCInputWithLabel</name>
<environment>Seaside</environment>
<super>Seaside.WAComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>value</inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Examples</category>
<attributes>
<package>SeasideTesting-Examples</package>
</attributes>
</class>

<class>
<name>SCInputWithLabelTest</name>
<environment>Seaside</environment>
<super>Seaside.SCComponentTestCase</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Examples</category>
<attributes>
<package>SeasideTesting-Examples</package>
</attributes>
</class>

<class>
<name>SCRadioGroup</name>
<environment>Seaside</environment>
<super>Core.Object</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>radioButtons selectedButton name</inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Html Entities</category>
<attributes>
<package>SeasideTesting-Html Entities</package>
</attributes>
</class>

<class>
<name>SCRenderLoop</name>
<environment>Seaside</environment>
<super>Seaside.WARenderLoop</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Core</category>
<attributes>
<package>SeasideTesting-Core</package>
</attributes>
</class>

<class>
<name>SCRunnerTask</name>
<environment>Seaside</environment>
<super>Seaside.WATask</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>componentClass initializationBlock createComponentBlock answerChecker checker component</inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Core</category>
<attributes>
<package>SeasideTesting-Core</package>
</attributes>
</class>

<class>
<name>SCSampleComponentTest</name>
<environment>Seaside</environment>
<super>Seaside.SCComponentTestCase</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Examples</category>
<attributes>
<package>SeasideTesting-Examples</package>
</attributes>
</class>

<class>
<name>SCSeasideEntity</name>
<environment>Seaside</environment>
<super>Core.Object</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>attributes entities</inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Html Entities</category>
<attributes>
<package>SeasideTesting-Html Entities</package>
</attributes>
</class>

<class>
<name>SCHtmlInputComponent</name>
<environment>Seaside</environment>
<super>Seaside.SCSeasideEntity</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>form value</inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Html Entities</category>
<attributes>
<package>SeasideTesting-Html Entities</package>
</attributes>
</class>

<class>
<name>SCCheckboxHtmlInput</name>
<environment>Seaside</environment>
<super>Seaside.SCHtmlInputComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Html Entities</category>
<attributes>
<package>SeasideTesting-Html Entities</package>
</attributes>
</class>

<class>
<name>SCFileHtmlInput</name>
<environment>Seaside</environment>
<super>Seaside.SCHtmlInputComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Html Entities</category>
<attributes>
<package>SeasideTesting-Html Entities</package>
</attributes>
</class>

<class>
<name>SCHiddenHtmlInput</name>
<environment>Seaside</environment>
<super>Seaside.SCHtmlInputComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Html Entities</category>
<attributes>
<package>SeasideTesting-Html Entities</package>
</attributes>
</class>

<class>
<name>SCRadioButtonHtmlInput</name>
<environment>Seaside</environment>
<super>Seaside.SCHtmlInputComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>group internalValue</inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Html Entities</category>
<attributes>
<package>SeasideTesting-Html Entities</package>
</attributes>
</class>

<class>
<name>SCSeasideForm</name>
<environment>Seaside</environment>
<super>Seaside.SCSeasideEntity</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>radioGroups</inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Html Entities</category>
<attributes>
<package>SeasideTesting-Html Entities</package>
</attributes>
</class>

<class>
<name>SCSeasideGenericEntity</name>
<environment>Seaside</environment>
<super>Seaside.SCSeasideEntity</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>tag</inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Html Entities</category>
<attributes>
<package>SeasideTesting-Html Entities</package>
</attributes>
</class>

<class>
<name>SCSeasideResponse</name>
<environment>Seaside</environment>
<super>Seaside.SCSeasideEntity</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>httpResponse</inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Html Entities</category>
<attributes>
<package>SeasideTesting-Html Entities</package>
</attributes>
</class>

<class>
<name>SCSeasideResponseParser</name>
<environment>Seaside</environment>
<super>SAXHandler</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>stack response currentForm currentSelect</inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Core</category>
<attributes>
<package>SeasideTesting-Core</package>
</attributes>
</class>

<class>
<name>SCSeasideStateMarker</name>
<environment>Seaside</environment>
<super>Seaside.SCSeasideEntity</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>sessionId continuationId</inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Html Entities</category>
<attributes>
<package>SeasideTesting-Html Entities</package>
</attributes>
</class>

<class>
<name>SCSeasideAnchor</name>
<environment>Seaside</environment>
<super>Seaside.SCSeasideStateMarker</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>fullUrl anchorNumber path</inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Html Entities</category>
<attributes>
<package>SeasideTesting-Html Entities</package>
</attributes>
</class>

<class>
<name>SCSeasideTextEntity</name>
<environment>Seaside</environment>
<super>Seaside.SCSeasideEntity</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>text</inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Html Entities</category>
<attributes>
<package>SeasideTesting-Html Entities</package>
</attributes>
</class>

<comment>
<class-id>Seaside.SCSeasideTextEntity</class-id>
<body>Not a real XHTML element...just a place to hold CDATA.</body>
</comment>

<class>
<name>SCSelectHtmlInput</name>
<environment>Seaside</environment>
<super>Seaside.SCHtmlInputComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>selectedOptions</inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Html Entities</category>
<attributes>
<package>SeasideTesting-Html Entities</package>
</attributes>
</class>

<class>
<name>SCSelectOption</name>
<environment>Seaside</environment>
<super>Seaside.SCSeasideEntity</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>label value selectInput</inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Html Entities</category>
<attributes>
<package>SeasideTesting-Html Entities</package>
</attributes>
</class>

<class>
<name>SCSetBacktrackingComponent</name>
<environment>Seaside</environment>
<super>Seaside.WAComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>set value</inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Examples</category>
<attributes>
<package>SeasideTesting-Examples</package>
</attributes>
</class>

<class>
<name>SCSetBacktrackingTest</name>
<environment>Seaside</environment>
<super>Seaside.SCComponentTestCase</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Examples</category>
<attributes>
<package>SeasideTesting-Examples</package>
</attributes>
</class>

<comment>
<class-id>Seaside.SCSetBacktrackingTest</class-id>
<body>Test whether Set instances are properly backtracked or not.  This test will probably not pass unless my extensions to Set in the package SC are loaded.  Beware, if you don't pass this test then don't trust that Set instances are properly backtracked by Seaside.</body>
</comment>

<class>
<name>SCSubmitButtonHtmlInput</name>
<environment>Seaside</environment>
<super>Seaside.SCHtmlInputComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Html Entities</category>
<attributes>
<package>SeasideTesting-Html Entities</package>
</attributes>
</class>

<class>
<name>SCTestBuilder</name>
<environment>Seaside</environment>
<super>Seaside.WAComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>component requests</inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-TestRunner</category>
<attributes>
<package>SeasideTesting-TestRunner</package>
</attributes>
</class>

<class>
<name>SCTestBuilderSession</name>
<environment>Seaside</environment>
<super>Seaside.WASession</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>testBuilder</inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-TestRunner</category>
<attributes>
<package>SeasideTesting-TestRunner</package>
</attributes>
</class>

<class>
<name>SCTestCaseMain</name>
<environment>Seaside</environment>
<super>Seaside.WARenderLoopMain</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-TestRunner</category>
<attributes>
<package>SeasideTesting-TestRunner</package>
</attributes>
</class>

<class>
<name>SCTestCaseViewer</name>
<environment>Seaside</environment>
<super>Seaside.WAComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>filterString</inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-TestRunner</category>
<attributes>
<package>SeasideTesting-TestRunner</package>
</attributes>
</class>

<class>
<name>SCTestComponent1</name>
<environment>Seaside</environment>
<super>Seaside.WAComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Examples</category>
<attributes>
<package>SeasideTesting-Examples</package>
</attributes>
</class>

<class>
<name>SCTestComponent2</name>
<environment>Seaside</environment>
<super>Seaside.WAComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>firstSent secondSent</inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Examples</category>
<attributes>
<package>SeasideTesting-Examples</package>
</attributes>
</class>

<class>
<name>SCTestComponent3</name>
<environment>Seaside</environment>
<super>Seaside.WAComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>field1 field2 button1WasPressed button2WasPressed</inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Examples</category>
<attributes>
<package>SeasideTesting-Examples</package>
</attributes>
</class>

<class>
<name>SCTestComponent4</name>
<environment>Seaside</environment>
<super>Seaside.WAComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>firstSent secondSent thirdSent</inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Examples</category>
<attributes>
<package>SeasideTesting-Examples</package>
</attributes>
</class>

<class>
<name>SCTestComponent5</name>
<environment>Seaside</environment>
<super>Seaside.WAComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Examples</category>
<attributes>
<package>SeasideTesting-Examples</package>
</attributes>
</class>

<class>
<name>SCTestComponent6</name>
<environment>Seaside</environment>
<super>Seaside.WAComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>selectedItem</inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Examples</category>
<attributes>
<package>SeasideTesting-Examples</package>
</attributes>
</class>

<class>
<name>SCTestComponent7</name>
<environment>Seaside</environment>
<super>Seaside.WAComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Examples</category>
<attributes>
<package>SeasideTesting-Examples</package>
</attributes>
</class>

<class>
<name>SCTestErrorHandler</name>
<environment>Seaside</environment>
<super>Seaside.WAWalkbackErrorHandler</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>case</inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Core</category>
<attributes>
<package>SeasideTesting-Core</package>
</attributes>
</class>

<class>
<name>SCTestException</name>
<environment>Seaside</environment>
<super>Error</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Examples</category>
<attributes>
<package>SeasideTesting-Examples</package>
</attributes>
</class>

<class>
<name>SCTestHistoryContentView</name>
<environment>Seaside</environment>
<super>Core.Object</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>page</inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-TestRunner</category>
<attributes>
<package>SeasideTesting-TestRunner</package>
</attributes>
</class>

<class>
<name>SCTestHistoryRenderLoop</name>
<environment>Seaside</environment>
<super>Core.Object</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>page</inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-TestRunner</category>
<attributes>
<package>SeasideTesting-TestRunner</package>
</attributes>
</class>

<class>
<name>SCTestHistoryView</name>
<environment>Seaside</environment>
<super>Seaside.WAComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>history currentLocation</inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-TestRunner</category>
<attributes>
<package>SeasideTesting-TestRunner</package>
</attributes>
</class>

<class>
<name>SCTestRunner</name>
<environment>Seaside</environment>
<super>Seaside.WAComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>case result</inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-TestRunner</category>
<attributes>
<package>SeasideTesting-TestRunner</package>
</attributes>
</class>

<class>
<name>SCTestRunnerFiles</name>
<environment>Seaside</environment>
<super>Seaside.WAFileLibrary</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-TestRunner</category>
<attributes>
<package>SeasideTesting-TestRunner</package>
</attributes>
</class>

<class>
<name>SCTesterApplication</name>
<environment>Seaside</environment>
<super>Seaside.WAApplication</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>testCase</inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Core</category>
<attributes>
<package>SeasideTesting-Core</package>
</attributes>
</class>

<comment>
<class-id>Seaside.SCTesterApplication</class-id>
<body>Components under test use instances of SCTesterApplication for their application class.  This needed to:

1) expose handlerWithKey:
2) provide the test case with the opportunity to interfere with session creation.</body>
</comment>

<class>
<name>SCTestingPseudomain</name>
<environment>Seaside</environment>
<super>Seaside.WARenderLoopMain</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>renderLoop storedSession</inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Core</category>
<attributes>
<package>SeasideTesting-Core</package>
</attributes>
</class>

<class>
<name>SCTextHtmlInput</name>
<environment>Seaside</environment>
<super>Seaside.SCHtmlInputComponent</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Html Entities</category>
<attributes>
<package>SeasideTesting-Html Entities</package>
</attributes>
</class>

<class>
<name>SCTextAreaHtmlInput</name>
<environment>Seaside</environment>
<super>Seaside.SCTextHtmlInput</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Html Entities</category>
<attributes>
<package>SeasideTesting-Html Entities</package>
</attributes>
</class>

<class>
<name>WAAllTestsTest</name>
<environment>Seaside</environment>
<super>Seaside.SCComponentTestCase</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Examples</category>
<attributes>
<package>SeasideTesting-Examples</package>
</attributes>
</class>

<class>
<name>WACounterTest</name>
<environment>Seaside</environment>
<super>Seaside.SCComponentTestCase</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Examples</category>
<attributes>
<package>SeasideTesting-Examples</package>
</attributes>
</class>

<class>
<name>WAMiniCalendarTest</name>
<environment>Seaside</environment>
<super>Seaside.SCComponentTestCase</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Examples</category>
<attributes>
<package>SeasideTesting-Examples</package>
</attributes>
</class>

<class>
<name>WAYesOrNoDialogTest</name>
<environment>Seaside</environment>
<super>Seaside.SCComponentTestCase</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>SeasideTesting-Examples</category>
<attributes>
<package>SeasideTesting-Examples</package>
</attributes>
</class>
<methods>
<class-id>Seaside.WAPresenter class</class-id>
<category>*SeasideTesting</category>
<body package="SeasideTesting-Extensions">hasTestSuite
	^self suite notNil</body>
</methods>
<methods>
<class-id>Seaside.WAPresenter class</class-id>
<category>*SeasideTesting</category>
<body package="SeasideTesting-Extensions">suite
	^ (Smalltalk hasClassNamed: self testSuiteName)
		ifTrue: [(Smalltalk classNamed: self testSuiteName) suite]</body>
</methods>
<methods>
<class-id>Seaside.WAPresenter class</class-id>
<category>*SeasideTesting</category>
<body package="SeasideTesting-Extensions">testSuiteName
	^(self name , 'Test') asSymbol</body>
</methods>
<methods>
<class-id>Seaside.SCAnchorDemo</class-id>
<category>rendering</category>
<body package="SeasideTesting-Examples">renderContentOn: html 
	html anchor
		id: 'first';
		callback: [self firstPressed];
		with: 'first link'</body>
</methods>
<methods>
<class-id>Seaside.SCAnchorDemo</class-id>
<category>rendering</category>
<body package="SeasideTesting-Examples">firstPressed
	self inform: 'pressed'</body>
</methods>
<methods>
<class-id>Seaside.SCAnchorDemoTest</class-id>
<category>Running</category>
<body package="SeasideTesting-Examples">testAnchor
	self newApplicationWithRootClass: SCAnchorDemo.
	self establishSession.
	self followAnchor: (self lastResponse anchorWithId: 'first').
	self assert: (self lastResponse entitiesNamed: 'h3') first contentString 
				= 'pressed'</body>
</methods>
<methods>
<class-id>Seaside.SCAnswerChecker</class-id>
<category>call/answer</category>
<body package="SeasideTesting-Core">handleAnswer: anObject 
	(super handleAnswer: anObject)
		ifFalse: [hasAnswer := true.
			answerValue := anObject]
		ifTrue: [^true].
	^ false</body>
</methods>
<methods>
<class-id>Seaside.SCAnswerChecker</class-id>
<category>accessing</category>
<body package="SeasideTesting-Core">hasAnswer
	^ hasAnswer ifNil: [hasAnswer := false]</body>
</methods>
<methods>
<class-id>Seaside.SCAnswerChecker</class-id>
<category>accessing</category>
<body package="SeasideTesting-Core">answerValue
	^answerValue</body>
</methods>
<methods>
<class-id>Seaside.SCBrowserSimulator</class-id>
<category>private</category>
<body package="SeasideTesting-Core">parseCookieString: s 
	| parts keyAndValue result |
	parts := s findTokens: ';'.
	keyAndValue := parts first findTokens: '='.
	result := WACookie key: keyAndValue first value: keyAndValue second.
	^result</body>
</methods>
<methods>
<class-id>Seaside.SCBrowserSimulator</class-id>
<category>accessing</category>
<body package="SeasideTesting-Core">responseSemaphore: s
	responseSema := s</body>
</methods>
<methods>
<class-id>Seaside.SCBrowserSimulator</class-id>
<category>request/response</category>
<body package="SeasideTesting-Core">establishSessionAtBase: baseUrlString 
	| req |
	req := HttpRequest
				readFromStream: (self httpGetRequestStreamFor: baseUrlString).
	baseUrl := baseUrlString.
	^ self issueRequestUntilNotMoved: req</body>
</methods>
<methods>
<class-id>Seaside.SCBrowserSimulator</class-id>
<category>accessing</category>
<body package="SeasideTesting-Core">history
	^history ifNil: [history := OrderedCollection new]</body>
</methods>
<methods>
<class-id>Seaside.SCBrowserSimulator</class-id>
<category>request/response</category>
<body package="SeasideTesting-Core">urlForAnchor: anAnchor 
	^ ((anAnchor asString beginsWith: 'http:')
			or: [anAnchor asString notEmpty and: [anAnchor asString first = $/]])
		ifTrue: [anAnchor asString]
		ifFalse: [baseUrl , anAnchor asString]</body>
</methods>
<methods>
<class-id>Seaside.SCBrowserSimulator</class-id>
<category>request/response</category>
<body package="SeasideTesting-Core">lastResponse
	^self history last value</body>
</methods>
<methods>
<class-id>Seaside.SCBrowserSimulator</class-id>
<category>private</category>
<body package="SeasideTesting-Core">privateIssueRequest: anHttpRequest 
	| response cookie |
	response := SeasidePlatformSupport
		issueRequest: anHttpRequest
		responseSemaphore: responseSema.
	response
		ifNil: [^ self error: 'What do I do here?'].
	response cookies
		ifNotNilDo: [:col | col
				do: [:cookieString | 
					cookie := self parseCookieString: cookieString.
					self cookies at: cookie key put: cookie]].
	^ response</body>
</methods>
<methods>
<class-id>Seaside.SCBrowserSimulator</class-id>
<category>request/response</category>
<body package="SeasideTesting-Core">followAnchor: anAnchor 
	| req |
	anAnchor
		ifNil: [self error: 'Anchor cannot be nil'].
	req := HttpRequest
				readFromStream: (self httpGetRequestStreamFor: (self urlForAnchor: anAnchor)).
	^ self issueRequestUntilNotMoved: req</body>
</methods>
<methods>
<class-id>Seaside.SCBrowserSimulator</class-id>
<category>request/response</category>
<body package="SeasideTesting-Core">urlForForm: form 
	^ ((form actionUrl beginsWith: 'http:')
			or: [form actionUrl notEmpty
					and: [form actionUrl first = $/]])
		ifTrue: [form actionUrl]
		ifFalse: [baseUrl , form actionUrl asString]</body>
</methods>
<methods>
<class-id>Seaside.SCBrowserSimulator</class-id>
<category>accessing</category>
<body package="SeasideTesting-Core">cookies
	^ cookies ifNil: [cookies := Dictionary new]</body>
</methods>
<methods>
<class-id>Seaside.SCBrowserSimulator</class-id>
<category>private</category>
<body package="SeasideTesting-Core">httpGetRequestStreamFor: url 
	^ ('GET ' , url , ' HTTP/1.0' , String crlf , self cookieString , String crlf) readStream</body>
</methods>
<methods>
<class-id>Seaside.SCBrowserSimulator</class-id>
<category>request/response</category>
<body package="SeasideTesting-Core">refresh
	^ self issueRequestUntilNotMoved: self history last key</body>
</methods>
<methods>
<class-id>Seaside.SCBrowserSimulator</class-id>
<category>request/response</category>
<body package="SeasideTesting-Core">issueRequestUntilNotMoved: anHttpRequest 
	| response req newUrl doc |
	req := anHttpRequest.
	[response := self privateIssueRequest: req.
	response status = #tempMoved]
		whileTrue: [newUrl := response fields at: 'Location'.
			req := HttpRequest
						readFromStream: (self httpGetRequestStreamFor: newUrl)].
	doc :=  SCSeasideResponseParser parseDocumentFromResponse: response.
	self history add: req -&gt; doc.
	^ doc</body>
</methods>
<methods>
<class-id>Seaside.SCBrowserSimulator</class-id>
<category>private</category>
<body package="SeasideTesting-Core">httpPostRequestStreamForUrl: url data: postData 
	^ ('POST ' , url , ' HTTP/1.0 ' , String crlf , 'Content-Length: ' , postData size printString , String crlf , 'Content-type: application/x-www-form-urlencoded' , String crlf , self cookieString , String crlf , postData) readStream</body>
</methods>
<methods>
<class-id>Seaside.SCBrowserSimulator</class-id>
<category>request/response</category>
<body package="SeasideTesting-Core">back
	self history removeLast.
	^ self history last value</body>
</methods>
<methods>
<class-id>Seaside.SCBrowserSimulator</class-id>
<category>private</category>
<body package="SeasideTesting-Core">cookieString
	| out |
	self cookies isEmpty
		ifTrue: [^ ''].
	out := WriteStream on: String new.
	out nextPutAll: 'Cookie:'.
	self cookies values
		do: [:cookie | out nextPutAll: ' ' , cookie key , '=' , cookie value]
		separatedBy: [out nextPut: $;].
	out nextPutAll: String crlf.
	^ out contents</body>
</methods>
<methods>
<class-id>Seaside.SCBrowserSimulator</class-id>
<category>request/response</category>
<body package="SeasideTesting-Core">submitForm: form pressingButton: button 
	| req url |
	form isNil
		ifTrue: [self error: 'form should be nil'].
	url := self urlForForm: form.
	url
		ifNil: [url := self history last key url].
	req := HttpRequest
				readFromStream: (self
						httpPostRequestStreamForUrl: url
						data: (form httpDataWithButton: button)).
	^ self issueRequestUntilNotMoved: req</body>
</methods>
<methods>
<class-id>Seaside.SCCanvasComponentTest</class-id>
<category>running</category>
<body package="SeasideTesting-Examples">testFormComponent
	| form |
	self newApplicationWithRootClass: SCTestComponent7.
	form := self establishSession forms first.
	self submitForm: form pressingButton: form buttons first.
	self
		assert: (self componentAnswered: true)</body>
</methods>
<methods>
<class-id>Seaside.SCCheckboxHtmlInput</class-id>
<category>testing</category>
<body package="SeasideTesting-Html Entities">isCheckbox
	^ true</body>
</methods>
<methods>
<class-id>Seaside.SCCheckboxHtmlInput</class-id>
<category>value</category>
<body package="SeasideTesting-Html Entities">check
	self setValue: true</body>
</methods>
<methods>
<class-id>Seaside.SCCheckboxHtmlInput</class-id>
<category>value</category>
<body package="SeasideTesting-Html Entities">uncheck
	self setValue: false</body>
</methods>
<methods>
<class-id>Seaside.SCCheckboxHtmlInput</class-id>
<category>value</category>
<body package="SeasideTesting-Html Entities">value: aValue
	aValue
		ifTrue: [self check]
		ifFalse: [self uncheck]</body>
</methods>
<methods>
<class-id>Seaside.SCCheckboxHtmlInput</class-id>
<category>initialize</category>
<body package="SeasideTesting-Html Entities">initializeForForm: aForm attributes: theAttributes
	super initializeForForm: aForm attributes: theAttributes.
	value := attributes includes: 'checked'.</body>
</methods>
<methods>
<class-id>Seaside.SCCheckboxHtmlInput</class-id>
<category>request</category>
<body package="SeasideTesting-Html Entities">addToRequestStream: aStream 
	self value ifTrue: [aStream nextPutAll: self name].
	^self value</body>
</methods>
<methods>
<class-id>Seaside.SCComponentTestCase</class-id>
<category>private</category>
<body package="SeasideTesting-Core">errorOccurred: e 
	self isDebugging
		ifFalse: [self error: 'An error occured during request processing']</body>
</methods>
<methods>
<class-id>Seaside.SCComponentTestCase</class-id>
<category>dispatcher</category>
<body package="SeasideTesting-Core">dispatcher
	^self class dispatcher</body>
</methods>
<methods>
<class-id>Seaside.SCComponentTestCase</class-id>
<category>component</category>
<body package="SeasideTesting-Core">component
	^runnerTask component</body>
</methods>
<methods>
<class-id>Seaside.SCComponentTestCase</class-id>
<category>subclass hooks</category>
<body package="SeasideTesting-Core">sessionCreated: aSession
	"This is a hook for subclasses that want to perform specific actions in response to session creation (such as initializing a database connection)."</body>
</methods>
<methods>
<class-id>Seaside.SCComponentTestCase</class-id>
<category>application</category>
<body package="SeasideTesting-Core">newApplicationWithRootClass: aComponentClass createWith: aBlock 
	app := SCTesterApplication
				path: (self applicationPathForClass: aComponentClass).
	app testCase: self.
	app configuration addAncestor: WARenderLoopConfiguration instance.
	self dispatcher
		register: app.
	self configureApplicationForComponent: aComponentClass.
	runnerTask createComponentBlock: aBlock.
	^ app</body>
</methods>
<methods>
<class-id>Seaside.SCComponentTestCase</class-id>
<category>dispatcher</category>
<body package="SeasideTesting-Core">applicationPathForClass: aClass
	^aClass name, '_' , testSelector asString
</body>
</methods>
<methods>
<class-id>Seaside.SCComponentTestCase</class-id>
<category>private</category>
<body package="SeasideTesting-Core">checkResponseForDebugging: response 
	| a finalResponse |
	finalResponse := response.
	self isDebugging
		ifTrue: [a := response anchorWithLabel: 'Debug' ifNone: [^finalResponse].
			[finalResponse := self followAnchor: a] fork.
			self halt: 'Browser waiting for response, proceed when you''re done debugging.'].
	^ finalResponse</body>
</methods>
<methods>
<class-id>Seaside.SCComponentTestCase</class-id>
<category>application</category>
<body package="SeasideTesting-Core">newApplicationWithRootClass: aComponentClass 
	^self newApplicationWithRootClass: aComponentClass initializeWith: nil</body>
</methods>
<methods>
<class-id>Seaside.SCComponentTestCase</class-id>
<category>running</category>
<body package="SeasideTesting-Core">debug
	self resources
		do: [:res | res isAvailable
				ifFalse: [^ res signalInitializationError]].
	[(self class selector: testSelector) makeDebugging; runCase]
		ensure: [self resources
				do: [:each | each reset]]</body>
</methods>
<methods>
<class-id>Seaside.SCComponentTestCase</class-id>
<category>application</category>
<body package="SeasideTesting-Core">responseSemaphore
	^ responseSema
		ifNil: [responseSema := Semaphore new]</body>
</methods>
<methods>
<class-id>Seaside.SCComponentTestCase</class-id>
<category>request/response</category>
<body package="SeasideTesting-Core">lastResponse
	^self browser lastResponse</body>
</methods>
<methods>
<class-id>Seaside.SCComponentTestCase</class-id>
<category>running</category>
<body package="SeasideTesting-Core">runCaseAsFailure: aSemaphore 
	self makeDebugging.
	super runCaseAsFailure: aSemaphore</body>
</methods>
<methods>
<class-id>Seaside.SCComponentTestCase</class-id>
<category>running</category>
<body package="SeasideTesting-Core">run: aResult
	debugging := false.
	^super run: aResult</body>
</methods>
<methods>
<class-id>Seaside.SCComponentTestCase</class-id>
<category>accessing</category>
<body package="SeasideTesting-Core">isDebugging
	^debugging</body>
</methods>
<methods>
<class-id>Seaside.SCComponentTestCase</class-id>
<category>request/response</category>
<body package="SeasideTesting-Core">followAnchor: anAnchor 
	| response |
	anAnchor basePath: app basePath.
	response := self browser followAnchor: anAnchor.
	^self checkResponseForDebugging: response</body>
</methods>
<methods>
<class-id>Seaside.SCComponentTestCase</class-id>
<category>application</category>
<body package="SeasideTesting-Core">newApplicationWithRootClass: aComponentClass initializeWith: aBlock 
	app := SCTesterApplication
				path: (self applicationPathForClass: aComponentClass).
	app testCase: self.
	app configuration addAncestor: WARenderLoopConfiguration instance.
	self dispatcher
		register: app.
	self configureApplicationForComponent: aComponentClass.
	runnerTask initializationBlock: aBlock.
	^ app</body>
</methods>
<methods>
<class-id>Seaside.SCComponentTestCase</class-id>
<category>answering</category>
<body package="SeasideTesting-Core">componentAnswered
	^ runnerTask answerChecker hasAnswer</body>
</methods>
<methods>
<class-id>Seaside.SCComponentTestCase</class-id>
<category>request/response</category>
<body package="SeasideTesting-Core">refresh
	^self browser refresh</body>
</methods>
<methods>
<class-id>Seaside.SCComponentTestCase</class-id>
<category>running</category>
<body package="SeasideTesting-Core">makeDebugging
	debugging := true</body>
</methods>
<methods>
<class-id>Seaside.SCComponentTestCase</class-id>
<category>request/response</category>
<body package="SeasideTesting-Core">submitForm: form
	^self submitForm: form pressingButton: nil</body>
</methods>
<methods>
<class-id>Seaside.SCComponentTestCase</class-id>
<category>accessing</category>
<body package="SeasideTesting-Core">session
	^ pseudomain storedSession</body>
</methods>
<methods>
<class-id>Seaside.SCComponentTestCase</class-id>
<category>answering</category>
<body package="SeasideTesting-Core">answer
	| checker |
	checker := runnerTask answerChecker.
	^checker hasAnswer
		ifTrue: [checker answerValue]
		ifFalse: [self error: 'Component did not answer.']
</body>
</methods>
<methods>
<class-id>Seaside.SCComponentTestCase</class-id>
<category>request/response</category>
<body package="SeasideTesting-Core">backAndRefresh
	self back.
	^self refresh</body>
</methods>
<methods>
<class-id>Seaside.SCComponentTestCase</class-id>
<category>request/response</category>
<body package="SeasideTesting-Core">establishSession
	^ self checkResponseForDebugging:  (self browser establishSessionAtBase: app baseUrl asString)</body>
</methods>
<methods>
<class-id>Seaside.SCComponentTestCase</class-id>
<category>request/response</category>
<body package="SeasideTesting-Core">back
	^self browser back</body>
</methods>
<methods>
<class-id>Seaside.SCComponentTestCase</class-id>
<category>subclass hooks</category>
<body package="SeasideTesting-Core">configureApplicationForComponent: aComponentClass 
	"This gets sent when SeasideTesting creates the entry point for 
	your test class. Override it to configure your application's 
	session class or other 'preferences' but be sure to do the super 
	send. "
	app preferenceAt: #deploymentMode put: true.
	pseudomain := SCTestingPseudomain new.
	app preferenceAt: #mainClass put: pseudomain.
	handler := SCTestErrorHandler new.
	handler case: self.
	app preferenceAt: #errorHandler put: handler.
	runnerTask := SCRunnerTask new.
	runnerTask componentClass: aComponentClass.
	app preferenceAt: #rootComponent put: runnerTask</body>
</methods>
<methods>
<class-id>Seaside.SCComponentTestCase</class-id>
<category>request/response</category>
<body package="SeasideTesting-Core">submitForm: form pressingButton: button 
	| response |
	response := self browser submitForm: form pressingButton: button.
	^self checkResponseForDebugging: response</body>
</methods>
<methods>
<class-id>Seaside.SCComponentTestCase</class-id>
<category>accessing</category>
<body package="SeasideTesting-Core">browser
	^ browser
		ifNil: [browser := SCBrowserSimulator new
			responseSemaphore: self responseSemaphore;
			yourself]</body>
</methods>
<methods>
<class-id>Seaside.SCComponentTestCase</class-id>
<category>answering</category>
<body package="SeasideTesting-Core">componentAnswered: value 
	| checker |
	checker := runnerTask answerChecker.
	^checker hasAnswer and: [checker answerValue = value]</body>
</methods>
<methods>
<class-id>Seaside.SCComponentTestCase</class-id>
<category>component</category>
<body package="SeasideTesting-Core">frontMostComponent
	^ runnerTask component visiblePresentersDo: [:each |
		each isDecoration ifFalse: [^each]]</body>
</methods>
<methods>
<class-id>Seaside.SCDoNothingTask</class-id>
<category>rendering</category>
<body package="SeasideTesting-Examples">go
	^self</body>
</methods>
<methods>
<class-id>Seaside.SCDoNothingTaskTest</class-id>
<category>running</category>
<body package="SeasideTesting-Examples">testNotInfiniteLoop
	"Make sure that tasks which don't call anything don't cause an infinite loop"
	self newApplicationWithRootClass: SCDoNothingTask.
</body>
</methods>
<methods>
<class-id>Seaside.SCExceptionDuringCallback</class-id>
<category>rendering</category>
<body package="SeasideTesting-Examples">renderContentOn: html 
	html anchor 
		callback: [SCTestException signal];
		with: 'throw exception'</body>
</methods>
<methods>
<class-id>Seaside.SCExceptionDuringCallbackTest</class-id>
<category>as yet unclassified</category>
<body package="SeasideTesting-Examples">couldBeTestException
	self newApplicationWithRootClass: SCExceptionDuringCallback.
	self establishSession.
	self should: [self followAnchor: self lastResponse anchors first]
		raise: SCTestException</body>
</methods>
<methods>
<class-id>Seaside.SCExceptionDuringRendering</class-id>
<category>rendering</category>
<body package="SeasideTesting-Examples">renderContentOn: html 
	SCTestException signal</body>
</methods>
<methods>
<class-id>Seaside.SCExceptionDuringRenderingTest</class-id>
<category>as yet unclassified</category>
<body package="SeasideTesting-Examples">couldBeTestException
	self newApplicationWithRootClass: SCExceptionDuringRendering.
	self should: [self establishSession] raise: SCTestException
</body>
</methods>
<methods>
<class-id>Seaside.SCFileDownloadComponent</class-id>
<category>rendering</category>
<body package="SeasideTesting-Examples">renderContentOn: html 
	html heading
		level:1;
		with: 'Tests'.
	html break.
	html anchor
		document: 'some text that may be read from somewhere'
		mimeType: 'text/plain'
		fileName: 'myfilename.txt';
		with: 'Download file'</body>
</methods>
<methods>
<class-id>Seaside.SCFileDownloadComponentTest</class-id>
<category>tests</category>
<body package="SeasideTesting-Examples">testDownloadFileLink
	self newApplicationWithRootClass: SCFileDownloadComponent.
	self establishSession.
	self followAnchor: (self lastResponse anchorWithLabel: 'Download file').
	self assert: self lastResponse contents 
				= 'some text that may be read from somewhere'</body>
</methods>
<methods>
<class-id>Seaside.SCFileHtmlInput</class-id>
<category>request</category>
<body package="SeasideTesting-Html Entities">addToRequestStream: aStream
	^self value
		ifNil: [false]
		ifNotNil: [super addToRequestStream: aStream]</body>
</methods>
<methods>
<class-id>Seaside.SCFormDemo</class-id>
<category>accessing</category>
<body package="SeasideTesting-Examples">age
	^age</body>
</methods>
<methods>
<class-id>Seaside.SCFormDemo</class-id>
<category>accessing</category>
<body package="SeasideTesting-Examples">name: anObject
	name := anObject</body>
</methods>
<methods>
<class-id>Seaside.SCFormDemo</class-id>
<category>accessing</category>
<body package="SeasideTesting-Examples">name
	^name</body>
</methods>
<methods>
<class-id>Seaside.SCFormDemo</class-id>
<category>rendering</category>
<body package="SeasideTesting-Examples">renderContentOn: html
	html form with: [
		html text: 'Name: '.
		html textInput
			id: 'name';
			on: #name of: self.
		html break.
		html text: 'Age: '.
		html textInput
			id: 'age';
			on: #age of: self.
		html break.
		html submitButton
			callback: [self displayInfo]; 
			value: 'Display']</body>
</methods>
<methods>
<class-id>Seaside.SCFormDemo</class-id>
<category>accessing</category>
<body package="SeasideTesting-Examples">age: anObject
	age := anObject</body>
</methods>
<methods>
<class-id>Seaside.SCFormDemo</class-id>
<category>rendering</category>
<body package="SeasideTesting-Examples">displayInfo
	self inform: 'Hello ' , name , '.  You are ' , age , ' years old.'</body>
</methods>
<methods>
<class-id>Seaside.SCFormDemoTest</class-id>
<category>Running</category>
<body package="SeasideTesting-Examples">testDisplay
	| form |
	self newApplicationWithRootClass: SCFormDemo.
	self establishSession.
	form := self lastResponse forms first.
	form textInputWithId: 'name' value: 'Bob Smith'.
	form textInputWithId: 'age' value: '40'.
	self submitForm: form pressingButton: form buttons first.
	self assert: (self lastResponse entitiesNamed: 'h3') first contentString 
				= 'Hello Bob Smith.  You are 40 years old.'</body>
</methods>
<methods>
<class-id>Seaside.SCHtmlInputComponent</class-id>
<category>testing</category>
<body package="SeasideTesting-Html Entities">isInputComponent
	^true</body>
</methods>
<methods>
<class-id>Seaside.SCHtmlInputComponent</class-id>
<category>accessing</category>
<body package="SeasideTesting-Html Entities">tag
	^'input'</body>
</methods>
<methods>
<class-id>Seaside.SCHtmlInputComponent</class-id>
<category>accessing</category>
<body package="SeasideTesting-Html Entities">name
	^ self attributeAt: 'name' ifAbsent: []</body>
</methods>
<methods>
<class-id>Seaside.SCHtmlInputComponent</class-id>
<category>value</category>
<body package="SeasideTesting-Html Entities">value
	^value</body>
</methods>
<methods>
<class-id>Seaside.SCHtmlInputComponent</class-id>
<category>private</category>
<body package="SeasideTesting-Html Entities">setValue: aValue
	value := aValue</body>
</methods>
<methods>
<class-id>Seaside.SCHtmlInputComponent</class-id>
<category>request</category>
<body package="SeasideTesting-Html Entities">addToRequestStream: aStream
	self name ifNil: [^false].
	aStream nextPutAll: self name.
	self value ifNotNil: [aStream nextPut: $=.
		aStream nextPutAll: self value].
	^true</body>
</methods>
<methods>
<class-id>Seaside.SCHtmlInputComponent</class-id>
<category>initialize</category>
<body package="SeasideTesting-Html Entities">initializeForForm: aForm attributes: theAttributes
	self attributes: theAttributes.
	value := attributes at: 'value' ifAbsent: [].
	form := aForm</body>
</methods>
<methods>
<class-id>Seaside.SCHtmlInputComponent</class-id>
<category>value</category>
<body package="SeasideTesting-Html Entities">value: aValue 
	self setValue: aValue</body>
</methods>
<methods>
<class-id>Seaside.SCInputWithLabel</class-id>
<category>rendering</category>
<body package="SeasideTesting-Examples">renderContentOn: html
	html form with:
		[html label for: 'someField'; with: 'some text'.
		html textInput id: 'someField'; callback: [:v | value := v].
		html submitButton callback: [self answer]; value: 'button']</body>
</methods>
<methods>
<class-id>Seaside.SCInputWithLabel</class-id>
<category>accessing</category>
<body package="SeasideTesting-Examples">value: anObject
	^ value := anObject</body>
</methods>
<methods>
<class-id>Seaside.SCInputWithLabel</class-id>
<category>accessing</category>
<body package="SeasideTesting-Examples">value
	^ value</body>
</methods>
<methods>
<class-id>Seaside.SCInputWithLabelTest</class-id>
<category>running</category>
<body package="SeasideTesting-Examples">testFindInput
	| labels form inputs |
	self newApplicationWithRootClass: SCInputWithLabel.
	self establishSession.
	form := self lastResponse forms first.
	labels := form labelsWithText: 'some text'.
	self assert: labels size = 1.
	inputs := form inputsWithLabel: 'some text'.
	self assert: inputs size = 1.
	inputs first value: 'type something'.
	self submitForm: form pressingButton: form buttons first.
	self assert: self component value = 'type something'</body>
</methods>
<methods>
<class-id>Seaside.SCRadioButtonHtmlInput</class-id>
<category>value</category>
<body package="SeasideTesting-Html Entities">makeSelected
	group selectRadioButton: self</body>
</methods>
<methods>
<class-id>Seaside.SCRadioButtonHtmlInput</class-id>
<category>initialize</category>
<body package="SeasideTesting-Html Entities">initializeForGroup: aGroup form: aForm attributes: theAttributes
	self initializeForForm: aForm attributes: theAttributes.
	group := aGroup.
	internalValue := value.
	value := attributes includesKey: 'checked'.
	</body>
</methods>
<methods>
<class-id>Seaside.SCRadioButtonHtmlInput</class-id>
<category>testing</category>
<body package="SeasideTesting-Html Entities">isSelected
	^ value
		ifNil: [value := false]</body>
</methods>
<methods>
<class-id>Seaside.SCRadioButtonHtmlInput</class-id>
<category>value</category>
<body package="SeasideTesting-Html Entities">value: aValue
	aValue
		ifTrue: [self makeSelected]
		ifFalse: [self makeUnselected]</body>
</methods>
<methods>
<class-id>Seaside.SCRadioButtonHtmlInput</class-id>
<category>request</category>
<body package="SeasideTesting-Html Entities">addToRequestStream: aStream 
	^ self value
		and: [self name
				ifNil: [false]
				ifNotNil: [aStream nextPutAll: self name.
				aStream nextPut: $=.
				aStream nextPutAll: internalValue.
				true]]</body>
</methods>
<methods>
<class-id>Seaside.SCRadioButtonHtmlInput</class-id>
<category>value</category>
<body package="SeasideTesting-Html Entities">makeUnselected
	self privateMakeUnselected</body>
</methods>
<methods>
<class-id>Seaside.SCRadioButtonHtmlInput</class-id>
<category>private-value</category>
<body package="SeasideTesting-Html Entities">privateMakeSelected
	self setValue: true</body>
</methods>
<methods>
<class-id>Seaside.SCRadioButtonHtmlInput</class-id>
<category>testing</category>
<body package="SeasideTesting-Html Entities">isRadioButton
	^true</body>
</methods>
<methods>
<class-id>Seaside.SCRadioButtonHtmlInput</class-id>
<category>private-value</category>
<body package="SeasideTesting-Html Entities">privateMakeUnselected
	self setValue: false</body>
</methods>
<methods>
<class-id>Seaside.SCRadioGroup</class-id>
<category>accessing</category>
<body package="SeasideTesting-Html Entities">addButton: aRadioButton
	self radioButtons add: aRadioButton</body>
</methods>
<methods>
<class-id>Seaside.SCRadioGroup</class-id>
<category>accessing</category>
<body package="SeasideTesting-Html Entities">selectRadioButton: aButton 
	self radioButtons
		do: [:button | button = aButton
				ifFalse: [button privateMakeUnselected]].
	aButton privateMakeSelected</body>
</methods>
<methods>
<class-id>Seaside.SCRadioGroup</class-id>
<category>accessing</category>
<body package="SeasideTesting-Html Entities">name: aString
	name := aString</body>
</methods>
<methods>
<class-id>Seaside.SCRadioGroup</class-id>
<category>accessing</category>
<body package="SeasideTesting-Html Entities">radioButtons
	^radioButtons ifNil: [radioButtons := OrderedCollection new]</body>
</methods>
<methods>
<class-id>Seaside.SCRenderLoop</class-id>
<category>accessing</category>
<body package="SeasideTesting-Core">root
	^root</body>
</methods>
<methods>
<class-id>Seaside.SCRunnerTask</class-id>
<category>accessing</category>
<body package="SeasideTesting-Core">createComponentBlock: anObject
	createComponentBlock := anObject</body>
</methods>
<methods>
<class-id>Seaside.SCRunnerTask</class-id>
<category>accessing</category>
<body package="SeasideTesting-Core">component
	^component</body>
</methods>
<methods>
<class-id>Seaside.SCRunnerTask</class-id>
<category>rendering</category>
<body package="SeasideTesting-Core">go
	self createComponent.
	self call: component.
	self inform: 'Component answered'</body>
</methods>
<methods>
<class-id>Seaside.SCRunnerTask</class-id>
<category>accessing</category>
<body package="SeasideTesting-Core">componentClass
	^componentClass</body>
</methods>
<methods>
<class-id>Seaside.SCRunnerTask</class-id>
<category>accessing</category>
<body package="SeasideTesting-Core">createComponentBlock
	^createComponentBlock</body>
</methods>
<methods>
<class-id>Seaside.SCRunnerTask</class-id>
<category>accessing</category>
<body package="SeasideTesting-Core">initializationBlock: anObject
	initializationBlock := anObject</body>
</methods>
<methods>
<class-id>Seaside.SCRunnerTask</class-id>
<category>rendering</category>
<body package="SeasideTesting-Core">createComponent
	component := createComponentBlock ifNil: [componentClass new] ifNotNil: [createComponentBlock value].
	checker := SCAnswerChecker new.
	initializationBlock ifNotNil: [initializationBlock value: component].
	component addDecoration: checker.
	^ component</body>
</methods>
<methods>
<class-id>Seaside.SCRunnerTask</class-id>
<category>initialization</category>
<body package="SeasideTesting-Core">initializeDecoration
	"We don't have a session when constructed so we can't do this"</body>
</methods>
<methods>
<class-id>Seaside.SCRunnerTask</class-id>
<category>accessing</category>
<body package="SeasideTesting-Core">initializationBlock
	^initializationBlock</body>
</methods>
<methods>
<class-id>Seaside.SCRunnerTask</class-id>
<category>hacks</category>
<body package="SeasideTesting-Core">new
	"We pretend like we're a class...sorry"
	^self</body>
</methods>
<methods>
<class-id>Seaside.SCRunnerTask</class-id>
<category>accessing</category>
<body package="SeasideTesting-Core">description
	"Polymorphism with WAComponent class method"
	^self componentClass description</body>
</methods>
<methods>
<class-id>Seaside.SCRunnerTask</class-id>
<category>accessing</category>
<body package="SeasideTesting-Core">componentClass: anObject
	componentClass := anObject</body>
</methods>
<methods>
<class-id>Seaside.SCRunnerTask</class-id>
<category>hacks</category>
<body package="SeasideTesting-Core">hasTestSuite
	^false</body>
</methods>
<methods>
<class-id>Seaside.SCRunnerTask</class-id>
<category>accessing</category>
<body package="SeasideTesting-Core">answerChecker
	^checker</body>
</methods>
<methods>
<class-id>Seaside.SCSampleComponentTest</class-id>
<category>tests</category>
<body package="SeasideTesting-Examples">testComponent1
	self newApplicationWithRootClass: SCTestComponent1.
	self establishSession.
	self assert: (self lastResponse stringWithId: 'main') = 'hello'</body>
</methods>
<methods>
<class-id>Seaside.SCSampleComponentTest</class-id>
<category>tests</category>
<body package="SeasideTesting-Examples">testBack
	self newApplicationWithRootClass: SCTestComponent4.
	self establishSession.
	self followAnchor: (self lastResponse anchorWithLabel: 'first link').
	self assert: self component firstSent.
	self deny: self component secondSent.
	self followAnchor: (self lastResponse anchorWithLabel: 'second link').
	self backAndRefresh.
	self assert: self component firstSent.
	self deny: self component secondSent</body>
</methods>
<methods>
<class-id>Seaside.SCSampleComponentTest</class-id>
<category>tests</category>
<body package="SeasideTesting-Examples">testComponent2
	self newApplicationWithRootClass: SCTestComponent2.
	self establishSession.
	self followAnchor: (self lastResponse anchorWithId: 'first').
	self assert: self component firstSent.
	self deny: self component secondSent.
	self followAnchor: (self lastResponse anchorWithLabel: 'second link').
	self assert: self component firstSent.
	self assert: self component secondSent</body>
</methods>
<methods>
<class-id>Seaside.SCSampleComponentTest</class-id>
<category>tests</category>
<body package="SeasideTesting-Examples">testAnswer
	self newApplicationWithRootClass: SCTestComponent4.
	self establishSession.
	self followAnchor: (self lastResponse anchorWithLabel: 'third link').
	self assert: (self componentAnswered: 1234)</body>
</methods>
<methods>
<class-id>Seaside.SCSampleComponentTest</class-id>
<category>tests</category>
<body package="SeasideTesting-Examples">testFrontMostIsDialog
	self newApplicationWithRootClass: SCTestComponent5.
	self establishSession.
	self followAnchor: (self lastResponse anchors second).
	self assert: (self frontMostComponent isKindOf: WAFormDialog)</body>
</methods>
<methods>
<class-id>Seaside.SCSampleComponentTest</class-id>
<category>tests</category>
<body package="SeasideTesting-Examples">testComponent3
	| form |
	self newApplicationWithRootClass: SCTestComponent3.
	self establishSession.
	form := self lastResponse forms first.
	form textInputWithId: 'field1' value: 'bob'.
	form textInputWithId: 'field2' value: 'jane'.
	self submitForm: form pressingButton: form buttons first.
	self assert: self component field1 = 'bob'.
	self assert: self component field2 = 'jane'</body>
</methods>
<methods>
<class-id>Seaside.SCSampleComponentTest</class-id>
<category>tests</category>
<body package="SeasideTesting-Examples">testFrontMost
	self newApplicationWithRootClass: SCTestComponent5.
	self establishSession.
	self assert: (self frontMostComponent isKindOf: SCTestComponent5).
	self followAnchor: self lastResponse anchors first.
	self assert: (self frontMostComponent isKindOf: SCTestComponent4).
	self followAnchor: (self lastResponse anchorWithLabel: 'third link').
	self assert: (self frontMostComponent isKindOf: SCTestComponent5)</body>
</methods>
<methods>
<class-id>Seaside.SCSampleComponentTest</class-id>
<category>tests</category>
<body package="SeasideTesting-Examples">testComponent6
	| form list |
	self newApplicationWithRootClass: SCTestComponent6.
	self establishSession.
	form := self lastResponse forms first.
	list := form selectListWithId: 'theList'.
	list selectOptionWithText: 'b'.
	self submitForm: form pressingButton: form buttons first.
	self assert: self component selectedItem = #b</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideAnchor</class-id>
<category>initialize</category>
<body package="SeasideTesting-Html Entities">variableFromString: aString 
	| parts |
	parts := aString findTokens: '='.
	parts isEmpty
		ifTrue: [^ nil].
	parts size = 1
		ifTrue: [^ self anchorNumber: parts first].	
	parts first = '_s' "WARegistry&gt;&gt;handlerField"
		ifTrue: [^ self sessionId: parts second].
	parts first = '_k' "WASession&gt;&gt;actionField"
		ifTrue: [^ self continuationId: parts second]</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideAnchor</class-id>
<category>accessing</category>
<body package="SeasideTesting-Html Entities">fullUrl: aString
	fullUrl := aString</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideAnchor</class-id>
<category>accessing</category>
<body package="SeasideTesting-Html Entities">anchorNumber: anObject
	anchorNumber := anObject</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideAnchor</class-id>
<category>accessing</category>
<body package="SeasideTesting-Html Entities">label
	^self contentString</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideAnchor</class-id>
<category>accessing</category>
<body package="SeasideTesting-Html Entities">path: aString
	path := aString</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideAnchor</class-id>
<category>accessing</category>
<body package="SeasideTesting-Html Entities">basePath: aString 
	(fullUrl findTokens: '/') first = fullUrl 
		ifTrue: [fullUrl := aString , fullUrl]</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideAnchor</class-id>
<category>accessing</category>
<body package="SeasideTesting-Html Entities">anchorNumber
	^anchorNumber</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideAnchor</class-id>
<category>accessing</category>
<body package="SeasideTesting-Html Entities">tag
	^'a'</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideAnchor</class-id>
<category>initialize</category>
<body package="SeasideTesting-Html Entities">initializeFromHref: aString 
	| parts |
	self fullUrl: aString.
	parts := aString findTokens: '?'.
	parts isEmpty
		ifTrue: [^ self].
	aString first == $? ifTrue: [parts addFirst: String new].
	self path: parts first.
	parts size &gt; 1
		ifTrue: [(parts second findTokens: '&amp;')
				do: [:each | self variableFromString: each]]</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideAnchor</class-id>
<category>converting</category>
<body package="SeasideTesting-Html Entities">asString
	^ fullUrl</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideAnchor</class-id>
<category>testing</category>
<body package="SeasideTesting-Html Entities">isAnchor
	^true</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideEntity</class-id>
<category>testing</category>
<body package="SeasideTesting-Html Entities">isInputComponent
	^false</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideEntity</class-id>
<category>testing</category>
<body package="SeasideTesting-Html Entities">isTextEntity
	^false</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideEntity</class-id>
<category>attributes</category>
<body package="SeasideTesting-Html Entities">cssClass
	^self attributeAt: 'class' ifAbsent: []</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideEntity</class-id>
<category>contents</category>
<body package="SeasideTesting-Html Entities">entities
	^entities ifNil: [entities := OrderedCollection new]</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideEntity</class-id>
<category>attributes</category>
<body package="SeasideTesting-Html Entities">attributeAt: name
	^attributes at: name</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideEntity</class-id>
<category>testing</category>
<body package="SeasideTesting-Html Entities">isSeasideForm
	^false</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideEntity</class-id>
<category>accessing</category>
<body package="SeasideTesting-Html Entities">tag
	"Return a lower case HTML tag describing this entity"
	self subclassResponsibility</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideEntity</class-id>
<category>testing</category>
<body package="SeasideTesting-Html Entities">isCheckbox
	^false</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideEntity</class-id>
<category>attributes</category>
<body package="SeasideTesting-Html Entities">attributeAt: name ifAbsent: aBlock
	^self attributes at: name ifAbsent: aBlock</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideEntity</class-id>
<category>buttons</category>
<body package="SeasideTesting-Html Entities">buttons
	^self allEntities select: [:each | each notNil and: [each isInputComponent and: [each isButton]]]</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideEntity</class-id>
<category>forms</category>
<body package="SeasideTesting-Html Entities">localForms
	^self entities select: [:each | each notNil and: [each isSeasideForm]]</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideEntity</class-id>
<category>forms</category>
<body package="SeasideTesting-Html Entities">forms
	| descendentForms |
	descendentForms := OrderedCollection new.
	self entities do: [:entity | entity ifNotNil: [descendentForms addAll: entity forms]].
	^self localForms , descendentForms</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideEntity</class-id>
<category>accessing</category>
<body package="SeasideTesting-Html Entities">attributes
	^attributes ifNil: [attributes := Dictionary new]</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideEntity</class-id>
<category>private</category>
<body package="SeasideTesting-Html Entities">allElementsIn: element addTo: result 
	result add: element.
	element
		elementsDo: [:subElement | self allElementsIn: subElement addTo: result]</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideEntity</class-id>
<category>contents</category>
<body package="SeasideTesting-Html Entities">contentString
	| result |
	result := WriteStream on: String new.
	(self entities select: [:each | each isTextEntity]) do: [:textEntity |
		result nextPutAll: textEntity text].
	^result contents</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideEntity</class-id>
<category>private</category>
<body package="SeasideTesting-Html Entities">entityWithId: id containsText: aString 
	^(self entityWithId: id) containsString: aString</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideEntity</class-id>
<category>testing</category>
<body package="SeasideTesting-Html Entities">isTextInput
	^false</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideEntity</class-id>
<category>parts</category>
<body package="SeasideTesting-Html Entities">entitiesWithClass: aString 
	^self allEntities
		select: [:each | ((each attributeAt: 'class' ifAbsent: ['']) findTokens: ' ') includes: aString]</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideEntity</class-id>
<category>contents</category>
<body package="SeasideTesting-Html Entities">addEntity: anElement
	self entities add: anElement</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideEntity</class-id>
<category>parts</category>
<body package="SeasideTesting-Html Entities">allEntities
	| result |
	result := OrderedCollection new.
	result addAll: self entities.
	self entities do: [:entity | entity ifNotNil: [result addAll: entity allEntities]].
	^result</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideEntity</class-id>
<category>attributes</category>
<body package="SeasideTesting-Html Entities">attributeAt: name ifPresent: aBlock
	^self attributes at: name ifPresent: aBlock</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideEntity</class-id>
<category>parts</category>
<body package="SeasideTesting-Html Entities">entityWithId: aString ifAbsent: aBlock 
	^self allEntities detect: [:each | each cssId = aString] ifNone: aBlock</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideEntity</class-id>
<category>contents</category>
<body package="SeasideTesting-Html Entities">containsString: aString 
	"Look deep into the containment hierarchy looking for the specified string"
	(self contentString includesSubString: aString) ifTrue: [^true].
	^self entities anySatisfy: [:each | each containsString: aString]</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideEntity</class-id>
<category>anchors</category>
<body package="SeasideTesting-Html Entities">localAnchors
	^self entities select: [ :each | each notNil and: [each isAnchor]]</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideEntity</class-id>
<category>private</category>
<body package="SeasideTesting-Html Entities">allElementsWithTag: tagName in: element addTo: result 
	element name = tagName 
		ifTrue: [result add: element]
		ifFalse: 
			[element elementsDo: 
					[:subElement | 
					self 
						allElementsWithTag: tagName
						in: subElement
						addTo: result]]</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideEntity</class-id>
<category>testing</category>
<body package="SeasideTesting-Html Entities">isOption
	^false</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideEntity</class-id>
<category>buttons</category>
<body package="SeasideTesting-Html Entities">buttonWithValue: aString 
	^ self buttons
		detect: [:each | each value = aString] 
		ifNone: [self error: 'no such button']</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideEntity</class-id>
<category>testing</category>
<body package="SeasideTesting-Html Entities">isSelectInput
	^false</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideEntity</class-id>
<category>attributes</category>
<body package="SeasideTesting-Html Entities">cssId
	^self attributeAt: 'id' ifAbsent: []</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideEntity</class-id>
<category>parts</category>
<body package="SeasideTesting-Html Entities">entitiesNamed: aStringTagName 
	^self allEntities select: [:each | each tag = aStringTagName]</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideEntity</class-id>
<category>anchors</category>
<body package="SeasideTesting-Html Entities">anchors
	| descendentAnchors |
	descendentAnchors := OrderedCollection new.
	self entities do: [:entity | entity ifNotNil: [descendentAnchors addAll: entity anchors]].
	^self localAnchors , descendentAnchors</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideEntity</class-id>
<category>parts</category>
<body package="SeasideTesting-Html Entities">entityWithId: aString 
	^self entityWithId: aString ifAbsent: [self error: 'No such element.']</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideEntity</class-id>
<category>testing</category>
<body package="SeasideTesting-Html Entities">isRadioButton
	^ false</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideEntity</class-id>
<category>testing</category>
<body package="SeasideTesting-Html Entities">isButton
	^false</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideEntity</class-id>
<category>accessing</category>
<body package="SeasideTesting-Html Entities">attributes: anObject
	attributes := anObject</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideEntity</class-id>
<category>inputs</category>
<body package="SeasideTesting-Html Entities">inputs
	^self allEntities select: [:each | each notNil and: [each isInputComponent]]</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideEntity</class-id>
<category>testing</category>
<body package="SeasideTesting-Html Entities">isAnchor
	^false</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideForm</class-id>
<category>inputs</category>
<body package="SeasideTesting-Html Entities">radioGroups
	^radioGroups ifNil: [radioGroups := Dictionary new]</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideForm</class-id>
<category>accessing</category>
<body package="SeasideTesting-Html Entities">tag
	^'form'</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideForm</class-id>
<category>private-inputs</category>
<body package="SeasideTesting-Html Entities">inputWithId: anId ifAbsent: aBlock
	| res |
	res := self entityWithId: anId ifAbsent: [^aBlock value].
	^res isInputComponent 
		ifTrue: [res]
		ifFalse: [aBlock value]</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideForm</class-id>
<category>private-inputs</category>
<body package="SeasideTesting-Html Entities">getOrCreateRadioGroup: groupName
	^self radioGroups at: groupName ifAbsentPut: [SCRadioGroup named: groupName].</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideForm</class-id>
<category>inputs</category>
<body package="SeasideTesting-Html Entities">textInputWithId: stringId
	| input |
	input := self
				inputWithId: stringId
				ifAbsent: [self error: 'No such input component.'].
	input isTextInput
		ifFalse: [self error: 'Not a text component.'].
	^input</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideForm</class-id>
<category>testing</category>
<body package="SeasideTesting-Html Entities">isSeasideForm
	^true</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideForm</class-id>
<category>posting</category>
<body package="SeasideTesting-Html Entities">writeHttpDataFor: key value: value on: stream 
	| name |
	name := key.
	value
		ifNil: [^ stream nextPutAll: name].
	value isString
		ifTrue: [stream nextPutAll: name;
				 nextPut: $=;
				 nextPutAll: value]
		ifFalse: [value
				do: [:each | self
						writeHttpDataFor: key
						value: each
						on: stream]
				separatedBy: [stream nextPut: $&amp;]]</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideForm</class-id>
<category>inputs</category>
<body package="SeasideTesting-Html Entities">activateRadioButtonWithId: stringId 
	(self radioButtonWithId: stringId) makeSelected</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideForm</class-id>
<category>inputs</category>
<body package="SeasideTesting-Html Entities">inputsWithLabel: aString
	| labels |
	labels := self labelsWithText: aString.
	^labels collect: [:label | 
		self
				inputWithId: (label attributeAt: 'for')
				ifAbsent: [self error: 'No such input component.']].
</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideForm</class-id>
<category>inputs</category>
<body package="SeasideTesting-Html Entities">labelsWithText: aString
	| labels |
	labels := self entitiesNamed: 'label'.
	^labels select: [:each | each contentString = aString].
</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideForm</class-id>
<category>private-inputs</category>
<body package="SeasideTesting-Html Entities">inputsWithClass: aName
	^self inputs select: [:each | each cssClass = aName]</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideForm</class-id>
<category>posting</category>
<body package="SeasideTesting-Html Entities">actionUrl
	^ self attributeAt: 'action'</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideForm</class-id>
<category>inputs</category>
<body package="SeasideTesting-Html Entities">deactivateCheckboxWithId: stringId 
	self checkboxWithId: stringId value: false</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideForm</class-id>
<category>inputs</category>
<body package="SeasideTesting-Html Entities">radioButtonWithId: stringId 
	| input |
	input := self
				inputWithId: stringId
				ifAbsent: [self error: 'No such input component.'].
	input isRadioButton
		ifFalse: [self error: 'Not a radio button component.'].
	^input</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideForm</class-id>
<category>private-inputs</category>
<body package="SeasideTesting-Html Entities">optionValuesByTextForSelect: aSelectElement 
	| optionElements result |
	optionElements := aSelectElement elements
				select: [:each | each name = 'option'].
	result := Dictionary new.
	optionElements
		do: [:each | result at: (each contents first string) put: (each attributeAt: 'value') ].
	^result</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideForm</class-id>
<category>inputs</category>
<body package="SeasideTesting-Html Entities">textInputWithId: stringId value: stringValue 
	(self textInputWithId: stringId) value: stringValue</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideForm</class-id>
<category>inputs</category>
<body package="SeasideTesting-Html Entities">textInputs
	^self allEntities select: [:each | each isTextInput]</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideForm</class-id>
<category>private-inputs</category>
<body package="SeasideTesting-Html Entities">inputWithName: aName ifAbsent: aBlock 
	self inputs detect: [:each | each name = aName] ifNone: aBlock</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideForm</class-id>
<category>inputs</category>
<body package="SeasideTesting-Html Entities">checkboxWithId: stringId value: aBoolean 
	(self checkboxWithId: stringId) value: aBoolean</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideForm</class-id>
<category>inputs</category>
<body package="SeasideTesting-Html Entities">checkboxWithId: stringId
	| input |
	input := self
				inputWithId: stringId
				ifAbsent: [self error: 'No such input component.'].
	input isCheckbox
		ifFalse: [self error: 'Not a checkbox component.'].
	^input</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideForm</class-id>
<category>inputs</category>
<body package="SeasideTesting-Html Entities">activateCheckboxWithId: stringId 
	self checkboxWithId: stringId value: true</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideForm</class-id>
<category>inputs</category>
<body package="SeasideTesting-Html Entities">selectListWithId: aStringId
	| elem |
	elem := self
				inputWithId: aStringId
				ifAbsent: [self error: 'No such input field.'].
	elem isSelectInput
		ifFalse: [self error: 'Not a select'].
	^ elem</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideForm</class-id>
<category>posting</category>
<body package="SeasideTesting-Html Entities">httpDataWithButton: button 
	| resultStream nonButtonInputs |
	resultStream := WriteStream on: String new.
	button ifNotNil: [((button addToRequestStream: resultStream) and: [self inputs notEmpty]) 
		ifTrue: [resultStream nextPut: $&amp;]].
	nonButtonInputs := self inputs reject: [:each | each isButton].
	nonButtonInputs allButLast do: 
			[:each | 
			(each addToRequestStream: resultStream) ifTrue: [resultStream nextPut: $&amp;]].
	nonButtonInputs last addToRequestStream: resultStream.
	^resultStream contents</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideForm</class-id>
<category>inputs</category>
<body package="SeasideTesting-Html Entities">selectListWithId: aStringId selectOptionWithText: text 
	(self selectListWithId: aStringId) selectOptionWithText: text ifNone: [self error: 'No such option.']</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideGenericEntity</class-id>
<category>accessing</category>
<body package="SeasideTesting-Html Entities">tag: anObject
	tag := anObject</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideGenericEntity</class-id>
<category>accessing</category>
<body package="SeasideTesting-Html Entities">tag
	^tag asLowercase</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideResponse</class-id>
<category>parts</category>
<body package="SeasideTesting-Html Entities">bodyElement
	^self entities first entities detect: [:each | each tag asUppercase = 'BODY']</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideResponse</class-id>
<category>parts</category>
<body package="SeasideTesting-Html Entities">anchorsWithClass: aString
	^ self anchors
		select: [:anchor | anchor cssClass = aString]</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideResponse</class-id>
<category>parts</category>
<body package="SeasideTesting-Html Entities">anchorsWithLabel: aString 
	^ self anchors
		select: [:anchor | anchor label = aString]</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideResponse</class-id>
<category>parts</category>
<body package="SeasideTesting-Html Entities">stringWithId: anId 
	^(self entityWithId: anId) contentString</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideResponse</class-id>
<category>HTTP info</category>
<body package="SeasideTesting-Html Entities">contents
	^self httpResponse contents contents</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideResponse</class-id>
<category>parts</category>
<body package="SeasideTesting-Html Entities">fullStringContents
	^httpResponse contents contents</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideResponse</class-id>
<category>parts</category>
<body package="SeasideTesting-Html Entities">anchorWithId: aString ifNone: aBlock 
	^self entityWithId: aString ifAbsent: aBlock</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideResponse</class-id>
<category>parts</category>
<body package="SeasideTesting-Html Entities">anchorWithLabel: aString 
	^ self anchors detect: [:anchor | anchor label = aString] ifNone: []</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideResponse</class-id>
<category>HTTP info</category>
<body package="SeasideTesting-Html Entities">status
	^httpResponse status</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideResponse</class-id>
<category>HTTP info</category>
<body package="SeasideTesting-Html Entities">cookies
	^httpResponse cookies</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideResponse</class-id>
<category>parts</category>
<body package="SeasideTesting-Html Entities">anchorsIncludingString: aString 
	^self anchors select: [:anchor | anchor containsString: aString]
</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideResponse</class-id>
<category>private</category>
<body package="SeasideTesting-Html Entities">httpResponse: anObject
	httpResponse := anObject</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideResponse</class-id>
<category>parts</category>
<body package="SeasideTesting-Html Entities">formWithId: aString 
	^ self formWithId: aString ifNone: []</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideResponse</class-id>
<category>parts</category>
<body package="SeasideTesting-Html Entities">anchorWithLabel: aString ifNone: aBlock
	^ self anchors
		detect: [:anchor | anchor label = aString]
		ifNone: aBlock</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideResponse</class-id>
<category>HTTP info</category>
<body package="SeasideTesting-Html Entities">httpResponse
	^httpResponse</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideResponse</class-id>
<category>parts</category>
<body package="SeasideTesting-Html Entities">anchorWithId: aString 
	^self
		anchorWithId: aString
		ifNone: []</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideResponse</class-id>
<category>parts</category>
<body package="SeasideTesting-Html Entities">formWithId: aString ifNone: aBlock 
	^self entityWithId: aString ifAbsent: aBlock</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideResponseParser</class-id>
<category>content</category>
<body package="SeasideTesting-Core">startElement: elementName attributeList: attributeList 
	| tag |
	tag := elementName asUppercase.
	tag = 'A'
		ifTrue: [^self startAnchor: attributeList].
	tag = 'FORM'
		ifTrue: [^self startForm: attributeList].
	tag = 'INPUT'
		ifTrue: [^self startInput: attributeList].
	tag = 'BUTTON'
		ifTrue: [^self startInput: attributeList].
	tag = 'SELECT'
		ifTrue: [^self startSelect: attributeList].
	tag = 'TEXTAREA'
		ifTrue: [^self startTextArea: attributeList].
	tag = 'OPTION'
		ifTrue: [^self startOption: attributeList].
	^self startGenericElement: elementName attributeList: attributeList</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideResponseParser</class-id>
<category>content</category>
<body package="SeasideTesting-Core">inputComponentFor: attributes 
	| type |
	type := (attributes
				at: 'type'
				ifAbsent: ['']) asLowercase.
	type = 'text' | (type = 'password')
		ifTrue: [^ SCTextHtmlInput attributes: attributes form: currentForm].
	type = 'checkbox'
		ifTrue: [^ SCCheckboxHtmlInput attributes: attributes form: currentForm].
	type = 'hidden'
		ifTrue: [^ SCHiddenHtmlInput attributes: attributes form: currentForm].
	type = 'submit'
		ifTrue: [^ SCSubmitButtonHtmlInput attributes: attributes form: currentForm].
	type = 'radio'
		ifTrue: [^ self radioComponentFor: attributes].
	type = 'reset'
		ifTrue: [^ nil].
	type = 'file'
		ifTrue: [^ SCFileHtmlInput attributes: attributes form: currentForm].
	self error: 'unknown input type'</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideResponseParser</class-id>
<category>stack</category>
<body package="SeasideTesting-Core">push: anObject 
	self stack add: anObject</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideResponseParser</class-id>
<category>accessing</category>
<body package="SeasideTesting-Core">response
	^response</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideResponseParser</class-id>
<category>content</category>
<body package="SeasideTesting-Core">startElement: localName namespaceURI: namespaceUri namespace: namespace attributeList: attributeList 
	^ self startElement: localName attributeList: attributeList</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideResponseParser</class-id>
<category>content</category>
<body package="SeasideTesting-Core">startOption: attributes
	self addEntity: (SCSelectOption select: currentSelect attributes: attributes)
</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideResponseParser</class-id>
<category>content</category>
<body package="SeasideTesting-Core">startForm: attributes
	| form |
	form := SCSeasideForm withAttributes: attributes.
	self addEntity: form.
	currentForm := form</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideResponseParser</class-id>
<category>content</category>
<body package="SeasideTesting-Core">startTextArea: attributes
	self addEntity: (SCTextAreaHtmlInput attributes: attributes form: currentForm).</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideResponseParser</class-id>
<category>content</category>
<body package="SeasideTesting-Core">radioComponentFor: attributes
	| group button |
	group := currentForm
				getOrCreateRadioGroup: (attributes at: 'name' ifAbsent: []).
	button := SCRadioButtonHtmlInput group: group attributes: attributes form: currentForm.
	group addButton: button.
	^ button</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideResponseParser</class-id>
<category>content</category>
<body package="SeasideTesting-Core">ignorableWhitespace: aString
	self characters: aString first asString</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideResponseParser</class-id>
<category>stack</category>
<body package="SeasideTesting-Core">top
	^self stack last</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideResponseParser</class-id>
<category>content</category>
<body package="SeasideTesting-Core">startDocument
	self push: self document</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideResponseParser</class-id>
<category>stack</category>
<body package="SeasideTesting-Core">pop
	^self stack removeLast</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideResponseParser</class-id>
<category>content</category>
<body package="SeasideTesting-Core">startAnchor: attributes 
	| anchor |
	anchor := SCSeasideAnchor withAttributes: attributes.
	self addEntity: anchor</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideResponseParser</class-id>
<category>content</category>
<body package="SeasideTesting-Core">startSelect: attributes
	self addEntity: (currentSelect := SCSelectHtmlInput attributes: attributes form: currentForm).</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideResponseParser</class-id>
<category>content</category>
<body package="SeasideTesting-Core">endElement: elementName
	elementName asUppercase = 'FORM' ifTrue: [currentForm := nil].
	elementName asUppercase = 'SELECT' ifTrue: [currentSelect := nil].
	^self pop</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideResponseParser</class-id>
<category>accessing</category>
<body package="SeasideTesting-Core">response: anObject
	response := anObject</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideResponseParser</class-id>
<category>stack</category>
<body package="SeasideTesting-Core">addEntity: entity
	self stack notEmpty ifTrue: [self top addEntity: entity].
	self push: entity</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideResponseParser</class-id>
<category>stack</category>
<body package="SeasideTesting-Core">stack
	^stack ifNil: [stack := OrderedCollection new]</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideResponseParser</class-id>
<category>content</category>
<body package="SeasideTesting-Core">startInput: attributes
	self addEntity: (self inputComponentFor: attributes)</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideResponseParser</class-id>
<category>content</category>
<body package="SeasideTesting-Core">characters: aString
	self top addEntity: (SCSeasideTextEntity on: aString)</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideResponseParser</class-id>
<category>content</category>
<body package="SeasideTesting-Core">startGenericElement: elementName attributeList: attributeList 
	| entity |
	entity := SCSeasideGenericEntity new tag: elementName;
				 attributes: attributeList.
	self addEntity: entity</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideStateMarker</class-id>
<category>accessing</category>
<body package="SeasideTesting-Html Entities">sessionId
	^sessionId</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideStateMarker</class-id>
<category>accessing</category>
<body package="SeasideTesting-Html Entities">sessionId: anObject
	sessionId := anObject</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideStateMarker</class-id>
<category>accessing</category>
<body package="SeasideTesting-Html Entities">continuationId
	^continuationId</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideStateMarker</class-id>
<category>accessing</category>
<body package="SeasideTesting-Html Entities">continuationId: anObject
	continuationId := anObject</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideTextEntity</class-id>
<category>accessing</category>
<body package="SeasideTesting-Html Entities">text
	^text</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideTextEntity</class-id>
<category>testing</category>
<body package="SeasideTesting-Html Entities">isTextEntity
	^true</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideTextEntity</class-id>
<category>accessing</category>
<body package="SeasideTesting-Html Entities">text: anObject
	text := anObject</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideTextEntity</class-id>
<category>accessing</category>
<body package="SeasideTesting-Html Entities">tag
	^'none'</body>
</methods>
<methods>
<class-id>Seaside.SCSelectHtmlInput</class-id>
<category>private-options</category>
<body package="SeasideTesting-Html Entities">selectedOptions
	^selectedOptions ifNil: [selectedOptions := OrderedCollection new]</body>
</methods>
<methods>
<class-id>Seaside.SCSelectHtmlInput</class-id>
<category>value</category>
<body package="SeasideTesting-Html Entities">selectOptionWithText: text
	self selectOptionWithText: text ifNone: [self error: 'No option labeled ' , text.]</body>
</methods>
<methods>
<class-id>Seaside.SCSelectHtmlInput</class-id>
<category>private-options</category>
<body package="SeasideTesting-Html Entities">options
	^self allEntities select: [:each | each isOption]</body>
</methods>
<methods>
<class-id>Seaside.SCSelectHtmlInput</class-id>
<category>testing</category>
<body package="SeasideTesting-Html Entities">isSelectInput
	^ true</body>
</methods>
<methods>
<class-id>Seaside.SCSelectHtmlInput</class-id>
<category>value</category>
<body package="SeasideTesting-Html Entities">selectOptionWithText: text ifNone: aBlock 
	| option |
	option := self options detect: [:each | each label = text]
				ifNone: [^aBlock value].
	option select</body>
</methods>
<methods>
<class-id>Seaside.SCSelectHtmlInput</class-id>
<category>private-options</category>
<body package="SeasideTesting-Html Entities">optionSelected: anOption 
	selectedOptions := Array with: anOption
</body>
</methods>
<methods>
<class-id>Seaside.SCSelectHtmlInput</class-id>
<category>request</category>
<body package="SeasideTesting-Html Entities">addToRequestStream: aStream 
	self selectedOptions
		do: [:option | option addToRequestStream: aStream] separatedBy: [aStream nextPut: $&amp;].
	^self selectedOptions notEmpty</body>
</methods>
<methods>
<class-id>Seaside.SCSelectHtmlInput</class-id>
<category>value</category>
<body package="SeasideTesting-Html Entities">value: aValue 
	self
		selectOptionWithText: aValue
</body>
</methods>
<methods>
<class-id>Seaside.SCSelectOption</class-id>
<category>initialize</category>
<body package="SeasideTesting-Html Entities">initializeForSelect: aSelect attributes: theAttributes
	self attributes: theAttributes. 
	value := attributes at: 'value'.
	selectInput := aSelect.
	(attributes includesKey: 'selected')
		ifTrue: [selectInput selectedOptions add: self]</body>
</methods>
<methods>
<class-id>Seaside.SCSelectOption</class-id>
<category>request</category>
<body package="SeasideTesting-Html Entities">addToRequestStream: aStream 
	aStream nextPutAll: selectInput name;
		 nextPut: $=;
		 nextPutAll: value.
	^ true</body>
</methods>
<methods>
<class-id>Seaside.SCSelectOption</class-id>
<category>accessing</category>
<body package="SeasideTesting-Html Entities">label
	^self contentString</body>
</methods>
<methods>
<class-id>Seaside.SCSelectOption</class-id>
<category>testing</category>
<body package="SeasideTesting-Html Entities">tag
	^'select'</body>
</methods>
<methods>
<class-id>Seaside.SCSelectOption</class-id>
<category>testing</category>
<body package="SeasideTesting-Html Entities">isOption
	^true</body>
</methods>
<methods>
<class-id>Seaside.SCSelectOption</class-id>
<category>processing</category>
<body package="SeasideTesting-Html Entities">select
	selectInput optionSelected: self</body>
</methods>
<methods>
<class-id>Seaside.SCSetBacktrackingComponent</class-id>
<category>rendering</category>
<body package="SeasideTesting-Examples">renderContentOn: html
	html form:
		[html textInput
			id: 'input';
			callback: [:v | value := v].
		html submitButton
			callback: [set add: value];
			value: 'add'.
		html submitButton
			callback: [set remove: value];
			value: 'remove']</body>
</methods>
<methods>
<class-id>Seaside.SCSetBacktrackingComponent</class-id>
<category>initialization</category>
<body package="SeasideTesting-Examples">initialize
	super initialize.
	self session registerObjectForBacktracking: (set := Set new).
	</body>
</methods>
<methods>
<class-id>Seaside.SCSetBacktrackingComponent</class-id>
<category>accessing</category>
<body package="SeasideTesting-Examples">set
	^set</body>
</methods>
<methods>
<class-id>Seaside.SCSetBacktrackingTest</class-id>
<category>tests</category>
<body package="SeasideTesting-Examples">testSequence2
	| form input |
	self newApplicationWithRootClass: SCSetBacktrackingComponent.
	self establishSession.
	form := self lastResponse forms first.
	input := form textInputWithId: 'input'.
	input value: 'entry1'.
	self submitForm: form pressingButton: (form buttonWithValue: 'add').
	form := self lastResponse forms first.
	input := form textInputWithId: 'input'.
	input value: 'entry2'.
	self submitForm: form pressingButton: (form buttonWithValue: 'add').
	form := self lastResponse forms first.
	input := form textInputWithId: 'input'.
	input value: 'entry3'.
	self submitForm: form pressingButton: (form buttonWithValue: 'add').
	
	self assert: (self component set includesAllOf: (Array with: 'entry1' with: 'entry2' with: 'entry3')).
	form := self lastResponse forms first.
	input := form textInputWithId: 'input'.
	input value: 'entry1'.
	self submitForm: form pressingButton: (form buttonWithValue: 'remove').
	self deny: (self component set includes: 'entry1').
	self back.
	self backAndRefresh.
	self assert: (self component set includes: 'entry1').

	form := self lastResponse forms first.
	input := form textInputWithId: 'input'.
	input value: 'entry1'.
	self submitForm: form pressingButton: (form buttonWithValue: 'remove').
	self deny: (self component set includes: 'entry1').
	self backAndRefresh.
	self assert: (self component set includes: 'entry1')
</body>
</methods>
<methods>
<class-id>Seaside.SCSetBacktrackingTest</class-id>
<category>tests</category>
<body package="SeasideTesting-Examples">testSequence1
	| form input |
	self newApplicationWithRootClass: SCSetBacktrackingComponent.
	self establishSession.
	form := self lastResponse forms first.
	input := form textInputWithId: 'input'.
	input value: 'entry1'.
	self submitForm: form pressingButton: (form buttonWithValue: 'add').
	form := self lastResponse forms first.
	input := form textInputWithId: 'input'.
	input value: 'entry2'.
	self submitForm: form pressingButton: (form buttonWithValue: 'add').
	form := self lastResponse forms first.
	input := form textInputWithId: 'input'.
	input value: 'entry3'.
	self submitForm: form pressingButton: (form buttonWithValue: 'add').
	
	self assert: (self component set includesAllOf: (Array with: 'entry1' with: 'entry2' with: 'entry3')).
	form := self lastResponse forms first.
	input := form textInputWithId: 'input'.
	input value: 'entry1'.
	self submitForm: form pressingButton: (form buttonWithValue: 'remove').
	self deny: (self component set includes: 'entry1').
	self back.
	self backAndRefresh.
	self assert: (self component set includes: 'entry1').

	form := self lastResponse forms first.
	input := form textInputWithId: 'input'.
	input value: 'entry1'.
	self submitForm: form pressingButton: (form buttonWithValue: 'remove').
	self deny: (self component set includes: 'entry1').

</body>
</methods>
<methods>
<class-id>Seaside.SCSetBacktrackingTest</class-id>
<category>tests</category>
<body package="SeasideTesting-Examples">testAdd
	| form input |
	self newApplicationWithRootClass: SCSetBacktrackingComponent.
	self establishSession.
	form := self lastResponse forms first.
	input := form textInputWithId: 'input'.
	input value: 'entry1'.
	self submitForm: form pressingButton: (form buttonWithValue: 'add').
	self assert: (self component set includes: 'entry1')</body>
</methods>
<methods>
<class-id>Seaside.SCSetBacktrackingTest</class-id>
<category>tests</category>
<body package="SeasideTesting-Examples">testRemove
	| form input |
	self newApplicationWithRootClass: SCSetBacktrackingComponent.
	self establishSession.
	form := self lastResponse forms first.
	input := form textInputWithId: 'input'.
	input value: 'entry1'.
	self submitForm: form pressingButton: (form buttonWithValue: 'add').
	self assert: (self component set includes: 'entry1').
	form := self lastResponse forms first.
	input := form textInputWithId: 'input'.
	input value: 'entry1'.
	self submitForm: form pressingButton: (form buttonWithValue: 'remove').
	self deny: (self component set includes: 'entry1').
</body>
</methods>
<methods>
<class-id>Seaside.SCSubmitButtonHtmlInput</class-id>
<category>testing</category>
<body package="SeasideTesting-Html Entities">isButton
	^true</body>
</methods>
<methods>
<class-id>Seaside.SCTestBuilder</class-id>
<category>initialization</category>
<body package="SeasideTesting-TestRunner">initialize
	super initialize.
	component := WAMiniCalendar new.
	self session testBuilder: self.</body>
</methods>
<methods>
<class-id>Seaside.SCTestBuilder</class-id>
<category>accessing</category>
<body package="SeasideTesting-TestRunner">children
	^Array with: component</body>
</methods>
<methods>
<class-id>Seaside.SCTestBuilder</class-id>
<category>request handling</category>
<body package="SeasideTesting-TestRunner">submittedRequest: aRequest 
	self requests add: aRequest</body>
</methods>
<methods>
<class-id>Seaside.SCTestBuilder</class-id>
<category>rendering</category>
<body package="SeasideTesting-TestRunner">renderContentOn: html 
	html render: component.
	html orderedList
		list: self requests;
		labels: [:request | request url printString , ': ' , request fields printString]</body>
</methods>
<methods>
<class-id>Seaside.SCTestBuilder</class-id>
<category>accessing</category>
<body package="SeasideTesting-TestRunner">requests
	^requests ifNil: [requests := OrderedCollection new]</body>
</methods>
<methods>
<class-id>Seaside.SCTestBuilderSession</class-id>
<category>accessing</category>
<body package="SeasideTesting-TestRunner">testBuilder
	^testBuilder</body>
</methods>
<methods>
<class-id>Seaside.SCTestBuilderSession</class-id>
<category>accessing</category>
<body package="SeasideTesting-TestRunner">testBuilder: anObject
	testBuilder := anObject</body>
</methods>
<methods>
<class-id>Seaside.SCTestBuilderSession</class-id>
<category>request handling</category>
<body package="SeasideTesting-TestRunner">performRequest: aRequest 
	self testBuilder ifNotNilDo: [:tb | tb submittedRequest: aRequest].
	super performRequest: aRequest</body>
</methods>
<methods>
<class-id>Seaside.SCTestCaseMain</class-id>
<category>accessing</category>
<body package="SeasideTesting-TestRunner">start: aRequest
	| root |
	root := self createRoot.
	(aRequest fields includesKey: 'filter')
		ifTrue: [root filterString: (aRequest fields at: 'filter')].
	(WARenderLoop new root: root) run</body>
</methods>
<methods>
<class-id>Seaside.SCTestCaseViewer</class-id>
<category>accessing</category>
<body package="SeasideTesting-TestRunner">testCases
	^Preferences testRunnerShowAbstractClasses 
		ifTrue: [SCComponentTestCase allSubclasses]
		ifFalse: [SCComponentTestCase allSubclasses reject: [:cls | cls isAbstract]]</body>
</methods>
<methods>
<class-id>Seaside.SCTestCaseViewer</class-id>
<category>accessing</category>
<body package="SeasideTesting-TestRunner">testCasesByCategory
	| d |
	d := Dictionary new.
	self testCases do: [:case |
		(d at: case category ifAbsentPut: [OrderedCollection new]) add: case].
	^d</body>
</methods>
<methods>
<class-id>Seaside.SCTestCaseViewer</class-id>
<category>rendering</category>
<body package="SeasideTesting-TestRunner">renderCase: case on: html 
	^html listItem with:
		[html anchor
			callback: [self runCase: case];
			with: case name]</body>
</methods>
<methods>
<class-id>Seaside.SCTestCaseViewer</class-id>
<category>accessing</category>
<body package="SeasideTesting-TestRunner">filterString: anObject
	filterString := anObject</body>
</methods>
<methods>
<class-id>Seaside.SCTestCaseViewer</class-id>
<category>accessing</category>
<body package="SeasideTesting-TestRunner">sortedCategories
	| sc |
	sc := SortedCollection new.
	self testCasesByCategory keys do: [:cat | sc add: cat].
	^sc</body>
</methods>
<methods>
<class-id>Seaside.SCTestCaseViewer</class-id>
<category>callbacks</category>
<body package="SeasideTesting-TestRunner">runCategory: categoryString
	| testClasses suite |
	testClasses := self testCasesByCategory at: categoryString.
	suite := SeasidePlatformSupport testSuiteClass new.
	testClasses do: [:each | suite addTest: each suite].
	self call: (SCTestRunner forCase: suite)</body>
</methods>
<methods>
<class-id>Seaside.SCTestCaseViewer</class-id>
<category>rendering</category>
<body package="SeasideTesting-TestRunner">renderFilterFormOn: html
	html form with: 
		[html textInput 
			on: #filterString of: self.
		html submitButton
			callback: []; 
			value: 'Filter']</body>
</methods>
<methods>
<class-id>Seaside.SCTestCaseViewer</class-id>
<category>rendering</category>
<body package="SeasideTesting-TestRunner">renderContentOn: html 
	| d |
	self renderFilterFormOn: html.
	d := self testCasesByCategory.
	(self sortedCategories
		select: [:category | self filterString match: category])
		do: [:category | 
			html heading
				level: 2;
				with: [html anchor
						callback: [self runCategory: category];
						with: category].
			html orderedList 
				with: [((d at: category)
						asSortedCollection: [:x :y | x name &lt;= y name])
						do: [:case | self renderCase: case on: html]]]</body>
</methods>
<methods>
<class-id>Seaside.SCTestCaseViewer</class-id>
<category>callbacks</category>
<body package="SeasideTesting-TestRunner">runCase: caseClass
	self call: (SCTestRunner forCase: caseClass suite)</body>
</methods>
<methods>
<class-id>Seaside.SCTestCaseViewer</class-id>
<category>accessing</category>
<body package="SeasideTesting-TestRunner">filterString
	^(filterString isNil or: [filterString isEmpty]) ifTrue: ['*'] ifFalse: [filterString]</body>
</methods>
<methods>
<class-id>Seaside.SCTestComponent1</class-id>
<category>rendering</category>
<body package="SeasideTesting-Examples">renderContentOn: html 
	html span
		id: 'main';
		with: 'hello'</body>
</methods>
<methods>
<class-id>Seaside.SCTestComponent2</class-id>
<category>accessing</category>
<body package="SeasideTesting-Examples">secondSent
	^secondSent</body>
</methods>
<methods>
<class-id>Seaside.SCTestComponent2</class-id>
<category>initialization</category>
<body package="SeasideTesting-Examples">initialize
	super initialize.
	firstSent := false.
	secondSent := false.
</body>
</methods>
<methods>
<class-id>Seaside.SCTestComponent2</class-id>
<category>accessing</category>
<body package="SeasideTesting-Examples">firstSent
	^firstSent</body>
</methods>
<methods>
<class-id>Seaside.SCTestComponent2</class-id>
<category>callbacks</category>
<body package="SeasideTesting-Examples">sendSecond
	secondSent := true</body>
</methods>
<methods>
<class-id>Seaside.SCTestComponent2</class-id>
<category>accessing</category>
<body package="SeasideTesting-Examples">renderContentOn: html 
	html anchor
		id: 'first';
		callback: [self sendFirst];
		with: 'first link'.
	html text: 'hello'.
	html anchor
		id: 'second';
		callback: [self sendSecond];
		with: 'second link'</body>
</methods>
<methods>
<class-id>Seaside.SCTestComponent2</class-id>
<category>callbacks</category>
<body package="SeasideTesting-Examples">sendFirst
	firstSent := true</body>
</methods>
<methods>
<class-id>Seaside.SCTestComponent3</class-id>
<category>accessing</category>
<body package="SeasideTesting-Examples">field2
	^field2</body>
</methods>
<methods>
<class-id>Seaside.SCTestComponent3</class-id>
<category>accessing</category>
<body package="SeasideTesting-Examples">field1
	^field1</body>
</methods>
<methods>
<class-id>Seaside.SCTestComponent3</class-id>
<category>accessing</category>
<body package="SeasideTesting-Examples">button1WasPressed
	^button1WasPressed</body>
</methods>
<methods>
<class-id>Seaside.SCTestComponent3</class-id>
<category>callbacks</category>
<body package="SeasideTesting-Examples">button2Pressed
	button2WasPressed := true</body>
</methods>
<methods>
<class-id>Seaside.SCTestComponent3</class-id>
<category>accessing</category>
<body package="SeasideTesting-Examples">field2: anObject
	field2 := anObject</body>
</methods>
<methods>
<class-id>Seaside.SCTestComponent3</class-id>
<category>accessing</category>
<body package="SeasideTesting-Examples">field1: anObject
	field1 := anObject</body>
</methods>
<methods>
<class-id>Seaside.SCTestComponent3</class-id>
<category>rendering</category>
<body package="SeasideTesting-Examples">renderContentOn: html 
	html form
		with: [html text: 'field1: '.
			html textInput
				id: 'field1';
				on: #field1 of: self.
			html break.
			html text: 'field2: '.
			html textInput
				id: 'field2';
				on: #field2 of: self.
			html break.
			html submitButton
				id: 'button1';
				callback: [self button1Pressed];
				value: 'button1'.
			html submitButton
				id: 'button2';
				callback: [self button2Pressed];
				value: 'button2']</body>
</methods>
<methods>
<class-id>Seaside.SCTestComponent3</class-id>
<category>accessing</category>
<body package="SeasideTesting-Examples">button2WasPressed
	^ button2WasPressed</body>
</methods>
<methods>
<class-id>Seaside.SCTestComponent3</class-id>
<category>callbacks</category>
<body package="SeasideTesting-Examples">button1Pressed
	button1WasPressed := true</body>
</methods>
<methods>
<class-id>Seaside.SCTestComponent4</class-id>
<category>accessing</category>
<body package="SeasideTesting-Examples">firstSent
	^firstSent</body>
</methods>
<methods>
<class-id>Seaside.SCTestComponent4</class-id>
<category>initialization</category>
<body package="SeasideTesting-Examples">initialize
	super initialize.
	self session registerObjectForBacktracking: self.
	firstSent := false.
	secondSent := false.
	thirdSent := false</body>
</methods>
<methods>
<class-id>Seaside.SCTestComponent4</class-id>
<category>accessing</category>
<body package="SeasideTesting-Examples">thirdSent
	^thirdSent</body>
</methods>
<methods>
<class-id>Seaside.SCTestComponent4</class-id>
<category>callbacks</category>
<body package="SeasideTesting-Examples">sendSecond
	secondSent := true</body>
</methods>
<methods>
<class-id>Seaside.SCTestComponent4</class-id>
<category>accessing</category>
<body package="SeasideTesting-Examples">secondSent
	^secondSent</body>
</methods>
<methods>
<class-id>Seaside.SCTestComponent4</class-id>
<category>accessing</category>
<body package="SeasideTesting-Examples">renderContentOn: html 
	self firstSent
		ifFalse: [html anchor
				callback: [self sendFirst];
				with: 'first link'].
	html text: 'hello'.
	self secondSent
		ifFalse: [
			html anchor
				id: 'second';
				callback: [self sendSecond];
				with: 'second link'].
	self thirdSent
		ifFalse: [
			html anchor
				id: 'third';
				callback: [self sendThird];
				with: 'third link']</body>
</methods>
<methods>
<class-id>Seaside.SCTestComponent4</class-id>
<category>callbacks</category>
<body package="SeasideTesting-Examples">sendThird
	thirdSent := true.
	self answer: 1234</body>
</methods>
<methods>
<class-id>Seaside.SCTestComponent4</class-id>
<category>callbacks</category>
<body package="SeasideTesting-Examples">sendFirst
	firstSent := true</body>
</methods>
<methods>
<class-id>Seaside.SCTestComponent5</class-id>
<category>rendering</category>
<body package="SeasideTesting-Examples">renderContentOn: html 
	html anchor
		callback: [self call: SCTestComponent4 new];
		with: 'Show SCTestComponent4'.
	html anchor
		callback: [self inform: 'this is a dialog'];
		with: 'dialog'</body>
</methods>
<methods>
<class-id>Seaside.SCTestComponent6</class-id>
<category>rendering</category>
<body package="SeasideTesting-Examples">renderContentOn: html
	html form:
		[html select
			id: 'theList';
			list: #(a b c);
			selected: #a;
			callback: [:item | self itemSelected: item].
		html textInput
			callback: [].
		html submitButton
			value: 'submit']</body>
</methods>
<methods>
<class-id>Seaside.SCTestComponent6</class-id>
<category>rendering</category>
<body package="SeasideTesting-Examples">itemSelected: item
	selectedItem := item.
	self inform: item printString</body>
</methods>
<methods>
<class-id>Seaside.SCTestComponent6</class-id>
<category>accessing</category>
<body package="SeasideTesting-Examples">selectedItem
	^selectedItem</body>
</methods>
<methods>
<class-id>Seaside.SCTestComponent7</class-id>
<category>rendering</category>
<body package="SeasideTesting-Examples">renderContentOn: html
	html form
		with:
			[html submitButton
				callback: [self answer: true]]</body>
</methods>
<methods>
<class-id>Seaside.SCTestErrorHandler</class-id>
<category>accessing</category>
<body package="SeasideTesting-Core">case: anObject
	case := anObject</body>
</methods>
<methods>
<class-id>Seaside.SCTestErrorHandler</class-id>
<category>actions</category>
<body package="SeasideTesting-Core">handleError: e 
	self case errorOccurred: e.
	super handleError: e</body>
</methods>
<methods>
<class-id>Seaside.SCTestErrorHandler</class-id>
<category>accessing</category>
<body package="SeasideTesting-Core">case
	^case</body>
</methods>
<methods>
<class-id>Seaside.SCTestHistoryContentView</class-id>
<category>accessing</category>
<body package="SeasideTesting-TestRunner">page: anObject
	page := anObject</body>
</methods>
<methods>
<class-id>Seaside.SCTestHistoryContentView</class-id>
<category>accessing</category>
<body package="SeasideTesting-TestRunner">page
	^page</body>
</methods>
<methods>
<class-id>Seaside.SCTestHistoryRenderLoop</class-id>
<category>accessing</category>
<body package="SeasideTesting-TestRunner">page: anObject
	page := anObject</body>
</methods>
<methods>
<class-id>Seaside.SCTestHistoryRenderLoop</class-id>
<category>rendering</category>
<body package="SeasideTesting-TestRunner">run
	[self render] repeat</body>
</methods>
<methods>
<class-id>Seaside.SCTestHistoryRenderLoop</class-id>
<category>rendering</category>
<body package="SeasideTesting-TestRunner">render
	| response |
	WACurrentSession value
		respond: [:url | 
			response := WAResponse new.
			response headerAt: 'Cache-Control' put: 'No-cache'.
			response stream nextPutAll: page.
			response]</body>
</methods>
<methods>
<class-id>Seaside.SCTestHistoryRenderLoop</class-id>
<category>accessing</category>
<body package="SeasideTesting-TestRunner">page
	^page</body>
</methods>
<methods>
<class-id>Seaside.SCTestHistoryView</class-id>
<category>initialization</category>
<body package="SeasideTesting-TestRunner">initialize
	super initialize.
	currentLocation := 1</body>
</methods>
<methods>
<class-id>Seaside.SCTestHistoryView</class-id>
<category>actions</category>
<body package="SeasideTesting-TestRunner">previousPage
	currentLocation := currentLocation - 1 max: 1</body>
</methods>
<methods>
<class-id>Seaside.SCTestHistoryView</class-id>
<category>accessing</category>
<body package="SeasideTesting-TestRunner">history: h 
	history := h.
	currentLocation := h size</body>
</methods>
<methods>
<class-id>Seaside.SCTestHistoryView</class-id>
<category>utilities</category>
<body package="SeasideTesting-TestRunner">onlyBodyOf: aString 
	| rs result |
	rs := aString readStream.
	rs upToAll: '&lt;body&gt;'.
	result := rs upToAll: '&lt;/body&gt;'.
	^ result</body>
</methods>
<methods>
<class-id>Seaside.SCTestHistoryView</class-id>
<category>rendering</category>
<body package="SeasideTesting-TestRunner">renderRequestOn: html 
	"Doesn't currently work. Not called."
	html heading level: 1; with: 'This page was submitted with: '.
	html break.
	html text: (history at: currentLocation) key stream contents</body>
</methods>
<methods>
<class-id>Seaside.SCTestHistoryView</class-id>
<category>rendering</category>
<body package="SeasideTesting-TestRunner">style
	^'div.contentFrame {width: 100%; height 500px;}
	*.contentFrame iframe {width: 100%; height: 500px;}'</body>
</methods>
<methods>
<class-id>Seaside.SCTestHistoryView</class-id>
<category>rendering</category>
<body package="SeasideTesting-TestRunner">renderContentOn: html 
	html heading level: 2;
		 with: 'Test view replay page ' , currentLocation printString , ' of ' , history size printString.
	html anchor 
		callback: [self answer];
		with: 'close'.
	html space.
	currentLocation &gt; 1
		ifTrue: [html anchor
				callback: [self previousPage];
				with: '&lt;&lt;'].
	html text: '--'.
	currentLocation &lt; history size
		ifTrue: [html anchor
				callback: [self nextPage];
				with: '&gt;&gt;'].
	html break; horizontalRule.
	self renderCurrentResponseOn: html.
</body>
</methods>
<methods>
<class-id>Seaside.SCTestHistoryView</class-id>
<category>rendering</category>
<body package="SeasideTesting-TestRunner">urlForAction: aBlock on: html
	"This is missing from our branch of Seaside"
	| url |
	url := html context actionUrl withParameter: (html callbacks registerActionCallback: aBlock).
	^url displayString</body>
</methods>
<methods>
<class-id>Seaside.SCTestHistoryView</class-id>
<category>actions</category>
<body package="SeasideTesting-TestRunner">nextPage
	currentLocation := currentLocation + 1 min: history size</body>
</methods>
<methods>
<class-id>Seaside.SCTestHistoryView</class-id>
<category>rendering</category>
<body package="SeasideTesting-TestRunner">renderCurrentResponseOn: html 
	| item |
	currentLocation = 0
		ifTrue: [^ nil].
	item := history at: currentLocation.
	html div
		class: 'contentFrame';
		with: [html iframe
				src: (self
						urlForAction: [(SCTestHistoryRenderLoop new page: item value fullStringContents) run]
						on: html)]</body>
</methods>
<methods>
<class-id>Seaside.SCTestRunner</class-id>
<category>rendering</category>
<body package="SeasideTesting-TestRunner">renderErrorOn: html 
	html heading level: 3; with: 'Errors:'.
	result errors
		do: [:each | 
			html
				span class: 'error-test'; with: [html text: each printString].
			html space.
			html anchor
				callback: [each debug];
				with: 'Debug'.
			html space.
			self renderBrowserAnchorFor: each on: html.
			html space.
			self renderHistoryAnchorFor: each on: html.
			html break].
	html horizontalRule </body>
</methods>
<methods>
<class-id>Seaside.SCTestRunner</class-id>
<category>rendering</category>
<body package="SeasideTesting-TestRunner">renderBrowserAnchorFor: aTestCase on: html 
	html popupAnchor
		callback: [self call: (WABrowser
							fullOnClass: aTestCase class 
							selector: aTestCase selector)];
		extent: 825@560;
		name: 'browse';
		with: 'Browse'</body>
</methods>
<methods>
<class-id>Seaside.SCTestRunner</class-id>
<category>initialization</category>
<body package="SeasideTesting-TestRunner">runTests: aTestCase 
	result := aTestCase run</body>
</methods>
<methods>
<class-id>Seaside.SCTestRunner</class-id>
<category>rendering</category>
<body package="SeasideTesting-TestRunner">renderFailedOn: html 
	html heading: 'Failed:' level: 3.
	result failures
		do: [:each | 
			html span class: 'failed-test'; with: each printString.
			html space.
			html anchor
				callback: [each debugAsFailure];
				with: 'Debug'.
			html space.
			self renderBrowserAnchorFor: each on: html.
			html space.
			self renderHistoryAnchorFor: each on: html.
			html break].
	html horizontalRule </body>
</methods>
<methods>
<class-id>Seaside.SCTestRunner</class-id>
<category>initialization</category>
<body package="SeasideTesting-TestRunner">initializeForCase: aTestCase 
	case := aTestCase.
	self runTests: case</body>
</methods>
<methods>
<class-id>Seaside.SCTestRunner</class-id>
<category>rendering</category>
<body package="SeasideTesting-TestRunner">renderContentOn: html 
	html heading level: 2; with: case name.
	html anchor callback: [self runTests: case]; with: 'Re-run all'.
	html break.
	html text: result printString.
	html horizontalRule.
	self renderFailedOn: html.
	self renderErrorOn: html.
	self renderPassedOn: html.
	html break.
	html anchor
		callback: [self answer];
		with: 'close'</body>
</methods>
<methods>
<class-id>Seaside.SCTestRunner</class-id>
<category>actions</category>
<body package="SeasideTesting-TestRunner">viewHistoryFor: aTestCase 
	self call: (SCTestHistoryView forBrowser: aTestCase browser)</body>
</methods>
<methods>
<class-id>Seaside.SCTestRunner</class-id>
<category>rendering</category>
<body package="SeasideTesting-TestRunner">renderHistoryAnchorFor: aCase on: html
	html anchor callback: [self viewHistoryFor: aCase]; with: 'History'</body>
</methods>
<methods>
<class-id>Seaside.SCTestRunner</class-id>
<category>rendering</category>
<body package="SeasideTesting-TestRunner">renderPassedOn: html 
	html heading level: 3; with: 'Passed:'.
	result passed
		do: [:each | 
			html span class: 'passed-test'; with: each printString.
			html space.
			self renderBrowserAnchorFor: each on: html.
			html space.
			self renderHistoryAnchorFor: each on: html.
			html break].
	html horizontalRule</body>
</methods>
<methods>
<class-id>Seaside.SCTestRunnerFiles</class-id>
<category>uploaded</category>
<body package="SeasideTesting-TestRunner">haloTestGif
	| xxxCache |
	xxxCache := #(nil ) beMutable.
	(xxxCache at: 1) isNil
		ifTrue: [xxxCache at: 1 put: #(71 73 70 56 57 97 16 0 16 0 240 0 49 63 63 63 212 212 212 33 249 4 1 0 0 1 0 44 0 0 0 0 16 0 16 0 0 2 37 140 143 169 203 224 239 154 2 108 81 4 115 160 113 215 11 26 23 38 150 94 18 158 227 36 114 91 246 160 21 43 91 240 58 231 121 1 0 59 ) asByteArray].
	^ xxxCache at: 1</body>
</methods>
<methods>
<class-id>Seaside.SCTesterApplication</class-id>
<category>request handling</category>
<body package="SeasideTesting-Core">handleDefaultRequest: aRequest 
	| session |
	session := self createSession.
	^session handleRequest: aRequest</body>
</methods>
<methods>
<class-id>Seaside.SCTesterApplication</class-id>
<category>request handling</category>
<body package="SeasideTesting-Core">createSession
	| session |
	session := self sessionClass new setParent: self.
	testCase sessionCreated: session.
	^session</body>
</methods>
<methods>
<class-id>Seaside.SCTesterApplication</class-id>
<category>accessing</category>
<body package="SeasideTesting-Core">testCase
	^testCase</body>
</methods>
<methods>
<class-id>Seaside.SCTesterApplication</class-id>
<category>accessing</category>
<body package="SeasideTesting-Core">testCase: anObject
	testCase := anObject</body>
</methods>
<methods>
<class-id>Seaside.SCTesterApplication</class-id>
<category>accessing</category>
<body package="SeasideTesting-Core">handlerWithKey: aKey
	^handlersByKey at: aKey ifAbsent: []</body>
</methods>
<methods>
<class-id>Seaside.SCTestingPseudomain</class-id>
<category>accessing</category>
<body package="SeasideTesting-Core">storedSession
	^ storedSession</body>
</methods>
<methods>
<class-id>Seaside.SCTestingPseudomain</class-id>
<category>hack</category>
<body package="SeasideTesting-Core">new
	"We pretend like we're a class...sorry"
	^self</body>
</methods>
<methods>
<class-id>Seaside.SCTestingPseudomain</class-id>
<category>accessing</category>
<body package="SeasideTesting-Core">start: aRequest 
	storedSession := self session.
	self session redirect.
	(renderLoop := SCRenderLoop new root: self createRoot) run</body>
</methods>
<methods>
<class-id>Seaside.SCTextHtmlInput</class-id>
<category>testing</category>
<body package="SeasideTesting-Html Entities">isTextInput
	^true</body>
</methods>
<methods>
<class-id>Seaside.SCTextHtmlInput</class-id>
<category>request</category>
<body package="SeasideTesting-Html Entities">addToRequestStream: aStream
	^self value
		ifNil: [false]
		ifNotNil: [super addToRequestStream: aStream]</body>
</methods>
<methods>
<class-id>Seaside.WAAllTestsTest</class-id>
<category>tests</category>
<body package="SeasideTesting-Examples">testException
	| form |
	self newApplicationWithRootClass: WAExceptionTest.
	form := self establishSession forms first.
	self submitForm: form pressingButton: (form buttonWithValue: 'Yes').
	self assert: (self lastResponse containsString: 'Caught:')</body>
</methods>
<methods>
<class-id>Seaside.WAAllTestsTest</class-id>
<category>tests</category>
<body package="SeasideTesting-Examples">testButtons
	| form |
	self newApplicationWithRootClass: self htmlTestClass.
	self establishSession.
	form := self lastResponse formWithId: 'button-form'.
	self
		submitForm: form
		pressingButton: (form buttonWithValue: '5').
	self assert: self component number = 5.
	form := self lastResponse formWithId: 'button-form'.
	self
		submitForm: form
		pressingButton: (form buttonWithValue: '1').
	self assert: self component number = 1</body>
</methods>
<methods>
<class-id>Seaside.WAAllTestsTest</class-id>
<category>tests</category>
<body package="SeasideTesting-Examples">testSelect
	| form |
	self newApplicationWithRootClass: self htmlTestClass.
	self establishSession.
	form := self lastResponse formWithId: 'select-form'.
	(form selectListWithId: 'select-list')
		selectOptionWithText: '7'.
	self submitForm: form pressingButton: form buttons first.
	self assert: self component number = 7.
	form := self lastResponse formWithId: 'select-form'.
	self
		should: [(form selectListWithId: 'select-list')
				selectOptionWithText: '15']
		raise: Error.
	(form selectListWithId: 'select-list')
		value: '2'.
	self submitForm: form pressingButton: form buttons first.
	self assert: self component number = 2.
	self should: [form buttonWithValue: '22'] raise: Error.</body>
</methods>
<methods>
<class-id>Seaside.WAAllTestsTest</class-id>
<category>tests</category>
<body package="SeasideTesting-Examples">testTextInput
	| form |
	self newApplicationWithRootClass: self htmlTestClass.
	self establishSession.
	form := self lastResponse formWithId: 'textInput-form'.
	self 
		assert: (form entityWithId: 'textInput-banner' containsText: 'Hello world!').
	self assert: self component message = 'Hello world!'.
	form textInputWithId: 'text-message' value: 'bob'.
	self submitForm: form pressingButton: form buttons first.
	form := self lastResponse formWithId: 'textInput-form'.
	self assert: (form entityWithId: 'textInput-banner' containsText: 'bob').
	self assert: self component message = 'bob'</body>
</methods>
<methods>
<class-id>Seaside.WAAllTestsTest</class-id>
<category>tests</category>
<body package="SeasideTesting-Examples">htmlTestClass
	"WAOldApiHtmlTest = Seaside 2.7
	WAHtmlTest = Seaside 2.6"
	^WAOldApiHtmlTest ifNil: [WAHtmlTest].
</body>
</methods>
<methods>
<class-id>Seaside.WAAllTestsTest</class-id>
<category>tests</category>
<body package="SeasideTesting-Examples">inputTestClass
	"WAOldApiInputTest = Seaside 2.7
	WAInputTest = Seaside 2.6"
	^WAOldApiInputTest ifNil: [WAInputTest].
</body>
</methods>
<methods>
<class-id>Seaside.WAAllTestsTest</class-id>
<category>tests</category>
<body package="SeasideTesting-Examples">testCheckbox
	| form |
	self newApplicationWithRootClass: self htmlTestClass.
	self establishSession.
	form := self lastResponse formWithId: 'checkbox-form'.
	(form checkboxWithId: 'cb-a') check.
	self submitForm: form pressingButton: form buttons first.
	self assert: self component booleanList first value.
	form := self lastResponse formWithId: 'checkbox-form'.
	(form checkboxWithId: 'cb-a') uncheck.
	self submitForm: form pressingButton: form buttons first.
	self deny: self component booleanList first value</body>
</methods>
<methods>
<class-id>Seaside.WAAllTestsTest</class-id>
<category>tests</category>
<body package="SeasideTesting-Examples">testNavigation
	| form |
	self newApplicationWithRootClass: WAAllTests.
	self establishSession.
	self
		followAnchor: (self lastResponse anchorWithLabel: 'Input').
	self assert: self selectedComponent class = self inputTestClass.
	self assert: self selectedComponent integer = 42.
	form := self lastResponse forms first.
	form textInputWithId: 'nilString' value: 'bob'.
	self submitForm: form pressingButton: form buttons first.
	self assert: self selectedComponent nilString = 'bob'.
	self
		followAnchor: (self lastResponse anchorWithLabel: 'Html').
	self assert: self selectedComponent class = self htmlTestClass.
	form := self lastResponse formWithId: 'radio-form'.
	form activateRadioButtonWithId: 'a-on'.
	self submitForm: form pressingButton: form buttons first.
	self assert: self selectedComponent booleanList first value.
	form := self lastResponse formWithId: 'radio-form'.
	form activateRadioButtonWithId: 'a-off'.
	self submitForm: form pressingButton: form buttons first.
	self deny: self selectedComponent booleanList first value.
	self
		followAnchor: (self lastResponse anchorWithLabel: 'Parent').
	self assert: self selectedComponent class = WAParentTest.
	self
		followAnchor: (self lastResponse anchorWithLabel: 'swap parent').
	self
		assert: (self lastResponse containsString: 'foo').
	self assert: (self lastResponse anchorWithLabel: 'Html') isNil.
	form := self lastResponse forms first.
	self
		submitForm: form
		pressingButton: (form buttonWithValue: 'Ok').
	self assert: (self lastResponse anchorWithLabel: 'Html') notNil</body>
</methods>
<methods>
<class-id>Seaside.WAAllTestsTest</class-id>
<category>tests</category>
<body package="SeasideTesting-Examples">selectedComponent
	^self component contents selectedComponent</body>
</methods>
<methods>
<class-id>Seaside.WAAllTestsTest</class-id>
<category>tests</category>
<body package="SeasideTesting-Examples">testTextAreaInput
	| form |
	self newApplicationWithRootClass: self htmlTestClass.
	self establishSession.
	form := self lastResponse formWithId: 'textarea-form'.
	self 
		assert: (form entityWithId: 'textarea-banner' containsText: 'Hello world!').
	self assert: self component message = 'Hello world!'.
	form textInputWithId: 'textarea-message' value: 'bob'.
	self submitForm: form pressingButton: form buttons first.
	form := self lastResponse formWithId: 'textarea-form'.
	self assert: (form entityWithId: 'textarea-banner' containsText: 'bob').
	self assert: self component message = 'bob'</body>
</methods>
<methods>
<class-id>Seaside.WACounterTest</class-id>
<category>tests</category>
<body package="SeasideTesting-Examples">testDecrement
	self newApplicationWithRootClass: WACounter.
	self establishSession.
	self followAnchor: (self lastResponse anchorWithLabel: '--').
	self assert: self component count = -1.
	self followAnchor: (self lastResponse anchorWithLabel: '--').
	self assert: self component count = -2</body>
</methods>
<methods>
<class-id>Seaside.WACounterTest</class-id>
<category>tests</category>
<body package="SeasideTesting-Examples">testBack
	self newApplicationWithRootClass: WACounter.
	self establishSession.
	self
		followAnchor: (self lastResponse anchorWithLabel: '++').
	self
		followAnchor: (self lastResponse anchorWithLabel: '++').
	self assert: self component count = 2.
	self back.
	self
		followAnchor: (self lastResponse anchorWithLabel: '++').
	self assert: self component count = 2</body>
</methods>
<methods>
<class-id>Seaside.WACounterTest</class-id>
<category>tests</category>
<body package="SeasideTesting-Examples">testInitialState
	self newApplicationWithRootClass: WACounter.
	self establishSession.
	self assert: self component count = 0</body>
</methods>
<methods>
<class-id>Seaside.WACounterTest</class-id>
<category>tests</category>
<body package="SeasideTesting-Examples">testIncrement
	self newApplicationWithRootClass: WACounter.
	self establishSession.
	self
		followAnchor: (self lastResponse anchorWithLabel: '++').
	self assert: self component count = 1.
	self
		followAnchor: (self lastResponse anchorWithLabel: '++').
	self assert: self component count = 2</body>
</methods>
<methods>
<class-id>Seaside.WAMiniCalendarTest</class-id>
<category>Running</category>
<body package="SeasideTesting-Examples">testSelectedDate
	| selected anchors |
	self newApplicationWithRootClass: WAMiniCalendar initializeWith: [:cal |
		cal canSelectBlock: [:date | true].
		cal selectBlock: [:date | selected := date]].
	self establishSession.
	self assert: selected isNil.
	anchors := self lastResponse anchorsWithLabel: (Date today dayOfMonth printString).
	self followAnchor: anchors last.
	self assert: selected = Date today.</body>
</methods>
<methods>
<class-id>Seaside.WAYesOrNoDialogTest</class-id>
<category>tests</category>
<body package="SeasideTesting-Examples">testNo
	| form |
	self newApplicationWithRootClass: WAYesOrNoDialog.
	form := self establishSession forms first.
	self submitForm: form pressingButton: (form buttonWithValue: 'No').
	self assert: (self componentAnswered: false)</body>
</methods>
<methods>
<class-id>Seaside.WAYesOrNoDialogTest</class-id>
<category>tests</category>
<body package="SeasideTesting-Examples">testYes
	| form |
	self newApplicationWithRootClass: WAYesOrNoDialog.
	form := self establishSession forms first.
	self submitForm: form pressingButton: (form buttonWithValue: 'Yes').
	self assert: self answer = true</body>
</methods>
<methods>
<class-id>Seaside.SCAnchorDemo class</class-id>
<category>seaside</category>
<body package="SeasideTesting-Examples">canBeRoot
	^true</body>
</methods>
<methods>
<class-id>Seaside.SCComponentTestCase class</class-id>
<category>dispatcher</category>
<body package="SeasideTesting-Core">entryPointKey
	^'activeTests'</body>
</methods>
<methods>
<class-id>Seaside.SCComponentTestCase class</class-id>
<category>dispatcher</category>
<body package="SeasideTesting-Core">dispatcher
	self ensureEntryPointExists.
	^WADispatcher default entryPoints at: self entryPointKey</body>
</methods>
<methods>
<class-id>Seaside.SCComponentTestCase class</class-id>
<category>dispatcher</category>
<body package="SeasideTesting-Core">ensureEntryPointExists
	(WADispatcher default entryPoints includesKey: self entryPointKey)
		ifFalse: [WADispatcher default register: (WADispatcher named: self entryPointKey)]</body>
</methods>
<methods>
<class-id>Seaside.SCComponentTestCase class</class-id>
<category>Testing</category>
<body package="SeasideTesting-Core">isAbstract
	"Override to true if a TestCase subclass is Abstract and should not
	have TestCase instances built from it"
	^ self name = #SCComponentTestCase</body>
</methods>
<methods>
<class-id>Seaside.SCComponentTestCase class</class-id>
<category>dispatcher</category>
<body package="SeasideTesting-Core">clearEntryPoints
	"self clearEntryPoints"
	(WADispatcher default entryPoints includesKey: self entryPointKey)
		ifTrue: [WADispatcher default register: (WADispatcher named: self entryPointKey)]</body>
</methods>
<methods>
<class-id>Seaside.SCExceptionDuringCallback class</class-id>
<category>testing</category>
<body package="SeasideTesting-Examples">canBeRoot
	^true</body>
</methods>
<methods>
<class-id>Seaside.SCFileDownloadComponent class</class-id>
<category>testing</category>
<body package="SeasideTesting-Examples">canBeRoot
	^true.</body>
</methods>
<methods>
<class-id>Seaside.SCFormDemo class</class-id>
<category>seaside</category>
<body package="SeasideTesting-Examples">canBeRoot
	^true</body>
</methods>
<methods>
<class-id>Seaside.SCHtmlInputComponent class</class-id>
<category>instance creation</category>
<body package="SeasideTesting-Html Entities">attributes: attributes form: aForm
	^ self new initializeForForm: aForm attributes: attributes</body>
</methods>
<methods>
<class-id>Seaside.SCRadioButtonHtmlInput class</class-id>
<category>instance creation</category>
<body package="SeasideTesting-Html Entities">group: aGroup attributes: theAttributes form: aForm
	^self new initializeForGroup: aGroup form: aForm attributes: theAttributes</body>
</methods>
<methods>
<class-id>Seaside.SCRadioGroup class</class-id>
<category>instance creation</category>
<body package="SeasideTesting-Html Entities">named: aString
	^self new name: aString</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideAnchor class</class-id>
<category>instance creation</category>
<body package="SeasideTesting-Html Entities">withAttributes: attributes
	^self new initializeFromHref: (attributes at: 'href'); attributes: attributes; yourself</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideForm class</class-id>
<category>instance creation</category>
<body package="SeasideTesting-Html Entities">withAttributes: attributes
	^self new attributes: attributes; yourself</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideResponseParser class</class-id>
<category>parsing</category>
<body package="SeasideTesting-Core">parseDocumentFromResponse: aResponse
	^((aResponse contentType beginsWith: 'text/html') or: [aResponse contentType beginsWith: 'text/xhtml']) ifTrue: [
	(self parseDocumentFrom: aResponse contents) httpResponse: aResponse; yourself]
	ifFalse: [SCSeasideResponse new httpResponse: aResponse; yourself]</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideResponseParser class</class-id>
<category>private</category>
<body package="SeasideTesting-Core">addEntitiesTo: aDict
	aDict at: 'nbsp' put: (DTDEntityDeclaration name: 'nbsp' value: Character space)</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideResponseParser class</class-id>
<category>parsing</category>
<body package="SeasideTesting-Core">parseDocumentFrom: aStream
	^SeasidePlatformSupport parseSeasideDocumentFrom: aStream</body>
</methods>
<methods>
<class-id>Seaside.SCSeasideTextEntity class</class-id>
<category>instance creation</category>
<body package="SeasideTesting-Html Entities">on: aString
	^self new text: aString</body>
</methods>
<methods>
<class-id>Seaside.SCSelectOption class</class-id>
<category>instance creation</category>
<body package="SeasideTesting-Html Entities">select: aSelect attributes: attributes
	^ self new initializeForSelect: aSelect attributes: attributes</body>
</methods>
<methods>
<class-id>Seaside.SCTestBuilder class</class-id>
<category>testing</category>
<body package="SeasideTesting-TestRunner">canBeRoot
	^true</body>
</methods>
<methods>
<class-id>Seaside.SCTestCaseViewer class</class-id>
<category>class initialization</category>
<body package="SeasideTesting-TestRunner">initialize
	"self initialize"
	| app |
	super initialize.
	app := self registerAsApplication: 'testRunner'.
	app preferenceAt: #mainClass put: SCTestCaseMain.
	app preferenceAt: #sessionExpirySeconds put: 6000</body>
</methods>
<methods>
<class-id>Seaside.SCTestComponent1 class</class-id>
<category>seaside</category>
<body package="SeasideTesting-Examples">canBeRoot
	^true</body>
</methods>
<methods>
<class-id>Seaside.SCTestComponent2 class</class-id>
<category>seaside</category>
<body package="SeasideTesting-Examples">canBeRoot
	^true</body>
</methods>
<methods>
<class-id>Seaside.SCTestComponent4 class</class-id>
<category>seaside</category>
<body package="SeasideTesting-Examples">canBeRoot
	^true</body>
</methods>
<methods>
<class-id>Seaside.SCTestHistoryView class</class-id>
<category>instance creation</category>
<body package="SeasideTesting-TestRunner">forBrowser: aBrowser 
	^ self new history: aBrowser history</body>
</methods>
<methods>
<class-id>Seaside.SCTestRunner class</class-id>
<category>class initialization</category>
<body package="SeasideTesting-TestRunner">initialize
	"self initialize"
	super initialize.
	WADispatcherEditor addPlugin: self.
	WAHalo addPlugin: self</body>
</methods>
<methods>
<class-id>Seaside.SCTestRunner class</class-id>
<category>seaside plugin</category>
<body package="SeasideTesting-TestRunner">haloElementsFor: aTarget inHalo: aHalo
	aTarget class hasTestSuite
		ifFalse: [^#()].
	^OrderedCollection new
		add: ((Dictionary new)
				at: #image put: SCTestRunnerFiles / #haloTestGif;
				at: #action put: [self forCase: aTarget class suite];
				at: #title put: 'Run test suite';
				yourself);
		yourself

</body>
</methods>
<methods>
<class-id>Seaside.SCTestRunner class</class-id>
<category>seaside plugin</category>
<body package="SeasideTesting-TestRunner">editorActionsFor: anEntryPoint inEditor: anEditor
	| rootClass |
	(anEntryPoint isKindOf: WAApplication)
		ifFalse: [^#()].
	rootClass := anEntryPoint rootComponent.
	(rootClass isNil or: [rootClass hasTestSuite not])
		ifTrue: [^#()].

	^OrderedCollection new
		add: ((Dictionary new)
				at: #label put: 'test';
				at: #action put: [anEditor call: ((self forCase: rootClass suite) addDecoration: (WAWindowDecoration new title: 'Test runner'); yourself)];
				yourself);
		yourself</body>
</methods>
<methods>
<class-id>Seaside.SCTestRunner class</class-id>
<category>instance creation</category>
<body package="SeasideTesting-TestRunner">forCase: aTestCase
	^ self new initializeForCase: aTestCase</body>
</methods>
<methods>
<class-id>Seaside.SCTesterApplication class</class-id>
<category>testing</category>
<body package="SeasideTesting-Core">isAbstract
	^true</body>
</methods>
<methods>
<class-id>Seaside.SCTesterApplication class</class-id>
<category>accessing</category>
<body package="SeasideTesting-Core">path: aString
	^self named: aString</body>
</methods>
<initialize>
<class-id>Seaside.SCTestCaseViewer</class-id>
</initialize>
<initialize>
<class-id>Seaside.SCTestRunner</class-id>
</initialize>
</st-source>
