Feature: Include tags In order to share their content across several pages As a hacker who likes to blog I want to be able to include files in my blog posts Scenario: Include a file with parameters Given I have an _includes directory And I have an "_includes/header.html" file that contains "
My awesome blog header: {{include.param}}
" And I have an "_includes/params.html" file that contains "Parameters:" And I have an "_includes/ignore.html" file that contains "" And I have a _posts directory And I have the following posts: | title | date | type | content | | Include Files | 2013-03-21 | html | {% include header.html param="myparam" %} | | Ignore params if unused | 2013-03-21 | html | {% include ignore.html date="today" %} | | List multiple parameters | 2013-03-21 | html | {% include params.html date="today" start="tomorrow" %} | | Dont keep parameters | 2013-03-21 | html | {% include ignore.html param="test" %}\n{% include header.html %} | | Allow params with spaces and quotes | 2013-04-07 | html | {% include params.html cool="param with spaces" super="\\"quoted\\"" single='has "quotes"' escaped='\\'single\\' quotes' %} | | Parameter syntax | 2013-04-12 | html | {% include params.html param1_or_2="value" %} | | Pass a variable | 2013-06-22 | html | {% assign var = 'some text' %}{% include params.html local=var title=page.title %} | When I run jekyll build Then I should get a zero exit status And the _site directory should exist And I should see "
My awesome blog header: myparam
" in "_site/2013/03/21/include-files.html" And I should not see "myparam" in "_site/2013/03/21/ignore-params-if-unused.html" And I should see "
  • date = today
  • " in "_site/2013/03/21/list-multiple-parameters.html" And I should see "
  • start = tomorrow
  • " in "_site/2013/03/21/list-multiple-parameters.html" And I should not see "
    My awesome blog header: myparam
    " in "_site/2013/03/21/dont-keep-parameters.html" But I should see "
    My awesome blog header:
    " in "_site/2013/03/21/dont-keep-parameters.html" And I should see "
  • cool = param with spaces
  • " in "_site/2013/04/07/allow-params-with-spaces-and-quotes.html" And I should see "
  • super = \"quoted\"
  • " in "_site/2013/04/07/allow-params-with-spaces-and-quotes.html" And I should see "
  • single = has \"quotes\"
  • " in "_site/2013/04/07/allow-params-with-spaces-and-quotes.html" And I should see "
  • escaped = 'single' quotes
  • " in "_site/2013/04/07/allow-params-with-spaces-and-quotes.html" And I should see "
  • param1_or_2 = value
  • " in "_site/2013/04/12/parameter-syntax.html" And I should see "
  • local = some text
  • " in "_site/2013/06/22/pass-a-variable.html" And I should see "
  • title = Pass a variable
  • " in "_site/2013/06/22/pass-a-variable.html" Scenario: Include a file from a variable Given I have an _includes directory And I have an "_includes/snippet.html" file that contains "a snippet" And I have an "_includes/parametrized.html" file that contains "works with {{include.what}}" And I have a configuration file with: | key | value | | include_file1 | snippet.html | | include_file2 | parametrized.html | And I have an "index.html" page that contains "{% include {{site.include_file1}} %} that {% include {{site.include_file2}} what='parameters' %}" When I run jekyll build Then I should get a zero exit status And the _site directory should exist And I should see "a snippet that works with parameters" in "_site/index.html" Scenario: Include a variable file in a loop Given I have an _includes directory And I have an "_includes/one.html" file that contains "one" And I have an "_includes/two.html" file that contains "two" And I have an "index.html" page with files "[one.html, two.html]" that contains "{% for file in page.files %}{% include {{file}} %} {% endfor %}" When I run jekyll build Then I should get a zero exit status And the _site directory should exist And I should see "one two" in "_site/index.html" Scenario: Include a file with variables and filters Given I have an _includes directory And I have an "_includes/one.html" file that contains "one included" And I have a configuration file with: | key | value | | include_file | one | And I have an "index.html" page that contains "{% include {{ site.include_file | append: '.html' }} %}" When I run jekyll build Then I should get a zero exit status And the _site directory should exist And I should see "one included" in "_site/index.html" Scenario: Include a file with partial variables Given I have an _includes directory And I have an "_includes/one.html" file that contains "one included" And I have a configuration file with: | key | value | | include_file | one | And I have an "index.html" page that contains "{% include {{ site.include_file }}.html %}" When I run jekyll build Then I should get a zero exit status And the _site directory should exist And I should see "one included" in "_site/index.html" Scenario: Include a file and rebuild when include content is changed Given I have an _includes directory And I have an "_includes/one.html" file that contains "include" And I have an "index.html" page that contains "{% include one.html %}" When I run jekyll build Then I should get a zero exit status And the _site directory should exist And I should see "include" in "_site/index.html" When I wait 1 second Then I have an "_includes/one.html" file that contains "include content changed" When I run jekyll build Then I should see "include content changed" in "_site/index.html" Scenario: Include a file with multiple variables Given I have an _includes directory And I have an "_includes/header-en.html" file that contains "include" And I have an "index.html" page that contains "{% assign name = 'header' %}{% assign locale = 'en' %}{% include {{name}}-{{locale}}.html %}" When I run jekyll build Then I should get a zero exit status And the _site directory should exist And I should see "include" in "_site/index.html"