assert_select_rjs (ActionController::Assertions::SelectorAssertions)

    # File lib/action_controller/assertions/selector_assertions.rb, line 400
          def assert_select_rjs(*args, &block)
            rjs_type = nil
            arg      = args.shift

            # If the first argument is a symbol, it's the type of RJS statement we're looking
            # for (update, replace, insertion, etc). Otherwise, we're looking for just about
            # any RJS statement.
            if arg.is_a?(Symbol)
              rjs_type = arg

              if rjs_type == :insert
                arg = args.shift
                insertion = "insert_#{arg}".to_sym
                raise ArgumentError, "Unknown RJS insertion type #{arg}" unless RJS_STATEMENTS[insertion]
                statement = "(#{RJS_STATEMENTS[insertion]})"
              else
                raise ArgumentError, "Unknown RJS statement type #{rjs_type}" unless RJS_STATEMENTS[rjs_type]
                statement = "(#{RJS_STATEMENTS[rjs_type]})"
              end
              arg = args.shift
            else
              statement = "#{RJS_STATEMENTS[:any]}"
            end

            # Next argument we're looking for is the element identifier. If missing, we pick
            # any element.
            if arg.is_a?(String)
              id = Regexp.quote(arg)
              arg = args.shift
            else
              id = "[^\"]*"
            end

            pattern =
              case rjs_type
                when :chained_replace, :chained_replace_html
                  Regexp.new("\\$\\(\"#{id}\"\\)#{statement}\\(#{RJS_PATTERN_HTML}\\)", Regexp::MULTILINE)
                when :remove, :show, :hide, :toggle
                  Regexp.new("#{statement}\\(\"#{id}\"\\)")
                else
                  Regexp.new("#{statement}\\(\"#{id}\", #{RJS_PATTERN_HTML}\\)", Regexp::MULTILINE)
              end

            # Duplicate the body since the next step involves destroying it.
            matches = nil
            case rjs_type
              when :remove, :show, :hide, :toggle
                matches = @response.body.match(pattern)
              else
                @response.body.gsub(pattern) do |match|
                  html = unescape_rjs($2)
                  matches ||= []
                  matches.concat HTML::Document.new(html).root.children.select { |n| n.tag? }
                  ""
                end
            end

            if matches
              assert_block("") { true } # to count the assertion
              if block_given? && !([:remove, :show, :hide, :toggle].include? rjs_type)
                begin
                  in_scope, @selected = @selected, matches
                  yield matches
                ensure
                  @selected = in_scope
                end
              end
              matches
            else
              # RJS statement not found.
              flunk args.shift || "No RJS statement that replaces or inserts HTML content."
            end
          end