Builds and runs component tests (see Testing).
Note multi data with permissions, structure and data observability still to be factored in.
Example Application

Test run buttons.
Build buttons for new test stubs.
Link buttons for editing/investigation.
Other buttons.
Note you need to drop shortcuts in with .exe (notepad.lnk and xmlpad.lnk).
File types
Minimal required files.
| Type | Description |
|---|---|
| .stub | Stub for services/views. |
| .log | Logs interface re services/views. |
| .service | Service to be tested. |
| .view | Client to be tested. |
Initial stubs created the easy way, by pushing a button.
| Type | Description |
|---|---|
| .data | Initail component data. |
| .state | User saved component states. |
| .cmds | Client/Service events/commands. |
| .expected | Check to result, sync for new test. |
Generated file.
| Type | Description |
|---|---|
| .result | Client state/values or service values. |
(.service or .client) + .state + .data + .cmds(events)= .results = .expected = "Ok"
Example Files
Part of the cmd (events) file to inject for test.
<_FilterbarUserName>
<Item name="Id" value="FilterbarUserName" type="String" timestamp="30/11/2013 10:57:02" user="norton" />
<Item name="FunctionName" value="FilterButton_Click" type="String" timestamp="30/11/2013 10:57:02" user="norton" />
<Item name="TimeStamp" value="Unbooked" type="DateTime" timestamp="30/11/2013 10:57:02" user="norton" />
<Item name="Tag" value="UserName" type="String" timestamp="30/11/2013 10:57:02" user="norton" />
<Item name="Content" value="jon norton" type="String" timestamp="30/11/2013 10:57:02" user="norton" />
<Item name="IsChecked" value="False" type="Boolean" timestamp="30/11/2013 10:57:02" user="norton" />
</_FilterbarUserName>
<_FilterbarUserId>
<Item name="Id" value="FilterbarUserId" type="String" timestamp="30/11/2013 10:57:04" user="norton" />
<Item name="FunctionName" value="FilterButton_Click" type="String" timestamp="30/11/2013 10:57:04" user="norton" />
<Item name="TimeStamp" value="Unbooked" type="DateTime" timestamp="30/11/2013 10:57:04" user="norton" />
<Item name="Tag" value="UserId" type="String" timestamp="30/11/2013 10:57:04" user="norton" />
<Item name="Content" value="nortonj" type="String" timestamp="30/11/2013 10:57:04" user="norton" />
<Item name="IsChecked" value="False" type="Boolean" timestamp="30/11/2013 10:57:04" user="norton" />
</_FilterbarUserId>
<_FilterbarUserId>
<Item name="Id" value="FilterbarUserId" type="String" timestamp="30/11/2013 10:57:06" user="norton" />
<Item name="FunctionName" value="FilterButton_Click" type="String" timestamp="30/11/2013 10:57:06" user="norton" />
<Item name="TimeStamp" value="Unbooked" type="DateTime" timestamp="30/11/2013 10:57:06" user="norton" />
<Item name="Tag" value="UserId" type="String" timestamp="30/11/2013 10:57:06" user="norton" />
<Item name="Content" value="smithk" type="String" timestamp="30/11/2013 10:57:06" user="norton" />
<Item name="IsChecked" value="False" type="Boolean" timestamp="30/11/2013 10:57:06" user="norton" />
</_FilterbarUserId>
Part of the result file.
<_FiltertrayUser>
<Item name="Id" value="FiltertrayUser" type="String" timestamp="30/11/2013 10:57:14" user="norton" />
<Item name="FunctionName" value="FinPlusFilterbarTray" type="String" timestamp="30/11/2013 10:57:14" user="norton" />
<Item name="TimeStamp" value="Unbooked" type="DateTime" timestamp="30/11/2013 10:57:14" user="norton" />
<Item name="ChildrenCount" value="2" type="Int32" timestamp="30/11/2013 10:57:14" user="norton" />
<Item name="FilteredOut" value="UserId:nortonj,smithk;UserName:jon norton;" type="String" timestamp="30/11/2013 10:57:14" user="norton" />
</_FiltertrayUser>
<_FilterbarUserId>
<Item name="Id" value="FilterbarUserId" type="String" timestamp="30/11/2013 10:57:14" user="norton" />
<Item name="FunctionName" value="FinPlusFilterbar" type="String" timestamp="30/11/2013 10:57:14" user="norton" />
<Item name="TimeStamp" value="Unbooked" type="DateTime" timestamp="30/11/2013 10:57:14" user="norton" />
<Item name="ChildrenCount" value="3" type="Int32" timestamp="30/11/2013 10:57:14" user="norton" />
<Item name="FilteredOut" value="UserId:nortonj,smithk;" type="String" timestamp="30/11/2013 10:57:14" user="norton" />
<Item name="ItemName" value="UserId" type="String" timestamp="30/11/2013 10:57:14" user="norton" />
</_FilterbarUserId>
<_FilterbarUserName>
<Item name="Id" value="FilterbarUserName" type="String" timestamp="30/11/2013 10:57:14" user="norton" />
<Item name="FunctionName" value="FinPlusFilterbar" type="String" timestamp="30/11/2013 10:57:14" user="norton" />
<Item name="TimeStamp" value="Unbooked" type="DateTime" timestamp="30/11/2013 10:57:14" user="norton" />
<Item name="ChildrenCount" value="3" type="Int32" timestamp="30/11/2013 10:57:14" user="norton" />
<Item name="FilteredOut" value="UserName:jon norton;" type="String" timestamp="30/11/2013 10:57:14" user="norton" />
<Item name="ItemName" value="UserName" type="String" timestamp="30/11/2013 10:57:14" user="norton" />
</_FilterbarUserName>
Each component contains a list of TestStates.
public partial class FinPlusFilterbarTray : FinPlusControl
{
public override string Id { get; set; }
public override string[] States { get { return new string[] { "Height", "Width", "Left", "Top" }; } }
public override string[] TestStates { get { return new string[] { "ChildrenCount", "FilteredOut" }; } }
Templates** **
| Template | Type |
|---|---|
| TestBuilder.view (sourceforge.net) | View. |
Note this uses other templates in IOC fashion.
Wiki: FinPlusWPFControlsTest
Wiki: Projects
Wiki: SideBar
Wiki: TechnicalDebt