1
0
Fork 0
mirror of https://github.com/sinatra/sinatra synced 2023-03-27 23:18:01 -04:00
sinatra/test/markdown_test.rb
Vasiliy Yakliushin 1d19193653 Remove outdated code for Tilt 1.x versions support
I found out that Sinatra codebase still contains code for handling
both versions of Tilt (1.x and 2.x), however starting from Sinatra 2.0
the minimally required version of Tilt is 2.0 as well.

This commit removes old code and cleans up a bit how tests for
different markdown engines are generated.
2019-04-28 18:09:06 +02:00

86 lines
2.2 KiB
Ruby

require File.expand_path('../helper', __FILE__)
MarkdownTest = proc do
def markdown_app(&block)
mock_app do
set :views, File.dirname(__FILE__) + '/views'
get('/', &block)
end
get '/'
end
def setup
Tilt.prefer engine, 'markdown', 'mkd', 'md'
super
end
it 'uses the correct engine' do
assert_equal engine, Tilt[:md]
assert_equal engine, Tilt[:mkd]
assert_equal engine, Tilt[:markdown]
end
it 'renders inline markdown strings' do
markdown_app { markdown '# Hiya' }
assert ok?
assert_like "<h1>Hiya</h1>\n", body
end
it 'renders .markdown files in views path' do
markdown_app { markdown :hello }
assert ok?
assert_like "<h1>Hello From Markdown</h1>", body
end
it "raises error if template not found" do
mock_app { get('/') { markdown :no_such_template } }
assert_raises(Errno::ENOENT) { get('/') }
end
it "renders with inline layouts" do
mock_app do
layout { 'THIS. IS. #{yield.upcase}!' }
get('/') { markdown 'Sparta', :layout_engine => :str }
end
get '/'
assert ok?
assert_like 'THIS. IS. <P>SPARTA</P>!', body
end
it "renders with file layouts" do
markdown_app {
markdown 'Hello World', :layout => :layout2, :layout_engine => :erb
}
assert ok?
assert_body "ERB Layout!\n<p>Hello World</p>"
end
it "can be used in a nested fashion for partials and whatnot" do
mock_app do
template(:inner) { "hi" }
template(:outer) { "<outer><%= markdown :inner %></outer>" }
get('/') { erb :outer }
end
get '/'
assert ok?
assert_like '<outer><p>hi</p></outer>', body
end
end
# Will generate RDiscountTest, KramdownTest, etc.
markdown_templates = Tilt.lazy_map['md'].map { |klass, _require_path| klass }
markdown_templates.each do |template_name|
begin
template = Object.const_get(template_name)
klass = Class.new(Minitest::Test) { define_method(:engine) { template } }
klass.class_eval(&MarkdownTest)
name = template_name.split('::').last.sub(/Template$/, 'Test')
Object.const_set name, klass
rescue LoadError, NameError
warn "#{$!}: skipping markdown tests with #{template_name}"
end
end