mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
35b3de8021
The current code base is not uniform. After some discussion, we have chosen to go with double quotes by default.
90 lines
2.4 KiB
Ruby
90 lines
2.4 KiB
Ruby
require "abstract_unit"
|
|
require "controller/fake_models"
|
|
require "active_support/logger"
|
|
|
|
class RenderersTest < ActionController::TestCase
|
|
class XmlRenderable
|
|
def to_xml(options)
|
|
options[:root] ||= "i-am-xml"
|
|
"<#{options[:root]}/>"
|
|
end
|
|
end
|
|
class JsonRenderable
|
|
def as_json(options={})
|
|
hash = { :a => :b, :c => :d, :e => :f }
|
|
hash.except!(*options[:except]) if options[:except]
|
|
hash
|
|
end
|
|
|
|
def to_json(options = {})
|
|
super :except => [:c, :e]
|
|
end
|
|
end
|
|
class CsvRenderable
|
|
def to_csv
|
|
"c,s,v"
|
|
end
|
|
end
|
|
class TestController < ActionController::Base
|
|
|
|
def render_simon_says
|
|
render :simon => "foo"
|
|
end
|
|
|
|
def respond_to_mime
|
|
respond_to do |type|
|
|
type.json do
|
|
render json: JsonRenderable.new
|
|
end
|
|
type.js { render json: "JS", callback: "alert" }
|
|
type.csv { render csv: CsvRenderable.new }
|
|
type.xml { render xml: XmlRenderable.new }
|
|
type.html { render body: "HTML" }
|
|
type.rss { render body: "RSS" }
|
|
type.all { render body: "Nothing" }
|
|
type.any(:js, :xml) { render body: "Either JS or XML" }
|
|
end
|
|
end
|
|
end
|
|
|
|
tests TestController
|
|
|
|
def setup
|
|
# enable a logger so that (e.g.) the benchmarking stuff runs, so we can get
|
|
# a more accurate simulation of what happens in "real life".
|
|
super
|
|
@controller.logger = ActiveSupport::Logger.new(nil)
|
|
end
|
|
|
|
def test_using_custom_render_option
|
|
ActionController.add_renderer :simon do |says, options|
|
|
self.content_type = Mime[:text]
|
|
self.response_body = "Simon says: #{says}"
|
|
end
|
|
|
|
get :render_simon_says
|
|
assert_equal "Simon says: foo", @response.body
|
|
ensure
|
|
ActionController.remove_renderer :simon
|
|
end
|
|
|
|
def test_raises_missing_template_no_renderer
|
|
assert_raise ActionView::MissingTemplate do
|
|
get :respond_to_mime, format: "csv"
|
|
end
|
|
assert_equal Mime[:csv], @response.content_type
|
|
assert_equal "", @response.body
|
|
end
|
|
|
|
def test_adding_csv_rendering_via_renderers_add
|
|
ActionController::Renderers.add :csv do |value, options|
|
|
send_data value.to_csv, type: Mime[:csv]
|
|
end
|
|
@request.accept = "text/csv"
|
|
get :respond_to_mime, format: "csv"
|
|
assert_equal Mime[:csv], @response.content_type
|
|
assert_equal "c,s,v", @response.body
|
|
ensure
|
|
ActionController::Renderers.remove :csv
|
|
end
|
|
end
|