diff --git a/lib/iruby/display.rb b/lib/iruby/display.rb
index 340a437..22e380a 100644
--- a/lib/iruby/display.rb
+++ b/lib/iruby/display.rb
@@ -44,7 +44,18 @@ def clear_output(wait = false)
private
def protect(mime, data)
- MIME::Type.new(mime).ascii? ? data.to_s : [data.to_s].pack('m0')
+ ascii?(mime) ? data.to_s : [data.to_s].pack('m0')
+ end
+
+ def ascii?(mime)
+ case mime
+ when "application/javascript"
+ # Special case for application/javascript.
+ # This needs because mime-types tells us application/javascript a non-text type.
+ true
+ else
+ MIME::Type.new(mime).ascii?
+ end
end
def render(data, obj, exact_mime, fuzzy_mime)
diff --git a/test/iruby/mime_test.rb b/test/iruby/mime_test.rb
index 81a4419..d7517f8 100644
--- a/test/iruby/mime_test.rb
+++ b/test/iruby/mime_test.rb
@@ -1,14 +1,25 @@
class IRubyTest::MimeTest < IRubyTest::TestBase
sub_test_case("IRuby::Display") do
- def test_display_with_mime_type
- html = "Bold Text"
+ sub_test_case(".display") do
+ sub_test_case("with mime type") do
+ test("text/html") do
+ html = "Bold Text"
- obj = Object.new
- obj.define_singleton_method(:to_s) { html }
+ obj = Object.new
+ obj.define_singleton_method(:to_s) { html }
- res = IRuby::Display.display(obj, mime: "text/html")
- assert_equal({ plain: obj.inspect, html: html },
- { plain: res["text/plain"], html: res["text/html"] })
+ res = IRuby::Display.display(obj, mime: "text/html")
+ assert_equal({ plain: obj.inspect, html: html },
+ { plain: res["text/plain"], html: res["text/html"] })
+ end
+
+ test("application/javascript") do
+ data = "alert('Hello World!')"
+ res = IRuby::Display.display(data, mime: "application/javascript")
+ assert_equal(data,
+ res["application/javascript"])
+ end
+ end
end
end