<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Adam Salvo (z) - Technology|Team Foundation Server</title>
    <link>http://blog.salvoz.com/</link>
    <description>newtelligence powered</description>
    <language>en-us</language>
    <copyright>Adam Salvo</copyright>
    <lastBuildDate>Fri, 26 Feb 2010 20:55:58 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.2.8279.16125</generator>
    <managingEditor>adam@salvoz.com</managingEditor>
    <webMaster>adam@salvoz.com</webMaster>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=4bc4dd02-c459-4fc4-bfbf-dae9df42eabb</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,4bc4dd02-c459-4fc4-bfbf-dae9df42eabb.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,4bc4dd02-c459-4fc4-bfbf-dae9df42eabb.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=4bc4dd02-c459-4fc4-bfbf-dae9df42eabb</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
In some TFS 2010 work items, there is a drop down that lists the automated builds
that have been run. An example field would be the “Integrated in Build” field on the
Task Work Item under the Implementation tab. Even when you delete a build, the build
number still shows up in these drop downs.
</p>
        <p>
          <a href="http://blog.salvoz.com/content/binary/WindowsLiveWriter/GettingridofoldBuildsfromWorkItemDropDow_D27B/image_2.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blog.salvoz.com/content/binary/WindowsLiveWriter/GettingridofoldBuildsfromWorkItemDropDow_D27B/image_thumb.png" width="244" height="54" />
          </a>
        </p>
        <p>
While playing around with the TFS 2010 RC Power Tools, I came across the global list
editor, and saw that all those build numbers I had been wanting to delete where listed.
After deleting a few and going back to my work items, I confirmed that they no longer
showed up.
</p>
        <p>
          <strong>To delete the build numbers from the work item drop down lists:</strong>
        </p>
        <p>
          <font color="#0080c0">1.) Get the Power Tools</font>
        </p>
        <p>
Install the TFS 2010 Power Tools for your version (RC or Beta2)
</p>
        <p>
          <font color="#0080c0">2.) Open the Global List</font>
        </p>
        <p>
In Visual Studio, go to Tools\Process Editor\Global List\Open Global List from Server.
</p>
        <p>
          <a href="http://blog.salvoz.com/content/binary/WindowsLiveWriter/GettingridofoldBuildsfromWorkItemDropDow_D27B/image_4.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blog.salvoz.com/content/binary/WindowsLiveWriter/GettingridofoldBuildsfromWorkItemDropDow_D27B/image_thumb_1.png" width="244" height="54" />
          </a>
        </p>
        <p>
          <font color="#0080c0">3.) Delete</font>
        </p>
        <p>
        </p>
        <ul>
          <li>
Expand the root folder, which should be named “Builds – ProjectName”. 
</li>
          <li>
Right click on the build and then click delete. It looks like you have to select each
item individually, but it goes pretty fast. 
</li>
          <li>
When you have deleted everything you want, click OK. 
</li>
        </ul>
        <p>
          <a href="http://blog.salvoz.com/content/binary/WindowsLiveWriter/GettingridofoldBuildsfromWorkItemDropDow_D27B/image_6.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blog.salvoz.com/content/binary/WindowsLiveWriter/GettingridofoldBuildsfromWorkItemDropDow_D27B/image_thumb_2.png" width="244" height="162" />
          </a>
        </p>
        <p>
Even if you delete the item from the list, if you have already selected the build
in a work item, the value will remain for that work item.
</p>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=4bc4dd02-c459-4fc4-bfbf-dae9df42eabb" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>Getting rid of old Builds from Work Item Drop Down List in TFS</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,4bc4dd02-c459-4fc4-bfbf-dae9df42eabb.aspx</guid>
      <link>http://blog.salvoz.com/2010/02/26/GettingRidOfOldBuildsFromWorkItemDropDownListInTFS.aspx</link>
      <pubDate>Fri, 26 Feb 2010 20:55:58 GMT</pubDate>
      <description>&lt;p&gt;
In some TFS 2010 work items, there is a drop down that lists the automated builds
that have been run. An example field would be the “Integrated in Build” field on the
Task Work Item under the Implementation tab. Even when you delete a build, the build
number still shows up in these drop downs.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.salvoz.com/content/binary/WindowsLiveWriter/GettingridofoldBuildsfromWorkItemDropDow_D27B/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blog.salvoz.com/content/binary/WindowsLiveWriter/GettingridofoldBuildsfromWorkItemDropDow_D27B/image_thumb.png" width="244" height="54"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
While playing around with the TFS 2010 RC Power Tools, I came across the global list
editor, and saw that all those build numbers I had been wanting to delete where listed.
After deleting a few and going back to my work items, I confirmed that they no longer
showed up.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;To delete the build numbers from the work item drop down lists:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font color="#0080c0"&gt;1.) Get the Power Tools&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
Install the TFS 2010 Power Tools for your version (RC or Beta2)
&lt;/p&gt;
&lt;p&gt;
&lt;font color="#0080c0"&gt;2.) Open the Global List&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
In Visual Studio, go to Tools\Process Editor\Global List\Open Global List from Server.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.salvoz.com/content/binary/WindowsLiveWriter/GettingridofoldBuildsfromWorkItemDropDow_D27B/image_4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blog.salvoz.com/content/binary/WindowsLiveWriter/GettingridofoldBuildsfromWorkItemDropDow_D27B/image_thumb_1.png" width="244" height="54"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;font color="#0080c0"&gt;3.) Delete&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Expand the root folder, which should be named “Builds – ProjectName”. 
&lt;/li&gt;
&lt;li&gt;
Right click on the build and then click delete. It looks like you have to select each
item individually, but it goes pretty fast. 
&lt;/li&gt;
&lt;li&gt;
When you have deleted everything you want, click OK. 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;a href="http://blog.salvoz.com/content/binary/WindowsLiveWriter/GettingridofoldBuildsfromWorkItemDropDow_D27B/image_6.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blog.salvoz.com/content/binary/WindowsLiveWriter/GettingridofoldBuildsfromWorkItemDropDow_D27B/image_thumb_2.png" width="244" height="162"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Even if you delete the item from the list, if you have already selected the build
in a work item, the value will remain for that work item.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=4bc4dd02-c459-4fc4-bfbf-dae9df42eabb" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,4bc4dd02-c459-4fc4-bfbf-dae9df42eabb.aspx</comments>
      <category>Technology/Team Foundation Server</category>
    </item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=d624504d-fd50-410e-a27f-d634b4c91743</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,d624504d-fd50-410e-a27f-d634b4c91743.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,d624504d-fd50-410e-a27f-d634b4c91743.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=d624504d-fd50-410e-a27f-d634b4c91743</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
This is my first attempt at editing a build template in Team Build 2010. Previously
I have expressed a desire to see Team Build move away from cryptic XML files and go
to a GUI. Well I got my wish, but instead of cryptic XML, we get a cryptic GUI in
the form of Windows Workflow foundation. Now maybe I’m not supposed to go in a edit
the default build template, but that’s how I learn. I start with what I know works
and start tweaking stuff.
</p>
        <p>
How bad is it? Well the entire workflow will not fit on my screen at 25% zoom. Here
are a couple of screen shots.
</p>
        <table border="0" cellspacing="0" cellpadding="2" width="911">
          <tbody>
            <tr>
              <td valign="top" width="222">
                <a href="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_2.png">
                  <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_thumb.png" width="151" height="244" />
                </a>
              </td>
              <td valign="top" width="210">
                <a href="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_4.png">
                  <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_thumb_1.png" width="158" height="244" />
                </a>
              </td>
              <td valign="top" width="199">
                <a href="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_6.png">
                  <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_thumb_2.png" width="146" height="244" />
                </a>
              </td>
              <td valign="top" width="278">
                <a href="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_8.png">
                  <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_thumb_3.png" width="244" height="55" />
                </a>
              </td>
            </tr>
          </tbody>
        </table>
        <p>
 
</p>
        <p>
Now to be fair, the default build template allows you to configure a lot of settings
using a property grid like GUI so you never have to look at the WF diagram. It’s only
when you need to add additional functionality that you have to go into the land of
WF. I guess I, along with Microsoft are expecting the community to step up and provide
some new build templates. I also found out that if you double click on the blocks
in the WF designer view, you jump “into” the block and that’s all you see.
</p>
        <p>
          <a href="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_10.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_thumb_4.png" width="244" height="154" />
          </a>
        </p>
        <p>
None the less, I set about the task of modifying the default build template to execute
XUnit tests instead of MS Tests. Before I go into that, let me explain why I am setting
myself up for this torture. My immediate alternatives are to use a different build
server, such as Team City, or to use MSTest. If I use Team City, I loose the tight
integration with TFS and I do not wish to explain to people about multiple tools.
If I use MSTest, I’ll still have to edit the build template to get automated deployment
working, as so far I haven't seen a MS Deploy activity. I’m not sure if this is the
best solution. Maybe I’ll get some feedback, but more then likely, I’ll end up borrowing
someone else's solution down the road. 
</p>
        <p>
So what do I have to start with? The default build template has an option to scan
for assemblies that match a certain naming convention (**\*test*.dll) which does match
my naming convention (this pattern is also configurable in the build definition GUI
under Basic\Automated Tests\Test Assembly). Looking at the log file for the build,
I can see that my two test assembly projects are loaded, but no tests are executed.
Once I found where in the WF sequence this was occurring, I realized I had a pretty
good starting point.  
</p>
        <p>
          <strong>Where to Start</strong>
        </p>
        <p>
First I had to find where I could switch out the call to MSTest with a call to Xunit
using the list of test assemblies found. It’s buried pretty deep, so keep double clicking
along the following path.
</p>
        <ul>
          <li>
Sequence 
</li>
          <li>
Run On Agent 
</li>
          <li>
Try Compile, Test, and Associate Changesets and Work items 
</li>
          <li>
Sequence 
</li>
          <li>
Compile, Test, and Associate Changesets and Work items 
</li>
          <li>
Try Compile and Test 
</li>
          <li>
Compile and test 
</li>
          <li>
For Each Configuration in BuildSettings.PlatformConfigurations 
</li>
          <li>
Compile and Test for Configuration 
</li>
          <li>
If Not DisableTests 
</li>
          <li>
Run Tests 
</li>
          <li>
If Not TestSpecs Is Nothing 
</li>
          <li>
For Each TestSpec in TestSpecs 
</li>
          <li>
Try Run Tests 
</li>
          <li>
If spec Is TestMetadataFileSpec 
</li>
          <li>
Run MSTest for Test Assemblies 
</li>
          <li>
If Test Assemblies Found (started inserting here) 
</li>
          <li>
If testAssembly.HasTestSettingsFile (deleted)</li>
        </ul>
        <p>
          <a href="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_12.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_thumb_5.png" width="244" height="111" />
          </a>
        </p>
        <p>
 
</p>
        <p>
          <strong>Run XUnit on all test assemblies</strong>
        </p>
        <p>
Since I don’t have a test settings file with XUnit, I delete the check for HasTestSettingsFile
and added an ForEach with an Invoke Process activity to use the xunit console runner.
So my “If Test Assemblies Found” block now looks like:
</p>
        <p>
          <a href="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_18.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_thumb_8.png" width="244" height="165" />
          </a> 
</p>
        <p>
The syntax to use the console runner is xunit.console Assembly.dll /nunit &lt;filename&gt;,
which looks pretty easy to use. To get the Xunit console on my build server, I could
either add it to source control, or put it in a known location on the build server.
I opted for the later because it was the easiest.
</p>
        <p>
To get the XUnitPath into the build template, I created a new Argument called XUnitPath
and took the easy way out by specifying the default as where I had installed XUnit.
I did this because I couldn’t figure out how to get it to show in the GUI initially.
You need to check your build template in and re-open the build definition. After doing
this, my new argument showed up under section 4. Misc. 
</p>
        <p>
          <a href="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_14.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_thumb_6.png" width="895" height="55" />
          </a>
        </p>
        <p>
I then went back to my Invoke Process activity and set the file name property to my
argument “variable” XUnitPath.<br /><a href="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_16.png"><br /></a><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_thumb_7.png" width="776" height="68" /></p>
        <p>
 
</p>
        <p>
For the arguments, I specified item, which is the ForEach variable for the assembly,
as well as an option to output the results as an nUnit formatted xml file.
</p>
        <p>
          <a href="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_24.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_thumb_11.png" width="411" height="136" />
          </a>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
Before I attempt to merge the XML results file, I need to be able to trigger my build
to fail if my tests fail. In the invoke process, you can grab the output using the
stdOut variable, which I did. I then added an If statement to check for the text “Tests
failed”, which the XUnit console outputs to when it encounters a failed test. Unfortunately,
every line output fires off my If statement, so my build log file looks a little verbose.
However, this works, and after fixing my tests, my build went from partially succeeded
to succeeded.  
</p>
        <p>
          <a href="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_26.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_thumb_12.png" width="230" height="244" />
          </a>
        </p>
        <p>
 
</p>
        <p>
At this point, here is what my “If Test Assemblies Found” block looks like. The Assign
blocks under Standard Output and Standard error assign BuildDetail.TestStatus to Microsoft.TeamFoundation.Build.Client.BuildPhaseStatus.Failed.
</p>
        <p>
          <a href="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_28.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_thumb_13.png" width="244" height="235" />
          </a>
        </p>
        <p>
 
</p>
        <p>
          <strong>Publish XUnit results to TFS</strong>
        </p>
        <p>
A couple of months ago I went about integrating XUnit tests and results into TFS 2008,
so I figured that those same steps would work more or less. After going down that
path initially, I decided it would be cleaner to just create a new XSLT template based
on the NUnit4MSBuild template that takes an XUnit results file and transforms it into
a MSTest trx file directly. This cuts out an extra step in my sequence, and eliminates
the need for an external dependency on nxslt3. I wrote up a separate blog post on
how to <a href="http://blog.salvoz.com/2010/02/22/TransformXUnitToMSTest.aspx">Transform
XUnit to MSTest</a>. Like the information presented in this post, it’s a work in progress. 
</p>
        <p>
After getting the results file in a compatible format I still needed to get them published
to TFS. You can use an Invoke activity to MSTest (which requires Visual Studio to
be installed on your build server) to publish your results. The filename argument
I used was:
</p>
        <blockquote>
          <p>
"""" &amp; System.Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)
&amp; "\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe"""
</p>
        </blockquote>
        <p>
and the arguments I used where:
</p>
        <blockquote>
          <p>
"/publish:""" &amp; BuildDetail.BuildServer.TeamProjectCollection.Uri.ToString() &amp;
"""" &amp; _<br />
" /publishbuild:""" &amp; BuildDetail.BuildNumber &amp; """" &amp; _<br />
" /publishresultsfile:" &amp; """" &amp; item &amp; "_XunitResults.trx" &amp; """"
&amp; _<br />
" /teamproject:""" &amp; BuildDetail.TeamProject &amp; """" &amp; _<br />
" /platform:""" &amp; platformConfiguration.Platform &amp; """" &amp; _<br />
" /flavor:""" &amp; platformConfiguration.Configuration &amp; """"
</p>
        </blockquote>
        <p>
          <strong>Final Thoughts and What’s Next</strong>
        </p>
        <p>
Well it works, but it’s what I consider to be a hack. However, I’m going to invoke
YAGNI in that this is manageable given the number of projects, builds and workflow
I am working with. I expect that I will have to work on this as my Greenfield project
matures. I also expect that once TFS 2010 is released and more people start using
it, there will be more community contributions. I would like to wrap this all up into
an XUnit workflow activity, but it depends on how much extra time I have. Since this
works, the next thing on my to do list is to get automated web deployments working
using MS Deploy.
</p>
        <p>
        </p>
        <p>
          <em>Right click and choose Save As</em>: 
</p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:F60BB8FA-6F02-4999-8F5E-9DD4E92C4DA7:03620bff-6a9d-41f6-a542-39d2c8723789" class="wlWriterEditableSmartContent">
          <div>
            <a href="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/MyTemplate.xaml" target="_self" onclick="javascript: pageTracker._trackPageview('MyTemplate.xaml');">MyTemplate.xaml</a>
          </div>
        </div>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=d624504d-fd50-410e-a27f-d634b4c91743" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>Running XUnit from Team Build 2010 and Publishing Results</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,d624504d-fd50-410e-a27f-d634b4c91743.aspx</guid>
      <link>http://blog.salvoz.com/2010/02/22/RunningXUnitFromTeamBuild2010AndPublishingResults.aspx</link>
      <pubDate>Mon, 22 Feb 2010 21:16:39 GMT</pubDate>
      <description>&lt;p&gt;
This is my first attempt at editing a build template in Team Build 2010. Previously
I have expressed a desire to see Team Build move away from cryptic XML files and go
to a GUI. Well I got my wish, but instead of cryptic XML, we get a cryptic GUI in
the form of Windows Workflow foundation. Now maybe I’m not supposed to go in a edit
the default build template, but that’s how I learn. I start with what I know works
and start tweaking stuff.
&lt;/p&gt;
&lt;p&gt;
How bad is it? Well the entire workflow will not fit on my screen at 25% zoom. Here
are a couple of screen shots.
&lt;/p&gt;
&lt;table border="0" cellspacing="0" cellpadding="2" width="911"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="222"&gt;
&lt;a href="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_thumb.png" width="151" height="244"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td valign="top" width="210"&gt;
&lt;a href="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_thumb_1.png" width="158" height="244"&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="199"&gt;
&lt;a href="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_6.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_thumb_2.png" width="146" height="244"&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="278"&gt;
&lt;a href="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_8.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_thumb_3.png" width="244" height="55"&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Now to be fair, the default build template allows you to configure a lot of settings
using a property grid like GUI so you never have to look at the WF diagram. It’s only
when you need to add additional functionality that you have to go into the land of
WF. I guess I, along with Microsoft are expecting the community to step up and provide
some new build templates. I also found out that if you double click on the blocks
in the WF designer view, you jump “into” the block and that’s all you see.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_10.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_thumb_4.png" width="244" height="154"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
None the less, I set about the task of modifying the default build template to execute
XUnit tests instead of MS Tests. Before I go into that, let me explain why I am setting
myself up for this torture. My immediate alternatives are to use a different build
server, such as Team City, or to use MSTest. If I use Team City, I loose the tight
integration with TFS and I do not wish to explain to people about multiple tools.
If I use MSTest, I’ll still have to edit the build template to get automated deployment
working, as so far I haven't seen a MS Deploy activity. I’m not sure if this is the
best solution. Maybe I’ll get some feedback, but more then likely, I’ll end up borrowing
someone else's solution down the road. 
&lt;/p&gt;
&lt;p&gt;
So what do I have to start with? The default build template has an option to scan
for assemblies that match a certain naming convention (**\*test*.dll) which does match
my naming convention (this pattern is also configurable in the build definition GUI
under Basic\Automated Tests\Test Assembly). Looking at the log file for the build,
I can see that my two test assembly projects are loaded, but no tests are executed.
Once I found where in the WF sequence this was occurring, I realized I had a pretty
good starting point.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Where to Start&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
First I had to find where I could switch out the call to MSTest with a call to Xunit
using the list of test assemblies found. It’s buried pretty deep, so keep double clicking
along the following path.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Sequence 
&lt;li&gt;
Run On Agent 
&lt;li&gt;
Try Compile, Test, and Associate Changesets and Work items 
&lt;li&gt;
Sequence 
&lt;li&gt;
Compile, Test, and Associate Changesets and Work items 
&lt;li&gt;
Try Compile and Test 
&lt;li&gt;
Compile and test 
&lt;li&gt;
For Each Configuration in BuildSettings.PlatformConfigurations 
&lt;li&gt;
Compile and Test for Configuration 
&lt;li&gt;
If Not DisableTests 
&lt;li&gt;
Run Tests 
&lt;li&gt;
If Not TestSpecs Is Nothing 
&lt;li&gt;
For Each TestSpec in TestSpecs 
&lt;li&gt;
Try Run Tests 
&lt;li&gt;
If spec Is TestMetadataFileSpec 
&lt;li&gt;
Run MSTest for Test Assemblies 
&lt;li&gt;
If Test Assemblies Found (started inserting here) 
&lt;li&gt;
If testAssembly.HasTestSettingsFile (deleted)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;a href="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_12.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_thumb_5.png" width="244" height="111"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Run XUnit on all test assemblies&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Since I don’t have a test settings file with XUnit, I delete the check for HasTestSettingsFile
and added an ForEach with an Invoke Process activity to use the xunit console runner.
So my “If Test Assemblies Found” block now looks like:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_18.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_thumb_8.png" width="244" height="165"&gt;&lt;/a&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
The syntax to use the console runner is xunit.console Assembly.dll /nunit &amp;lt;filename&amp;gt;,
which looks pretty easy to use. To get the Xunit console on my build server, I could
either add it to source control, or put it in a known location on the build server.
I opted for the later because it was the easiest.
&lt;/p&gt;
&lt;p&gt;
To get the XUnitPath into the build template, I created a new Argument called XUnitPath
and took the easy way out by specifying the default as where I had installed XUnit.
I did this because I couldn’t figure out how to get it to show in the GUI initially.
You need to check your build template in and re-open the build definition. After doing
this, my new argument showed up under section 4. Misc. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_14.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_thumb_6.png" width="895" height="55"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
I then went back to my Invoke Process activity and set the file name property to my
argument “variable” XUnitPath.&lt;br&gt;
&lt;a href="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_16.png"&gt;
&lt;br&gt;
&lt;/a&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_thumb_7.png" width="776" height="68"&gt; 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
For the arguments, I specified item, which is the ForEach variable for the assembly,
as well as an option to output the results as an nUnit formatted xml file.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_24.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_thumb_11.png" width="411" height="136"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Before I attempt to merge the XML results file, I need to be able to trigger my build
to fail if my tests fail. In the invoke process, you can grab the output using the
stdOut variable, which I did. I then added an If statement to check for the text “Tests
failed”, which the XUnit console outputs to when it encounters a failed test. Unfortunately,
every line output fires off my If statement, so my build log file looks a little verbose.
However, this works, and after fixing my tests, my build went from partially succeeded
to succeeded.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_26.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_thumb_12.png" width="230" height="244"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
At this point, here is what my “If Test Assemblies Found” block looks like. The Assign
blocks under Standard Output and Standard error assign BuildDetail.TestStatus to Microsoft.TeamFoundation.Build.Client.BuildPhaseStatus.Failed.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_28.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/image_thumb_13.png" width="244" height="235"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Publish XUnit results to TFS&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
A couple of months ago I went about integrating XUnit tests and results into TFS 2008,
so I figured that those same steps would work more or less. After going down that
path initially, I decided it would be cleaner to just create a new XSLT template based
on the NUnit4MSBuild template that takes an XUnit results file and transforms it into
a MSTest trx file directly. This cuts out an extra step in my sequence, and eliminates
the need for an external dependency on nxslt3. I wrote up a separate blog post on
how to &lt;a href="http://blog.salvoz.com/2010/02/22/TransformXUnitToMSTest.aspx"&gt;Transform
XUnit to MSTest&lt;/a&gt;. Like the information presented in this post, it’s a work in progress. 
&lt;/p&gt;
&lt;p&gt;
After getting the results file in a compatible format I still needed to get them published
to TFS. You can use an Invoke activity to MSTest (which requires Visual Studio to
be installed on your build server) to publish your results. The filename argument
I used was:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
"""" &amp;amp; System.Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)
&amp;amp; "\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe"""
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
and the arguments I used where:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
"/publish:""" &amp;amp; BuildDetail.BuildServer.TeamProjectCollection.Uri.ToString() &amp;amp;
"""" &amp;amp; _&lt;br&gt;
" /publishbuild:""" &amp;amp; BuildDetail.BuildNumber &amp;amp; """" &amp;amp; _&lt;br&gt;
" /publishresultsfile:" &amp;amp; """" &amp;amp; item &amp;amp; "_XunitResults.trx" &amp;amp; """"
&amp;amp; _&lt;br&gt;
" /teamproject:""" &amp;amp; BuildDetail.TeamProject &amp;amp; """" &amp;amp; _&lt;br&gt;
" /platform:""" &amp;amp; platformConfiguration.Platform &amp;amp; """" &amp;amp; _&lt;br&gt;
" /flavor:""" &amp;amp; platformConfiguration.Configuration &amp;amp; """"
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
&lt;strong&gt;Final Thoughts and What’s Next&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Well it works, but it’s what I consider to be a hack. However, I’m going to invoke
YAGNI in that this is manageable given the number of projects, builds and workflow
I am working with. I expect that I will have to work on this as my Greenfield project
matures. I also expect that once TFS 2010 is released and more people start using
it, there will be more community contributions. I would like to wrap this all up into
an XUnit workflow activity, but it depends on how much extra time I have. Since this
works, the next thing on my to do list is to get automated web deployments working
using MS Deploy.
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Right click and choose Save As&lt;/em&gt;: 
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:F60BB8FA-6F02-4999-8F5E-9DD4E92C4DA7:03620bff-6a9d-41f6-a542-39d2c8723789" class="wlWriterEditableSmartContent"&gt;
&lt;div&gt;&lt;a href="http://blog.salvoz.com/content/binary/WindowsLiveWriter/6221e35554e8_A6C6/MyTemplate.xaml" target="_self" onclick="javascript: pageTracker._trackPageview('MyTemplate.xaml');"&gt;MyTemplate.xaml&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=d624504d-fd50-410e-a27f-d634b4c91743" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,d624504d-fd50-410e-a27f-d634b4c91743.aspx</comments>
      <category>Technology/Team Foundation Server</category>
    </item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=c701927c-c67c-475c-b19c-4094d54a17a4</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,c701927c-c67c-475c-b19c-4094d54a17a4.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,c701927c-c67c-475c-b19c-4094d54a17a4.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=c701927c-c67c-475c-b19c-4094d54a17a4</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
This is part one of a two part series in how to get XUnit test results into Team Foundation
Server 2010. Originally I had started out using the NUnit to MSTest transform that
was part of <a href="http://www.codeplex.com/nunit4teambuild">NUnit4TeamBuild</a>,
but it left me with an extra step to perform in my build script. Since the XUnit console
runner has support for adding new transform options, I figured I could write my own
XSLT and eliminate the extra transform step in my build script. If I decided to move
ahead with my XUnit WF activity idea, I could also reuse this custom transform for
that. 
</p>
        <p>
          <strong>Setup</strong>
        </p>
        <p>
First I created two test projects, one based on MSTest, the other on XUnit. From these
two test projects, I can create the source (XUnit) and destination (MSTest) files
and then work on an XSLT transformation. When using the XUnit console runner against
assemblies compiled for .net 4.0, you have to add the following to it’s app.config
file:
</p>
        <blockquote>
          <p>
&lt;startup&gt;<br />
  &lt;requiredRuntime version="v4.0.20506" safemode="true"/&gt;<br />
&lt;/startup&gt;
</p>
        </blockquote>
        <p>
I also added a line under xunit\transforms to give me the option to use my new XSLT:
</p>
        <blockquote>
          <p>
&lt;add<br />
        commandline="mstest"<br />
        xslfile="MSTestXml.xslt"<br />
        description="output results to MSTest-style
XML file"/&gt;
</p>
        </blockquote>
        <p>
          <strong>Transformation</strong>
        </p>
        <p>
I started out with the XSLT fom the NUnit4TeamBuild project, and began modifying it
until the the output from it (transforming the Xunit sample results file) matched
the output from my MSTest results file.
</p>
        <ul>
          <li>
Changes for TFS 2010 
<ul><li>
Updated Namespace to <a title="http://microsoft.com/schemas/VisualStudio/TeamTest/2010" href="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">http://microsoft.com/schemas/VisualStudio/TeamTest/2010</a></li><li>
Changed TestRunConfiguration element to TestSettings 
</li><li>
Updated adapterTypeName 
</li><li>
Removed CodeCoverage element 
</li><li>
Added default text for computerName attribute (required to open in visual studio) 
</li><li>
Removed leading \ from paths</li></ul></li>
          <li>
Changes for XUnit XML 
<ul><li>
Create $startDateTime variable to store start time in correct format 
</li><li>
Update times element to use $startDateTime 
</li><li>
Updated template secondsToDuration to show fractions of a second correctly 
</li><li>
Change element references 
<ul><li>
/test-results to /assembly 
</li><li>
/test-suit to /class 
</li><li>
//test-case to //test</li></ul></li><li>
Change template getTestClassName to return className as AssemblyName.Class, AssemblyName 
</li><li>
Remove template getTestName 
</li><li>
Change totals to just use values in the XUnit assembly element. Executed = Total –
Skipped, NotExecuted = Skip</li></ul></li>
        </ul>
        <p>
          <strong>What’s Missing</strong>
        </p>
        <ul>
          <li>
Username: Hard coded to TeamBuildUser 
</li>
          <li>
Computername: Hard coded to TeamBuildServer 
</li>
          <li>
Correct Date/Time for certain attributes, like finishing times 
</li>
          <li>
Stack trace info does not link on machines other then the build machine (not sure
if it’s possible to fix this) 
</li>
          <li>
I do not use the Name or DisplayName properties on the XUnit Fact attribute so I didn’t
test or look into working with those.</li>
        </ul>
        <p>
          <strong>What’s Next</strong>
        </p>
        <p>
Well, I skipped over the testing of the XSLT, which you can read about in my next
post, where I modify the default build template in TFS 2010 to use XUnit instead of
MS Test. I’m doing all this work for a Greenfield project, so I’m just getting things
setup and working, and don’t have an extensive test library to try this out on yet. 
I’m also kind of excited to take a stab at writing a WF activity for Team Build 2010
to wrap this all up into one neat little package. 
</p>
        <p>
          <strong>The Template</strong>
        </p>
        <p>
Here is the template in all it’s glory. It works for my brand new project consisting
of 3 tests spread across 2 assemblies which I created just for testing my build. So
your mileage may very. Remember, credit for the original template which is mainly
intact goes to <a href="http://www.codeplex.com/nunit4teambuild">NUnit4TeamBuild</a>.
</p>
        <blockquote>
          <p>
&lt;?xml version="1.0" encoding="UTF-8" ?&gt;<br />
&lt;xsl:transform version="1.0" xmlns:xsl="<a href="http://www.w3.org/1999/XSL/Transform&quot;">http://www.w3.org/1999/XSL/Transform"</a>&gt;<br />
    &lt;xsl:output indent="yes" /&gt;<br />
    &lt;xsl:variable name="guidStub"&gt;<br />
        &lt;xsl:call-template name="testRunGuid"&gt;<br />
            &lt;xsl:with-param
name="date" select="/assembly/@run-date"/&gt;<br />
            &lt;xsl:with-param
name="time" select="/assembly/@run-time"/&gt;<br />
        &lt;/xsl:call-template&gt;<br />
    &lt;/xsl:variable&gt; 
</p>
          <p>
  &lt;xsl:variable name="startDateTime"&gt;<br />
    &lt;xsl:value-of select="concat(/assembly/@run-date, 'T', /assembly/@run-time)"/&gt;<br />
  &lt;/xsl:variable&gt; 
</p>
          <p>
  &lt;!--Set computer name and userName once so we can re-use. Hard coded until
we can get the values passed --&gt;<br />
  &lt;xsl:variable name="computerName"&gt;<br />
    &lt;xsl:value-of select="'TeamBuildServer'"/&gt;<br />
  &lt;/xsl:variable&gt; 
</p>
          <p>
  &lt;xsl:variable name="userName"&gt;<br />
    &lt;xsl:value-of select="'TeamBuildUser'"/&gt;<br />
  &lt;/xsl:variable&gt; 
</p>
          <p>
  &lt;xsl:template match="/"&gt;<br />
        &lt;TestRun xmlns="<a href="http://microsoft.com/schemas/VisualStudio/TeamTest/2010&quot;">http://microsoft.com/schemas/VisualStudio/TeamTest/2010"</a>&gt;<br />
            &lt;xsl:attribute
name="id"&gt;<br />
               
&lt;xsl:value-of select="concat($guidStub,'30db1d215203')"/&gt;<br />
            &lt;/xsl:attribute&gt;<br />
            &lt;xsl:attribute
name="runUser"&gt;<br />
               
&lt;xsl:value-of select="concat($computerName,'\',$userName)"/&gt;<br />
            &lt;/xsl:attribute&gt;<br />
            &lt;xsl:attribute
name="name"&gt;<br />
               
&lt;xsl:value-of select="concat($userName,'@',$computerName,' ',$startDateTime)"/&gt;<br />
            &lt;/xsl:attribute&gt;<br />
            &lt;TestSettings
name="Local Test Run" id="c136642c-2e64-4f99-9ec3-30db1d215203"&gt;<br />
               
&lt;Description&gt;This is a default test run configuration for a local test run.&lt;/Description&gt;<br />
               
&lt;Deployment&gt;<br />
                   
&lt;xsl:attribute name="runDeploymentRoot"&gt;<br />
                       
&lt;xsl:value-of select="//environment/@cwd" /&gt;<br />
                   
&lt;/xsl:attribute&gt;<br />
                   
&lt;DeploymentItem filename="C:\temp\powerlink\Trunk\Rhino\Rhino.Mocks.dll"&gt;<br />
                       
&lt;xsl:attribute name="filename"&gt;<br />
                           
&lt;xsl:value-of select="/assembly/@name"/&gt;<br />
                       
&lt;/xsl:attribute&gt;<br />
                   
&lt;/DeploymentItem&gt;<br />
               
&lt;/Deployment&gt;<br />
            &lt;/TestSettings&gt;<br />
            &lt;ResultSummary&gt;<br />
               
&lt;xsl:attribute name="outcome"&gt;<br />
                   
&lt;xsl:choose&gt;<br />
                       
&lt;xsl:when test="/assembly/@failed &amp;gt; 0"&gt;Failed&lt;/xsl:when&gt;<br />
                       
&lt;xsl:otherwise&gt;Completed&lt;/xsl:otherwise&gt;<br />
                   
&lt;/xsl:choose&gt;<br />
               
&lt;/xsl:attribute&gt;<br />
               
&lt;Counters error="0" timeout="0" aborted="0" passedButRunAborted="0" notRunnable="0"
disconnected="0" warning="0" completed="0" inProgress="0" pending="0"&gt;<br />
                   
&lt;xsl:attribute name="total"&gt;<br />
                       
&lt;xsl:value-of select="/assembly/@total"/&gt;<br />
                   
&lt;/xsl:attribute&gt;<br />
                   
&lt;xsl:attribute name="executed"&gt;<br />
                       
&lt;xsl:value-of select="/assembly/@total - /assembly/@skipped"/&gt;<br />
                   
&lt;/xsl:attribute&gt;<br />
                   
&lt;xsl:attribute name="notExecuted"&gt;<br />
                       
&lt;xsl:value-of select="/assembly/@skipped"/&gt;<br />
                   
&lt;/xsl:attribute&gt;<br />
                   
&lt;xsl:attribute name="passed"&gt;<br />
                       
&lt;xsl:value-of select="/assembly/@passed"/&gt;<br />
                   
&lt;/xsl:attribute&gt;<br />
                   
&lt;xsl:attribute name="failed"&gt;<br />
                       
&lt;xsl:value-of select="/assembly/@failed"/&gt;<br />
                   
&lt;/xsl:attribute&gt;<br />
                   
&lt;xsl:attribute name="inconclusive"&gt;<br />
                       
&lt;xsl:value-of select="'0'"/&gt;<br />
                   
&lt;/xsl:attribute&gt;<br />
               
&lt;/Counters&gt;<br />
               
&lt;RunInfos /&gt;<br />
            &lt;/ResultSummary&gt;<br />
      &lt;Times&gt;<br />
        &lt;xsl:attribute name="creation"&gt;<br />
          &lt;xsl:value-of select="$startDateTime"/&gt;<br />
        &lt;/xsl:attribute&gt;<br />
        &lt;xsl:attribute name="queuing"&gt;<br />
          &lt;xsl:value-of select="$startDateTime"/&gt;<br />
        &lt;/xsl:attribute&gt;<br />
        &lt;xsl:attribute name="start"&gt;<br />
          &lt;xsl:value-of select="$startDateTime"/&gt;<br />
        &lt;/xsl:attribute&gt;<br />
        &lt;xsl:attribute name="finish"&gt;<br />
          &lt;xsl:value-of select="$startDateTime"/&gt;<br />
        &lt;/xsl:attribute&gt;<br />
      &lt;/Times&gt;<br />
            &lt;TestDefinitions&gt;<br />
               
&lt;xsl:for-each select="//test"&gt;<br />
                   
&lt;xsl:variable name="pos" select="position()" /&gt;<br />
                   
&lt;UnitTest&gt;<br />
                       
&lt;xsl:attribute name="name"&gt;<br />
                           
&lt;xsl:value-of select="@method"/&gt;<br />
                       
&lt;/xsl:attribute&gt;<br />
                       
&lt;xsl:attribute name="storage"&gt;<br />
                           
&lt;xsl:value-of select="concat(//environment/@cwd,/assembly/@name)"/&gt;<br />
                       
&lt;/xsl:attribute&gt;<br />
                       
&lt;xsl:attribute name="id"&gt;<br />
                           
&lt;xsl:call-template name="testIdGuid"&gt;<br />
                               
&lt;xsl:with-param name="value" select="$pos"/&gt;<br />
                           
&lt;/xsl:call-template&gt;<br />
                       
&lt;/xsl:attribute&gt;<br />
                       
&lt;Css projectStructure="" iteration="" /&gt;<br />
                       
&lt;xsl:if test="@description"&gt;<br />
                           
&lt;Description&gt;&lt;xsl:value-of select="@description" /&gt;&lt;/Description&gt;<br />
                       
&lt;/xsl:if&gt;<br />
                       
&lt;Owners&gt;<br />
                           
&lt;Owner name="" /&gt;<br />
                       
&lt;/Owners&gt;<br />
                       
&lt;Execution&gt;<br />
                           
&lt;xsl:attribute name="id"&gt;<br />
                               
&lt;xsl:call-template name="executionIdGuid"&gt;<br />
                                   
&lt;xsl:with-param name="value" select="$pos"/&gt;<br />
                               
&lt;/xsl:call-template&gt;<br />
                           
&lt;/xsl:attribute&gt;<br />
                       
&lt;/Execution&gt;<br />
                       
&lt;TestMethod adapterTypeName="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestAdapter,
Microsoft.VisualStudio.QualityTools.Tips.UnitTest.Adapter, Version=10.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a" &gt;<br />
                           
&lt;xsl:attribute name="name"&gt;<br />
                               
&lt;xsl:value-of select="@method"/&gt;<br />
                           
&lt;/xsl:attribute&gt;<br />
                           
&lt;xsl:attribute name="codeBase"&gt;<br />
                               
&lt;xsl:value-of select="concat(//environment/@cwd,/assembly/@name)"/&gt;<br />
                           
&lt;/xsl:attribute&gt;<br />
                           
&lt;xsl:attribute name="className"&gt;<br />
                               
&lt;xsl:variable name="testClassName"&gt;<br />
                                   
&lt;xsl:call-template name="getTestClassName"&gt;<br />
                                       
&lt;xsl:with-param name="type" select="@type"/&gt;<br />
                                   
&lt;/xsl:call-template&gt;<br />
                               
&lt;/xsl:variable&gt;<br />
                               
&lt;xsl:value-of select="$testClassName" /&gt;<br />
                           
&lt;/xsl:attribute&gt;<br />
                       
&lt;/TestMethod&gt;<br />
                   
&lt;/UnitTest&gt;<br />
               
&lt;/xsl:for-each&gt;<br />
            &lt;/TestDefinitions&gt;<br />
            &lt;TestLists&gt;<br />
               
&lt;TestList name="Results Not in a List" id="8c84fa94-04c1-424b-9868-57a2d4851a1d"
/&gt;<br />
               
&lt;TestList name="All Loaded Results" id="19431567-8539-422a-85d7-44ee4e166bda" /&gt;<br />
            &lt;/TestLists&gt;<br />
            &lt;TestEntries&gt;<br />
               
&lt;xsl:for-each select="//test"&gt;<br />
                   
&lt;xsl:variable name="pos" select="position()" /&gt;<br />
                   
&lt;TestEntry testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d"&gt;<br />
                       
&lt;xsl:attribute name="testId"&gt;<br />
                           
&lt;xsl:call-template name="testIdGuid"&gt;<br />
                               
&lt;xsl:with-param name="value" select="$pos"/&gt;<br />
                           
&lt;/xsl:call-template&gt;<br />
                       
&lt;/xsl:attribute&gt;<br />
                       
&lt;xsl:attribute name="executionId"&gt;<br />
                           
&lt;xsl:call-template name="executionIdGuid"&gt;<br />
                               
&lt;xsl:with-param name="value" select="$pos"/&gt;<br />
                           
&lt;/xsl:call-template&gt;<br />
                       
&lt;/xsl:attribute&gt;<br />
                   
&lt;/TestEntry&gt;<br />
               
&lt;/xsl:for-each&gt;<br />
            &lt;/TestEntries&gt;<br />
            &lt;Results&gt;<br />
               
&lt;xsl:for-each select="//test"&gt;<br />
                   
&lt;xsl:variable name="pos" select="position()" /&gt;<br />
                   
&lt;UnitTestResult testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d"&gt;<br />
            &lt;xsl:attribute
name="startTime"&gt;<br />
              &lt;xsl:value-of
select="$startDateTime"/&gt;<br />
            &lt;/xsl:attribute&gt;<br />
            &lt;xsl:attribute
name="endTime"&gt;<br />
              &lt;xsl:value-of
select="$startDateTime"/&gt;<br />
            &lt;/xsl:attribute&gt;<br />
            &lt;xsl:attribute
name="testName"&gt;<br />
                           
&lt;xsl:value-of select="@method"/&gt;<br />
                       
&lt;/xsl:attribute&gt;<br />
                       
&lt;xsl:attribute name="computerName"&gt;<br />
                           
&lt;xsl:value-of select="$computerName"/&gt;<br />
                       
&lt;/xsl:attribute&gt;<br />
                       
&lt;xsl:attribute name="duration"&gt;<br />
                           
&lt;xsl:call-template name="secondsToDuration"&gt;<br />
                               
&lt;xsl:with-param name="seconds" select="@time"/&gt;<br />
                           
&lt;/xsl:call-template&gt;<br />
                       
&lt;/xsl:attribute&gt;<br />
                       
&lt;xsl:attribute name="testId"&gt;<br />
                           
&lt;xsl:call-template name="testIdGuid"&gt;<br />
                               
&lt;xsl:with-param name="value" select="$pos"/&gt;<br />
                           
&lt;/xsl:call-template&gt;<br />
                       
&lt;/xsl:attribute&gt;<br />
                       
&lt;xsl:attribute name="executionId"&gt;<br />
                           
&lt;xsl:call-template name="executionIdGuid"&gt;<br />
                               
&lt;xsl:with-param name="value" select="$pos"/&gt;<br />
                           
&lt;/xsl:call-template&gt;<br />
                       
&lt;/xsl:attribute&gt;<br />
                       
&lt;xsl:attribute name="outcome"&gt; 
<br />
                           
&lt;xsl:choose&gt;<br />
               
&lt;xsl:when test="@result='Pass'"&gt;<br />
                 
&lt;xsl:value-of select="'Passed'"/&gt;<br />
               
&lt;/xsl:when&gt;<br />
               
&lt;xsl:when test="@result='Fail'"&gt;<br />
                                   
&lt;xsl:value-of select="'Failed'"/&gt;<br />
               
&lt;/xsl:when&gt;<br />
               
&lt;xsl:otherwise&gt;<br />
                 
&lt;xsl:value-of select="'NotExecuted'"/&gt;<br />
               
&lt;/xsl:otherwise&gt;<br />
                           
&lt;/xsl:choose&gt;<br />
                       
&lt;/xsl:attribute&gt;<br />
                       
&lt;Output&gt;<br />
                           
&lt;xsl:for-each select="./failure"&gt;<br />
                               
&lt;ErrorInfo&gt;<br />
                                   
&lt;Message&gt;<br />
                                       
&lt;xsl:value-of select="./message"/&gt;<br />
                                   
&lt;/Message&gt;<br />
                                   
&lt;StackTrace&gt;<br />
                                       
&lt;xsl:value-of select="./stack-trace"/&gt;<br />
                                   
&lt;/StackTrace&gt;<br />
                               
&lt;/ErrorInfo&gt;<br />
                           
&lt;/xsl:for-each&gt;<br />
                       
&lt;/Output&gt;<br />
                   
&lt;/UnitTestResult&gt;<br />
               
&lt;/xsl:for-each&gt;<br />
            &lt;/Results&gt;<br />
        &lt;/TestRun&gt;<br />
    &lt;/xsl:template&gt; 
</p>
          <p>
    &lt;xsl:template name="substring-after-last"&gt;<br />
        &lt;xsl:param name="string" /&gt;<br />
        &lt;xsl:param name="delimiter" /&gt;<br />
        &lt;xsl:choose&gt;<br />
            &lt;xsl:when test="contains($string,
$delimiter)"&gt;<br />
               
&lt;xsl:call-template name="substring-after-last"&gt;<br />
                   
&lt;xsl:with-param name="string" select="substring-after($string, $delimiter)" /&gt;<br />
                   
&lt;xsl:with-param name="delimiter" select="$delimiter" /&gt;<br />
               
&lt;/xsl:call-template&gt;<br />
            &lt;/xsl:when&gt;<br />
            &lt;xsl:otherwise&gt;<br />
               
&lt;xsl:value-of select="$string" /&gt;<br />
            &lt;/xsl:otherwise&gt;<br />
        &lt;/xsl:choose&gt;<br />
    &lt;/xsl:template&gt; 
</p>
          <p>
    &lt;xsl:template name="getTestClassName"&gt;<br />
    &lt;!--Takes type in the form of Assembly.Class and returns Assembly.ClassName,
Assembly--&gt;<br />
        &lt;xsl:param name="type" /&gt;<br />
        &lt;xsl:value-of select="concat($type,
', ', substring-before($type, '.'))" /&gt;<br />
    &lt;/xsl:template&gt;<br />
    &lt;xsl:template name="testIdGuid"&gt;<br />
        &lt;xsl:param name="value" /&gt;<br />
        &lt;xsl:variable name="id"&gt;<br />
            &lt;xsl:call-template
name="dec_to_hex"&gt;<br />
               
&lt;xsl:with-param name="value" select="$value"/&gt;<br />
            &lt;/xsl:call-template&gt;<br />
        &lt;/xsl:variable&gt;<br />
        &lt;xsl:value-of select="concat($guidStub,substring(concat('000000000000',
$id),string-length($id) + 1, 12))"/&gt;<br />
    &lt;/xsl:template&gt; 
</p>
          <p>
    &lt;xsl:template name="executionIdGuid"&gt;<br />
        &lt;xsl:param name="value" /&gt;<br />
        &lt;xsl:variable name="id"&gt;<br />
            &lt;xsl:call-template
name="dec_to_hex"&gt;<br />
               
&lt;xsl:with-param name="value" select="$value"/&gt;<br />
            &lt;/xsl:call-template&gt;<br />
        &lt;/xsl:variable&gt;<br />
        &lt;xsl:value-of select="concat($guidStub,substring(concat('000000000000',
$id),string-length($id) + 1, 12))"/&gt;<br />
    &lt;/xsl:template&gt; 
</p>
          <p>
    &lt;xsl:template name="testRunGuid"&gt;<br />
        &lt;xsl:param name="date" /&gt;<br />
        &lt;xsl:param name="time" /&gt;<br />
        &lt;xsl:variable name="year"&gt;<br />
            &lt;xsl:value-of
select="substring($date,1,4)"/&gt;<br />
        &lt;/xsl:variable&gt;<br />
        &lt;xsl:variable name="month"&gt;<br />
            &lt;xsl:value-of
select="substring($date,6,2)"/&gt;<br />
        &lt;/xsl:variable&gt;<br />
        &lt;xsl:variable name="day"&gt;<br />
            &lt;xsl:value-of
select="substring($date,9,2)"/&gt;<br />
        &lt;/xsl:variable&gt;<br />
        &lt;xsl:variable name="hour"&gt;<br />
            &lt;xsl:value-of
select="substring($time,1,2)"/&gt;<br />
        &lt;/xsl:variable&gt;<br />
        &lt;xsl:variable name="minute"&gt;<br />
            &lt;xsl:value-of
select="substring($time,4,2)"/&gt;<br />
        &lt;/xsl:variable&gt;<br />
        &lt;xsl:variable name="second"&gt;<br />
            &lt;xsl:value-of
select="substring($time,7,2)"/&gt;<br />
        &lt;/xsl:variable&gt;<br />
        &lt;xsl:variable name="hexYear"&gt;<br />
            &lt;xsl:call-template
name="dec_to_hex"&gt;<br />
               
&lt;xsl:with-param name="value" select="$year"/&gt;<br />
            &lt;/xsl:call-template&gt;<br />
        &lt;/xsl:variable&gt;<br />
        &lt;xsl:variable name="hexMonth"&gt;<br />
            &lt;xsl:call-template
name="dec_to_hex"&gt;<br />
               
&lt;xsl:with-param name="value" select="$month"/&gt;<br />
            &lt;/xsl:call-template&gt;<br />
        &lt;/xsl:variable&gt;<br />
        &lt;xsl:variable name="hexDay"&gt;<br />
            &lt;xsl:call-template
name="dec_to_hex"&gt;<br />
               
&lt;xsl:with-param name="value" select="$day"/&gt;<br />
            &lt;/xsl:call-template&gt;<br />
        &lt;/xsl:variable&gt;<br />
        &lt;xsl:variable name="hexHour"&gt;<br />
            &lt;xsl:call-template
name="dec_to_hex"&gt;<br />
               
&lt;xsl:with-param name="value" select="$hour"/&gt;<br />
            &lt;/xsl:call-template&gt;<br />
        &lt;/xsl:variable&gt;<br />
        &lt;xsl:variable name="hexMinute"&gt;<br />
            &lt;xsl:call-template
name="dec_to_hex"&gt;<br />
               
&lt;xsl:with-param name="value" select="$minute"/&gt;<br />
            &lt;/xsl:call-template&gt;<br />
        &lt;/xsl:variable&gt;<br />
        &lt;xsl:variable name="hexSecond"&gt;<br />
            &lt;xsl:call-template
name="dec_to_hex"&gt;<br />
               
&lt;xsl:with-param name="value" select="$second"/&gt;<br />
            &lt;/xsl:call-template&gt;<br />
        &lt;/xsl:variable&gt;<br />
        &lt;xsl:variable name="padYear"&gt;<br />
            &lt;xsl:value-of
select="substring(concat('0000', $hexYear),string-length($hexYear) + 1, 4)"/&gt;<br />
        &lt;/xsl:variable&gt;<br />
        &lt;xsl:variable name="padMonth"&gt;<br />
            &lt;xsl:value-of
select="substring(concat('00', $hexMonth),string-length($hexMonth) + 1, 2)"/&gt;<br />
        &lt;/xsl:variable&gt;<br />
        &lt;xsl:variable name="padDay"&gt;<br />
            &lt;xsl:value-of
select="substring(concat('00', $hexDay),string-length($hexDay) + 1, 2)"/&gt;<br />
        &lt;/xsl:variable&gt;<br />
        &lt;xsl:variable name="padHour"&gt;<br />
            &lt;xsl:value-of
select="substring(concat('00', $hexHour),string-length($hexHour) + 1, 2)"/&gt;<br />
        &lt;/xsl:variable&gt;<br />
        &lt;xsl:variable name="padMinute"&gt;<br />
            &lt;xsl:value-of
select="substring(concat('00', $hexMinute),string-length($hexMinute) + 1, 2)"/&gt;<br />
        &lt;/xsl:variable&gt;<br />
        &lt;xsl:variable name="padSecond"&gt;<br />
            &lt;xsl:value-of
select="substring(concat('00', $hexSecond),string-length($hexSecond) + 1, 2)"/&gt;<br />
        &lt;/xsl:variable&gt;<br />
        &lt;xsl:value-of select="concat($padYear,$padMonth,$padDay,'-',$padHour,$padMinute,'-',$padSecond,'00-91c4-')"/&gt;<br />
    &lt;/xsl:template&gt; 
</p>
          <p>
    &lt;xsl:variable name="hex_digits" select="'0123456789ABCDEF'"
/&gt; 
</p>
          <p>
    &lt;xsl:template name="dec_to_hex"&gt;<br />
        &lt;xsl:param name="value" /&gt;<br />
        &lt;xsl:if test="$value &gt;= 16"&gt;<br />
            &lt;xsl:call-template
name="dec_to_hex"&gt;<br />
               
&lt;xsl:with-param name="value" select="floor($value div 16)" /&gt;<br />
            &lt;/xsl:call-template&gt;<br />
        &lt;/xsl:if&gt;<br />
        &lt;xsl:value-of select="substring($hex_digits,
($value mod 16) + 1, 1)" /&gt;<br />
    &lt;/xsl:template&gt;<br />
    &lt;xsl:template name="secondsToDuration"&gt;<br />
        &lt;xsl:param name="seconds" /&gt;<br />
        &lt;xsl:variable name="duration"&gt;<br />
            &lt;xsl:choose&gt;<br />
               
&lt;xsl:when test="$seconds"&gt;<br />
                   
&lt;xsl:variable name="hours" select="floor($seconds div 3600)" /&gt;<br />
                   
&lt;xsl:variable name="mins" select="floor(($seconds - ($hours * 3600)) div 60)" /&gt;<br />
                   
&lt;xsl:variable name="secs" select="floor($seconds - ($hours * 3600) - ($mins * 60))"
/&gt;<br />
                   
&lt;xsl:variable name="frac" select="substring($seconds - floor($seconds), 3, 7)"
/&gt; 
</p>
          <p>
                   
&lt;xsl:value-of select="substring(concat('00', $hours), string-length($hours) + 1,
2)" /&gt;<br />
                   
&lt;xsl:text&gt;:&lt;/xsl:text&gt;<br />
                   
&lt;xsl:value-of select="substring(concat('00', $mins) ,string-length($mins) + 1,
2)" /&gt;<br />
                   
&lt;xsl:text&gt;:&lt;/xsl:text&gt;<br />
                   
&lt;xsl:value-of select="substring(concat('00', $secs), string-length($secs) + 1,
2)" /&gt;<br />
          &lt;xsl:if test="$frac &gt;
0"&gt;<br />
            &lt;xsl:value-of
select="concat('.', $frac)" /&gt;<br />
          &lt;/xsl:if&gt;<br />
               
&lt;/xsl:when&gt;<br />
               
&lt;xsl:otherwise&gt;00:00:00.0000000&lt;/xsl:otherwise&gt;<br />
            &lt;/xsl:choose&gt;<br />
        &lt;/xsl:variable&gt;<br />
        &lt;xsl:value-of select="$duration" /&gt;<br />
    &lt;/xsl:template&gt; 
</p>
          <p>
&lt;/xsl:transform&gt;
</p>
        </blockquote>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=c701927c-c67c-475c-b19c-4094d54a17a4" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>Transform XUnit to MSTest</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,c701927c-c67c-475c-b19c-4094d54a17a4.aspx</guid>
      <link>http://blog.salvoz.com/2010/02/22/TransformXUnitToMSTest.aspx</link>
      <pubDate>Mon, 22 Feb 2010 18:44:52 GMT</pubDate>
      <description>&lt;p&gt;
This is part one of a two part series in how to get XUnit test results into Team Foundation
Server 2010. Originally I had started out using the NUnit to MSTest transform that
was part of &lt;a href="http://www.codeplex.com/nunit4teambuild"&gt;NUnit4TeamBuild&lt;/a&gt;,
but it left me with an extra step to perform in my build script. Since the XUnit console
runner has support for adding new transform options, I figured I could write my own
XSLT and eliminate the extra transform step in my build script. If I decided to move
ahead with my XUnit WF activity idea, I could also reuse this custom transform for
that. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Setup&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
First I created two test projects, one based on MSTest, the other on XUnit. From these
two test projects, I can create the source (XUnit) and destination (MSTest) files
and then work on an XSLT transformation. When using the XUnit console runner against
assemblies compiled for .net 4.0, you have to add the following to it’s app.config
file:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&amp;lt;startup&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;requiredRuntime version="v4.0.20506" safemode="true"/&amp;gt;&lt;br&gt;
&amp;lt;/startup&amp;gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
I also added a line under xunit\transforms to give me the option to use my new XSLT:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&amp;lt;add&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; commandline="mstest"&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xslfile="MSTestXml.xslt"&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; description="output results to MSTest-style
XML file"/&amp;gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
&lt;strong&gt;Transformation&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
I started out with the XSLT fom the NUnit4TeamBuild project, and began modifying it
until the the output from it (transforming the Xunit sample results file) matched
the output from my MSTest results file.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Changes for TFS 2010 
&lt;ul&gt;
&lt;li&gt;
Updated Namespace to &lt;a title="http://microsoft.com/schemas/VisualStudio/TeamTest/2010" href="http://microsoft.com/schemas/VisualStudio/TeamTest/2010"&gt;http://microsoft.com/schemas/VisualStudio/TeamTest/2010&lt;/a&gt; 
&lt;li&gt;
Changed TestRunConfiguration element to TestSettings 
&lt;li&gt;
Updated adapterTypeName 
&lt;li&gt;
Removed CodeCoverage element 
&lt;li&gt;
Added default text for computerName attribute (required to open in visual studio) 
&lt;li&gt;
Removed leading \ from paths&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
Changes for XUnit XML 
&lt;ul&gt;
&lt;li&gt;
Create $startDateTime variable to store start time in correct format 
&lt;li&gt;
Update times element to use $startDateTime 
&lt;li&gt;
Updated template secondsToDuration to show fractions of a second correctly 
&lt;li&gt;
Change element references 
&lt;ul&gt;
&lt;li&gt;
/test-results to /assembly 
&lt;li&gt;
/test-suit to /class 
&lt;li&gt;
//test-case to //test&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
Change template getTestClassName to return className as AssemblyName.Class, AssemblyName 
&lt;li&gt;
Remove template getTestName 
&lt;li&gt;
Change totals to just use values in the XUnit assembly element. Executed = Total –
Skipped, NotExecuted = Skip&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;What’s Missing&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Username: Hard coded to TeamBuildUser 
&lt;li&gt;
Computername: Hard coded to TeamBuildServer 
&lt;li&gt;
Correct Date/Time for certain attributes, like finishing times 
&lt;li&gt;
Stack trace info does not link on machines other then the build machine (not sure
if it’s possible to fix this) 
&lt;li&gt;
I do not use the Name or DisplayName properties on the XUnit Fact attribute so I didn’t
test or look into working with those.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;What’s Next&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Well, I skipped over the testing of the XSLT, which you can read about in my next
post, where I modify the default build template in TFS 2010 to use XUnit instead of
MS Test. I’m doing all this work for a Greenfield project, so I’m just getting things
setup and working, and don’t have an extensive test library to try this out on yet.&amp;nbsp;
I’m also kind of excited to take a stab at writing a WF activity for Team Build 2010
to wrap this all up into one neat little package. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;The Template&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Here is the template in all it’s glory. It works for my brand new project consisting
of 3 tests spread across 2 assemblies which I created just for testing my build. So
your mileage may very. Remember, credit for the original template which is mainly
intact goes to &lt;a href="http://www.codeplex.com/nunit4teambuild"&gt;NUnit4TeamBuild&lt;/a&gt;.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&amp;lt;?xml version="1.0" encoding="UTF-8" ?&amp;gt;&lt;br&gt;
&amp;lt;xsl:transform version="1.0" xmlns:xsl="&lt;a href="http://www.w3.org/1999/XSL/Transform&amp;quot;"&gt;http://www.w3.org/1999/XSL/Transform"&lt;/a&gt;&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:output indent="yes" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:variable name="guidStub"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:call-template name="testRunGuid"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:with-param
name="date" select="/assembly/@run-date"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:with-param
name="time" select="/assembly/@run-time"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:call-template&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:variable&amp;gt; 
&lt;p&gt;
&amp;nbsp; &amp;lt;xsl:variable name="startDateTime"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:value-of select="concat(/assembly/@run-date, 'T', /assembly/@run-time)"/&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;/xsl:variable&amp;gt; 
&lt;p&gt;
&amp;nbsp; &amp;lt;!--Set computer name and userName once so we can re-use. Hard coded until
we can get the values passed --&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;xsl:variable name="computerName"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:value-of select="'TeamBuildServer'"/&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;/xsl:variable&amp;gt; 
&lt;p&gt;
&amp;nbsp; &amp;lt;xsl:variable name="userName"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:value-of select="'TeamBuildUser'"/&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;/xsl:variable&amp;gt; 
&lt;p&gt;
&amp;nbsp; &amp;lt;xsl:template match="/"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;TestRun xmlns="&lt;a href="http://microsoft.com/schemas/VisualStudio/TeamTest/2010&amp;quot;"&gt;http://microsoft.com/schemas/VisualStudio/TeamTest/2010"&lt;/a&gt;&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:attribute
name="id"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:value-of select="concat($guidStub,'30db1d215203')"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:attribute&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:attribute
name="runUser"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:value-of select="concat($computerName,'\',$userName)"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:attribute&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:attribute
name="name"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:value-of select="concat($userName,'@',$computerName,' ',$startDateTime)"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:attribute&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;TestSettings
name="Local Test Run" id="c136642c-2e64-4f99-9ec3-30db1d215203"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;Description&amp;gt;This is a default test run configuration for a local test run.&amp;lt;/Description&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;Deployment&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:attribute name="runDeploymentRoot"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:value-of select="//environment/@cwd" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:attribute&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;DeploymentItem filename="C:\temp\powerlink\Trunk\Rhino\Rhino.Mocks.dll"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:attribute name="filename"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:value-of select="/assembly/@name"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:attribute&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/DeploymentItem&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/Deployment&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/TestSettings&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ResultSummary&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:attribute name="outcome"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:choose&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:when test="/assembly/@failed &amp;amp;gt; 0"&amp;gt;Failed&amp;lt;/xsl:when&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:otherwise&amp;gt;Completed&amp;lt;/xsl:otherwise&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:choose&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:attribute&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;Counters error="0" timeout="0" aborted="0" passedButRunAborted="0" notRunnable="0"
disconnected="0" warning="0" completed="0" inProgress="0" pending="0"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:attribute name="total"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:value-of select="/assembly/@total"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:attribute&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:attribute name="executed"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:value-of select="/assembly/@total - /assembly/@skipped"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:attribute&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:attribute name="notExecuted"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:value-of select="/assembly/@skipped"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:attribute&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:attribute name="passed"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:value-of select="/assembly/@passed"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:attribute&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:attribute name="failed"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:value-of select="/assembly/@failed"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:attribute&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:attribute name="inconclusive"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:value-of select="'0'"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:attribute&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/Counters&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;RunInfos /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/ResultSummary&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Times&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:attribute name="creation"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:value-of select="$startDateTime"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:attribute&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:attribute name="queuing"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:value-of select="$startDateTime"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:attribute&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:attribute name="start"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:value-of select="$startDateTime"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:attribute&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:attribute name="finish"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:value-of select="$startDateTime"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:attribute&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Times&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;TestDefinitions&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:for-each select="//test"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:variable name="pos" select="position()" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;UnitTest&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:attribute name="name"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:value-of select="@method"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:attribute&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:attribute name="storage"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:value-of select="concat(//environment/@cwd,/assembly/@name)"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:attribute&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:attribute name="id"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:call-template name="testIdGuid"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:with-param name="value" select="$pos"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:call-template&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:attribute&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;Css projectStructure="" iteration="" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:if test="@description"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;Description&amp;gt;&amp;lt;xsl:value-of select="@description" /&amp;gt;&amp;lt;/Description&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:if&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;Owners&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;Owner name="" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/Owners&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;Execution&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:attribute name="id"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:call-template name="executionIdGuid"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:with-param name="value" select="$pos"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:call-template&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:attribute&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/Execution&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;TestMethod adapterTypeName="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestAdapter,
Microsoft.VisualStudio.QualityTools.Tips.UnitTest.Adapter, Version=10.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a" &amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:attribute name="name"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:value-of select="@method"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:attribute&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:attribute name="codeBase"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:value-of select="concat(//environment/@cwd,/assembly/@name)"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:attribute&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:attribute name="className"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:variable name="testClassName"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:call-template name="getTestClassName"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:with-param name="type" select="@type"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:call-template&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:variable&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:value-of select="$testClassName" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:attribute&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/TestMethod&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/UnitTest&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:for-each&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/TestDefinitions&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;TestLists&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;TestList name="Results Not in a List" id="8c84fa94-04c1-424b-9868-57a2d4851a1d"
/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;TestList name="All Loaded Results" id="19431567-8539-422a-85d7-44ee4e166bda" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/TestLists&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;TestEntries&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:for-each select="//test"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:variable name="pos" select="position()" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;TestEntry testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:attribute name="testId"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:call-template name="testIdGuid"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:with-param name="value" select="$pos"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:call-template&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:attribute&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:attribute name="executionId"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:call-template name="executionIdGuid"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:with-param name="value" select="$pos"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:call-template&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:attribute&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/TestEntry&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:for-each&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/TestEntries&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Results&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:for-each select="//test"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:variable name="pos" select="position()" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;UnitTestResult testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:attribute
name="startTime"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:value-of
select="$startDateTime"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:attribute&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:attribute
name="endTime"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:value-of
select="$startDateTime"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:attribute&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:attribute
name="testName"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:value-of select="@method"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:attribute&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:attribute name="computerName"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:value-of select="$computerName"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:attribute&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:attribute name="duration"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:call-template name="secondsToDuration"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:with-param name="seconds" select="@time"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:call-template&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:attribute&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:attribute name="testId"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:call-template name="testIdGuid"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:with-param name="value" select="$pos"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:call-template&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:attribute&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:attribute name="executionId"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:call-template name="executionIdGuid"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:with-param name="value" select="$pos"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:call-template&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:attribute&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:attribute name="outcome"&amp;gt; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:choose&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:when test="@result='Pass'"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:value-of select="'Passed'"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:when&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:when test="@result='Fail'"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:value-of select="'Failed'"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:when&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:otherwise&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:value-of select="'NotExecuted'"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:otherwise&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:choose&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:attribute&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;Output&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:for-each select="./failure"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;ErrorInfo&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;Message&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:value-of select="./message"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/Message&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;StackTrace&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:value-of select="./stack-trace"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/StackTrace&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/ErrorInfo&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:for-each&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/Output&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/UnitTestResult&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:for-each&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Results&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/TestRun&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:template&amp;gt; 
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:template name="substring-after-last"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:param name="string" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:param name="delimiter" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:choose&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:when test="contains($string,
$delimiter)"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:call-template name="substring-after-last"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:with-param name="string" select="substring-after($string, $delimiter)" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:with-param name="delimiter" select="$delimiter" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:call-template&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:when&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:otherwise&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:value-of select="$string" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:otherwise&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:choose&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:template&amp;gt; 
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:template name="getTestClassName"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!--Takes type in the form of Assembly.Class and returns Assembly.ClassName,
Assembly--&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:param name="type" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:value-of select="concat($type,
', ', substring-before($type, '.'))" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:template&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:template name="testIdGuid"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:param name="value" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:variable name="id"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:call-template
name="dec_to_hex"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:with-param name="value" select="$value"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:call-template&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:variable&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:value-of select="concat($guidStub,substring(concat('000000000000',
$id),string-length($id) + 1, 12))"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:template&amp;gt; 
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:template name="executionIdGuid"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:param name="value" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:variable name="id"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:call-template
name="dec_to_hex"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:with-param name="value" select="$value"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:call-template&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:variable&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:value-of select="concat($guidStub,substring(concat('000000000000',
$id),string-length($id) + 1, 12))"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:template&amp;gt; 
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:template name="testRunGuid"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:param name="date" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:param name="time" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:variable name="year"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:value-of
select="substring($date,1,4)"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:variable&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:variable name="month"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:value-of
select="substring($date,6,2)"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:variable&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:variable name="day"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:value-of
select="substring($date,9,2)"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:variable&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:variable name="hour"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:value-of
select="substring($time,1,2)"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:variable&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:variable name="minute"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:value-of
select="substring($time,4,2)"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:variable&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:variable name="second"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:value-of
select="substring($time,7,2)"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:variable&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:variable name="hexYear"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:call-template
name="dec_to_hex"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:with-param name="value" select="$year"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:call-template&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:variable&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:variable name="hexMonth"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:call-template
name="dec_to_hex"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:with-param name="value" select="$month"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:call-template&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:variable&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:variable name="hexDay"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:call-template
name="dec_to_hex"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:with-param name="value" select="$day"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:call-template&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:variable&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:variable name="hexHour"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:call-template
name="dec_to_hex"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:with-param name="value" select="$hour"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:call-template&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:variable&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:variable name="hexMinute"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:call-template
name="dec_to_hex"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:with-param name="value" select="$minute"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:call-template&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:variable&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:variable name="hexSecond"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:call-template
name="dec_to_hex"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:with-param name="value" select="$second"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:call-template&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:variable&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:variable name="padYear"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:value-of
select="substring(concat('0000', $hexYear),string-length($hexYear) + 1, 4)"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:variable&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:variable name="padMonth"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:value-of
select="substring(concat('00', $hexMonth),string-length($hexMonth) + 1, 2)"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:variable&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:variable name="padDay"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:value-of
select="substring(concat('00', $hexDay),string-length($hexDay) + 1, 2)"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:variable&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:variable name="padHour"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:value-of
select="substring(concat('00', $hexHour),string-length($hexHour) + 1, 2)"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:variable&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:variable name="padMinute"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:value-of
select="substring(concat('00', $hexMinute),string-length($hexMinute) + 1, 2)"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:variable&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:variable name="padSecond"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:value-of
select="substring(concat('00', $hexSecond),string-length($hexSecond) + 1, 2)"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:variable&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:value-of select="concat($padYear,$padMonth,$padDay,'-',$padHour,$padMinute,'-',$padSecond,'00-91c4-')"/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:template&amp;gt; 
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:variable name="hex_digits" select="'0123456789ABCDEF'"
/&amp;gt; 
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:template name="dec_to_hex"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:param name="value" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:if test="$value &amp;gt;= 16"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:call-template
name="dec_to_hex"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:with-param name="value" select="floor($value div 16)" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:call-template&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:if&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:value-of select="substring($hex_digits,
($value mod 16) + 1, 1)" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:template&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:template name="secondsToDuration"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:param name="seconds" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:variable name="duration"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:choose&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:when test="$seconds"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:variable name="hours" select="floor($seconds div 3600)" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:variable name="mins" select="floor(($seconds - ($hours * 3600)) div 60)" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:variable name="secs" select="floor($seconds - ($hours * 3600) - ($mins * 60))"
/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:variable name="frac" select="substring($seconds - floor($seconds), 3, 7)"
/&amp;gt; 
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:value-of select="substring(concat('00', $hours), string-length($hours) + 1,
2)" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:text&amp;gt;:&amp;lt;/xsl:text&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:value-of select="substring(concat('00', $mins) ,string-length($mins) + 1,
2)" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:text&amp;gt;:&amp;lt;/xsl:text&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:value-of select="substring(concat('00', $secs), string-length($secs) + 1,
2)" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:if test="$frac &amp;gt;
0"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:value-of
select="concat('.', $frac)" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:if&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/xsl:when&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;xsl:otherwise&amp;gt;00:00:00.0000000&amp;lt;/xsl:otherwise&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:choose&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:variable&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:value-of select="$duration" /&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:template&amp;gt; 
&lt;p&gt;
&amp;lt;/xsl:transform&amp;gt;
&lt;/p&gt;
&lt;/blockquote&gt;&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=c701927c-c67c-475c-b19c-4094d54a17a4" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,c701927c-c67c-475c-b19c-4094d54a17a4.aspx</comments>
      <category>Technology/Team Foundation Server</category>
    </item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=50a9a42c-03e7-4439-a77d-29232db4d812</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,50a9a42c-03e7-4439-a77d-29232db4d812.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,50a9a42c-03e7-4439-a77d-29232db4d812.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=50a9a42c-03e7-4439-a77d-29232db4d812</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <em>This post is part of my PDC09 Conference Notes series. These are my raw notes
taken while watching the various session videos from PDC09. Refer to my <a href="http://blog.salvoz.com/2009/11/25/PDC2009Notes.aspx">original
post</a> for some conventions I tried to use.</em>
        </p>
        <p>
          <strong>FT60 - A Lap around Visual Studio and TFS 2010</strong>
        </p>
        <ul>
          <li>
Planning 
<ul><li>
Excel workbook for planning Iteration (for a specific Area?) 
</li><li>
Calculates # of working days based on Start and End Date 
</li><li>
Supports holidays and other non-working days by using the Interruptions sheet 
</li><li>
Capacity Planning graphs 
</li><li>
Looks like working in Excel is a much better (almost preferred) experience in 2010. 
</li><li>
Reports (at least the capacity report) was updated right away, no waiting for warehouse
to refresh.</li></ul></li>
        </ul>
        <ul>
          <li>
Hierarchical Work Items 
<ul><li>
As the name implies, you can setup hierarchies with your work items (kick ass!) 
</li><li>
Query support for hierarchical work items, allows you to define a query for the top
level item, and a second query for the child work items (<em>I have to think that
this feature was added as a direct result of MS dog fooding TFS</em>). 
</li></ul></li>
        </ul>
        <ul>
          <li>
Develop in Parallel 
<ul><li>
Branch visualization 
<ul><li>
Branches now show up as a "special" folder in Source Control viewer 
</li><li>
View Hierarchy (Right click on branch) allows you to view the branches and their relationships
in a graphical view. You can add a description for the branch 
</li><li>
Drag and Drop merges</li></ul></li></ul><ul><li>
Change tracing 
<ul><li>
Combine branch visualization with change sets, you can see which branches were affected
by a given change set. Arrows show stuff like merge directions.</li></ul></li></ul><ul><li>
Actionable History</li></ul></li>
        </ul>
        <ul>
          <li>
Continuous Integration 
<ul><li>
Gated Check-in 
<ul><li>
Verify code via a shelved check in set before something gets actually checked in. 
</li><li>
Seems somewhat redundant with proper branches for development, but I guess it's another
way to solve the problem. Although I think that you should be running most of the
tests locally before even trying to check in. 
</li></ul></li></ul><ul><li>
Architecture Diagrams 
<ul><li>
Map actually code assemblies (projects) to a block diagram. 
</li><li>
Blocks are for things like Web Layer, Business Layer, Data Layer etc. 
</li><li>
You can setup dependencies between the blocks, like Web Layer depends on Business
Layer. 
</li><li>
You can verify that code does not break the dependencies you have outlined in the
block diagram (i.e. don't have a business component that references the web component). 
</li></ul></li></ul><ul><li>
Visual Work Flow (WF) designer for builds looks a lot better then editing XML, but
we all know that Microsoft rarely demos stuff that has been tested in the real world. 
</li><li>
Build Reports are improved, more information with direct links to the information
in TFS that you need to get more details. Hopefully less digging around the build
output folder. 
</li><li>
New SysTray app that notifies you about build events</li></ul></li>
        </ul>
        <ul>
          <li>
Project Visibility and Health 
<ul><li>
Nice graphs in MOSS. Do they work in WSS? 
<ul><li>
Burndown 
</li><li>
User Stories vs. Tasks</li></ul></li></ul><ul><li>
Graphs build on Web Parts so you can customize the page layout. Also change parameters
passed to reports.</li></ul></li>
        </ul>
        <ul>
          <li>
Manageability 
<ul><li>
TFS Basic Install 
</li><li>
New Admin Console written WPF. Looks like MMC. 
<ul><li>
Ports, URL's, etc 
</li><li>
One click change TFS account password 
</li><li>
View logs</li></ul></li></ul></li>
        </ul>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=50a9a42c-03e7-4439-a77d-29232db4d812" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>PDC09 – FT60: A Lap Around Visual Studio and TFS 2010</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,50a9a42c-03e7-4439-a77d-29232db4d812.aspx</guid>
      <link>http://blog.salvoz.com/2009/11/25/PDC09FT60ALapAroundVisualStudioAndTFS2010.aspx</link>
      <pubDate>Wed, 25 Nov 2009 03:07:37 GMT</pubDate>
      <description>&lt;p&gt;
&lt;em&gt;This post is part of my PDC09 Conference Notes series. These are my raw notes
taken while watching the various session videos from PDC09. Refer to my &lt;a href="http://blog.salvoz.com/2009/11/25/PDC2009Notes.aspx"&gt;original
post&lt;/a&gt; for some conventions I tried to use.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;FT60 - A Lap around Visual Studio and TFS 2010&lt;/strong&gt; 
&lt;ul&gt;
&lt;li&gt;
Planning 
&lt;ul&gt;
&lt;li&gt;
Excel workbook for planning Iteration (for a specific Area?) 
&lt;li&gt;
Calculates # of working days based on Start and End Date 
&lt;li&gt;
Supports holidays and other non-working days by using the Interruptions sheet 
&lt;li&gt;
Capacity Planning graphs 
&lt;li&gt;
Looks like working in Excel is a much better (almost preferred) experience in 2010. 
&lt;li&gt;
Reports (at least the capacity report) was updated right away, no waiting for warehouse
to refresh.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
Hierarchical Work Items 
&lt;ul&gt;
&lt;li&gt;
As the name implies, you can setup hierarchies with your work items (kick ass!) 
&lt;li&gt;
Query support for hierarchical work items, allows you to define a query for the top
level item, and a second query for the child work items (&lt;em&gt;I have to think that
this feature was added as a direct result of MS dog fooding TFS&lt;/em&gt;). 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
Develop in Parallel 
&lt;ul&gt;
&lt;li&gt;
Branch visualization 
&lt;ul&gt;
&lt;li&gt;
Branches now show up as a "special" folder in Source Control viewer 
&lt;li&gt;
View Hierarchy (Right click on branch) allows you to view the branches and their relationships
in a graphical view. You can add a description for the branch 
&lt;li&gt;
Drag and Drop merges&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
Change tracing 
&lt;ul&gt;
&lt;li&gt;
Combine branch visualization with change sets, you can see which branches were affected
by a given change set. Arrows show stuff like merge directions.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
Actionable History&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
Continuous Integration 
&lt;ul&gt;
&lt;li&gt;
Gated Check-in 
&lt;ul&gt;
&lt;li&gt;
Verify code via a shelved check in set before something gets actually checked in. 
&lt;li&gt;
Seems somewhat redundant with proper branches for development, but I guess it's another
way to solve the problem. Although I think that you should be running most of the
tests locally before even trying to check in. 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
Architecture Diagrams 
&lt;ul&gt;
&lt;li&gt;
Map actually code assemblies (projects) to a block diagram. 
&lt;li&gt;
Blocks are for things like Web Layer, Business Layer, Data Layer etc. 
&lt;li&gt;
You can setup dependencies between the blocks, like Web Layer depends on Business
Layer. 
&lt;li&gt;
You can verify that code does not break the dependencies you have outlined in the
block diagram (i.e. don't have a business component that references the web component). 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
Visual Work Flow (WF) designer for builds looks a lot better then editing XML, but
we all know that Microsoft rarely demos stuff that has been tested in the real world. 
&lt;li&gt;
Build Reports are improved, more information with direct links to the information
in TFS that you need to get more details. Hopefully less digging around the build
output folder. 
&lt;li&gt;
New SysTray app that notifies you about build events&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
Project Visibility and Health 
&lt;ul&gt;
&lt;li&gt;
Nice graphs in MOSS. Do they work in WSS? 
&lt;ul&gt;
&lt;li&gt;
Burndown 
&lt;li&gt;
User Stories vs. Tasks&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
Graphs build on Web Parts so you can customize the page layout. Also change parameters
passed to reports.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
Manageability 
&lt;ul&gt;
&lt;li&gt;
TFS Basic Install 
&lt;li&gt;
New Admin Console written WPF. Looks like MMC. 
&lt;ul&gt;
&lt;li&gt;
Ports, URL's, etc 
&lt;li&gt;
One click change TFS account password 
&lt;li&gt;
View logs&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=50a9a42c-03e7-4439-a77d-29232db4d812" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,50a9a42c-03e7-4439-a77d-29232db4d812.aspx</comments>
      <category>Technology/Conference Notes</category>
      <category>Technology/Team Foundation Server</category>
      <category>Technology/Visual Studio</category>
    </item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=584be101-cc82-4cb6-b79a-382cd616fd89</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,584be101-cc82-4cb6-b79a-382cd616fd89.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,584be101-cc82-4cb6-b79a-382cd616fd89.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=584be101-cc82-4cb6-b79a-382cd616fd89</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I’ve recently decided to wrap up my previous at home project and start a new project
code named WheelJack. I will be posting sometime in the future what WheelJack actually
is, but for now you’ll just have to guess based on what I’m writing about. 
</p>
        <p>
I will be using Team Foundation Server to manage the project, source code, work items,
builds, etc. While we have TFS where I work, we do not utilize all of it’s functionality,
and part of this new project is an attempt to better understand what TFS can bring
to the table. 
</p>
        <p>
I will have to admit that it’s a complete overkill for a single developer scenario,
and I face a very real risk of loosing precious time dealing with TFS, but in the
end I think it’s worth it. If it becomes to much of a burden, I can always switch
over to subversion and re-task the SharePoint site with project management.
</p>
        <p>
Before I sit down and start writing code, I need to setup a new team project, determine
my branching strategy, and get Team Build running for nightly and continuous integration
builds. For this project I will be using the <a href="http://scrumforteamsystem.com/en/default.aspx">Scrum
Template for Team System</a> created by <a href="http://www.conchango.com">Conchango</a>.
</p>
        <p>
Detailed instructions for installing a new template into TFS and creating a new Team
project are outside the scope of this post. Provided that you have full administrative
rights to the TFS box, the MSI installer does all the heavy lifting, and creating
a new project is a 5 step wizard process. 
</p>
        <p>
With my new project created I can begin adding work items to the product backlog,
define sprints, and areas. I’ve also created a Wiki on the project SharePoint site
to various information, including feature description, architecture, design and implementation
details. The wiki is a great tool to use when working on a project because it is so
easy to create content and organize content.
</p>
        <p>
With all of that out of the way for now, I can move onto creating my source tree,
which involves the selection of a branching strategy. The branching strategy used
for WheelJack is the Single Team Branching Strategy as defined in <a href="http://tfsbranchingguideii.codeplex.com/">TFS
Branching Guide version 2.0</a>. 
</p>
        <p>
          <strong>Single Team Branching Strategy</strong>
        </p>
        <p>
The single team branching strategy requires 3 branches, MAIN, DEV and RELEASE, where
DEV and RELEASE are branched from MAIN. While I say 3, there will in fact be more
then 3 actual branches. Whenever a new release is created, it gets it’s own branch.
This strategy also allows for concurrent DEV branches.
</p>
        <p>
          <u>Working in DEV</u>
        </p>
        <p>
After each successful nightly build, code should be merged from MAIN to DEV. In this
project, with only one dev branch, and only one developer, there will usually be nothing
to merge. The following situations are examples of when there will actually be code
in MAIN that needs to be merged to DEV. 
</p>
        <ul>
          <li>
Once we create a release branch, if a show stopping bug is discovered and fixed in
a release  branch, that change is merged to MAIN, and then merged from MAIN to
all dev branches. 
</li>
          <li>
If we have multiple dev branches, changes in one DEV branch could be merged to MAIN,
and then from MAIN to all other dev branches.</li>
        </ul>
        <p>
Key features of working in DEV (taken from TFS Branching Guide) 
</p>
        <ul>
          <li>
Focus on wide, flat branches to enable steady code flow to MAIN and then back to peer
DEV branches 
</li>
          <li>
Work in DEV branches can be segregated by feature, organization, or temporary collaboration. 
</li>
          <li>
Each DEV branch should be a full branch of MAIN. 
</li>
          <li>
DEV branches should build and run Build Verification Tests (BVT’s) the same way as
MAIN. 
</li>
          <li>
Forward Integrate (FI) with each successful build of MAIN 
</li>
          <li>
Reverse Integrate (RI) based on some objective team criteria (e.g. internal quality
gates, end of sprint, etc.). 
</li>
        </ul>
        <p>
          <u>Working in MAIN</u>
        </p>
        <p>
Aside from the initial solution and build creation, no work should be done in Main.
</p>
        <p>
          <u>Working in a Release Branch</u>
        </p>
        <p>
Work in production should be limited to show stopping bugs. Changes should be merged
into Main once completed. The following list was taken from the branching guide. 
</p>
        <p>
  
</p>
        <p>
Key features of working with Release Branches (taken from TFS Branching Guide) 
</p>
        <ul>
          <li>
Each RELEASE is a child branch of MAIN. 
</li>
          <li>
Your major product releases from the RELEASE branch and then RELEASE branch access
permissions are set to read only. 
</li>
          <li>
Changes from the RELEASE branch RI to main.  This merge is one way.  Once
the release branch is created MAIN may be taking changes for next version work not
approved for the release branch  
</li>
          <li>
Duplicate RELEASE branch plan for subsequent major releases. This means there will
be one branch per major release.</li>
        </ul>
        <p>
          <strong>Source Code Repository Directory Structure</strong>
        </p>
        <ul>
          <li>
WheelJack$ 
<ul><li>
DEV 
<ul><li>
1.0 (Version or Feature) 
<ul><li><em>Identical to Main</em></li></ul></li><li>
1.1 (Version or Feature) 
<ul><li>
Identical to Main</li></ul></li></ul></li><li>
MAIN 
<ul><li>
Source 
<ul><li>
Project1 
</li><li>
Project1.Tests 
</li><li>
Project2 
</li><li>
Project2.Tests 
</li><li>
References</li></ul></li><li>
BuildTypes</li></ul></li><li>
Releases 
<ul><li>
Release 1.0 
<ul><li>
Identical to Main</li></ul></li><li>
Release 1.1 
<ul><li>
Identical to Main</li></ul></li><li>
Release 2.0 
<ul><li>
Identical to Main</li></ul></li><li>
Release 2.1 
<ul><li>
Identical to Main</li></ul></li></ul></li></ul></li>
        </ul>
        <p>
  
</p>
        <p>
Every branch from Main contains everything that is in the Main branch, including the
Source and BuildTypes folder (BuildTypes contain the Team Build files that define
a build). 
</p>
        <p>
  
</p>
        <p>
I started out by creating a new folder on my hard drive that corresponds to the root
folder TFS (WheelJack$), and working my way down the hierarchy for Main, creating
Source and BuildTypes folders. My project contains a server piece and a client piece,
so starting with the server side, I created a folder named MessagingServer, and then
created 4 projects under that folder. I also created a _Solutions folder under WheelJack
which is where I store all of my Visual Studio Solution files (*.sln). The solution
files are not checked into source control. 
</p>
        <p>
  
</p>
        <p>
Below you can see what my folder structure looks like in Windows Explorer, and in
Solution Explorer. 
</p>
        <table border="0" cellspacing="0" cellpadding="2" width="800">
          <tbody>
            <tr>
              <td valign="top" width="400">
                <a href="http://blog.salvoz.com/content/binary/WindowsLiveWriter/StartinganewathomeprojectusingTeamFounda_FF8D/image_6.png">
                  <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blog.salvoz.com/content/binary/WindowsLiveWriter/StartinganewathomeprojectusingTeamFounda_FF8D/image_thumb_2.png" width="244" height="220" />
                </a>
              </td>
              <td valign="top" width="400">
                <a href="http://blog.salvoz.com/content/binary/WindowsLiveWriter/StartinganewathomeprojectusingTeamFounda_FF8D/image_4.png">
                  <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blog.salvoz.com/content/binary/WindowsLiveWriter/StartinganewathomeprojectusingTeamFounda_FF8D/image_thumb_1.png" width="244" height="149" />
                </a>
              </td>
            </tr>
          </tbody>
        </table>
        <p>
        </p>
        <p>
After cleaning up the project names, namespaces, and adding the correct project references,
I was able to begin looking at setting up the automated builds. I’ll pick up here
next time.
</p>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=584be101-cc82-4cb6-b79a-382cd616fd89" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>WheelJack – New at-home learning project</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,584be101-cc82-4cb6-b79a-382cd616fd89.aspx</guid>
      <link>http://blog.salvoz.com/2009/06/07/WheelJackNewAthomeLearningProject.aspx</link>
      <pubDate>Sun, 07 Jun 2009 07:07:00 GMT</pubDate>
      <description>&lt;p&gt;
I’ve recently decided to wrap up my previous at home project and start a new project
code named WheelJack. I will be posting sometime in the future what WheelJack actually
is, but for now you’ll just have to guess based on what I’m writing about. 
&lt;/p&gt;
&lt;p&gt;
I will be using Team Foundation Server to manage the project, source code, work items,
builds, etc. While we have TFS where I work, we do not utilize all of it’s functionality,
and part of this new project is an attempt to better understand what TFS can bring
to the table. 
&lt;/p&gt;
&lt;p&gt;
I will have to admit that it’s a complete overkill for a single developer scenario,
and I face a very real risk of loosing precious time dealing with TFS, but in the
end I think it’s worth it. If it becomes to much of a burden, I can always switch
over to subversion and re-task the SharePoint site with project management.
&lt;/p&gt;
&lt;p&gt;
Before I sit down and start writing code, I need to setup a new team project, determine
my branching strategy, and get Team Build running for nightly and continuous integration
builds. For this project I will be using the &lt;a href="http://scrumforteamsystem.com/en/default.aspx"&gt;Scrum
Template for Team System&lt;/a&gt; created by &lt;a href="http://www.conchango.com"&gt;Conchango&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Detailed instructions for installing a new template into TFS and creating a new Team
project are outside the scope of this post. Provided that you have full administrative
rights to the TFS box, the MSI installer does all the heavy lifting, and creating
a new project is a 5 step wizard process. 
&lt;/p&gt;
&lt;p&gt;
With my new project created I can begin adding work items to the product backlog,
define sprints, and areas. I’ve also created a Wiki on the project SharePoint site
to various information, including feature description, architecture, design and implementation
details. The wiki is a great tool to use when working on a project because it is so
easy to create content and organize content.
&lt;/p&gt;
&lt;p&gt;
With all of that out of the way for now, I can move onto creating my source tree,
which involves the selection of a branching strategy. The branching strategy used
for WheelJack is the Single Team Branching Strategy as defined in &lt;a href="http://tfsbranchingguideii.codeplex.com/"&gt;TFS
Branching Guide version 2.0&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Single Team Branching Strategy&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
The single team branching strategy requires 3 branches, MAIN, DEV and RELEASE, where
DEV and RELEASE are branched from MAIN. While I say 3, there will in fact be more
then 3 actual branches. Whenever a new release is created, it gets it’s own branch.
This strategy also allows for concurrent DEV branches.
&lt;/p&gt;
&lt;p&gt;
&lt;u&gt;Working in DEV&lt;/u&gt;
&lt;/p&gt;
&lt;p&gt;
After each successful nightly build, code should be merged from MAIN to DEV. In this
project, with only one dev branch, and only one developer, there will usually be nothing
to merge. The following situations are examples of when there will actually be code
in MAIN that needs to be merged to DEV. 
&lt;ul&gt;
&lt;li&gt;
Once we create a release branch, if a show stopping bug is discovered and fixed in
a release&amp;nbsp; branch, that change is merged to MAIN, and then merged from MAIN to
all dev branches. 
&lt;li&gt;
If we have multiple dev branches, changes in one DEV branch could be merged to MAIN,
and then from MAIN to all other dev branches.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Key features of working in DEV (taken from TFS Branching Guide) 
&lt;ul&gt;
&lt;li&gt;
Focus on wide, flat branches to enable steady code flow to MAIN and then back to peer
DEV branches 
&lt;li&gt;
Work in DEV branches can be segregated by feature, organization, or temporary collaboration. 
&lt;li&gt;
Each DEV branch should be a full branch of MAIN. 
&lt;li&gt;
DEV branches should build and run Build Verification Tests (BVT’s) the same way as
MAIN. 
&lt;li&gt;
Forward Integrate (FI) with each successful build of MAIN 
&lt;li&gt;
Reverse Integrate (RI) based on some objective team criteria (e.g. internal quality
gates, end of sprint, etc.). 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;u&gt;Working in MAIN&lt;/u&gt;
&lt;/p&gt;
&lt;p&gt;
Aside from the initial solution and build creation, no work should be done in Main.
&lt;/p&gt;
&lt;p&gt;
&lt;u&gt;Working in a Release Branch&lt;/u&gt; 
&lt;p&gt;
Work in production should be limited to show stopping bugs. Changes should be merged
into Main once completed. The following list was taken from the branching guide. 
&lt;p&gt;
&amp;nbsp; 
&lt;p&gt;
Key features of working with Release Branches (taken from TFS Branching Guide) 
&lt;ul&gt;
&lt;li&gt;
Each RELEASE is a child branch of MAIN. 
&lt;li&gt;
Your major product releases from the RELEASE branch and then RELEASE branch access
permissions are set to read only. 
&lt;li&gt;
Changes from the RELEASE branch RI to main.&amp;nbsp; This merge is one way.&amp;nbsp; Once
the release branch is created MAIN may be taking changes for next version work not
approved for the release branch&amp;nbsp; 
&lt;li&gt;
Duplicate RELEASE branch plan for subsequent major releases. This means there will
be one branch per major release.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;Source Code Repository Directory Structure&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
WheelJack$ 
&lt;ul&gt;
&lt;li&gt;
DEV 
&lt;ul&gt;
&lt;li&gt;
1.0 (Version or Feature) 
&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Identical to Main&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
1.1 (Version or Feature) 
&lt;ul&gt;
&lt;li&gt;
Identical to Main&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
MAIN 
&lt;ul&gt;
&lt;li&gt;
Source 
&lt;ul&gt;
&lt;li&gt;
Project1 
&lt;li&gt;
Project1.Tests 
&lt;li&gt;
Project2 
&lt;li&gt;
Project2.Tests 
&lt;li&gt;
References&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
BuildTypes&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
Releases 
&lt;ul&gt;
&lt;li&gt;
Release 1.0 
&lt;ul&gt;
&lt;li&gt;
Identical to Main&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
Release 1.1 
&lt;ul&gt;
&lt;li&gt;
Identical to Main&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
Release 2.0 
&lt;ul&gt;
&lt;li&gt;
Identical to Main&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
Release 2.1 
&lt;ul&gt;
&lt;li&gt;
Identical to Main&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&amp;nbsp; 
&lt;p&gt;
Every branch from Main contains everything that is in the Main branch, including the
Source and BuildTypes folder (BuildTypes contain the Team Build files that define
a build). 
&lt;p&gt;
&amp;nbsp; 
&lt;p&gt;
I started out by creating a new folder on my hard drive that corresponds to the root
folder TFS (WheelJack$), and working my way down the hierarchy for Main, creating
Source and BuildTypes folders. My project contains a server piece and a client piece,
so starting with the server side, I created a folder named MessagingServer, and then
created 4 projects under that folder. I also created a _Solutions folder under WheelJack
which is where I store all of my Visual Studio Solution files (*.sln). The solution
files are not checked into source control. 
&lt;p&gt;
&amp;nbsp; 
&lt;p&gt;
Below you can see what my folder structure looks like in Windows Explorer, and in
Solution Explorer. 
&lt;/p&gt;
&lt;table border="0" cellspacing="0" cellpadding="2" width="800"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="400"&gt;
&lt;a href="http://blog.salvoz.com/content/binary/WindowsLiveWriter/StartinganewathomeprojectusingTeamFounda_FF8D/image_6.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blog.salvoz.com/content/binary/WindowsLiveWriter/StartinganewathomeprojectusingTeamFounda_FF8D/image_thumb_2.png" width="244" height="220"&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="400"&gt;
&lt;a href="http://blog.salvoz.com/content/binary/WindowsLiveWriter/StartinganewathomeprojectusingTeamFounda_FF8D/image_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blog.salvoz.com/content/binary/WindowsLiveWriter/StartinganewathomeprojectusingTeamFounda_FF8D/image_thumb_1.png" width="244" height="149"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
After cleaning up the project names, namespaces, and adding the correct project references,
I was able to begin looking at setting up the automated builds. I’ll pick up here
next time.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=584be101-cc82-4cb6-b79a-382cd616fd89" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,584be101-cc82-4cb6-b79a-382cd616fd89.aspx</comments>
      <category>Technology/Team Foundation Server</category>
      <category>Technology/WheelJack</category>
    </item>
  </channel>
</rss>