jekyll-asciidoc 2.0.1 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.adoc +27 -8
  3. data/Gemfile +13 -3
  4. data/LICENSE.adoc +1 -1
  5. data/README.adoc +409 -103
  6. data/jekyll-asciidoc.gemspec +6 -7
  7. data/lib/jekyll-asciidoc/compat.rb +4 -3
  8. data/lib/jekyll-asciidoc/converter.rb +50 -30
  9. data/lib/jekyll-asciidoc/filters.rb +21 -1
  10. data/lib/jekyll-asciidoc/integrator.rb +42 -34
  11. data/lib/jekyll-asciidoc/mixins.rb +6 -0
  12. data/lib/jekyll-asciidoc/version.rb +1 -1
  13. data/spec/fixtures/basic_site/docid.adoc +4 -0
  14. data/spec/fixtures/basic_site/section-with-id-and-role.adoc +6 -0
  15. data/spec/fixtures/imagesdir_relative_to_root/_config.yml +1 -1
  16. data/spec/fixtures/{include_relative_to_doc → include_relative_to_docdir}/_config.yml +0 -0
  17. data/spec/fixtures/{include_relative_to_doc → include_relative_to_docdir}/_layouts/default.html +0 -0
  18. data/spec/fixtures/{include_relative_to_doc → include_relative_to_docdir}/about/_people.adoc +0 -0
  19. data/spec/fixtures/{include_relative_to_doc → include_relative_to_docdir}/about/index.adoc +0 -0
  20. data/spec/fixtures/include_relative_to_root/source/_config.yml +2 -0
  21. data/spec/fixtures/include_relative_to_root/source/_layouts/default.html +11 -0
  22. data/spec/fixtures/include_relative_to_root/source/about/_people.adoc +2 -0
  23. data/spec/fixtures/include_relative_to_root/source/about/index.adoc +13 -0
  24. data/spec/fixtures/tocify_filter/_config.yml +2 -0
  25. data/spec/fixtures/tocify_filter/_layouts/default.html +15 -0
  26. data/spec/fixtures/tocify_filter/index.adoc +25 -0
  27. data/spec/fixtures/with_posts/_config.yml +4 -0
  28. data/spec/fixtures/with_posts/_layouts/post.html +8 -0
  29. data/spec/fixtures/with_posts/_posts/2016-02-02-post-with-singular-vars.adoc +7 -0
  30. data/spec/fixtures/with_posts/_posts/2016-06-15-post-with-date.adoc +4 -0
  31. data/spec/fixtures/with_posts/_posts/2016-07-15-post-with-date-and-tz.adoc +4 -0
  32. data/spec/fixtures/with_posts/_posts/2016-07-20-post-with-date-in-revision-line.adoc +6 -0
  33. data/spec/fixtures/xhtml_syntax/images/sunset.jpg +0 -0
  34. data/spec/jekyll-asciidoc_spec.rb +320 -127
  35. data/spec/spec_helper.rb +4 -0
  36. metadata +41 -15
@@ -0,0 +1,13 @@
1
+ = About Us
2
+
3
+ We provide content design services for open source tech companies.
4
+
5
+ * docfile={docfile}
6
+ * docdir={docdir}
7
+ * outfile={outfile}
8
+ * outdir={outdir}
9
+ * outpath={outpath}
10
+
11
+ == Our Team
12
+
13
+ include::source/about/_people.adoc[]
@@ -0,0 +1,2 @@
1
+ gems:
2
+ - jekyll-asciidoc
@@ -0,0 +1,15 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>{{ page.title }}</title>
6
+ </head>
7
+ <body>
8
+ <div class="page-content">
9
+ {{ content }}
10
+ </div>
11
+ <aside class="page-toc">
12
+ {{ page.document | tocify_asciidoc: 2 }}
13
+ </aside>
14
+ </body>
15
+ </html>
@@ -0,0 +1,25 @@
1
+ = Page Title
2
+
3
+ == Major Section A
4
+
5
+ content
6
+
7
+ === Minor Section A.1
8
+
9
+ content
10
+
11
+ == Major Section B
12
+
13
+ content
14
+
15
+ === Minor Section B.1
16
+
17
+ content
18
+
19
+ ==== Micro Section B.1.1
20
+
21
+ content
22
+
23
+ == Major Section C
24
+
25
+ content
@@ -1,2 +1,6 @@
1
1
  gems:
2
2
  - jekyll-asciidoc
3
+ asciidoctor:
4
+ # base_dir is set to :docdir here to verify excerpt conversion doesn't break
5
+ # we probably want to create a dedicated fixture for this scenario
6
+ base_dir: :docdir
@@ -5,9 +5,17 @@
5
5
  <title>{{ page.title }}</title>
6
6
  </head>
7
7
  <body>
8
+ <article class="post">
9
+ <header class="post-header">
10
+ <h1 class="post-title">{{ page.title }}</h1>
11
+ <p class="post-details">
12
+ <time class="date-published" datetime="{{ page.date | date_to_xmlschema }}">{{ page.date | date: "%B %d, %Y" }}</time>
13
+ </p>
14
+ </header>
8
15
  <div class="post-content">
9
16
  {{ content }}
10
17
  </div>
18
+ </article>
11
19
  <footer>
12
20
  <p>Footer for post layout.</p>
13
21
  </footer>
@@ -0,0 +1,7 @@
1
+ = Post With Categories
2
+ :page-category: node
3
+ :page-categories: [code, javascript]
4
+ :page-tag: tip
5
+ :page-tags: [syntax, beginner]
6
+
7
+ Lorem ipsum.
@@ -0,0 +1,4 @@
1
+ = Post With Date
2
+ :revdate: 2016-06-15 10:30:00
3
+
4
+ Lorem ipsum.
@@ -0,0 +1,4 @@
1
+ = Post With Date and Time Zone
2
+ :revdate: 2016-07-15 04:15:30 -0600
3
+
4
+ Lorem ipsum.
@@ -0,0 +1,6 @@
1
+ = Post With Date in Revision Line
2
+ Author Name
3
+ // NOTE cannot use colon in date because it's used as the delimiter for the revision remark
4
+ 2016-07-20 05h45m25s -0600
5
+
6
+ Lorem ipsum.
@@ -22,6 +22,10 @@ describe 'Jekyll::AsciiDoc' do
22
22
  'default_config'
23
23
  end
24
24
 
25
+ before :each do
26
+ site.object_id
27
+ end
28
+
25
29
  it 'should register AsciiDoc converter' do
26
30
  expect(site.converters.any? {|c| ::Jekyll::AsciiDoc::Converter === c }).to be true
27
31
  end
@@ -40,6 +44,15 @@ describe 'Jekyll::AsciiDoc' do
40
44
  expect(converter.output_ext '.adoc').to eql('.html')
41
45
  end
42
46
 
47
+ it 'should mark configuration as configured to prevent duplicate initialization' do
48
+ expect(asciidoc_config = site.config['asciidoc']).to be_a(::Jekyll::AsciiDoc::Configured)
49
+ expect(asciidoctor_config = site.config['asciidoctor']).to be_a(::Jekyll::AsciiDoc::Configured)
50
+ site.reset
51
+ site.setup
52
+ expect(site.config['asciidoc'].object_id).to eql(asciidoc_config.object_id)
53
+ expect(site.config['asciidoctor'].object_id).to eql(asciidoctor_config.object_id)
54
+ end
55
+
43
56
  it 'should use Asciidoctor to process AsciiDoc files by default' do
44
57
  expect(site.config['asciidoc']).to be_a(::Hash)
45
58
  expect(site.config['asciidoc']['processor']).to eql('asciidoctor')
@@ -93,6 +106,10 @@ describe 'Jekyll::AsciiDoc' do
93
106
  'legacy_config'
94
107
  end
95
108
 
109
+ before :each do
110
+ site.object_id
111
+ end
112
+
96
113
  it 'should allow processor to be set using asciidoc key' do
97
114
  expect(site.config['asciidoc']).to be_a(::Hash)
98
115
  expect(site.config['asciidoc']['processor']).to eql('asciidoctor')
@@ -114,6 +131,10 @@ describe 'Jekyll::AsciiDoc' do
114
131
  'hybrid_config'
115
132
  end
116
133
 
134
+ before :each do
135
+ site.object_id
136
+ end
137
+
117
138
  it 'should use new key for ext over legacy key' do
118
139
  expect(site.config['asciidoc']).to be_a(::Hash)
119
140
  expect(site.config['asciidoc']['ext']).to eql('asciidoc,adoc')
@@ -130,6 +151,10 @@ describe 'Jekyll::AsciiDoc' do
130
151
  'default_config'
131
152
  end
132
153
 
154
+ before :each do
155
+ site.object_id
156
+ end
157
+
133
158
  it 'should parse string as YAML value' do
134
159
  expect(integrator.send :parse_yaml_value, '').to eql('')
135
160
  expect(integrator.send :parse_yaml_value, 'true').to be true
@@ -150,11 +175,15 @@ describe 'Jekyll::AsciiDoc' do
150
175
  'imagesdir_relative_to_root'
151
176
  end
152
177
 
178
+ before :each do
179
+ site.object_id
180
+ end
181
+
153
182
  it 'should set imagesoutdir if imagesdir is relative to root' do
154
183
  expect(asciidoctor_config = site.config['asciidoctor']).to be_a(::Hash)
155
184
  expect(attrs = asciidoctor_config[:attributes]).to be_a(::Hash)
156
- expect(attrs['imagesdir']).to eql('/images')
157
- expect(attrs['imagesoutdir']).to eql(::File.join(site.dest, attrs['imagesdir']))
185
+ expect(attrs['imagesdir']).to eql('/images@')
186
+ expect(attrs['imagesoutdir']).to eql(::File.join site.dest, (attrs['imagesdir'].chomp '@'))
158
187
  end
159
188
  end
160
189
 
@@ -163,6 +192,10 @@ describe 'Jekyll::AsciiDoc' do
163
192
  'default_config'
164
193
  end
165
194
 
195
+ before :each do
196
+ site.object_id
197
+ end
198
+
166
199
  it 'should not set imagesoutdir if imagesdir is not set' do
167
200
  expect(asciidoctor_config = site.config['asciidoctor']).to be_a(::Hash)
168
201
  expect(attrs = asciidoctor_config[:attributes]).to be_a(::Hash)
@@ -176,43 +209,91 @@ describe 'Jekyll::AsciiDoc' do
176
209
  'default_config'
177
210
  end
178
211
 
212
+ before :each do
213
+ site.object_id
214
+ end
215
+
216
+ it 'should assign nil value to attribute for attribute with nil value' do
217
+ result = converter.send :assemble_attributes, { 'icons' => nil }
218
+ expect(result.key? 'icons').to be true
219
+ expect(result['icons']).to be_nil
220
+ end
221
+
179
222
  it 'should transform negated attribute with trailing ! to attribute with nil value' do
180
- result = converter.send :hashify_attributes, {'icons!' => ''}
223
+ result = converter.send :assemble_attributes, { 'icons!' => '' }
181
224
  expect(result.key? 'icons').to be true
182
225
  expect(result['icons']).to be_nil
183
226
  end
184
227
 
185
228
  it 'should transform negated attribute with leading ! to attribute with nil value' do
186
- result = converter.send :hashify_attributes, {'!icons' => ''}
229
+ result = converter.send :assemble_attributes, { '!icons' => '' }
187
230
  expect(result.key? 'icons').to be true
188
231
  expect(result['icons']).to be_nil
189
232
  end
190
233
 
191
- it 'should remove existing attribute when attribute is unset' do
192
- result = converter.send :hashify_attributes, {'icons' => 'font', '!icons' => ''}
234
+ it 'should set existing attribute to nil when attribute is unset' do
235
+ result = converter.send :assemble_attributes, { 'icons' => 'font', '!icons' => '' }
193
236
  expect(result.key? 'icons').to be true
194
237
  expect(result['icons']).to be_nil
195
238
  end
196
239
 
197
- it 'should assign existing attribute to new value when set again' do
198
- result = converter.send :hashify_attributes, ['!icons', 'icons=font']
240
+ it 'should assign value to existing attribute when set again' do
241
+ result = converter.send :assemble_attributes, ['!icons', 'icons=font', '!source-highlighter', 'source-highlighter=coderay']
199
242
  expect(result['icons']).to eql('font')
243
+ expect(result['source-highlighter']).to eql('coderay')
200
244
  end
201
245
 
202
246
  it 'should resolve attribute references in attribute value' do
203
- result = converter.send :hashify_attributes,{'foo' => 'foo', 'bar' => 'bar', 'foobar' => '{foo}{bar}'}
247
+ result = converter.send :assemble_attributes, { 'foo' => 'foo', 'bar' => 'bar', 'baz' => nil, 'foobar' => '{foo}{bar}{baz}' }
248
+ expect(result['foobar']).to eql('foobar')
249
+ end
250
+
251
+ it 'should drop trailing @ from value when resolving attribute reference' do
252
+ result = converter.send :assemble_attributes, { 'foo' => 'foo@', 'bar' => 'bar@', 'baz' => '@', 'foobar' => '{foo}{bar}{baz}' }
204
253
  expect(result['foobar']).to eql('foobar')
205
254
  end
206
255
 
207
256
  it 'should not resolve escaped attribute reference' do
208
- result = converter.send :hashify_attributes, {'foo' => 'foo', 'bar' => 'bar', 'foobar' => '{foo}\{bar}'}
257
+ result = converter.send :assemble_attributes, { 'foo' => 'foo', 'bar' => 'bar', 'foobar' => '{foo}\{bar}' }
209
258
  expect(result['foobar']).to eql('foo{bar}')
210
259
  end
211
260
 
212
261
  it 'should leave unresolved attribute reference in place' do
213
- result = converter.send :hashify_attributes, {'foo' => 'foo', 'foobar' => '{foo}{bar}'}
262
+ result = converter.send :assemble_attributes, { 'foo' => 'foo', 'foobar' => '{foo}{bar}' }
214
263
  expect(result['foobar']).to eql('foo{bar}')
215
264
  end
265
+
266
+ it 'should remove matching attribute if attribute starts with minus' do
267
+ result = converter.send :assemble_attributes, { '-idseparator' => '' }, { 'idseparator' => '-' }
268
+ expect(result).to be_empty
269
+ end
270
+
271
+ it 'should not fail if attribute to be removed does not exist' do
272
+ result = converter.send :assemble_attributes, { '-idseparator' => '' }
273
+ expect(result).to be_empty
274
+ end
275
+
276
+ it 'should assign empty string to attribute if value is true' do
277
+ result = converter.send :assemble_attributes, { 'icons' => true }
278
+ expect(result['icons']).to eql('')
279
+ end
280
+
281
+ it 'should assign nil value to attribute if value is false' do
282
+ result = converter.send :assemble_attributes, { 'icons' => false }
283
+ expect(result.key? 'icons').to be true
284
+ expect(result['icons']).to be_nil
285
+ end
286
+
287
+ it 'should assign numeric value as string if value is numeric' do
288
+ result = converter.send :assemble_attributes, { 'count' => 1 }
289
+ expect(result['count']).to eql('1')
290
+ end
291
+
292
+ it 'should pass through Date value to attribute if value is Date' do
293
+ date = ::Date.parse('2016-01-01')
294
+ result = converter.send :assemble_attributes, { 'localdate' => date }
295
+ expect(result['localdate']).to eql(date)
296
+ end
216
297
  end
217
298
 
218
299
  describe 'attributes as hash' do
@@ -220,6 +301,10 @@ describe 'Jekyll::AsciiDoc' do
220
301
  'attributes_as_hash'
221
302
  end
222
303
 
304
+ before :each do
305
+ site.object_id
306
+ end
307
+
223
308
  it 'should merge attributes defined as a Hash into the attributes Hash' do
224
309
  expect(asciidoctor_config = site.config['asciidoctor']).to be_a(::Hash)
225
310
  expect(attrs = asciidoctor_config[:attributes]).to be_a(::Hash)
@@ -236,6 +321,10 @@ describe 'Jekyll::AsciiDoc' do
236
321
  'attributes_as_array'
237
322
  end
238
323
 
324
+ before :each do
325
+ site.object_id
326
+ end
327
+
239
328
  it 'should merge attributes defined as an Array into the attributes Hash' do
240
329
  expect(asciidoctor_config = site.config['asciidoctor']).to be_a(::Hash)
241
330
  expect(attrs = asciidoctor_config[:attributes]).to be_a(::Hash)
@@ -252,9 +341,7 @@ describe 'Jekyll::AsciiDoc' do
252
341
  'alternate_page_attribute_prefix'
253
342
  end
254
343
 
255
- before :each do
256
- site.process
257
- end
344
+ before(:each) { site.process }
258
345
 
259
346
  it 'should strip trailing hyphen from page attribute prefix value' do
260
347
  expect(site.config['asciidoc']).to be_a(::Hash)
@@ -268,8 +355,8 @@ describe 'Jekyll::AsciiDoc' do
268
355
  file = output_file 'permalink/index.html'
269
356
  expect(::File).to exist(file)
270
357
  contents = ::File.read file
271
- expect(contents).to match('<div class="page-content">')
272
- expect(contents).not_to match('<meta name="generator" content="Asciidoctor 1.5.4">')
358
+ expect(contents).to include('<div class="page-content">')
359
+ expect(contents).not_to include(%(<meta name="generator" content="Asciidoctor #{::Asciidoctor::VERSION}">))
273
360
  end
274
361
  end
275
362
 
@@ -278,9 +365,7 @@ describe 'Jekyll::AsciiDoc' do
278
365
  'blank_page_attribute_prefix'
279
366
  end
280
367
 
281
- before :each do
282
- site.process
283
- end
368
+ before(:each) { site.process }
284
369
 
285
370
  it 'should coerce null value for page attribute prefix to empty string' do
286
371
  expect(site.config['asciidoc']).to be_a(::Hash)
@@ -294,8 +379,8 @@ describe 'Jekyll::AsciiDoc' do
294
379
  file = output_file 'permalink/index.html'
295
380
  expect(::File).to exist(file)
296
381
  contents = ::File.read file
297
- expect(contents).to match('<div class="page-content">')
298
- expect(contents).not_to match('<meta name="generator" content="Asciidoctor 1.5.4">')
382
+ expect(contents).to include('<div class="page-content">')
383
+ expect(contents).not_to include(%(<meta name="generator" content="Asciidoctor #{::Asciidoctor::VERSION}">))
299
384
  end
300
385
  end
301
386
 
@@ -304,9 +389,7 @@ describe 'Jekyll::AsciiDoc' do
304
389
  'basic_site'
305
390
  end
306
391
 
307
- before :each do
308
- site.process
309
- end
392
+ before(:each) { site.process }
310
393
 
311
394
  it 'should consider a plain AsciiDoc file to have a YAML header' do
312
395
  file = source_file 'without-front-matter-header.adoc'
@@ -317,14 +400,14 @@ describe 'Jekyll::AsciiDoc' do
317
400
  file = output_file 'without-front-matter-header.html'
318
401
  expect(::File).to exist(file)
319
402
  contents = ::File.read file
320
- expect(contents).to match('<p>Lorem ipsum.</p>')
403
+ expect(contents).to include('<p>Lorem ipsum.</p>')
321
404
  end
322
405
 
323
406
  it 'should promote AsciiDoc document title to page title' do
324
407
  file = output_file 'without-front-matter-header.html'
325
408
  expect(::File).to exist(file)
326
409
  contents = ::File.read file
327
- expect(contents).to match('<title>Page Title</title>')
410
+ expect(contents).to include('<title>Page Title</title>')
328
411
  end
329
412
 
330
413
  it 'should convert an AsciiDoc with no doctitle or AsciiDoc header' do
@@ -334,8 +417,8 @@ describe 'Jekyll::AsciiDoc' do
334
417
  file = output_file 'no-doctitle.html'
335
418
  expect(::File).to exist(file)
336
419
  contents = ::File.read file
337
- expect(contents).to match('<title>Site Title</title>')
338
- expect(contents).to match(%(<p>Just content.\nLorem ipsum.</p>))
420
+ expect(contents).to include('<title>Site Title</title>')
421
+ expect(contents).to include(%(<p>Just content.\nLorem ipsum.</p>))
339
422
  end
340
423
 
341
424
  it 'should convert an AsciiDoc with bare AsciiDoc header' do
@@ -346,8 +429,8 @@ describe 'Jekyll::AsciiDoc' do
346
429
  file = output_file 'bare/index.html'
347
430
  expect(::File).to exist(file)
348
431
  contents = ::File.read file
349
- expect(contents).to match('<title>Site Title</title>')
350
- expect(contents).to match(%(<p>Just content.\nLorem ipsum.</p>))
432
+ expect(contents).to include('<title>Site Title</title>')
433
+ expect(contents).to include(%(<p>Just content.\nLorem ipsum.</p>))
351
434
  end
352
435
 
353
436
  it 'should consider an AsciiDoc file with a front matter header to have a YAML header' do
@@ -359,22 +442,36 @@ describe 'Jekyll::AsciiDoc' do
359
442
  file = output_file 'with-front-matter-header.html'
360
443
  expect(::File).to exist(file)
361
444
  contents = ::File.read file
362
- expect(contents).to match('<title>Page Title</title>')
363
- expect(contents).to match('<p>Lorem ipsum.</p>')
445
+ expect(contents).to include('<title>Page Title</title>')
446
+ expect(contents).to include('<p>Lorem ipsum.</p>')
447
+ end
448
+
449
+ it 'should apply explicit id and role attributes on section titles' do
450
+ file = output_file 'section-with-id-and-role.html'
451
+ expect(::File).to exist(file)
452
+ contents = ::File.read file
453
+ expect(contents).to include(%(<div class="sect1 section-role">\n<h2 id="section-id">Section Title</h2>))
454
+ end
455
+
456
+ it 'should assign AsciiDoc document id, if set, to docid page attribute' do
457
+ page = find_page 'docid.adoc'
458
+ expect(page).not_to be_nil
459
+ expect(page.data.key? 'docid').to be true
460
+ expect(page.data['docid']).to eq('page-id')
364
461
  end
365
462
 
366
463
  it 'should not use Liquid preprocessor by default' do
367
464
  file = output_file 'no-liquid.html'
368
465
  expect(::File).to exist(file)
369
466
  contents = ::File.read file
370
- expect(contents).to match('<p>{{ page.title }}</p>')
467
+ expect(contents).to include('<p>{{ page.title }}</p>')
371
468
  end
372
469
 
373
470
  it 'should enable Liquid preprocessor if liquid page variable is set' do
374
471
  file = output_file 'liquid-enabled.html'
375
472
  expect(::File).to exist(file)
376
473
  contents = ::File.read file
377
- expect(contents).to match('<p>Liquid Enabled</p>')
474
+ expect(contents).to include('<p>Liquid Enabled</p>')
378
475
  end
379
476
 
380
477
  it 'should not publish a page if the published page variable is set in the AsciiDoc header' do
@@ -386,55 +483,53 @@ describe 'Jekyll::AsciiDoc' do
386
483
  file = output_file 'standalone-a.html'
387
484
  expect(::File).to exist(file)
388
485
  contents = ::File.read file
389
- expect(contents).to match('<meta name="generator" content="Asciidoctor 1.5.4">')
390
- expect(contents).to match('<title>Standalone Page A</title>')
391
- expect(contents).to match('<h1>Standalone Page A</h1>')
486
+ expect(contents).to include(%(<meta name="generator" content="Asciidoctor #{::Asciidoctor::VERSION}">))
487
+ expect(contents).to include('<title>Standalone Page A</title>')
488
+ expect(contents).to include('<h1>Standalone Page A</h1>')
392
489
  end
393
490
 
394
491
  it 'should output a standalone HTML page if the page-layout attribute is false' do
395
492
  file = output_file 'standalone-b.html'
396
493
  expect(::File).to exist(file)
397
494
  contents = ::File.read file
398
- expect(contents).to match('<meta name="generator" content="Asciidoctor 1.5.4">')
399
- expect(contents).to match('<title>Standalone Page B</title>')
400
- expect(contents).to match('<h1>Standalone Page B</h1>')
495
+ expect(contents).to include(%(<meta name="generator" content="Asciidoctor #{::Asciidoctor::VERSION}">))
496
+ expect(contents).to include('<title>Standalone Page B</title>')
497
+ expect(contents).to include('<h1>Standalone Page B</h1>')
401
498
  end
402
499
 
403
500
  it 'should apply layout named page to page content if page-layout attribute not specified' do
404
501
  file = output_file 'without-front-matter-header.html'
405
502
  expect(::File).to exist(file)
406
503
  contents = ::File.read file
407
- expect(contents).to match('<p>Footer for page layout.</p>')
504
+ expect(contents).to include('<p>Footer for page layout.</p>')
408
505
  end
409
506
 
410
507
  it 'should apply layout named page to page content if page-layout attribute is empty' do
411
508
  file = output_file 'empty-layout.html'
412
509
  expect(::File).to exist(file)
413
510
  contents = ::File.read file
414
- expect(contents).to match('<p>Footer for page layout.</p>')
511
+ expect(contents).to include('<p>Footer for page layout.</p>')
415
512
  end
416
513
 
417
514
  it 'should apply layout named page to page content if page-layout attribute has value _auto' do
418
515
  file = output_file 'auto-layout.html'
419
516
  expect(::File).to exist(file)
420
517
  contents = ::File.read file
421
- expect(contents).to match('<p>Footer for page layout.</p>')
518
+ expect(contents).to include('<p>Footer for page layout.</p>')
422
519
  end
423
520
 
424
521
  it 'should apply specified layout to page content if page-layout has non-empty string value' do
425
522
  file = output_file 'custom-layout.html'
426
523
  expect(::File).to exist(file)
427
524
  contents = ::File.read file
428
- expect(contents).to match('<p>Footer for custom layout.</p>')
525
+ expect(contents).to include('<p>Footer for custom layout.</p>')
429
526
  end
430
527
 
431
528
  it 'should not apply a layout to page content if page-layout attribute is nil' do
432
529
  file = output_file 'nil-layout.html'
433
530
  expect(::File).to exist(file)
434
531
  contents = ::File.read file
435
- expect(contents).to match('div class="paragraph">
436
- <p>Lorem ipsum.</p>
437
- </div>')
532
+ expect(contents).to include(%(div class="paragraph">\n<p>Lorem ipsum.</p>\n</div>))
438
533
  end
439
534
 
440
535
  it 'should convert an empty page attribute value to empty string' do
@@ -448,10 +543,10 @@ describe 'Jekyll::AsciiDoc' do
448
543
  out_file = output_file 'subdir/page-in-subdir.html'
449
544
  expect(::File).to exist(out_file)
450
545
  contents = ::File.read out_file
451
- expect(contents).to match(%(docdir=#{::Dir.pwd}))
546
+ expect(contents).to include(%(docdir=#{::Dir.pwd}))
452
547
  if ::Jekyll::MIN_VERSION_3
453
- expect(contents).to match(%(docfile=#{src_file}))
454
- expect(contents).to match(%(docname=#{::File.basename src_file, '.adoc'}))
548
+ expect(contents).to include(%(docfile=#{src_file}))
549
+ expect(contents).to include(%(docname=#{::File.basename src_file, '.adoc'}))
455
550
  end
456
551
  end
457
552
 
@@ -474,11 +569,9 @@ describe 'Jekyll::AsciiDoc' do
474
569
  'explicit_site_time'
475
570
  end
476
571
 
477
- before :each do
478
- site.process
479
- end
572
+ before(:each) { site.process }
480
573
 
481
- it 'should set localdatetime on AsciiDoc pages to match site time and timezone' do
574
+ it 'should set localdatetime on AsciiDoc pages to match site time and time zone' do
482
575
  expect(asciidoctor_config = site.config['asciidoctor']).to be_a(::Hash)
483
576
  expect(attrs = asciidoctor_config[:attributes]).to be_a(::Hash)
484
577
  expect(attrs['localdate']).to eql(site.time.strftime '%Y-%m-%d')
@@ -486,7 +579,7 @@ describe 'Jekyll::AsciiDoc' do
486
579
  file = output_file 'home.html'
487
580
  expect(::File).to exist(file)
488
581
  contents = ::File.read file
489
- expect(contents).to match(%(localdatetime=#{site.time.strftime '%Y-%m-%d %H:%M:%S %Z'}))
582
+ expect(contents).to include(%(localdatetime=#{site.time.strftime '%Y-%m-%d %H:%M:%S %Z'}))
490
583
  end
491
584
  end
492
585
 
@@ -495,9 +588,7 @@ describe 'Jekyll::AsciiDoc' do
495
588
  'safe_mode'
496
589
  end
497
590
 
498
- before :each do
499
- site.process
500
- end
591
+ before(:each) { site.process }
501
592
 
502
593
  it 'should register converter and generator when running in safe mode' do
503
594
  expect(site.converters.any? {|c| ::Jekyll::AsciiDoc::Converter === c }).to be true
@@ -508,8 +599,8 @@ describe 'Jekyll::AsciiDoc' do
508
599
  file = output_file 'home.html'
509
600
  expect(::File).to exist(file)
510
601
  contents = ::File.read file
511
- expect(contents).to match('<title>Home Page</title>')
512
- expect(contents).to match('<p>Footer for home layout.</p>')
602
+ expect(contents).to include('<title>Home Page</title>')
603
+ expect(contents).to include('<p>Footer for home layout.</p>')
513
604
  end
514
605
  end
515
606
 
@@ -518,29 +609,27 @@ describe 'Jekyll::AsciiDoc' do
518
609
  'fallback_to_default_layout'
519
610
  end
520
611
 
521
- before :each do
522
- site.process
523
- end
612
+ before(:each) { site.process }
524
613
 
525
614
  it 'should use default layout for page if page layout is not available' do
526
615
  file = output_file 'home.html'
527
616
  expect(::File).to exist(file)
528
617
  contents = ::File.read file
529
- expect(contents).to match('<p>Footer for default layout.</p>')
618
+ expect(contents).to include('<p>Footer for default layout.</p>')
530
619
  end
531
620
 
532
621
  it 'should use default layout for post if post layout is not available' do
533
622
  file = output_file '2016/01/01/post.html'
534
623
  expect(::File).to exist(file)
535
624
  contents = ::File.read file
536
- expect(contents).to match('<p>Footer for default layout.</p>')
625
+ expect(contents).to include('<p>Footer for default layout.</p>')
537
626
  end
538
627
 
539
628
  it 'should use default layout for document if layout for document collection is not available' do
540
629
  file = output_file 'blueprints/blueprint.html'
541
630
  expect(::File).to exist(file)
542
631
  contents = ::File.read file
543
- expect(contents).to match('<p>Footer for default layout.</p>')
632
+ expect(contents).to include('<p>Footer for default layout.</p>')
544
633
  end
545
634
  end
546
635
 
@@ -549,9 +638,7 @@ describe 'Jekyll::AsciiDoc' do
549
638
  'require_front_matter_header'
550
639
  end
551
640
 
552
- before :each do
553
- site.process
554
- end
641
+ before(:each) { site.process }
555
642
 
556
643
  it 'should consider an AsciiDoc file with a front matter header to have a YAML header' do
557
644
  file = source_file 'with-front-matter-header.adoc'
@@ -567,8 +654,8 @@ describe 'Jekyll::AsciiDoc' do
567
654
  file = output_file 'with-front-matter-header.html'
568
655
  expect(::File).to exist(file)
569
656
  contents = ::File.read file
570
- expect(contents).to match('<title>Page Title</title>')
571
- expect(contents).to match('<p>Lorem ipsum.</p>')
657
+ expect(contents).to include('<title>Page Title</title>')
658
+ expect(contents).to include('<p>Lorem ipsum.</p>')
572
659
  end
573
660
 
574
661
  it 'should not convert an AsciiDoc file without a front matter header' do
@@ -594,8 +681,8 @@ describe 'Jekyll::AsciiDoc' do
594
681
  file = output_file '2016/01/01/welcome.html'
595
682
  expect(::File).to exist(file)
596
683
  contents = ::File.read file
597
- expect(contents).to match('<title>Welcome, Visitor!</title>')
598
- expect(contents).not_to match('<h1>Welcome, Visitor!</h1>')
684
+ expect(contents).to include('<title>Welcome, Visitor!</title>')
685
+ expect(contents).not_to include('<h1>Welcome, Visitor!</h1>')
599
686
  end
600
687
 
601
688
  it 'should use automatic title if no document title is given' do
@@ -609,7 +696,7 @@ describe 'Jekyll::AsciiDoc' do
609
696
  file = output_file '2016/05/31/automatic-title.html'
610
697
  expect(::File).to exist(file)
611
698
  contents = ::File.read file
612
- expect(contents).to match('<title>Automatic Title</title>')
699
+ expect(contents).to include('<title>Automatic Title</title>')
613
700
  end
614
701
 
615
702
  it 'should set author of post to value defined in AsciiDoc header' do
@@ -622,45 +709,44 @@ describe 'Jekyll::AsciiDoc' do
622
709
  file = output_file '2016/01/01/welcome.html'
623
710
  expect(::File).to exist(file)
624
711
  contents = ::File.read file
625
- expect(contents).to match('<p>Footer for post layout.</p>')
712
+ expect(contents).to include('<p>Footer for post layout.</p>')
626
713
  end
627
714
 
628
715
  it 'should apply layout named post to post content if page-layout attribute is empty' do
629
716
  file = output_file '2016/01/02/empty-layout.html'
630
717
  expect(::File).to exist(file)
631
718
  contents = ::File.read file
632
- expect(contents).to match('<p>Footer for post layout.</p>')
719
+ expect(contents).to include('<p>Footer for post layout.</p>')
633
720
  end
634
721
 
635
722
  it 'should apply layout named post to post content if page-layout attribute has value _auto' do
636
723
  file = output_file '2016/01/03/auto-layout.html'
637
724
  expect(::File).to exist(file)
638
725
  contents = ::File.read file
639
- expect(contents).to match('<p>Footer for post layout.</p>')
726
+ expect(contents).to include('<p>Footer for post layout.</p>')
640
727
  end
641
728
 
642
729
  it 'should apply custom layout to post content if page-layout attribute has non-empty string value' do
643
730
  file = output_file '2016/01/04/custom-layout.html'
644
731
  expect(::File).to exist(file)
645
732
  contents = ::File.read file
646
- expect(contents).to match('<p>Footer for custom layout.</p>')
733
+ expect(contents).to include('<p>Footer for custom layout.</p>')
647
734
  end
648
735
 
649
736
  it 'should not apply a layout to post content if page-layout attribute is nil' do
650
737
  file = output_file '2016/01/05/nil-layout.html'
651
738
  expect(::File).to exist(file)
652
739
  contents = ::File.read file
653
- expect(contents).to match('div class="paragraph">
654
- <p>Lorem ipsum.</p>
655
- </div>')
740
+ expect(contents).to include(%(div class="paragraph">\n<p>Lorem ipsum.</p>\n</div>))
656
741
  end
657
742
 
658
743
  it 'should show the title above the content if the showtitle attribute is set' do
659
744
  file = output_file '2016/04/01/show-me-the-title.html'
660
745
  expect(::File).to exist(file)
661
746
  contents = ::File.read file
662
- expect(contents).to match('<title>Show Me the Title</title>')
663
- expect(contents).to match('<h1>Show Me the Title</h1>')
747
+ expect(contents).to include('<title>Show Me the Title</title>')
748
+ expect(contents).to include('<h1 class="post-title">Show Me the Title</h1>')
749
+ expect(contents).to include('<h1>Show Me the Title</h1>')
664
750
  end
665
751
 
666
752
  it 'should interpret value of page attribute as YAML data' do
@@ -673,6 +759,60 @@ describe 'Jekyll::AsciiDoc' do
673
759
  end
674
760
  end
675
761
 
762
+ it 'should merge singular variables with collection variables' do
763
+ post = find_post '2016-02-02-post-with-singular-vars.adoc'
764
+ expect(post).not_to be_nil
765
+ expect(post.data['categories']).to eql(['code', 'javascript', 'node'])
766
+ expect(post.data['tags']).to eql(['syntax', 'beginner', 'tip'])
767
+ if ::Jekyll::MIN_VERSION_3
768
+ file = output_file 'code/javascript/node/2016/02/02/post-with-singular-vars.html'
769
+ expect(::File).to exist(file)
770
+ end
771
+ end
772
+
773
+ it 'should convert revdate to local Time object and use it as date of post' do
774
+ # NOTE Time.parse without time zone assumes time zone of site
775
+ date = ::Time.parse('2016-06-15 10:30:00')
776
+ date = date.localtime if ::Jekyll::MIN_VERSION_3
777
+ slug = 'post-with-date'
778
+ post = find_post %(#{date.strftime '%Y-%m-%d'}-#{slug}.adoc)
779
+ expect(post).not_to be_nil
780
+ expect(post.data['date']).to be_a(::Time)
781
+ expect(post.data['date'].to_s).to eql(date.to_s)
782
+ file = output_file %(#{date.strftime '%Y/%m/%d'}/#{slug}.html)
783
+ expect(::File).to exist(file)
784
+ contents = ::File.read file
785
+ expect(contents).to include(%(<time class="date-published" datetime="#{date.xmlschema}">#{date.strftime '%B %d, %Y'}</time>))
786
+ end
787
+
788
+ it 'should convert revdate with time zone to local Time object and use it as date of post' do
789
+ date = ::Time.parse('2016-07-15 04:15:30 -0600')
790
+ date = date.localtime if ::Jekyll::MIN_VERSION_3
791
+ slug = 'post-with-date-and-tz'
792
+ post = find_post %(#{date.strftime '%Y-%m-%d'}-#{slug}.adoc)
793
+ expect(post).not_to be_nil
794
+ expect(post.data['date']).to be_a(::Time)
795
+ expect(post.data['date'].to_s).to eql(date.to_s)
796
+ file = output_file %(#{date.strftime '%Y/%m/%d'}/#{slug}.html)
797
+ expect(::File).to exist(file)
798
+ contents = ::File.read file
799
+ expect(contents).to include(%(<time class="date-published" datetime="#{date.xmlschema}">#{date.strftime '%B %d, %Y'}</time>))
800
+ end
801
+
802
+ it 'should convert revdate in revision line to local Time object and use it as date of post' do
803
+ date = ::Time.parse('2016-07-20 05:45:25 -0600')
804
+ date = date.localtime if ::Jekyll::MIN_VERSION_3
805
+ slug = 'post-with-date-in-revision-line'
806
+ post = find_post %(#{date.strftime '%Y-%m-%d'}-#{slug}.adoc)
807
+ expect(post).not_to be_nil
808
+ expect(post.data['date']).to be_a(::Time)
809
+ expect(post.data['date'].to_s).to eql(date.to_s)
810
+ file = output_file %(#{date.strftime '%Y/%m/%d'}/#{slug}.html)
811
+ expect(::File).to exist(file)
812
+ contents = ::File.read file
813
+ expect(contents).to include(%(<time class="date-published" datetime="#{date.xmlschema}">#{date.strftime '%B %d, %Y'}</time>))
814
+ end
815
+
676
816
  it 'should process AsciiDoc header of draft post' do
677
817
  draft = find_draft 'a-draft-post.adoc'
678
818
  expect(draft).not_to be_nil
@@ -682,11 +822,11 @@ describe 'Jekyll::AsciiDoc' do
682
822
  expect(::File).to exist(file)
683
823
  end
684
824
 
685
- it 'should apply asciidocify filter' do
825
+ it 'should apply asciidocify filter to excerpt' do
686
826
  file = output_file 'index.html'
687
827
  expect(::File).to exist(file)
688
828
  contents = ::File.read file
689
- expect(contents).to match('<p class="excerpt">This is the <em>excerpt</em> of this post.</p>')
829
+ expect(contents).to include('<p class="excerpt">This is the <em>excerpt</em> of this post.</p>')
690
830
  end
691
831
  end
692
832
 
@@ -710,52 +850,95 @@ describe 'Jekyll::AsciiDoc' do
710
850
  contents = ::File.read file
711
851
  expect(contents).to be_empty
712
852
  end
713
- end
853
+ end unless windows?
714
854
 
715
- describe 'site with include relative to doc' do
855
+ describe 'site with include relative to docdir' do
716
856
  let :name do
717
- 'include_relative_to_doc'
857
+ 'include_relative_to_docdir'
718
858
  end
719
859
 
720
- before :each do
721
- site.process
860
+ before(:each) { site.process }
861
+
862
+ it 'should not expand base_dir when base_dir config key has value :docdir' do
863
+ expect(site.config['asciidoctor'][:base_dir]).to eql(:docdir)
722
864
  end
723
865
 
724
- it 'should resolve includes relative to docdir when base_dir config key has value :docdir' do
866
+ it 'should resolve include relative to docdir when base_dir config key has value :docdir' do
725
867
  src_file = source_file 'about/index.adoc'
726
868
  out_file = output_file 'about/index.html'
727
869
  expect(::File).to exist(out_file)
728
870
  contents = ::File.read out_file
729
- expect(contents).to match('Doc Writer')
730
- expect(contents).to match(%(docfile=#{src_file}))
731
- expect(contents).to match(%(docdir=#{::File.dirname src_file}))
732
- expect(contents).to match(%(outfile=#{out_file}))
733
- expect(contents).to match(%(outdir=#{::File.dirname out_file}))
734
- expect(contents).to match(%(outpath=/about/))
871
+ expect(contents).to include('Doc Writer')
872
+ expect(contents).to include(%(docfile=#{src_file}))
873
+ expect(contents).to include(%(docdir=#{::File.dirname src_file}))
874
+ expect(contents).to include(%(outfile=#{out_file}))
875
+ expect(contents).to include(%(outdir=#{::File.dirname out_file}))
876
+ expect(contents).to include(%(outpath=/about/))
735
877
  end
736
878
  end if ::Jekyll::MIN_VERSION_3
737
879
 
880
+ describe 'site with include relative to root' do
881
+ let :name do
882
+ 'include_relative_to_root'
883
+ end
884
+
885
+ let :config do
886
+ ::Jekyll.configuration((fixture_site_params name).merge('source' => (::File.join (source_dir name), 'source')))
887
+ end
888
+
889
+ before(:each) {
890
+ @old_pwd = ::Dir.pwd
891
+ ::Dir.chdir(source_dir name)
892
+ site.process
893
+ }
894
+
895
+ after(:each) {
896
+ ::Dir.chdir(@old_pwd)
897
+ }
898
+
899
+ it 'should not set base_dir if base_dir config key has no value' do
900
+ expect(site.config['asciidoctor'].key? :base_dir).to be false
901
+ end
902
+
903
+ it 'should resolve include relative to root when base_dir is not set' do
904
+ src_file = source_file 'about/index.adoc'
905
+ out_file = output_file 'about/index.html'
906
+ expect(::File).to exist(out_file)
907
+ contents = ::File.read out_file
908
+ expect(contents).to include('Doc Writer')
909
+ expect(contents).to include(%(docdir=#{::Dir.pwd}))
910
+ if ::Jekyll::MIN_VERSION_3
911
+ expect(contents).to include(%(docfile=#{src_file}))
912
+ expect(contents).to include(%(outfile=#{out_file}))
913
+ expect(contents).to include(%(outdir=#{::File.dirname out_file}))
914
+ expect(contents).to include(%(outpath=/about/))
915
+ end
916
+ end
917
+ end
918
+
738
919
  describe 'site with include relative to source' do
739
920
  let :name do
740
921
  'include_relative_to_source'
741
922
  end
742
923
 
743
- before :each do
744
- site.process
924
+ before(:each) { site.process }
925
+
926
+ it 'should expand base_dir to match site source when base_dir config key has value :source' do
927
+ expect(site.config['asciidoctor'][:base_dir]).to eql(site.source)
745
928
  end
746
929
 
747
- it 'should resolve includes relative to source when base_dir config key has value :source' do
930
+ it 'should resolve include relative to source when base_dir config key has value :source' do
748
931
  src_file = source_file 'about/index.adoc'
749
932
  out_file = output_file 'about/index.html'
750
933
  expect(::File).to exist(out_file)
751
934
  contents = ::File.read out_file
752
- expect(contents).to match('Doc Writer')
753
- expect(contents).to match(%(docdir=#{site.source}))
935
+ expect(contents).to include('Doc Writer')
936
+ expect(contents).to include(%(docdir=#{site.source}))
754
937
  if ::Jekyll::MIN_VERSION_3
755
- expect(contents).to match(%(docfile=#{src_file}))
756
- expect(contents).to match(%(outfile=#{out_file}))
757
- expect(contents).to match(%(outdir=#{::File.dirname out_file}))
758
- expect(contents).to match(%(outpath=/about/))
938
+ expect(contents).to include(%(docfile=#{src_file}))
939
+ expect(contents).to include(%(outfile=#{out_file}))
940
+ expect(contents).to include(%(outdir=#{::File.dirname out_file}))
941
+ expect(contents).to include(%(outpath=/about/))
759
942
  end
760
943
  end
761
944
 
@@ -770,15 +953,12 @@ describe 'Jekyll::AsciiDoc' do
770
953
  'with_custom_collection'
771
954
  end
772
955
 
773
- before :each do
774
- site.process
775
- end
956
+ before(:each) { site.process }
776
957
 
777
958
  it 'should decorate document in custom collection' do
778
959
  doc = find_doc 'blueprint-a.adoc', 'blueprints'
779
960
  expect(doc).not_to be_nil
780
961
  expect(doc.data['title']).to eql('First Blueprint')
781
- expect(doc.title).to eql('First Blueprint') if ::Jekyll::MIN_VERSION_3
782
962
  expect(doc.data['foo']).to eql('bar')
783
963
  end
784
964
 
@@ -786,14 +966,14 @@ describe 'Jekyll::AsciiDoc' do
786
966
  file = output_file 'blueprints/blueprint-a.html'
787
967
  expect(::File).to exist(file)
788
968
  contents = ::File.read file
789
- expect(contents).to match('<p>Footer for blueprint layout.</p>')
969
+ expect(contents).to include('<p>Footer for blueprint layout.</p>')
790
970
  end
791
971
 
792
972
  it 'should allow the layout to be customized' do
793
973
  file = output_file 'blueprints/blueprint-b.html'
794
974
  expect(::File).to exist(file)
795
975
  contents = ::File.read file
796
- expect(contents).to match('<p>Footer for default layout.</p>')
976
+ expect(contents).to include('<p>Footer for default layout.</p>')
797
977
  end
798
978
 
799
979
  it 'should set docdir for document in custom collection when base_dir config key has the value :docdir' do
@@ -801,11 +981,11 @@ describe 'Jekyll::AsciiDoc' do
801
981
  out_file = output_file 'blueprints/blueprint-b.html'
802
982
  expect(::File).to exist(out_file)
803
983
  contents = ::File.read out_file
804
- expect(contents).to match(%(docfile=#{src_file}))
805
- expect(contents).to match(%(docdir=#{::File.dirname src_file}))
806
- expect(contents).to match(%(outfile=#{out_file}))
807
- expect(contents).to match(%(outdir=#{::File.dirname out_file}))
808
- expect(contents).to match(%(outpath=/blueprints/blueprint-b.html))
984
+ expect(contents).to include(%(docfile=#{src_file}))
985
+ expect(contents).to include(%(docdir=#{::File.dirname src_file}))
986
+ expect(contents).to include(%(outfile=#{out_file}))
987
+ expect(contents).to include(%(outdir=#{::File.dirname out_file}))
988
+ expect(contents).to include(%(outpath=/blueprints/blueprint-b.html))
809
989
  end if ::Jekyll::MIN_VERSION_3
810
990
  end
811
991
 
@@ -814,9 +994,7 @@ describe 'Jekyll::AsciiDoc' do
814
994
  'pygments_code_highlighting'
815
995
  end
816
996
 
817
- before :each do
818
- site.process
819
- end
997
+ before(:each) { site.process }
820
998
 
821
999
  it 'should write the pygments stylesheet to the stylesdir' do
822
1000
  src_file = source_file 'css/asciidoc-pygments.css'
@@ -827,7 +1005,7 @@ describe 'Jekyll::AsciiDoc' do
827
1005
  src_content = ::File.read src_file
828
1006
  out_content = ::File.read out_file
829
1007
  expect(src_content).to eql(out_content)
830
- expect(src_content).to match('.pygments .tok-c')
1008
+ expect(src_content).to include('.pygments .tok-c')
831
1009
  ensure
832
1010
  if ::File.exist? src_file
833
1011
  ::File.delete src_file
@@ -844,14 +1022,13 @@ describe 'Jekyll::AsciiDoc' do
844
1022
  out_content = ::File.read src_file
845
1023
  attrs = site.config['asciidoctor'][:attributes]
846
1024
  attrs['pygments-style'] = 'monokai'
847
- integrator = site.generators.find {|g| ::Jekyll::AsciiDoc::Integrator === g }
848
1025
  integrator.generate_pygments_stylesheet site, attrs
849
1026
  expect(::File.read src_file).not_to eql(src_content)
850
1027
  ::Jekyll::StaticFile.reset_cache
851
1028
  site.process
852
1029
  new_out_content = ::File.read out_file
853
1030
  expect(new_out_content).not_to eql(out_content)
854
- expect(new_out_content).to match('background-color: #49483e')
1031
+ expect(new_out_content).to include('background-color: #49483e')
855
1032
  ensure
856
1033
  if ::File.exist? src_file
857
1034
  ::File.delete src_file
@@ -866,15 +1043,31 @@ describe 'Jekyll::AsciiDoc' do
866
1043
  'xhtml_syntax'
867
1044
  end
868
1045
 
869
- before :each do
870
- site.process
871
- end
1046
+ before(:each) { site.process }
872
1047
 
873
1048
  it 'should output xhtml if asciidoctor backend option is xhtml' do
874
1049
  file = output_file 'home.html'
875
1050
  expect(::File).to exist(file)
876
1051
  contents = ::File.read file
877
- expect(contents).to match('<img src="/images/sunset.jpg" alt="Sunset" width="408" height="230"/>')
1052
+ expect(contents).to include('<img src="/images/sunset.jpg" alt="Sunset" width="408" height="230"/>')
878
1053
  end
879
1054
  end
1055
+
1056
+ describe 'tocify filter' do
1057
+ let :name do
1058
+ 'tocify_filter'
1059
+ end
1060
+
1061
+ before(:each) { site.process }
1062
+
1063
+ it 'should generate document outline when tocify_asciidoc filter is applied to page.document' do
1064
+ file = output_file 'index.html'
1065
+ expect(::File).to exist(file)
1066
+ contents = ::File.read file
1067
+ aside = contents.match(/<aside class="page-toc">.*<\/aside>/m)[0]
1068
+ expect(aside).to include('<ul class="sectlevel1">')
1069
+ expect(aside).to include('<a href="#major-section-a">Major Section A</a>')
1070
+ expect(aside).not_to include('Micro Section')
1071
+ end
1072
+ end if ::Jekyll::MIN_VERSION_3
880
1073
  end