<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <title>All Articles | implements Elegance { // Elwyn Malethan's Blog</title>
  <link rel="alternate" type="application/html" href="http://www.malethan.com/all.html" />
  <link rel="self" type="application/atom+xml" href="http://www.malethan.com/all.xml" />
  <subtitle>Mostly technical articles involving (hopefully) elegant problem solving using Java and/or Ruby</subtitle>
  <updated>2010-03-08T21:59:51Z</updated>
  <dc:creator>Elwyn Malethan</dc:creator>
  <dc:date>2010-03-08T21:59:51Z</dc:date>
  <entry>
    <title>Snowed-on Snowdon</title>
    <link rel="alternate" type="text/html" href="http://www.malethan.com/article/snow_covered_snowdon.html" />
    <author>
      <name>Elwyn Malethan</name>
    </author>
    <updated>2010-03-08T21:59:51Z</updated>
    <published>2010-03-08T21:59:51Z</published>
    <summary type="html">&lt;p&gt;The view of Llanberis and Snowdon from Fachwen. March 2010.&lt;/p&gt;

	&lt;p class="clear"&gt;&lt;img src="/uploads/images/24/main_07032010.jpg" alt="The view of Llanberis and Snowdon from Fachwen. March 2010" /&gt;&lt;/p&gt;</summary>
    <dc:creator>Elwyn Malethan</dc:creator>
    <dc:date>2010-03-08T21:59:51Z</dc:date>
  </entry>
  <entry>
    <title>If the users aren't motivated to help with software development...</title>
    <link rel="alternate" type="text/html" href="http://www.malethan.com/article/if_the_users_arent_motivated_to_help_with_software.html" />
    <author>
      <name>Elwyn Malethan</name>
    </author>
    <updated>2010-02-24T15:19:09Z</updated>
    <published>2010-02-24T15:19:09Z</published>
    <summary type="html">&lt;blockquote&gt;&lt;a href="http://slott-softwarearchitect.blogspot.com/2009/12/problem-with-software-development-is.html" title=""&gt;If the users aren't motivated to help with software development by answering questions or reviewing the results of a sprint, then the software isn't creating any value. Stop work now and find something the users really want.&lt;/a&gt; &amp;#8212; Stephen Lott&lt;/blockquote&gt;

	&lt;p&gt;The number of times I&amp;#8216;ve wanted to do that! Some customers I&amp;#8216;ve worked with are really averse to engaging in the development process. However, it makes those customers that do eagerly engage in the process all the more a delight to work with. Guess which customers had most success with their projects&amp;#8230;&lt;/p&gt;</summary>
    <dc:creator>Elwyn Malethan</dc:creator>
    <dc:date>2010-02-24T15:19:09Z</dc:date>
  </entry>
  <entry>
    <title>JavaScript BDD framework in less than 200 lines</title>
    <link rel="alternate" type="text/html" href="http://www.malethan.com/article/javascript_bdd_framework_in_less_than_200_lines.html" />
    <author>
      <name>Elwyn Malethan</name>
    </author>
    <updated>2010-01-24T17:52:02Z</updated>
    <published>2010-01-24T17:52:02Z</published>
    <summary type="html">&lt;p&gt;I&amp;#8216;ve been doing a lot of work with JavaScript lately and so I&amp;#8216;ve been thinking a lot about how to effectively bring my experiences of &lt;acronym title="Behaviour Driven Development"&gt;BDD&lt;/acronym&gt; and &lt;acronym title="Test Driven Development"&gt;TDD&lt;/acronym&gt; in other technologies to the party. There are a few test frameworks available, &lt;a href="http://code.google.com/p/js-test-driver/" title=""&gt;JsTestDriver&lt;/a&gt; by far the better looking of the lot. There is a &lt;a href="http://visionmedia.github.com/jspec/" title=""&gt;specification framework&lt;/a&gt;, based on &lt;a href="http://rspec.info/" title=""&gt;rspec&lt;/a&gt; as well. However, I couldn't find a &lt;strong&gt;JavaScript BDD story framework&lt;/strong&gt; anywhere. So armed with some new knowledge from &lt;a href="http://www.amazon.co.uk/gp/product/0596517742?ie=UTF8&amp;#38;tag=implemelegan-21&amp;#38;linkCode=as2&amp;#38;camp=1634&amp;#38;creative=19450&amp;#38;creativeASIN=0596517742"&gt;JavaScript: The Good Parts&lt;/a&gt;&lt;img src="http://www.assoc-amazon.co.uk/e/ir?t=implemelegan-21&amp;#38;l=as2&amp;#38;o=2&amp;#38;a=0596517742" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;, I had a go at looking into what such a framework would look like. I was surprised as to how quickly I came up with a solution and how small the footprint of the end result is.&lt;/p&gt;

	&lt;p&gt;So here it is, in less than 200 lines, a &lt;strong&gt;JavaScript BDD Framework&lt;/strong&gt; I've called it &lt;a href="http://github.com/elmomalmo/BehaviourJS" title=""&gt;BehaviourJS&lt;/a&gt; and I've made it available under the &lt;em&gt;GNU Lesser General Public License.&lt;/em&gt;&lt;/p&gt;

&lt;div class="jhighlight"&gt;&lt;!-- Javasnippet : generated by JHighlight v1.0 (http://jhighlight.dev.java.net) --&gt;
&lt;span class="java_comment"&gt;//&amp;nbsp;------------------------------------------------------------&amp;nbsp;Function&amp;nbsp;augmentation&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_javadoc_comment"&gt;/**&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_javadoc_comment"&gt;&amp;nbsp;*&amp;nbsp;Standard&amp;nbsp;means&amp;nbsp;of&amp;nbsp;augmenting&amp;nbsp;everything&amp;nbsp;with&amp;nbsp;new&amp;nbsp;methods&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_javadoc_comment"&gt;&amp;nbsp;*&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_javadoc_comment"&gt;&amp;nbsp;*&amp;nbsp;&lt;/span&gt;&lt;span class="java_javadoc_tag"&gt;@param&lt;/span&gt;&lt;span class="java_javadoc_comment"&gt;&amp;nbsp;name&amp;nbsp;the&amp;nbsp;name&amp;nbsp;of&amp;nbsp;the&amp;nbsp;new&amp;nbsp;method&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_javadoc_comment"&gt;&amp;nbsp;*&amp;nbsp;&lt;/span&gt;&lt;span class="java_javadoc_tag"&gt;@param&lt;/span&gt;&lt;span class="java_javadoc_comment"&gt;&amp;nbsp;func&amp;nbsp;the&amp;nbsp;function&amp;nbsp;we&amp;nbsp;want&amp;nbsp;invoked&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_javadoc_comment"&gt;&amp;nbsp;*/&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_type"&gt;Object&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;prototype&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;method&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;function&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;name&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;func&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;if&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_operator"&gt;!&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;prototype&lt;/span&gt;&lt;span class="java_separator"&gt;[&lt;/span&gt;&lt;span class="java_plain"&gt;name&lt;/span&gt;&lt;span class="java_separator"&gt;])&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;prototype&lt;/span&gt;&lt;span class="java_separator"&gt;[&lt;/span&gt;&lt;span class="java_plain"&gt;name&lt;/span&gt;&lt;span class="java_separator"&gt;]&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;func&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;return&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_separator"&gt;};&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_comment"&gt;//&amp;nbsp;------------------------------------------------------------&amp;nbsp;Should&amp;nbsp;DSL&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;behaviourJs&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{};&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;_shouldBe&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;function&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;expected&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;if&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;expected&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;!==&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;null&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;exp&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;expected&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;valueOf&lt;/span&gt;&lt;span class="java_separator"&gt;();&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;self&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;valueOf&lt;/span&gt;&lt;span class="java_separator"&gt;();&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;if&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;self&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;===&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;exp&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_keyword"&gt;return&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;throw&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;name&lt;/span&gt;&lt;span class="java_operator"&gt;:&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;'AssertionError'&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;message&lt;/span&gt;&lt;span class="java_operator"&gt;:&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;'Expected&amp;nbsp;'&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;+&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;expected&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;+&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;'&amp;nbsp;but&amp;nbsp;was&amp;nbsp;'&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;+&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;};&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_separator"&gt;};&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_type"&gt;Object&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;method&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;'shouldBe'&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;_shouldBe&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_type"&gt;Object&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;method&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;'shouldEqual'&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;_shouldBe&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_type"&gt;Object&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;method&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;'shouldBeEqual'&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;_shouldBe&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_type"&gt;Object&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;method&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;'shouldBeEqualTo'&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;_shouldBe&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;_shouldNotBe&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;function&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;expected&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;if&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;expected&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;!==&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;null&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;exp&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;expected&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;valueOf&lt;/span&gt;&lt;span class="java_separator"&gt;();&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;self&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;valueOf&lt;/span&gt;&lt;span class="java_separator"&gt;();&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;if&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;self&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;!==&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;exp&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_keyword"&gt;return&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;throw&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;name&lt;/span&gt;&lt;span class="java_operator"&gt;:&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;'AssertionError'&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;message&lt;/span&gt;&lt;span class="java_operator"&gt;:&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;'Expected&amp;nbsp;not&amp;nbsp;to&amp;nbsp;be&amp;nbsp;'&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;+&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;expected&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;+&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;'&amp;nbsp;but&amp;nbsp;was&amp;nbsp;'&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;+&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;};&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_separator"&gt;};&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_type"&gt;Object&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;method&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;'shouldNotBe'&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;_shouldNotBe&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_type"&gt;Object&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;method&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;'shouldNotEqual'&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;_shouldNotBe&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_type"&gt;Object&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;method&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;'shouldntBe'&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;_shouldNotBe&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_type"&gt;Object&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;method&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;'shouldntEqual'&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;_shouldNotBe&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_comment"&gt;//&amp;nbsp;------------------------------------------------------------&amp;nbsp;StoryInstance&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;StoryInstance&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;function&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;block&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;block&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;call&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_separator"&gt;};&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;StoryInstance&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;prototype&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;visit&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;function&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;visitor&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;visitor&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;visitStory&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_separator"&gt;};&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;StoryInstance&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;prototype&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;run&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;function&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;visit&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_keyword"&gt;new&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;StoryRunner&lt;/span&gt;&lt;span class="java_separator"&gt;());&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_separator"&gt;};&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_comment"&gt;//&amp;nbsp;------------------------------------------------------------&amp;nbsp;ScenarioInstance&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_javadoc_comment"&gt;/**&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_javadoc_comment"&gt;&amp;nbsp;*&amp;nbsp;A&amp;nbsp;runnable&amp;nbsp;scenario.&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_javadoc_comment"&gt;&amp;nbsp;*&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_javadoc_comment"&gt;&amp;nbsp;*&amp;nbsp;&lt;/span&gt;&lt;span class="java_javadoc_tag"&gt;@param&lt;/span&gt;&lt;span class="java_javadoc_comment"&gt;&amp;nbsp;name&amp;nbsp;the&amp;nbsp;description&amp;nbsp;of&amp;nbsp;the&amp;nbsp;scenario&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_javadoc_comment"&gt;&amp;nbsp;*&amp;nbsp;&lt;/span&gt;&lt;span class="java_javadoc_tag"&gt;@param&lt;/span&gt;&lt;span class="java_javadoc_comment"&gt;&amp;nbsp;block&amp;nbsp;the&amp;nbsp;function&amp;nbsp;containing&amp;nbsp;the&amp;nbsp;contents&amp;nbsp;of&amp;nbsp;the&amp;nbsp;scenario&amp;nbsp;(usually&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_javadoc_comment"&gt;&amp;nbsp;*&amp;nbsp;a&amp;nbsp;series&amp;nbsp;of&amp;nbsp;Givens,When&amp;nbsp;and&amp;nbsp;Thens).&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_javadoc_comment"&gt;&amp;nbsp;*/&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;ScenarioInstance&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;function&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;name&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;block&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;name&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;name&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;_steps&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;[];&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;ScenarioInstance&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;__currentScenario&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;block&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;call&lt;/span&gt;&lt;span class="java_separator"&gt;();&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;ScenarioInstance&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;__currentScenario&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;null&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;ScenarioInstance&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;__currentPhase&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;null&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_separator"&gt;};&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;ScenarioInstance&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;__currentScenario&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;null&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;ScenarioInstance&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;__currentPhase&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;null&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;ScenarioInstance&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;prototype&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;addStep&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;function&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;step&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;_steps&lt;/span&gt;&lt;span class="java_separator"&gt;[&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;_steps&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;length&lt;/span&gt;&lt;span class="java_separator"&gt;]&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;step&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_separator"&gt;};&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;ScenarioInstance&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;prototype&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;visit&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;function&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;visitor&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;visitor&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;visitScenario&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_separator"&gt;};&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_comment"&gt;//&amp;nbsp;------------------------------------------------------------&amp;nbsp;Step&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;Step&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;function&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;type&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;meta&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;block&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;_type&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;type&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;_meta&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;meta&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;_block&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;block&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_separator"&gt;};&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;Step&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;prototype&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;visit&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;function&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;visitor&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;visitor&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;visitStep&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_separator"&gt;};&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_comment"&gt;//&amp;nbsp;------------------------------------------------------------&amp;nbsp;StoryRunner&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;StoryRunner&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;function&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;storyCtx&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{};&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_separator"&gt;};&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;StoryRunner&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;prototype&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;visitStory&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;function&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;story&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;title&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;'Story:&amp;nbsp;'&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;+&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;story&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;description&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;writeln&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;title&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;line&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;''&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;for&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;var&amp;nbsp;i&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;0&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;i&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;&amp;lt;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;title&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;length&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;++&lt;/span&gt;&lt;span class="java_plain"&gt;i&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;line&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;+=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;'='&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;writeln&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;line&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;for&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;var&amp;nbsp;scenIndex&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;0&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;scenIndex&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;&amp;lt;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;story&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;scenarios&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;length&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;++&lt;/span&gt;&lt;span class="java_plain"&gt;scenIndex&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;story&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;scenarios&lt;/span&gt;&lt;span class="java_separator"&gt;[&lt;/span&gt;&lt;span class="java_plain"&gt;scenIndex&lt;/span&gt;&lt;span class="java_separator"&gt;].&lt;/span&gt;&lt;span class="java_plain"&gt;visit&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_separator"&gt;};&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;StoryRunner&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;prototype&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;visitScenario&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;function&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;scenario&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;writeln&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;'Scenario:&amp;nbsp;'&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;+&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;scenario&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;name&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;for&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;var&amp;nbsp;stepIndex&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;0&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;stepIndex&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;&amp;lt;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;scenario&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;_steps&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;length&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;++&lt;/span&gt;&lt;span class="java_plain"&gt;stepIndex&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;step&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;scenario&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;_steps&lt;/span&gt;&lt;span class="java_separator"&gt;[&lt;/span&gt;&lt;span class="java_plain"&gt;stepIndex&lt;/span&gt;&lt;span class="java_separator"&gt;];&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;step&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;visit&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;write&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;\n&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_separator"&gt;};&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;StoryRunner&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;prototype&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;visitStep&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;function&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;step&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;stepDesc&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;step&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;_type&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;toUpperCase&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;+&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;'&amp;nbsp;'&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;+&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;step&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;_meta&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;if&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;step&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;_block&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;===&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;undefined&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;||&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;step&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;_block&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;===&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;null&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;if&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;step&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;_type&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;===&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;'then'&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;stepDesc&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;+=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;'&amp;nbsp;[PENDING]'&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;else&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;try&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;step&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;_block&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;call&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;storyCtx&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;catch&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;e&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_keyword"&gt;if&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;e&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;name&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;==&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;'AssertionError'&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;stepDesc&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;+=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;'&amp;nbsp;[FAIL&amp;nbsp;:&amp;nbsp;'&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;+&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;e&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;message&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;+&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;']'&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;else&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;stepDesc&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;+=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;'&amp;nbsp;[ERROR&amp;nbsp;('&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;+&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;e&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;name&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;+&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;')&amp;nbsp;:&amp;nbsp;'&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;+&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;e&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;message&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;+&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;']'&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;writeln&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;stepDesc&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_separator"&gt;};&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_comment"&gt;//&amp;nbsp;------------------------------------------------------------&amp;nbsp;DSL&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_type"&gt;Story&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;function&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;block&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;return&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;new&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;StoryInstance&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;block&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_separator"&gt;};&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_type"&gt;Scenario&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;function&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;name&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;block&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;return&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;new&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;ScenarioInstance&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;name&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;block&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_separator"&gt;};&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_type"&gt;Given&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;function&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;desc&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;block&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;scenario&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;ScenarioInstance&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;__currentScenario&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;ScenarioInstance&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;__currentPhase&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;'given'&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;scenario&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;addStep&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_keyword"&gt;new&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;Step&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;ScenarioInstance&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;__currentPhase&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;desc&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;block&lt;/span&gt;&lt;span class="java_separator"&gt;));&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_separator"&gt;};&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_type"&gt;When&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;function&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;desc&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;block&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;scenario&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;ScenarioInstance&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;__currentScenario&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;ScenarioInstance&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;__currentPhase&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;'when'&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;scenario&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;addStep&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_keyword"&gt;new&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;Step&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;ScenarioInstance&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;__currentPhase&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;desc&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;block&lt;/span&gt;&lt;span class="java_separator"&gt;));&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_separator"&gt;};&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_type"&gt;Then&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;function&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;desc&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;block&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;scenario&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;ScenarioInstance&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;__currentScenario&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;ScenarioInstance&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;__currentPhase&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;'then'&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;scenario&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;addStep&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_keyword"&gt;new&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;Step&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;ScenarioInstance&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;__currentPhase&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;desc&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;block&lt;/span&gt;&lt;span class="java_separator"&gt;));&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_separator"&gt;};&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_type"&gt;And&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;function&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;desc&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;block&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;scenario&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;ScenarioInstance&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;__currentScenario&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;scenario&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;addStep&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_keyword"&gt;new&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;Step&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;behaviourJs&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;ScenarioInstance&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;__currentPhase&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;desc&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;block&lt;/span&gt;&lt;span class="java_separator"&gt;));&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_separator"&gt;};&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;

	&lt;p&gt;My approach is heavily influenced by my experiences of using &lt;a href="http://www.easyb.org/" title=""&gt;Easyb&lt;/a&gt; for &lt;span class="caps"&gt;BDD&lt;/span&gt; for Java. There are a few things I haven&amp;#8216;t added, such as before and after hooks.&lt;/p&gt;

	&lt;p&gt;Stacktrace support in JavaScript is sketchy and differs greatly across runtimes/browsers. One solution might be to integrate &lt;a href="http://eriwen.com/javascript/js-stack-trace/" title=""&gt;this attempt at universally obtaining a stacktrace&lt;/a&gt;. The &lt;em&gt;should&lt;/em&gt; DSL is not as comprehensive as Easyb. Unlike Easyb the should DSL in &lt;strong&gt;BehaviourJS&lt;/strong&gt; is completely extensible. This is possible because of the nature of the JavaScript langauge.&lt;/p&gt;

	&lt;p&gt;I mentioned runtimes/browsers earlier. The other potential issue is that I have only tested this in Firefox. It&amp;#8216;s the product of a couple of hours hacking so it&amp;#8216;ll be no surprise if it fails in other browsers.&lt;/p&gt;

	&lt;h2&gt;Runners, build system and &lt;span class="caps"&gt;IDE&lt;/span&gt; support.&lt;/h2&gt;

	&lt;p&gt;I realise that just implementing such a framework isn&amp;#8216;t even half of the effort required for a test framework to enable developers to practice &lt;span class="caps"&gt;TDD&lt;/span&gt; or &lt;span class="caps"&gt;BDD&lt;/span&gt;. For this framework to be useful to me or anyone else, it will need &lt;span class="caps"&gt;IDE&lt;/span&gt; support (IDEA and Eclipse at least) and build system support (Maven and maybe Ant).&lt;/p&gt;

	&lt;p&gt;The existing JavaScript test frameworks have had a lot of work put into this area and it shows. Especially with JsTestDriver&amp;#8216;s &lt;span class="caps"&gt;IDE&lt;/span&gt; support, which is awesome.&lt;/p&gt;

	&lt;p&gt;Maybe next weekend I&amp;#8216;ll have a look at plugin this into an existing test framework, such as JsTestDriver.&lt;/p&gt;

	&lt;h2&gt;Example story&lt;/h2&gt;

	&lt;p&gt;A story using the above framework might look something like this.&lt;/p&gt;

&lt;div class="jhighlight"&gt;&lt;!-- javasnippet : generated by JHighlight v1.0 (http://jhighlight.dev.java.net) --&gt;
&lt;span class="java_type"&gt;Story&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;function&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;description&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;This&amp;nbsp;is&amp;nbsp;an&amp;nbsp;example&amp;nbsp;story&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;summary&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;as_a&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;:&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;role&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;i_want&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;:&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;to&amp;nbsp;perform&amp;nbsp;some&amp;nbsp;action&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;so_that&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;:&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;there&amp;nbsp;is&amp;nbsp;some&amp;nbsp;perceived&amp;nbsp;benefit&amp;quot;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;};&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;scenarios&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;[&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Scenario&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;Some&amp;nbsp;scenario&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;function&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_type"&gt;Given&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;some&amp;nbsp;string&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;function&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;someString&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;'this'&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_separator"&gt;});&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_type"&gt;And&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;some&amp;nbsp;number&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;function&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;ten&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;10&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_separator"&gt;});&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_type"&gt;When&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;something&amp;nbsp;happens&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_type"&gt;Then&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;some&amp;nbsp;condition&amp;nbsp;is&amp;nbsp;evaluated&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;function&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;someString&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;shouldNotBe&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;null&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;someString&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;shouldNotBe&lt;/span&gt;&lt;span class="java_separator"&gt;({});&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;someString&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;shouldNotBe&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;123&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;someString&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;shouldNotBe&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;'that'&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;someString&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;shouldBe&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;someString&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;someString&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;shouldBe&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;'this'&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_separator"&gt;});&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_type"&gt;And&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;some&amp;nbsp;other&amp;nbsp;condition&amp;nbsp;is&amp;nbsp;evaluated&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;function&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;ten&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;shouldBe&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;10&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_separator"&gt;});&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}),&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Scenario&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;Checking&amp;nbsp;incorect&amp;nbsp;values&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;function&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_type"&gt;Given&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;some&amp;nbsp;new&amp;nbsp;precondition&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_type"&gt;And&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;some&amp;nbsp;other&amp;nbsp;new&amp;nbsp;precondition&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_type"&gt;When&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;something&amp;nbsp;new&amp;nbsp;happens&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;function&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;animal&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;'animal'&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_separator"&gt;});&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_type"&gt;Then&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;some&amp;nbsp;new&amp;nbsp;condition&amp;nbsp;is&amp;nbsp;evaluated&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;function&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_keyword"&gt;try&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;thisVar&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;doesNotExist&lt;/span&gt;&lt;span class="java_separator"&gt;();&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;catch&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;e&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_comment"&gt;//&amp;nbsp;gulp&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_separator"&gt;});&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_type"&gt;And&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;some&amp;nbsp;other&amp;nbsp;new&amp;nbsp;condition&amp;nbsp;is&amp;nbsp;evaluated&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;function&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_keyword"&gt;try&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;animal&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;shouldBe&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;'farm'&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;catch&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;e&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;e&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;name&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;shouldBe&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;'AssertionError'&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_separator"&gt;});&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}),&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Scenario&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;'some&amp;nbsp;complex&amp;nbsp;objects'&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;function&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_type"&gt;Given&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;'&amp;nbsp;a&amp;nbsp;complex&amp;nbsp;object'&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;function&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;MyThing&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;function&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;val&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;_val&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;val&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_separator"&gt;};&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;someObj&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;new&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;MyThing&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;'a&amp;nbsp;value'&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_separator"&gt;});&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_type"&gt;And&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;'a&amp;nbsp;copy&amp;nbsp;of&amp;nbsp;it'&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;function&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;sameObj&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;someObj&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_separator"&gt;});&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_type"&gt;And&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;'a&amp;nbsp;different&amp;nbsp;object'&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;function&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;differentObj&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;new&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;MyThing&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;'a&amp;nbsp;value'&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_separator"&gt;});&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_type"&gt;Then&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;'the&amp;nbsp;object&amp;nbsp;and&amp;nbsp;the&amp;nbsp;copy&amp;nbsp;should&amp;nbsp;be&amp;nbsp;the&amp;nbsp;equal'&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;function&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;someObj&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;shouldBe&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;sameObj&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;sameObj&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;shouldBe&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;someObj&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_separator"&gt;});&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_type"&gt;And&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;'the&amp;nbsp;object&amp;nbsp;and&amp;nbsp;the&amp;nbsp;different&amp;nbsp;one&amp;nbsp;should&amp;nbsp;not'&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;function&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;someObj&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;shouldNotBe&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;differentObj&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;differentObj&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;shouldNotBe&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;someObj&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_separator"&gt;});&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;})&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;];&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_separator"&gt;}).&lt;/span&gt;&lt;span class="java_plain"&gt;run&lt;/span&gt;&lt;span class="java_separator"&gt;();&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;

	&lt;p&gt;&lt;em&gt;The link to &lt;a href="http://www.amazon.co.uk/gp/product/0596517742?ie=UTF8&amp;#38;tag=implemelegan-21&amp;#38;linkCode=as2&amp;#38;camp=1634&amp;#38;creative=19450&amp;#38;creativeASIN=0596517742"&gt;JavaScript: The Good Parts&lt;/a&gt;&lt;img src="http://www.assoc-amazon.co.uk/e/ir?t=implemelegan-21&amp;#38;l=as2&amp;#38;o=2&amp;#38;a=0596517742" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt; above is an affiliate link. It's a great book, written by a programmer for programmers.&lt;/em&gt;&lt;/p&gt;</summary>
    <dc:creator>Elwyn Malethan</dc:creator>
    <dc:date>2010-01-24T17:52:02Z</dc:date>
  </entry>
  <entry>
    <title>GP Practice Design looks familiar</title>
    <link rel="alternate" type="text/html" href="http://www.malethan.com/article/gp_practice_design_looks_familiar.html" />
    <author>
      <name>Elwyn Malethan</name>
    </author>
    <updated>2010-01-11T18:41:40Z</updated>
    <published>2010-01-11T18:41:40Z</published>
    <summary type="html">&lt;p&gt;&lt;a href="http://www.gppracticedesign.com/" title=""&gt;This&lt;/a&gt; ...&lt;/p&gt;

	&lt;p class="clear"&gt;&lt;img src="/uploads/images/22/main_gp_practice_design.jpg" alt="GP Practice Design - a complete plagiarism of Beanlogic's website?" /&gt;&lt;/p&gt;

	&lt;p&gt;... looks an awful lot like &lt;a href="http://www.beanlogic.co.uk/" title=""&gt;this&lt;/a&gt;...&lt;/p&gt;

	&lt;p class="clear"&gt;&lt;img src="/uploads/images/23/main_beanlogic_screenshot.jpg" alt="Beanlogic screenshot" /&gt;&lt;/p&gt;

	&lt;p&gt;... wouldn&amp;#8216;t you say?&lt;/p&gt;

	&lt;p&gt;Is this &lt;a href="http://www.google.co.uk/search?q=define%3Aplagiarism" title=""&gt;plagiarism&lt;/a&gt;? Decide for yourself?&lt;/p&gt;</summary>
    <dc:creator>Elwyn Malethan</dc:creator>
    <dc:date>2010-01-11T18:41:40Z</dc:date>
  </entry>
  <entry>
    <title>Why TDD: Freedom to refactor</title>
    <link rel="alternate" type="text/html" href="http://www.malethan.com/article/why_tdd_freedom_to_refactor.html" />
    <author>
      <name>Elwyn Malethan</name>
    </author>
    <updated>2010-01-10T12:08:18Z</updated>
    <published>2010-01-10T12:08:18Z</published>
    <summary type="html">&lt;p&gt;Dave and Jen work for software companies that produce exciting and clever software products. Both Dave and Jen understand &lt;a href="http://www.amazon.co.uk/gp/product/0201633612?ie=UTF8&amp;#38;tag=implemelegan-21&amp;#38;linkCode=as2&amp;#38;camp=1634&amp;#38;creative=19450&amp;#38;creativeASIN=0201633612" title=""&gt;design patterns&lt;/a&gt;. They both know about encapsulation, inheritance, composition and all that jazz. They&amp;#8216;re both good software developers. The only difference is that Jen has taught herself to develop test-driven. Dave thinks his time is better spent writing production code.&lt;/p&gt;

	&lt;p&gt;Dave and Jen started their current project at the same time. Dave spent some time up&amp;ndash;front to carefully design his architecture to the requirements and implemented all the features. Dave added some unit tests, but only as an afterthought. Dave is confident that his architecture is well suited to providing a maintainable solution to the requirements specified. Dave is OK with the fact he has less than 25% test coverage.&lt;/p&gt;

	&lt;p&gt;Jen used &lt;acronym title="Test Driven Development"&gt;TDD&lt;/acronym&gt;, she started off by adding some tests to represent some of the requirements and implementing production code to pass those tests. She did this iteratively and in small digestible chunks until she had satisfied all of the requirements. Jen changed the architecture of the project frequently. She refactored as she went, renaming classes and methods so that they better represented their function, moving code and responsibilities between classes to continually improve the design of the software. She did this safe in the knowledge that her tests would pick up any errors introduced. Jen builds up test coverage of over 80%.&lt;/p&gt;

	&lt;p&gt;As always happens in a software project, the requirements change. In Dave&amp;#8216;s case, management decided that &amp;ndash; for political reasons &amp;ndash; Dave needed to completely change the way his product worked. Jen&amp;#8216;s customer&amp;#8216;s priorities changed. To stay competitive, they needed to have different features. In both cases &amp;ndash; as ever &amp;ndash; time was short and deadlines were tight.&lt;/p&gt;

	&lt;p&gt;Both Jen and Dave found that their existing design wasn&amp;#8216;t really suited to the new requirements. Dave was concerned about the deadline and the time it would take to evaluate the correctness of any change he made in the design of the software. He has no timely or repeatable means of doing this. So Dave added the feature without changing the design. He knew it wasn&amp;#8216;t ideal and that the he would need to change the architecture at some point in the future. Given the time constraints, Dave believed he was being pragmatic.&lt;/p&gt;

	&lt;p&gt;Jen &amp;ndash; on the other hand &amp;ndash; had been refactoring the code extensively throughout the development of the project. Jen recognises an alternative design that would elegantly accommodate this new requirement and refactors. She runs the tests to see if she broke something. A few of them fail. So she fixes them and runs the tests again, safe in the knowledge that her tests represent the requirements.&lt;/p&gt;

	&lt;p&gt;Over the next few years a number of new features are requested by both Dave&amp;#8216;s and Jen&amp;#8216;s customer(s). Each time, Dave opts for the change that least affects the existing code-base. Each time Dave&amp;#8216; project becomes more like a &lt;a href="http://www.laputan.org/mud/mud.html#BigBallOfMud" title=""&gt;ball of mud&lt;/a&gt;. Dave becomes more and more resistant to new features. He started asking management for some &amp;#8220;engineering time&amp;#8220; to refactor the code and have the time to evaluate it&amp;#8216;s correctness. This &amp;ndash; he knew &amp;ndash; would take some time.&lt;/p&gt;

	&lt;p&gt;In the same time, Jen&amp;#8216;s team have been doing nothing but implementing new features. The design of the software has changed frequently in that time. She doesn&amp;#8216;t need any &amp;#8220;engineering time&amp;#8221;, her tests evaluate the correctness of every feature she adds.&lt;/p&gt;

	&lt;p&gt;Dave has become scared of changing the code, he doesn&amp;#8216;t know what he might break.&lt;/p&gt;

	&lt;p&gt;Jen breaks the code every day. She&amp;#8216;ll know in seconds what she&amp;#8216;s broken and what she needs to do to fix it.&lt;/p&gt;

	&lt;p&gt;&lt;em&gt;The &lt;a href="http://www.amazon.co.uk/gp/product/0201633612?ie=UTF8&amp;#38;tag=implemelegan-21&amp;#38;linkCode=as2&amp;#38;camp=1634&amp;#38;creative=19450&amp;#38;creativeASIN=0201633612" title=""&gt;design patterns&lt;/a&gt; link above is an affiliate link. Any and every software developer should have a well&amp;ndash;thumbed copy of this book.&lt;/em&gt;&lt;/p&gt;</summary>
    <dc:creator>Elwyn Malethan</dc:creator>
    <dc:date>2010-01-10T12:08:18Z</dc:date>
  </entry>
  <entry>
    <title>TDD in JavaScript intensive software</title>
    <link rel="alternate" type="text/html" href="http://www.malethan.com/article/tdd_in_javascript_intensive_software.html" />
    <author>
      <name>Elwyn Malethan</name>
    </author>
    <updated>2010-01-05T18:15:18Z</updated>
    <published>2010-01-05T18:15:18Z</published>
    <summary type="html">&lt;p&gt;I recently switched jobs. I left &lt;a href="http://www.smartstream-stp.com/" title=""&gt;Smartstream&lt;/a&gt; for somewhere closer to home. I did this primarily to avoid the commute from Cardiff to Aztec West, in Bristol. I'll be glad to avoid that drive on the M4 every day. I joined &lt;a href="http://www.movenetworks.com/" title=""&gt;Move&lt;/a&gt;, who are based in Utah but have a development office not too far from Cardiff.&lt;/p&gt;

	&lt;p&gt;Having been working in the familiar world of server&amp;ndash;side Java before Christmas, I&amp;#8216;ve now moved to the team that work on what we call the &amp;#8220;middleware&amp;#8221;. Primarily, this is the client software that runs on set&amp;ndash;top boxes or web browsers. This is therefore almost entirely JavaScript.&lt;/p&gt;

	&lt;p&gt;Developing software that is primarily JavaScript is a new experience for me and one I&amp;#8216;m relishing, if with some trepidation. After a bit of Googling, I&amp;#8216;ve basically concluded that there isn&amp;#8216;t vast support for &lt;acronym title="Test Driven Development"&gt;TDD&lt;/acronym&gt; for JavaScript development. This is especially true of &lt;acronym title="Integrated Development Environment"&gt;IDE&lt;/acronym&gt; support. One thing that does look promising is &lt;a href="http://code.google.com/p/js-test-driver/" title=""&gt;JsTestDriver&lt;/a&gt;, though I&amp;#8216;ve been having trouble getting it to work reliably. This is most likely lack of familiarity with both JavaScript and JsTestDriver.&lt;/p&gt;

	&lt;p&gt;This is challenging stuff, but that&amp;#8216;s great as far as I&amp;#8216;m concerned.&lt;/p&gt;</summary>
    <dc:creator>Elwyn Malethan</dc:creator>
    <dc:date>2010-01-05T18:15:18Z</dc:date>
  </entry>
  <entry>
    <title>The web needs better/more job titles</title>
    <link rel="alternate" type="text/html" href="http://www.malethan.com/article/the_web_needs_better_more_job_titles.html" />
    <author>
      <name>Elwyn Malethan</name>
    </author>
    <updated>2009-12-22T18:20:27Z</updated>
    <published>2009-12-22T18:20:27Z</published>
    <summary type="html">&lt;p&gt;I&amp;#8216;ve just seen &lt;strong&gt;another&lt;/strong&gt; job spec posted on line for a web developer job. It is supposedly for a &lt;strong&gt;developer&lt;/strong&gt;, and yet in this advert they cite knowledge of &lt;span class="caps"&gt;PHP&lt;/span&gt; or MySQL as only being desirable, rather than required. The only required skills they do refer to are &lt;span class="caps"&gt;HTML&lt;/span&gt; and &lt;span class="caps"&gt;CSS&lt;/span&gt;.&lt;/p&gt;

	&lt;p&gt;Frankly, I think that assigning the title of developer to such a narrow role sells the profession of software development and the role of &lt;strong&gt;developer&lt;/strong&gt; short by a country mile. The word developer is used to cover far too many roles. The term &lt;em&gt;web developer&lt;/em&gt; is itself overloaded.&lt;/p&gt;

	&lt;p&gt;Let&amp;#8216;s look at the definition of a &lt;em&gt;web developer&lt;/em&gt; from Wikipedia.&lt;/p&gt;

	&lt;blockquote&gt;A web developer is a software developer or software engineer who is specifically engaged in the development of World Wide Web applications, or distributed network applications that are run over the &lt;span class="caps"&gt;HTTP&lt;/span&gt; from a web server to a web browser.&lt;/blockquote&gt;

	&lt;p&gt;Let&amp;#8216;s look a little closer at what this says, &amp;#8221;a &lt;strong&gt;software developer&lt;/strong&gt; or software engineer&amp;#8221;. Ok, so a web developer is a software developer?&lt;/p&gt;

	&lt;blockquote&gt;A software developer is a person or organization concerned with facets of the software development process wider than design and coding, a somewhat broader scope of computer programming or a specialty of project managing including some aspects of software product management.&lt;/blockquote&gt;

	&lt;p&gt;Hmm&amp;#8230; so a software developer is a big picture, multi-skilled kinda guy with a role or skills in multiple areas of the software development process. That doesn&amp;#8216;t sound like someone who&amp;#8216;ll just be interested in &lt;span class="caps"&gt;HTML&lt;/span&gt; and &lt;span class="caps"&gt;CSS&lt;/span&gt;, however challenging it is.&lt;/p&gt;

	&lt;h2&gt;The age old &lt;em&gt;building&amp;ndash;a&amp;ndash;house&lt;/em&gt; analogy&lt;/h2&gt;

	&lt;p&gt;Would you call a plasterer an architect? Even if he was really, really good at plastering? Even if he was an absolute wizard plasterer, the best there was?&lt;/p&gt;

	&lt;p&gt;The answer is no, you wouldn&amp;#8216;t. You&amp;#8216;d give the plasterer due respect and full credit for the achievements in his profession. You may even be able to afford to hire him to plaster your house for you. You wouldn&amp;#8216;t dream of asking him to design it for you.&lt;/p&gt;

	&lt;p&gt;Similarly for all those &lt;span class="caps"&gt;HTML&lt;/span&gt;/CSS experts out there. Some of them are very, very good at what they do. Give them respect and due credit. Give them a job building your next site. Call them &lt;strong&gt;web builders&lt;/strong&gt; or even &lt;strong&gt;page engineers&lt;/strong&gt;. But don't call them &lt;strong&gt;developers.&lt;/strong&gt;&lt;/p&gt;</summary>
    <dc:creator>Elwyn Malethan</dc:creator>
    <dc:date>2009-12-22T18:20:27Z</dc:date>
  </entry>
  <entry>
    <title>How to catch GWT HorizontalSplitPanel double click event</title>
    <link rel="alternate" type="text/html" href="http://www.malethan.com/article/gwt_horizontalsplitpanel_double_click.html" />
    <author>
      <name>Elwyn Malethan</name>
    </author>
    <updated>2009-11-30T21:20:26Z</updated>
    <published>2009-11-30T21:20:26Z</published>
    <summary type="html">&lt;p&gt;I was using &lt;a href="http://code.google.com/webtoolkit/" title=""&gt;GWT&lt;/a&gt;'s &lt;a href="http://google-web-toolkit.googlecode.com/svn/javadoc/1.6/com/google/gwt/user/client/ui/HorizontalSplitPanel.html" title=""&gt;HorizontalSplitPanel&lt;/a&gt;. The thing is that it was a &lt;em&gt;quite good solution&lt;/em&gt; but not everything I wanted. GWT standard widget&amp;ndash;set is known for being on the Spartan side. I have no complaint about this, it is just a fact. The added behaviour I was after is the ability to double-click the splitter in order to toggle a fully collapsed or restored state. &lt;a href="http://stackoverflow.com/questions/1144059/how-to-catch-gwt-horizontalsplitpanel-double-click-event" title=""&gt;I'm not the only one, it seems&lt;/a&gt;.&lt;/p&gt;

	&lt;p&gt;This was not as straight&amp;ndash;forward to achieve as I thought it would be. This is an account of the dead-end strategies I followed in trying to achieve this and the solution I settled on.&lt;/p&gt;

	&lt;h2&gt;Inheritance strategy&lt;/h2&gt;

	&lt;p&gt;My first (possibly lazy) approach was to use an inheritance strategy to extend HorizontalSplitPanel. Anyone whose familiar with the &lt;span class="caps"&gt;GWT&lt;/span&gt; standard widget set will know that this approach is a non&amp;ndash;starter, since &lt;strong&gt;HorizontalSplitPanel&lt;/strong&gt; is final so it can't be extended and &amp;mdash; one step further up the class hierarchy &amp;mdash; &lt;strong&gt;SplitPanel&lt;/strong&gt;  has package-local access so that can&amp;#8216;t be extended either (not in a class outside the same package in any event).&lt;/p&gt;

	&lt;p&gt;So of course, I put my best&amp;ndash;practice hat back on to try and solve the problem properly.&lt;/p&gt;

	&lt;h2&gt;Composition&lt;/h2&gt;

	&lt;p&gt;So I used a &lt;a href="http://google-web-toolkit.googlecode.com/svn/javadoc/1.6/com/google/gwt/user/client/ui/SimplePanel.html" title=""&gt;SimplePanel&lt;/a&gt; as the base class for my widget as follows.&lt;/p&gt;

&lt;div class="jhighlight"&gt;&lt;!-- javasnippet : generated by JHighlight v1.0 (http://jhighlight.dev.java.net) --&gt;
&lt;span class="java_keyword"&gt;public&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;class&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;ElegantHorizSplitPanel&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;extends&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;SimplePanel&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;private&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;String&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;presetPosition&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;private&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;HorizontalSplitPanel&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;splitPanel&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;public&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;ElegantHorizSplitPanel&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;splitPanel&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;new&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;HorizontalSplitPanel&lt;/span&gt;&lt;span class="java_separator"&gt;();&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;add&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;splitPanel&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setSplitPosition&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;30%&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;public&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;void&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;setLeftWidget&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_type"&gt;Widget&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;widget&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;splitPanel&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;setLeftWidget&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;widget&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;public&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;void&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;setRightWidget&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_type"&gt;Widget&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;widget&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;splitPanel&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;setRightWidget&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;widget&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;public&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;void&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;setSplitPosition&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_type"&gt;String&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;position&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;presetPosition&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;position&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;splitPanel&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;setSplitPosition&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;position&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;

	&lt;p&gt;This implementation does not support all the functionality provided by &lt;strong&gt;HorizontalSplitPanel&lt;/strong&gt; &amp;mdash; in fact it does nothing more than delegate what little functionality it does support directly to &lt;strong&gt;HorizontalSplitPanel&lt;/strong&gt;. However, it provides enough detail to demonstrate the technique. The methods providing all the other functionality could be added fairly easily.&lt;/p&gt;

	&lt;p&gt;So now on to adding double-lick behaviour. To do this I needed to get a reference to the the splitter &lt;span class="caps"&gt;DOM&lt;/span&gt; element. Unfortunately &amp;mdash; but probably for good reasons &amp;mdash; the getter for this element is protected in &lt;strong&gt;HorizontalSplitPanel&lt;/strong&gt; . So, this means we have to cheat a little. &lt;span class="caps"&gt;GWT&lt;/span&gt; exposes some of the &lt;span class="caps"&gt;DOM&lt;/span&gt; traversal JavaScript methods in the Widget &lt;span class="caps"&gt;API&lt;/span&gt;, so provided I could get hold of an element in splitter&amp;#8216;s ancestry somewhere there was hope.&lt;/p&gt;

	&lt;p&gt;I used Firebug to find out what &lt;span class="caps"&gt;HTML&lt;/span&gt; was generated by my new widget and found the following.&lt;/p&gt;

	&lt;p class="clear"&gt;&lt;img src="/uploads/images/21/main_elegant-split-panel-003.png" alt="Illustration of the splitter DOM-element using Firebug" /&gt;&lt;/p&gt;

	&lt;p&gt;So in order to get a reference to the splitter element I need the element returned by:&lt;/p&gt;

&lt;div class="jhighlight"&gt;&lt;!-- javasnippet : generated by JHighlight v1.0 (http://jhighlight.dev.java.net) --&gt;
&lt;span class="java_keyword"&gt;this&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;getElement&lt;/span&gt;&lt;span class="java_separator"&gt;().&lt;/span&gt;&lt;span class="java_plain"&gt;getFirstChildElement&lt;/span&gt;&lt;span class="java_separator"&gt;().&lt;/span&gt;&lt;span class="java_plain"&gt;getFirstChildElement&lt;/span&gt;&lt;span class="java_separator"&gt;().&lt;/span&gt;&lt;span class="java_plain"&gt;getFirstChildElement&lt;/span&gt;&lt;span class="java_separator"&gt;().&lt;/span&gt;&lt;span class="java_plain"&gt;getNextSiblingElement&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;

	&lt;p&gt;But that &amp;ndash; as we all know &amp;ndash; is a what &lt;a href="http://twitter.com/unclebobmartin" title=""&gt;@unclebobmartin&lt;/a&gt; (and others) describes as a &lt;em&gt;train wreck,&lt;/em&gt; so I added the following methods to &lt;strong&gt;ElegantHorizSplitPanel&lt;/strong&gt;&lt;/p&gt;

&lt;div class="jhighlight"&gt;&lt;!-- javasnippet : generated by JHighlight v1.0 (http://jhighlight.dev.java.net) --&gt;
&lt;span class="java_keyword"&gt;public&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;class&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;ElegantHorizSplitPanel&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;extends&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;SimplePanel&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_comment"&gt;//&amp;nbsp;...&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;private&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Element&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;getSplitterElement&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;return&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;getLeftElement&lt;/span&gt;&lt;span class="java_separator"&gt;().&lt;/span&gt;&lt;span class="java_plain"&gt;getNextSiblingElement&lt;/span&gt;&lt;span class="java_separator"&gt;();&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;private&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Element&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;getLeftElement&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;return&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;getSplitPanelInnerElement&lt;/span&gt;&lt;span class="java_separator"&gt;().&lt;/span&gt;&lt;span class="java_plain"&gt;getFirstChildElement&lt;/span&gt;&lt;span class="java_separator"&gt;();&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;private&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Element&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;getSplitPanelInnerElement&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;return&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;getSplitPanelOuterElement&lt;/span&gt;&lt;span class="java_separator"&gt;().&lt;/span&gt;&lt;span class="java_plain"&gt;getFirstChildElement&lt;/span&gt;&lt;span class="java_separator"&gt;();&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;private&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Element&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;getSplitPanelOuterElement&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;return&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;getElement&lt;/span&gt;&lt;span class="java_separator"&gt;().&lt;/span&gt;&lt;span class="java_plain"&gt;getFirstChildElement&lt;/span&gt;&lt;span class="java_separator"&gt;();&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_comment"&gt;//&amp;nbsp;...&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;

	&lt;p&gt;&lt;strong&gt;Caveat: I checked IE HTML as well and it uses more or less the same HTML, though I suppose it's possible that compiling for different user agents could result in different HTML. I could probably add some test coverage for this using &lt;a href="http://raibledesigns.com/rd/entry/testing_gwt_libraries_with_selenium" title=""&gt;Matt Raible's guide to testing GWT libraries with Selenium&lt;/a&gt;, something to look into in future.&lt;/strong&gt;&lt;/p&gt;

	&lt;h2&gt;Adding double-click behaviour&lt;/h2&gt;

	&lt;p&gt;I&amp;#8216;m more familiar with JavaScript and the &lt;span class="caps"&gt;DOM&lt;/span&gt; than I am &lt;span class="caps"&gt;GWT&lt;/span&gt; so my first approach to adding the behaviour was add native JavaScript code to attach the behaviour to the splitter element.&lt;/p&gt;

&lt;div class="jhighlight"&gt;&lt;!-- javasnippet : generated by JHighlight v1.0 (http://jhighlight.dev.java.net) --&gt;
&lt;span class="java_keyword"&gt;public&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;class&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;ElegantHorizSplitPanel&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;extends&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;SimplePanel&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_comment"&gt;//&amp;nbsp;...&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;private&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;void&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;toggleLeftPanel&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;int&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;leftWidth&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;getLeftElement&lt;/span&gt;&lt;span class="java_separator"&gt;().&lt;/span&gt;&lt;span class="java_plain"&gt;getClientWidth&lt;/span&gt;&lt;span class="java_separator"&gt;();&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;if&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;leftWidth&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;==&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;0&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;splitPanel&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;setSplitPosition&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;presetPosition&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;else&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;splitPanel&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;setSplitPosition&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;0px&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;private&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;native&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;void&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;addBehaviour&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_type"&gt;Element&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;splitter&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_comment"&gt;/*-{&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;panel&amp;nbsp;=&amp;nbsp;this;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;splitter.ondblclick&amp;nbsp;=&amp;nbsp;function()&amp;nbsp;{&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_comment"&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;panel.@com.malethan.gwt.ui.widgets.client.ElegantHorizSplitPanel::toggleLeftPanel()()&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}-*/&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_comment"&gt;//&amp;nbsp;...&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;

	&lt;p&gt;This actually works just fine in IE but is patchy in Firefox for some reason. But more importantly it introduces a &lt;a href="http://code.google.com/webtoolkit/articles/dom_events_memory_leaks_and_you.html" title=""&gt;reference cycle&lt;/a&gt; and is an almost guaranteed way to introduce a memory leak in most browsers.&lt;/p&gt;

	&lt;h3&gt;Reference cycles &amp;#38; memory leaks.&lt;/h3&gt;

	&lt;p&gt;Well, Google had already thought of that. They provide a standard, non&amp;ndash;native way to add event handlers to &lt;span class="caps"&gt;DOM&lt;/span&gt; elements. So the actual code we use to add the double&amp;ndash;click behaviour to the splitter element is the following:&lt;/p&gt;

&lt;div class="jhighlight"&gt;&lt;!-- javasnippet : generated by JHighlight v1.0 (http://jhighlight.dev.java.net) --&gt;
&lt;span class="java_keyword"&gt;public&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;class&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;ElegantHorizSplitPanel&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;extends&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;SimplePanel&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_comment"&gt;//&amp;nbsp;...&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;private&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;void&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;addBehaviour&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_type"&gt;Element&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;splitter&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Event&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;setEventListener&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;splitter&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;new&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;EventListener&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_keyword"&gt;public&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;void&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;onBrowserEvent&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_type"&gt;Event&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;event&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_keyword"&gt;if&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;event&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;getTypeInt&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;==&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Event&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;ONDBLCLICK&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;toggleLeftPanel&lt;/span&gt;&lt;span class="java_separator"&gt;();&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&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;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;});&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Event&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;sinkEvents&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;splitter&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;Event&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;ONDBLCLICK&lt;/span&gt;&lt;span class="java_separator"&gt;);&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_comment"&gt;//&amp;nbsp;...&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;

	&lt;p&gt;&lt;strong&gt;N.B. When I started this post I had only tested the above technique in IE. It works great. Unfortunately it became quickly apparent that when I tried this in Firefox (running on Ubuntu Jaunty) it worked sporadically if at all. If anyone knows of a way to get this working in Firefox, please let me know and I'll post a correction.&lt;/strong&gt;&lt;/p&gt;</summary>
    <dc:creator>Elwyn Malethan</dc:creator>
    <dc:date>2009-11-30T21:20:26Z</dc:date>
  </entry>
  <entry>
    <title>Missing BC :(</title>
    <link rel="alternate" type="text/html" href="http://www.malethan.com/article/missing_bc.html" />
    <author>
      <name>Elwyn Malethan</name>
    </author>
    <updated>2009-10-21T22:32:45Z</updated>
    <published>2009-10-21T22:32:45Z</published>
    <summary type="html">&lt;p&gt;I&amp;#8216;d love to go back some day&amp;#8230;&lt;/p&gt;

	&lt;p class="clear"&gt;Icefields Parkway, Jasper National Park, AB.&lt;br /&gt;
&lt;img src="/uploads/images/18/main_DSC02739_cropped.JPG" alt="Icefields Parkway, Jasper National Park, AB. September '09" /&gt;&lt;/p&gt;

	&lt;p class="clear"&gt;Me at some canyon I can&amp;#8216;t remember the name of&lt;br /&gt;
&lt;img src="/uploads/images/16/main_DSC02657_vert.JPG" alt="Elwyn at Invermere, BC. September '09" /&gt;&lt;/p&gt;

	&lt;p class="clear"&gt;Sweet riding in Fernie&lt;br /&gt;
&lt;img src="/uploads/images/15/main_DSC02619.JPG" alt="Elwyn &amp;#38; George. Fernie BC, September '09" /&gt;&lt;/p&gt;

	&lt;p class="clear"&gt;The view of Golden from Mount Seven, before the awesome descent.&lt;br /&gt;
&lt;img src="/uploads/images/11/main_17092009_002_.jpg" alt="The view from Mount Seven" /&gt;&lt;/p&gt;</summary>
    <dc:creator>Elwyn Malethan</dc:creator>
    <dc:date>2009-10-21T22:32:45Z</dc:date>
  </entry>
  <entry>
    <title>Groovy BeanFactory wrapper using propertyMissing</title>
    <link rel="alternate" type="text/html" href="http://www.malethan.com/article/groovy_beanfactory_wrapper_using_propertymissing.html" />
    <author>
      <name>Elwyn Malethan</name>
    </author>
    <updated>2009-09-02T19:21:49Z</updated>
    <published>2009-09-02T19:21:49Z</published>
    <summary type="html">&lt;p&gt;I&amp;#8216;ve been using Easyb for some integration style testing. The system I&amp;#8216;m testing has a bunch of dependencies all wired together using Spring. So my stories started getting filled up with non dynamic looking clunky Java just so I could get at my configured beans. Something like this:&lt;/p&gt;

&lt;div class="jhighlight"&gt;&lt;!-- javasnippet : generated by JHighlight v1.0 (http://jhighlight.dev.java.net) --&gt;
&lt;span class="java_keyword"&gt;import&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;org&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;springframework&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;beans&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;factory&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;xml&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;XmlBeanFactory&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_keyword"&gt;import&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;org&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;springframework&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;core&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;io&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;ClassPathResource&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;def&amp;nbsp;beanFactory&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;new&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;XmlBeanFactory&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_keyword"&gt;new&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;ClassPathResource&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;storyContext.xml&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;))&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;def&amp;nbsp;myService&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;beanFactory&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;getBean&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;myService&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;scenario&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;Some&amp;nbsp;integration&amp;nbsp;test&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;given&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;Some&amp;nbsp;criteria&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_comment"&gt;//&amp;nbsp;...&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;when&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;my&amp;nbsp;service&amp;nbsp;is&amp;nbsp;invoked&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;service&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;turnLeadIntoGold&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;then&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;I&amp;nbsp;expect&amp;nbsp;to&amp;nbsp;see&amp;nbsp;some&amp;nbsp;results&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_comment"&gt;//&amp;nbsp;...&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;

	&lt;p&gt;For this one small example story it doesn&amp;#8216;t seem like a big deal. Most stories are far more elaborate however. Also add a few more stories and even the top few lines of this example starts looking very non&amp;ndash;&lt;acronym title="Don&amp;#8216;t Repeat Yourself"&gt;DRY&lt;/acronym&gt;. So my answer was this:&lt;/p&gt;

&lt;div class="jhighlight"&gt;&lt;!-- javasnippet : generated by JHighlight v1.0 (http://jhighlight.dev.java.net) --&gt;
&lt;span class="java_keyword"&gt;import&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;org&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;springframework&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;beans&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;factory&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;xml&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;XmlBeanFactory&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_keyword"&gt;import&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;org&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;springframework&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;core&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;io&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;ClassPathResource&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_keyword"&gt;class&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;SpringHelper&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;private&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;def&amp;nbsp;beanFactory&lt;/span&gt;&lt;span class="java_separator"&gt;;&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;def&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;SpringHelper&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_type"&gt;String&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;resource&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;beanFactory&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;new&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;XmlBeanFactory&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_keyword"&gt;new&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;ClassPathResource&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;resource&lt;/span&gt;&lt;span class="java_separator"&gt;));&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;def&amp;nbsp;propertyMissing&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_plain"&gt;name&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;beanFactory&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;getBean&amp;nbsp;name&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;

	&lt;p&gt;Like a &lt;a href="http://www.rubycentral.com/pickaxe/ref_c_object.html#Object.method_missing" title=""&gt;Ruby&lt;/a&gt; , &lt;a href="http://groovy.codehaus.org/" title=""&gt;Groovy&lt;/a&gt; supports dynamic &lt;a href="http://groovy.codehaus.org/Using+methodMissing+and+propertyMissing" title=""&gt;methods and properties&lt;/a&gt; (Ruby doesn&amp;#8216;t distinguish between the two). This seems so simple, that it surprises me that I couldn&amp;#8216;t find it done already somewhere.&lt;/p&gt;

	&lt;p&gt;So now my stories are a little leaner and a little tidier.&lt;/p&gt;

&lt;div class="jhighlight"&gt;&lt;!-- javasnippet : generated by JHighlight v1.0 (http://jhighlight.dev.java.net) --&gt;
&lt;span class="java_keyword"&gt;import&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;com&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;malethan&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;easyb&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;helpers&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_type"&gt;SpringHelper&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;def&amp;nbsp;spring&amp;nbsp;&lt;/span&gt;&lt;span class="java_operator"&gt;=&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_keyword"&gt;new&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_type"&gt;SpringHelper&lt;/span&gt;&lt;span class="java_separator"&gt;(&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;storyContext.xml&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;)&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;scenario&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;Some&amp;nbsp;integration&amp;nbsp;test&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;given&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;Some&amp;nbsp;criteria&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_comment"&gt;//&amp;nbsp;...&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;when&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;my&amp;nbsp;service&amp;nbsp;is&amp;nbsp;invoked&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;spring&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;myService&lt;/span&gt;&lt;span class="java_separator"&gt;.&lt;/span&gt;&lt;span class="java_plain"&gt;turnLeadIntoGold&lt;/span&gt;&lt;span class="java_separator"&gt;()&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;then&amp;nbsp;&lt;/span&gt;&lt;span class="java_literal"&gt;&amp;quot;I&amp;nbsp;expect&amp;nbsp;to&amp;nbsp;see&amp;nbsp;some&amp;nbsp;results&amp;quot;&lt;/span&gt;&lt;span class="java_separator"&gt;,&lt;/span&gt;&lt;span class="java_plain"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;{&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_comment"&gt;//&amp;nbsp;...&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_plain"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="java_separator"&gt;}&lt;/span&gt;&lt;span class="java_plain"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;

	&lt;p&gt;I&amp;#8216;m pretty new to Groovy, so I may have missed a trick. It&amp;#8216;s nice to be working with a more flexible language again though.&lt;/p&gt;</summary>
    <dc:creator>Elwyn Malethan</dc:creator>
    <dc:date>2009-09-02T19:21:49Z</dc:date>
  </entry>
</feed>






