added cucumber tests for #1043, AsciiDoc support

This commit is contained in:
Dan Allen 2013-10-18 02:58:14 -06:00
parent 55d844f667
commit 5439139b76
16 changed files with 205 additions and 4 deletions

View file

@ -18,6 +18,7 @@ gem "slim", :require => false
gem "liquid", :require => false gem "liquid", :require => false
gem "less", "~> 2.3.0", :require => false gem "less", "~> 2.3.0", :require => false
gem "stylus", :require => false gem "stylus", :require => false
gem "asciidoctor", :require => false
# gem "pry", :require => false # gem "pry", :require => false
# gem "pry-debugger", :require => false # gem "pry-debugger", :require => false

View file

@ -0,0 +1,155 @@
Feature: AsciiDoc Support
In order to test included AsciiDoc support
Scenario: Rendering html
Given the Server is running at "asciidoc-app"
When I go to "/hello.html"
Then I should see:
"""
<div class="paragraph">
<p>Hello, AsciiDoc!
Middleman, I am in you.</p>
</div>
"""
Scenario: Rendering html with default layout
Given a fixture app "asciidoc-app"
And a file named "config.rb" with:
"""
set :layout, :default
"""
Given the Server is running at "asciidoc-app"
When I go to "/hello.html"
Then I should see:
"""
<!DOCTYPE html>
<html>
<head>
<title>Fallback</title>
</head>
<body>
<div class="paragraph">
<p>Hello, AsciiDoc!
Middleman, I am in you.</p>
</div>
</body>
</html>
"""
Scenario: Rendering html with explicit layout
Given the Server is running at "asciidoc-app"
When I go to "/hello-with-layout.html"
Then I should see:
"""
<!DOCTYPE html>
<html>
<head>
<title>Fallback</title>
</head>
<body>
<div class="paragraph">
<p>Hello, AsciiDoc!</p>
</div>
</body>
</html>
"""
Scenario: Rendering html with no layout
Given the Server is running at "asciidoc-app"
When I go to "/hello-no-layout.html"
Then I should see:
"""
<div class="paragraph">
<p>Hello, AsciiDoc!</p>
</div>
"""
Scenario: Rendering html using title from document
Given the Server is running at "asciidoc-app"
When I go to "/hello-with-title.html"
Then I should see:
"""
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
</head>
<body>
<h1>Page Title</h1>
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>Hello, AsciiDoc!</p>
</div>
</div>
</div>
</body>
</html>
"""
Scenario: Rendering html with title and layout from front matter
Given the Server is running at "asciidoc-app"
When I go to "/hello-with-front-matter.html"
Then I should see:
"""
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
</head>
<body>
<div class="paragraph">
<p>Hello, AsciiDoc!</p>
</div>
</body>
</html>
"""
Scenario: Including a file relative to source root
Given the Server is running at "asciidoc-app"
When I go to "/master.html"
Then I should see:
"""
<div class="literalblock">
<div class="content">
<pre>I'm included content.</pre>
</div>
"""
Scenario: Linking to an image
Given the Server is running at "asciidoc-app"
When I go to "/gallery.html"
Then I should see:
"""
<div class="imageblock">
<div class="content">
<img src="/images/tiger.gif" alt="tiger">
</div>
"""
Scenario: Configuring custom AsciiDoc attributes
Given a fixture app "asciidoc-app"
And a file named "config.rb" with:
"""
set :asciidoc_attributes, %w(foo=bar)
"""
Given the Server is running at "asciidoc-app"
When I go to "/custom-attribute.html"
Then I should see "bar"
Scenario: Highlighting source code
Given a fixture app "asciidoc-app"
And a file named "config.rb" with:
"""
set :asciidoc_attributes, %w(source-highlighter=html-pipeline)
"""
Given the Server is running at "asciidoc-app"
When I go to "/code.html"
Then I should see:
"""
<div class="listingblock">
<div class="content">
<pre lang="ruby"><code>puts "Is this mic on?"</code></pre>
</div>
</div>
"""

View file

@ -0,0 +1 @@
I'm included content.

View file

@ -0,0 +1,3 @@
```ruby
puts "Is this mic on?"
```

View file

@ -0,0 +1,3 @@
++++
{foo}
++++

View file

@ -0,0 +1 @@
image::tiger.gif[]

View file

@ -0,0 +1,2 @@
:page-layout: false
Hello, AsciiDoc!

View file

@ -0,0 +1,5 @@
---
title: Page Title
layout: default
---
Hello, AsciiDoc!

View file

@ -0,0 +1,2 @@
:page-layout: default
Hello, AsciiDoc!

View file

@ -0,0 +1,4 @@
= Page Title
:page-layout: default
Hello, AsciiDoc!

View file

@ -0,0 +1,4 @@
Hello, AsciiDoc!
ifdef::env-middleman[]
Middleman, I am in you.
endif::env-middleman[]

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 B

View file

@ -0,0 +1,10 @@
<!DOCTYPE html>
<html>
<head>
<title><%= data.page.title || 'Fallback' %></title>
</head>
<body>
<%= yield %>
</body>
</html>

View file

@ -0,0 +1,3 @@
....
include::_include.adoc[]
....

View file

@ -18,16 +18,23 @@ module Middleman
app.after_configuration do app.after_configuration do
# QUESTION should base_dir be equal to docdir instead? # QUESTION should base_dir be equal to docdir instead?
config[:asciidoc][:base_dir] = File.expand_path config[:source] config[:asciidoc][:base_dir] = source_dir
config[:asciidoc][:attributes].concat(config[:asciidoc_attributes] || []) config[:asciidoc][:attributes].concat(config[:asciidoc_attributes] || [])
config[:asciidoc][:attributes] << %(imagesdir=#{File.join (config[:http_prefix] || '/').chomp('/'), config[:images_dir]}) config[:asciidoc][:attributes] << %(imagesdir=#{File.join((config[:http_prefix] || '/').chomp('/'), config[:images_dir])})
sitemap.provides_metadata(/\.adoc$/) do |path| sitemap.provides_metadata(/\.adoc$/) do |path|
# read the AsciiDoc header only to set page options and data # read the AsciiDoc header only to set page options and data
# header values can be accessed via app.data.page.<name> in the layout # header values can be accessed via app.data.page.<name> in the layout
doc = Asciidoctor.load_file path, :safe => :safe, :parse_header_only => true doc = Asciidoctor.load_file path, :safe => :safe, :parse_header_only => true
opts = {} opts = {}
opts[:layout] = (doc.attr 'page-layout') if (doc.attr? 'page-layout') if doc.attr? 'page-layout'
case (layout = (doc.attr 'page-layout'))
when '', 'false'
opts[:layout] = false
else
opts[:layout] = layout
end
end
opts[:layout_engine] = (doc.attr 'page-layout-engine') if (doc.attr? 'page-layout-engine') opts[:layout_engine] = (doc.attr 'page-layout-engine') if (doc.attr? 'page-layout-engine')
# TODO override attributes to set docfile, docdir, docname, etc # TODO override attributes to set docfile, docdir, docname, etc
# alternative is to set :renderer_options, which get merged into options by the rendering extension # alternative is to set :renderer_options, which get merged into options by the rendering extension