# 
# old_revision [c9215ce4dc70345f13041eafe3f85def48d6ea08]
# 
# add_file "vendor/plugins/selenium_on_rails/generators/selenium/templates/rselenese.rhtml"
# 
# add_file "vendor/plugins/selenium_on_rails/lib/selenium_on_rails/instance_exec.rb"
# 
# add_file "vendor/plugins/selenium_on_rails/lib/selenium_on_rails/rselenese.rb"
# 
# add_file "vendor/plugins/selenium_on_rails/test/instance_exec_test.rb"
# 
# add_file "vendor/plugins/selenium_on_rails/test/rselenese_test.rb"
# 
# add_file "vendor/plugins/selenium_on_rails/test_data/rselenese.rsel"
# 
# patch "vendor/plugins/selenium_on_rails/generators/selenium/USAGE"
#  from [bb06327d0756077390fd13ddd5751dbaf8b9b8eb]
#    to [fbbb6650c1b83972ccc00541d281762c0e3336f4]
# 
# patch "vendor/plugins/selenium_on_rails/generators/selenium/selenium_generator.rb"
#  from [2c08a6453bf78fda4f696cc805b3860651c2c250]
#    to [a5ebef4c82745200e78ee7d23cd90f6ced398c95]
# 
# patch "vendor/plugins/selenium_on_rails/generators/selenium/templates/rselenese.rhtml"
#  from []
#    to [760579c045838c72382a623d4e910b0421c07c15]
# 
# patch "vendor/plugins/selenium_on_rails/lib/selenium_on_rails.rb"
#  from [043d87cb79493268e6650e19fce856de19d14ea1]
#    to [84f77eac6da5a04ed38f996574a9e558636e2c02]
# 
# patch "vendor/plugins/selenium_on_rails/lib/selenium_on_rails/instance_exec.rb"
#  from []
#    to [89dfeafd7b7abf4c0e21d4764ddfead6b5d04480]
# 
# patch "vendor/plugins/selenium_on_rails/lib/selenium_on_rails/rselenese.rb"
#  from []
#    to [9e6cc11fe64480311a20bc54164cafcd387b2e10]
# 
# patch "vendor/plugins/selenium_on_rails/lib/selenium_on_rails/selenese.rb"
#  from [4daeea3faac1e34f5752f1d865710b5b51a61ae9]
#    to [b5c49de5f962c8f80c8a41a6b87deecbc3dd2f3c]
# 
# patch "vendor/plugins/selenium_on_rails/test/instance_exec_test.rb"
#  from []
#    to [b34703b71c8032940fa8850929dcda1b6ddf7f03]
# 
# patch "vendor/plugins/selenium_on_rails/test/renderer_test.rb"
#  from [eca5d3a98515f310755d8e489d1fc3d5663daa7a]
#    to [14279ae79bd46fca75227f0cc6796614c3610296]
# 
# patch "vendor/plugins/selenium_on_rails/test/rselenese_test.rb"
#  from []
#    to [eb1d763ccd7f7fed512812dd2135e44c34bd7167]
# 
# patch "vendor/plugins/selenium_on_rails/test/suite_renderer_test.rb"
#  from [939210fa08a98ea28fbfade1d77993e7e2e4472a]
#    to [328e2ffbb28c49afa7864d2ba5f20cbf03a3fc3a]
# 
# patch "vendor/plugins/selenium_on_rails/test_data/rselenese.rsel"
#  from []
#    to [25bd0ba049e20d0815789656cc5decf8bde2360a]
# 
============================================================
--- vendor/plugins/selenium_on_rails/generators/selenium/USAGE	bb06327d0756077390fd13ddd5751dbaf8b9b8eb
+++ vendor/plugins/selenium_on_rails/generators/selenium/USAGE	fbbb6650c1b83972ccc00541d281762c0e3336f4
@@ -13,3 +13,7 @@
     ./script/generate selenium logout.rhtml
     will create:
         /test/selenium/logout.rhtml
+
+    ./script/generate selenium login.rsel
+    will create:
+        /test/selenium/login.rsel
============================================================
--- vendor/plugins/selenium_on_rails/generators/selenium/selenium_generator.rb	2c08a6453bf78fda4f696cc805b3860651c2c250
+++ vendor/plugins/selenium_on_rails/generators/selenium/selenium_generator.rb	a5ebef4c82745200e78ee7d23cd90f6ced398c95
@@ -14,14 +14,19 @@
       path = File.join(path, suite_path) unless suite_path.empty?
       m.directory path
 
-      template = (File.extname(filename) == '.rhtml' ? 'rhtml.rhtml' : 'selenese.rhtml')
+      template = case File.extname(filename)
+                 when '.rhtml' then 'rhtml.rhtml'
+                 when '.rsel' then 'rselenese.rhtml'
+                 else 'selenese.rhtml'
+                 end
       m.template template, File.join(path, filename)
     end
   end
 
   def filename
     name = File.basename args[0]
-    name =  "#{name}.sel" unless ['.sel', '.rhtml'].include? File.extname(name)
+    extensions = ['.sel', '.rhtml', '.rsel']
+    name =  "#{name}.sel" unless extensions.include? File.extname(name)
     name
   end
 
============================================================
--- vendor/plugins/selenium_on_rails/generators/selenium/templates/rselenese.rhtml	
+++ vendor/plugins/selenium_on_rails/generators/selenium/templates/rselenese.rhtml	760579c045838c72382a623d4e910b0421c07c15
@@ -0,0 +1,15 @@
+# It's often a good idea to start the test with opening 'test.setup'.
+# See /selenium/setup for more info.
+
+test.setup
+test.open '/'
+test.assert_title 'Home'
+
+# More information about the commands is available at:
+#   http://www.openqa.org/selenium/seleniumReference.html.
+# See also the RDoc for SeleniumOnRails::TestBuilder.
+#
+# Point the browser to <%= testcase_link %> to see
+# how this test is rendered, or to <%= suite_link %> to
+# run the suite.
+
============================================================
--- vendor/plugins/selenium_on_rails/lib/selenium_on_rails.rb	043d87cb79493268e6650e19fce856de19d14ea1
+++ vendor/plugins/selenium_on_rails/lib/selenium_on_rails.rb	84f77eac6da5a04ed38f996574a9e558636e2c02
@@ -1,8 +1,10 @@
 module SeleniumOnRails # :nodoc
 end
 
 
+require 'selenium_on_rails/instance_exec'
 require 'selenium_on_rails/selenese'
+require 'selenium_on_rails/rselenese'
 require 'selenium_on_rails/suite_renderer'
 require 'selenium_on_rails/paths'
 require 'selenium_on_rails/fixture_loader'
============================================================
--- vendor/plugins/selenium_on_rails/lib/selenium_on_rails/instance_exec.rb	
+++ vendor/plugins/selenium_on_rails/lib/selenium_on_rails/instance_exec.rb	89dfeafd7b7abf4c0e21d4764ddfead6b5d04480
@@ -0,0 +1,27 @@
+# Add a hackish version of Object#instance_exec, a function which Matz
+# plans to include in a future version of Ruby, but which we need now.
+unless Object.method_defined?(:instance_exec)
+  class Object
+    # Run _block_ in this object's context, passing it _args_.  This is
+    # function is similar to Object#instance_eval, but allows us to pass
+    # arguments to the block.
+    #
+    # This is a thread-safe version of a function described by Daniel Amelang
+    # on Ruby Talk:
+    #
+    # http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/6373
+    def instance_exec *args, &block
+      # Use a thread-local name for our temporary method.
+      mname = "__instance_exec_temp_#{Thread.current.object_id}__"
+      singleton_class = (class << self; self end)
+      singleton_class.send(:define_method, mname, &block)
+      result = send(mname, *args)
+      # Our temporary method may have already been deleted by a nested
+      # call to instance_exec.  That's OK!
+      singleton_class.send(:remove_method, mname) if respond_to? mname
+      result
+    end
+  end
+end
+
+
============================================================
--- vendor/plugins/selenium_on_rails/lib/selenium_on_rails/rselenese.rb	
+++ vendor/plugins/selenium_on_rails/lib/selenium_on_rails/rselenese.rb	9e6cc11fe64480311a20bc54164cafcd387b2e10
@@ -0,0 +1,304 @@
+# Builds Selenium test table using a high-level Ruby interface.  Normally
+# invoked through SeleniumOnRails::RSelenese.
+#
+# For more information on the commands supported by TestBuilder, see the
+# Selenium Commands Documentation at
+# http://www.openqa.org/selenium/seleniumReference.html.
+class SeleniumOnRails::TestBuilder
+  # Convert _str_ to a Selenium command name.
+  def self.selenize(str)
+    str.camelize.gsub(/^[A-Z]/) {|s| s.downcase }
+  end
+
+  # Create a new TestBuilder for _view_ with _title_.
+  def initialize view, title
+    @view = view
+    @title = title
+    @xml = Builder::XmlMarkup.new(:indent => 2)
+  end
+
+  # Add a new table of tests, and return the HTML.
+  def table
+    @xml.table do
+      @xml.tr do @xml.th(@title, :colspan => 3) end
+      yield self
+    end
+  end
+
+  # Add a new test command using _cmd_, _target_ and _value_.
+  def command cmd, target=nil, value=nil
+    @xml.tr do
+      _tdata cmd
+      _tdata target
+      _tdata value
+    end
+  end
+
+  # Tell Selenium on Rails to clear the session and load any fixtures.  DO
+  # NOT CALL THIS AGAINST NON-TEST DATABASES.
+  def setup
+    unless RAILS_ENV == 'test'
+      raise("Danger! Running Selenium setup against non-test databases will " +
+            "erase current data and replace it with fixtures.")
+    end
+    open '/selenium/setup'
+  end
+
+  # Open the page specified by _url_ and wait.  The _url_ may either by a
+  # string, or arguments suitable for ActionView::UrlHelper#url_for.
+  #   test.open '/'
+  #   test.open :controller => 'customer', :action => 'list'
+  def open url
+    command 'open', url_arg(url)
+  end
+
+  # Click on the specified element.  Supports a <code>:wait => true</code>
+  # option.
+  def click element_locator, options={}
+    command name_with_optional_wait('click', options), element_locator
+  end
+
+  # Type _value_ into the specified element.  Supports a <code>:wait =>
+  # true</code> option, which is useful if typing into the field causes
+  # another page to be loaded.
+  def type input_locator, value, options={}
+    command name_with_optional_wait('type', options), input_locator, value
+  end
+
+  # Select an option from a +select+ menu.  Supports a <code>:wait =>
+  # true</code> option.
+  def select drop_down_locator, option_specifier, options={}
+    command(name_with_optional_wait('select', options), drop_down_locator,
+            option_specifier)
+  end
+
+  # Select a popup window by name, and send further commands to it.  If
+  # _window_id_ is +nil+, select the main window.
+  def select_window window_id
+    command 'selectWindow', window_id||'null'
+  end
+
+  # Simulate selecting the "Back" button.
+  def go_back
+    command 'goBack'
+  end
+
+  # Close the current window.
+  def close
+    command 'close'
+  end
+
+  # Wait for _milliseconds_.
+  def pause milliseconds
+    command 'pause', milliseconds
+  end
+
+  # Send an event to an element.
+  #   test.fire_event 'password', 'focus'
+  def fire_event element_locator, event_name
+    command 'fireEvent', element_locator, event_name
+  end
+
+  # Wait for an input field to have the specified value.
+  def wait_for_value input_locator, value
+    command 'waitForValue', input_locator, value
+  end
+
+  # Store a value into a Selenium value.
+  def store value_to_store, variable_name
+    command 'store', value_to_store, variable_name
+  end
+
+  # Store the value of an input field into a Selenium variable.
+  def store_value input_locator, variable_name
+    command 'storeValue', input_locator, variable_name
+  end
+
+  # Store the text of an element into a Selenium variable.
+  def store_text element_locator, variable_name
+    command 'storeText', element_locator, variable_name
+  end
+
+  # Store the value of an attribute into a Selenium variable.
+  def store_attribute element_locator, attribute_name, variable_name
+    command('storeAttribute', "#{element_locator}@#{attribute_name}",
+            variable_name)
+  end
+
+  # Tell Selenium to select "Cancel" the next time a confirmation dialog
+  # appears.
+  def choose_cancel_on_next_confirmation
+    command 'chooseCancelOnNextConfirmation'
+  end
+
+  # Tell Selenium how to answer the next JavaScript prompt.
+  def answer_on_next_prompt answer_string
+    command 'answerOnNextPrompt', answer_string
+  end
+
+  # Assert that the browser is at the specified location.
+  #   test.assert_location '/'
+  #   test.assert_location :controller => 'customer', :action => 'list'
+  def assert_location relative_location
+    command 'assertLocation', url_arg(relative_location)
+  end
+
+  # Assert that the current page's title matches the pattern.
+  def assert_title title_pattern
+    command 'assertTitle', title_pattern
+  end
+
+  # Assert the specified input field's value matches the pattern.
+  def assert_value input_locator, value_pattern
+    command 'assertValue', input_locator, value_pattern
+  end
+
+  # Assert that a specific +option+ is chosen in a +select+ field.
+  def assert_selected select_locator, option_specifier
+    command 'assertSelected', select_locator, option_specifier
+  end
+
+  # Assert that a +select+ field has the specified option labels.
+  def assert_select_options select_locator, *option_label_list
+    ls = option_label_list.map {|l| l.gsub(/[\\,]/) {|s| "\\#{s}" } }.join(',')
+    command 'assertSelectOptions', select_locator, ls
+  end
+
+  # Assert that an element contains the specified text.
+  def assert_text element_locator, text_pattern
+    command 'assertText', element_locator, text_pattern
+  end
+
+  # Assert that an attribute contains the specified text.  
+  def assert_attribute element_locator, attribute_name, value_pattern
+    command('assertAttribute', "#{element_locator}@#{attribute_name}",
+            value_pattern)
+  end
+
+  # Assert that the specified text is present somewhere on the page.
+  def assert_text_present text
+    command 'assertTextPresent', text
+  end
+
+  # Assert that the specified text is not present anywhere on the page.
+  def assert_text_not_present text
+    command 'assertTextNotPresent', text
+  end
+
+  # Assert that the specified element appears on the page.
+  def assert_element_present element_locator
+    command 'assertElementPresent', element_locator
+  end
+
+  # Assert that the specified element does not appear on the page.
+  def assert_element_not_present element_locator
+    command 'assertElementNotPresent', element_locator
+  end
+
+  # Assert that the specified table cell contains the specified value.
+  def assert_table table_locator, row, column, value_pattern
+    command 'assertTable', "#{table_locator}.#{row}.#{column}", value_pattern
+  end
+
+  # Assert that the specified element is visible.  Checks the
+  # <code>visibility</code> and <code>display</code> properties of the
+  # element and its parents.
+  def assert_visible element_locator
+    command 'assertVisible', element_locator
+  end
+
+  # Assert that the specified element is not visible (or is entirely
+  # missing).
+  def assert_not_visible element_locator
+    command 'assertNotVisible', element_locator
+  end
+
+  # Assert that the specified element can be edited.
+  def assert_editable input_locator
+    command 'assertEditable', input_locator
+  end
+
+  # Assert that the specified element cannot be edited.
+  def assert_not_editable input_locator
+    command 'assertNotEditable', input_locator
+  end
+
+  # Assert the message of the next alert matches the pattern.
+  def assert_alert message_pattern
+    command 'assertAlert', message_pattern
+  end
+
+  # Assert the message of the next confirmation matches the pattern.
+  def assert_confirmation message_pattern
+    command 'assertConfirmation', message_pattern
+  end
+
+  # Assert the message of the next prompt matches the pattern.
+  def assert_prompt message_pattern
+    command 'assertPrompt', message_pattern
+  end
+
+  protected
+
+  # If _url_ is a string, return unchanged.  Otherwise, pass it to
+  # ActionView#UrlHelper#url_for.
+  def url_arg url
+    if url.instance_of?(String) then url else @view.url_for(url) end
+  end
+
+  # If _options_ contains :wait, append +AndWait+ to _name_.
+  def name_with_optional_wait name, options
+    if options[:wait] then "#{name}AndWait" else name end
+  end
+
+  private
+  
+  # Output a single TD element.
+  def _tdata value
+    if value
+      @xml.td(value.to_s)
+    else
+      @xml.td do @xml.target! << '&nbsp;' end
+    end
+  end
+end
+
+# Renders Selenium test templates in a fashion analogous to +rxml+ and
+# +rjs+ templates.
+#
+#   test.setup
+#   test.open :controller => 'customer', :action => 'list'
+#   test.assert_title 'Customers'
+#
+# See SeleniumOnRails::TestBuilder for a list of available commands.
+class SeleniumOnRails::RSelenese
+  # Create a new RSelenese renderer bound to _view_.
+  def initialize view
+    @view = view
+  end
+
+  # Render _template_ using _local_assigns_.
+  def render template, local_assigns
+    title = (@view.assigns['page_title'] or local_assigns['page_title'])
+    local_assigns['test'] = SeleniumOnRails::TestBuilder.new(@view, title)
+    src = <<__EOD__
+lambda do |local_assigns|
+#{make_local_assignments(local_assigns)}  test.table do
+    #{template}
+  end
+end
+__EOD__
+    @view.instance_exec(local_assigns, &eval(src))
+  end
+
+  private
+
+  def make_local_assignments local_assigns
+    locals_code = ''
+    local_assigns.keys.map do |key|
+      "  #{key} = local_assigns[#{key.inspect}]\n"
+    end.join
+  end
+end
+
+ActionView::Base.register_template_handler "rsel", SeleniumOnRails::RSelenese
============================================================
--- vendor/plugins/selenium_on_rails/lib/selenium_on_rails/selenese.rb	4daeea3faac1e34f5752f1d865710b5b51a61ae9
+++ vendor/plugins/selenium_on_rails/lib/selenium_on_rails/selenese.rb	b5c49de5f962c8f80c8a41a6b87deecbc3dd2f3c
============================================================
--- vendor/plugins/selenium_on_rails/test/instance_exec_test.rb	
+++ vendor/plugins/selenium_on_rails/test/instance_exec_test.rb	b34703b71c8032940fa8850929dcda1b6ddf7f03
@@ -0,0 +1,8 @@
+require File.dirname(__FILE__) + '/test_helper'
+
+class InstanceExecTest < Test::Unit::TestCase
+  def test_instance_exec
+    obj = [:a, :b]
+    assert_equal(3, obj.instance_exec(1) {|x| x+length })
+  end
+end
============================================================
--- vendor/plugins/selenium_on_rails/test/renderer_test.rb	eca5d3a98515f310755d8e489d1fc3d5663daa7a
+++ vendor/plugins/selenium_on_rails/test/renderer_test.rb	14279ae79bd46fca75227f0cc6796614c3610296
@@ -67,6 +67,27 @@
 END
     assert_text_equal expected, @response.body
   end
+
+  def test_rselenese
+    get :test_file, :testname => 'rselenese.rsel'
+    assert_headers
+    expected = <<END
+<html><head><title>test layout</title></head><body>
+<table>
+  <tr>
+    <th colspan="3">Rselenese</th>
+  </tr>
+  <tr>
+    <td>open</td>
+    <td>/selenium/setup</td>
+    <td>&nbsp;</td>
+  </tr>
+</table>
+
+</body></html>
+END
+    assert_text_equal expected.gsub(/ *</, '<'), @response.body.gsub(/ *</, '<')
+  end
   
   def test_own_layout
     get :test_file, :testname => 'own_layout.html'
============================================================
--- vendor/plugins/selenium_on_rails/test/rselenese_test.rb	
+++ vendor/plugins/selenium_on_rails/test/rselenese_test.rb	eb1d763ccd7f7fed512812dd2135e44c34bd7167
@@ -0,0 +1,139 @@
+require File.dirname(__FILE__) + '/test_helper'
+
+class RSeleneseTest < Test::Unit::TestCase
+  include ERB::Util
+
+  def setup
+    @controller = UserController.new
+    @request    = ActionController::TestRequest.new
+    @response   = ActionController::TestResponse.new
+  end
+
+  def rselenese name, input
+    @@view ||= ActionView::Base.new
+    @@view.assigns['page_title'] = name
+    @@view.render_template 'rsel', input
+  end
+
+  def assert_rselenese expected, name, input
+    assert_text_equal(expected.gsub(/ *</, '<'),
+                      rselenese(name, input).gsub(/ *</, '<'))
+  end
+
+  def test_empty
+    expected = <<END
+<table>
+<tr><th colspan="3">Empty</th></tr>
+</table>
+END
+    input = ''
+    assert_rselenese expected, 'Empty', input
+  end
+
+  def assert_generates_command expected, name, *args
+    expected = expected.map {|v| h(v) }
+    expected << '&nbsp;' while expected.length < 3
+    expected = expected.map {|v| "<td>#{v}</td>" }.join
+    expected_html = <<END
+<table>
+<tr><th colspan="3">Selenese Commands</th></tr>
+<tr>#{expected}</tr>
+</table>
+END
+    args_str  = args.map {|a| a.inspect }.join(',')
+    input = "test.#{name}(#{args_str})"
+    assert_rselenese expected_html, 'Selenese Commands', input
+  end
+
+  def test_element_locators
+    assert_generates_command %w{click aCheckbox}, :click, 'aCheckbox'
+    assert_generates_command %w{click document.foo}, :click, 'document.foo'
+    assert_generates_command %w{click //a}, :click, '//a'
+  end
+
+  ARG_VALUE_MAP = {
+    # We can't test url_for style arguments here, because we don't have
+    # a valid controller to interpret them.  See RendererTest.
+    :url => '/relative/url',
+    :element => 'foo',          # Also: '//foo', 'document.foo', others.
+    :string => '1234',
+    :option => 'J* Smith',      # Also: many other formats.
+    :pattern => 'glob:J* Smith' # Also: many other formats.
+  }
+
+  # Call _command_ with _args_ and make sure it produces a good table.
+  # Specify _can_wait_ to test a version of the command with
+  # <code>:wait</code>.
+  def assert_command_works command, can_wait, *args
+    values = args.map {|a| ARG_VALUE_MAP[a] }
+    name = SeleniumOnRails::TestBuilder.selenize(command.to_s)
+    assert_generates_command [name]+values, command, *values
+    if can_wait
+      assert_generates_command(["#{name}AndWait"]+values,
+                               command, *(values+[{:wait => true}]))
+    end
+  end
+
+  def test_simple_commands
+    assert_command_works :open,            false, :url
+    assert_command_works :type,            true,  :element, :string
+    assert_command_works :select,          true,  :element, :option
+    assert_command_works :select_window,   false, :string
+    assert_command_works :go_back,         false
+    assert_command_works :close,           false
+    assert_command_works :pause,           false, :string
+    assert_command_works :fire_event,      false, :element, :string
+    assert_command_works :wait_for_value,  false, :element, :string
+    assert_command_works :store,           false, :string, :string
+    assert_command_works :store_value,     false, :element, :string
+    assert_command_works :store_text,      false, :element, :string
+    assert_command_works :choose_cancel_on_next_confirmation, false
+    assert_command_works :answer_on_next_prompt, false, :string
+    assert_command_works :assert_location, false, :url
+    assert_command_works :assert_title,    false, :string
+    assert_command_works :assert_value,    false, :element, :pattern
+    assert_command_works :assert_selected, false, :element, :option
+    assert_command_works :assert_text,     false, :element, :pattern
+    assert_command_works :assert_text_present, false, :string
+    assert_command_works :assert_text_not_present, false, :string
+    assert_command_works :assert_element_present, false, :element
+    assert_command_works :assert_element_not_present, false, :element
+    assert_command_works :assert_visible,  false, :element
+    assert_command_works :assert_not_visible, false, :element
+    assert_command_works :assert_editable, false, :element
+    assert_command_works :assert_not_editable, false, :element
+    assert_command_works :assert_alert,    false, :pattern
+    assert_command_works :assert_confirmation, false, :pattern
+    assert_command_works :assert_prompt,   false, :pattern
+  end
+
+  def test_select_window_should_support_nil
+    assert_generates_command %w{selectWindow null}, :select_window, nil
+  end
+
+  def test_command_setup
+    assert_generates_command %w{open /selenium/setup}, :setup
+  end
+
+  def test_command_store_attribute
+    assert_generates_command(%w{storeAttribute foo@bar baz},
+                             :store_attribute, 'foo', 'bar', 'baz')
+  end
+
+  def test_command_assert_select_options
+    # Use double-quoted strings so we can keep track of escape sequences
+    # without remembering Ruby-specific rules.
+    assert_generates_command(['assertSelectOptions','sel',"foo,bar\\,\\\\baz"],
+                             :assert_select_options, 'sel', 'foo', "bar,\\baz")
+  end
+
+  def test_command_assert_attribute
+    assert_generates_command(%w{assertAttribute foo@bar baz},
+                             :assert_attribute, 'foo', 'bar', 'baz')
+  end
+
+  def test_command_assert_table
+    assert_generates_command(%w{assertTable foo.2.3 bar},
+                             :assert_table, 'foo', 2, 3, 'bar')
+  end
+end
============================================================
--- vendor/plugins/selenium_on_rails/test/suite_renderer_test.rb	939210fa08a98ea28fbfade1d77993e7e2e4472a
+++ vendor/plugins/selenium_on_rails/test/suite_renderer_test.rb	328e2ffbb28c49afa7864d2ba5f20cbf03a3fc3a
@@ -82,6 +82,7 @@
   <tr><td><a href="/selenium/tests/html.html">Html</a></td></tr>
   <tr><td><a href="/selenium/tests/own_layout.html">Own layout</a></td></tr>
   <tr><td><a href="/selenium/tests/rhtml.rhtml">Rhtml</a></td></tr>
+  <tr><td><a href="/selenium/tests/rselenese.rsel">Rselenese</a></td></tr>
   <tr><td><a href="/selenium/tests/selenese.sel">Selenese</a></td></tr>
   <tr><td><a href="/selenium/tests/suite_one/suite_one_testcase1.sel">Suite one.Suite one testcase1</a></td></tr>
   <tr><td><a href="/selenium/tests/suite_one/suite_one_testcase2.sel">Suite one.Suite one testcase2</a></td></tr>
============================================================
--- vendor/plugins/selenium_on_rails/test_data/rselenese.rsel	
+++ vendor/plugins/selenium_on_rails/test_data/rselenese.rsel	25bd0ba049e20d0815789656cc5decf8bde2360a
@@ -0,0 +1,1 @@
+test.open :controller => 'selenium', :action => 'setup'
