added cucumber tests for #1043, AsciiDoc support
This commit is contained in:
parent
55d844f667
commit
5439139b76
1
Gemfile
1
Gemfile
|
@ -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
|
||||||
|
|
155
middleman-core/features/asciidoc.feature
Normal file
155
middleman-core/features/asciidoc.feature
Normal 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>
|
||||||
|
"""
|
0
middleman-core/fixtures/asciidoc-app/config.rb
Normal file
0
middleman-core/fixtures/asciidoc-app/config.rb
Normal file
|
@ -0,0 +1 @@
|
||||||
|
I'm included content.
|
3
middleman-core/fixtures/asciidoc-app/source/code.adoc
Normal file
3
middleman-core/fixtures/asciidoc-app/source/code.adoc
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
```ruby
|
||||||
|
puts "Is this mic on?"
|
||||||
|
```
|
|
@ -0,0 +1,3 @@
|
||||||
|
++++
|
||||||
|
{foo}
|
||||||
|
++++
|
1
middleman-core/fixtures/asciidoc-app/source/gallery.adoc
Normal file
1
middleman-core/fixtures/asciidoc-app/source/gallery.adoc
Normal file
|
@ -0,0 +1 @@
|
||||||
|
image::tiger.gif[]
|
|
@ -0,0 +1,2 @@
|
||||||
|
:page-layout: false
|
||||||
|
Hello, AsciiDoc!
|
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
title: Page Title
|
||||||
|
layout: default
|
||||||
|
---
|
||||||
|
Hello, AsciiDoc!
|
|
@ -0,0 +1,2 @@
|
||||||
|
:page-layout: default
|
||||||
|
Hello, AsciiDoc!
|
|
@ -0,0 +1,4 @@
|
||||||
|
= Page Title
|
||||||
|
:page-layout: default
|
||||||
|
|
||||||
|
Hello, AsciiDoc!
|
4
middleman-core/fixtures/asciidoc-app/source/hello.adoc
Executable file
4
middleman-core/fixtures/asciidoc-app/source/hello.adoc
Executable file
|
@ -0,0 +1,4 @@
|
||||||
|
Hello, AsciiDoc!
|
||||||
|
ifdef::env-middleman[]
|
||||||
|
Middleman, I am in you.
|
||||||
|
endif::env-middleman[]
|
BIN
middleman-core/fixtures/asciidoc-app/source/images/tiger.gif
Executable file
BIN
middleman-core/fixtures/asciidoc-app/source/images/tiger.gif
Executable file
Binary file not shown.
After Width: | Height: | Size: 43 B |
|
@ -0,0 +1,10 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title><%= data.page.title || 'Fallback' %></title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<%= yield %>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
3
middleman-core/fixtures/asciidoc-app/source/master.adoc
Normal file
3
middleman-core/fixtures/asciidoc-app/source/master.adoc
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
....
|
||||||
|
include::_include.adoc[]
|
||||||
|
....
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue