asciidoctor 1.5.5 → 1.5.6
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.
Potentially problematic release.
This version of asciidoctor might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.adoc +216 -1
- data/CONTRIBUTING.adoc +2 -2
- data/Gemfile +20 -1
- data/LICENSE.adoc +1 -1
- data/README-fr.adoc +4 -3
- data/README-jp.adoc +11 -10
- data/README-zh_CN.adoc +4 -3
- data/README.adoc +17 -202
- data/Rakefile +41 -25
- data/asciidoctor.gemspec +9 -10
- data/data/locale/attributes.adoc +216 -34
- data/data/stylesheets/asciidoctor-default.css +23 -16
- data/features/step_definitions.rb +15 -19
- data/features/xref.feature +584 -20
- data/lib/asciidoctor.rb +292 -278
- data/lib/asciidoctor/abstract_block.rb +155 -94
- data/lib/asciidoctor/abstract_node.rb +108 -94
- data/lib/asciidoctor/attribute_list.rb +30 -22
- data/lib/asciidoctor/block.rb +7 -7
- data/lib/asciidoctor/cli/invoker.rb +47 -34
- data/lib/asciidoctor/cli/options.rb +22 -11
- data/lib/asciidoctor/converter.rb +3 -3
- data/lib/asciidoctor/converter/base.rb +2 -2
- data/lib/asciidoctor/converter/composite.rb +1 -1
- data/lib/asciidoctor/converter/docbook45.rb +2 -2
- data/lib/asciidoctor/converter/docbook5.rb +132 -87
- data/lib/asciidoctor/converter/factory.rb +0 -1
- data/lib/asciidoctor/converter/html5.rb +116 -98
- data/lib/asciidoctor/converter/manpage.rb +51 -52
- data/lib/asciidoctor/converter/template.rb +47 -36
- data/lib/asciidoctor/core_ext.rb +8 -2
- data/lib/asciidoctor/core_ext/1.8.7/hash/key.rb +4 -0
- data/lib/asciidoctor/core_ext/1.8.7/io/binread.rb +6 -0
- data/lib/asciidoctor/core_ext/1.8.7/io/write.rb +5 -0
- data/lib/asciidoctor/core_ext/1.8.7/string/chr.rb +1 -1
- data/lib/asciidoctor/core_ext/1.8.7/string/{limit.rb → limit_bytesize.rb} +7 -6
- data/lib/asciidoctor/core_ext/1.8.7/symbol/empty.rb +6 -0
- data/lib/asciidoctor/core_ext/1.8.7/symbol/length.rb +1 -1
- data/lib/asciidoctor/core_ext/nil_or_empty.rb +5 -5
- data/lib/asciidoctor/core_ext/regexp/is_match.rb +3 -0
- data/lib/asciidoctor/core_ext/string/{limit.rb → limit_bytesize.rb} +2 -2
- data/lib/asciidoctor/document.rb +216 -213
- data/lib/asciidoctor/extensions.rb +318 -185
- data/lib/asciidoctor/helpers.rb +35 -35
- data/lib/asciidoctor/inline.rb +32 -1
- data/lib/asciidoctor/list.rb +22 -6
- data/lib/asciidoctor/parser.rb +1008 -1038
- data/lib/asciidoctor/path_resolver.rb +46 -50
- data/lib/asciidoctor/reader.rb +275 -251
- data/lib/asciidoctor/section.rb +86 -58
- data/lib/asciidoctor/stylesheets.rb +6 -6
- data/lib/asciidoctor/substitutors.rb +567 -649
- data/lib/asciidoctor/table.rb +163 -108
- data/lib/asciidoctor/version.rb +1 -1
- data/man/asciidoctor.1 +18 -16
- data/man/asciidoctor.adoc +15 -13
- data/test/attributes_test.rb +138 -22
- data/test/blocks_test.rb +377 -97
- data/test/converter_test.rb +13 -0
- data/test/document_test.rb +244 -34
- data/test/extensions_test.rb +409 -42
- data/test/fixtures/asciidoc_index.txt +521 -0
- data/test/fixtures/basic-docinfo-footer.html +6 -0
- data/test/fixtures/basic-docinfo-footer.xml +8 -0
- data/test/fixtures/basic-docinfo.html +1 -0
- data/test/fixtures/basic-docinfo.xml +4 -0
- data/test/fixtures/basic.asciidoc +5 -0
- data/test/fixtures/chapter-a.adoc +3 -0
- data/test/fixtures/child-include.adoc +5 -0
- data/test/fixtures/circle.svg +9 -0
- data/test/fixtures/custom-backends/erb/html5/block_paragraph.html.erb +6 -0
- data/test/fixtures/custom-backends/haml/docbook45/block_paragraph.xml.haml +6 -0
- data/test/fixtures/custom-backends/haml/html5-tweaks/block_paragraph.html.haml +1 -0
- data/test/fixtures/custom-backends/haml/html5/block_paragraph.html.haml +3 -0
- data/test/fixtures/custom-backends/haml/html5/block_sidebar.html.haml +5 -0
- data/test/fixtures/custom-backends/slim/docbook45/block_paragraph.xml.slim +6 -0
- data/test/fixtures/custom-backends/slim/html5/block_paragraph.html.slim +3 -0
- data/test/fixtures/custom-backends/slim/html5/block_sidebar.html.slim +5 -0
- data/test/fixtures/custom-docinfodir/basic-docinfo.html +1 -0
- data/test/fixtures/custom-docinfodir/docinfo.html +1 -0
- data/test/fixtures/docinfo-footer.html +1 -0
- data/test/fixtures/docinfo-footer.xml +9 -0
- data/test/fixtures/docinfo.html +1 -0
- data/test/fixtures/docinfo.xml +3 -0
- data/test/fixtures/dot.gif +0 -0
- data/test/fixtures/encoding.asciidoc +13 -0
- data/test/fixtures/grandchild-include.adoc +3 -0
- data/test/fixtures/hello-asciidoctor.pdf +69 -0
- data/test/fixtures/include-file.asciidoc +24 -0
- data/test/fixtures/include-file.ml +3 -0
- data/test/fixtures/include-file.xml +5 -0
- data/test/fixtures/master.adoc +5 -0
- data/test/fixtures/mismatched-end-tag.adoc +7 -0
- data/test/fixtures/parent-include-restricted.adoc +5 -0
- data/test/fixtures/parent-include.adoc +5 -0
- data/test/fixtures/sample.asciidoc +26 -0
- data/test/fixtures/stylesheets/custom.css +3 -0
- data/test/fixtures/subs-docinfo.html +2 -0
- data/test/fixtures/subs.adoc +7 -0
- data/test/fixtures/tagged-class-enclosed.rb +26 -0
- data/test/fixtures/tagged-class.rb +23 -0
- data/test/fixtures/tip.gif +0 -0
- data/test/invoker_test.rb +82 -4
- data/test/links_test.rb +312 -37
- data/test/lists_test.rb +204 -25
- data/test/manpage_test.rb +191 -4
- data/test/options_test.rb +18 -1
- data/test/paragraphs_test.rb +32 -7
- data/test/parser_test.rb +150 -30
- data/test/paths_test.rb +47 -13
- data/test/preamble_test.rb +1 -1
- data/test/reader_test.rb +366 -126
- data/test/sections_test.rb +203 -56
- data/test/substitutions_test.rb +339 -131
- data/test/tables_test.rb +315 -15
- data/test/test_helper.rb +400 -0
- data/test/text_test.rb +5 -5
- metadata +110 -22
    
        data/test/preamble_test.rb
    CHANGED
    
    | @@ -147,7 +147,7 @@ The axe came swinging. | |
| 147 147 | 
             
                  assert_equal 'book', d.doctype
         | 
| 148 148 | 
             
                  output = d.render
         | 
| 149 149 | 
             
                  assert_xpath '//h1', output, 3
         | 
| 150 | 
            -
                  assert_xpath %{//*[@id="preamble"]//p[text() = "Back then#{ | 
| 150 | 
            +
                  assert_xpath %{//*[@id="preamble"]//p[text() = "Back then#{decode_char 8230}#{decode_char 8203}"]}, output, 1
         | 
| 151 151 | 
             
              end
         | 
| 152 152 |  | 
| 153 153 | 
             
              test 'should render table of contents in preamble if toc-placement attribute value is preamble' do
         | 
    
        data/test/reader_test.rb
    CHANGED
    
    | @@ -7,7 +7,7 @@ end | |
| 7 7 | 
             
            class ReaderTest < Minitest::Test
         | 
| 8 8 | 
             
              DIRNAME = File.expand_path(File.dirname(__FILE__))
         | 
| 9 9 |  | 
| 10 | 
            -
              SAMPLE_DATA = <<-EOS.chomp.split(::Asciidoctor:: | 
| 10 | 
            +
              SAMPLE_DATA = <<-EOS.chomp.split(::Asciidoctor::LF)
         | 
| 11 11 | 
             
            first line
         | 
| 12 12 | 
             
            second line
         | 
| 13 13 | 
             
            third line
         | 
| @@ -26,9 +26,9 @@ third line | |
| 26 26 | 
             
                  end
         | 
| 27 27 |  | 
| 28 28 | 
             
                  test 'should remove UTF-8 BOM from first line of String data' do
         | 
| 29 | 
            -
                    data = "\xef\xbb\xbf#{SAMPLE_DATA.join ::Asciidoctor:: | 
| 29 | 
            +
                    data = "\xef\xbb\xbf#{SAMPLE_DATA.join ::Asciidoctor::LF}"
         | 
| 30 30 | 
             
                    reader = Asciidoctor::Reader.new data, nil, :normalize => true
         | 
| 31 | 
            -
                    assert_equal 'f', reader.lines.first | 
| 31 | 
            +
                    assert_equal 'f', reader.lines.first.chr
         | 
| 32 32 | 
             
                    assert_equal SAMPLE_DATA, reader.lines
         | 
| 33 33 | 
             
                  end
         | 
| 34 34 |  | 
| @@ -36,36 +36,36 @@ third line | |
| 36 36 | 
             
                    data = SAMPLE_DATA.dup
         | 
| 37 37 | 
             
                    data[0] = "\xef\xbb\xbf#{data.first}"
         | 
| 38 38 | 
             
                    reader = Asciidoctor::Reader.new data, nil, :normalize => true
         | 
| 39 | 
            -
                    assert_equal 'f', reader.lines.first | 
| 39 | 
            +
                    assert_equal 'f', reader.lines.first.chr
         | 
| 40 40 | 
             
                    assert_equal SAMPLE_DATA, reader.lines
         | 
| 41 41 | 
             
                  end
         | 
| 42 42 |  | 
| 43 43 | 
             
                  if Asciidoctor::COERCE_ENCODING
         | 
| 44 44 | 
             
                    test 'should encode UTF-16LE string to UTF-8 when BOM is found' do
         | 
| 45 | 
            -
                      data = "\ | 
| 45 | 
            +
                      data = "\ufeff#{SAMPLE_DATA.join ::Asciidoctor::LF}".encode('UTF-16LE').force_encoding('UTF-8')
         | 
| 46 46 | 
             
                      reader = Asciidoctor::Reader.new data, nil, :normalize => true
         | 
| 47 | 
            -
                      assert_equal 'f', reader.lines.first | 
| 47 | 
            +
                      assert_equal 'f', reader.lines.first.chr
         | 
| 48 48 | 
             
                      assert_equal SAMPLE_DATA, reader.lines
         | 
| 49 49 | 
             
                    end
         | 
| 50 50 |  | 
| 51 51 | 
             
                    test 'should encode UTF-16LE string array to UTF-8 when BOM is found' do
         | 
| 52 | 
            -
                      data = "\ | 
| 52 | 
            +
                      data = "\ufeff#{SAMPLE_DATA.join ::Asciidoctor::LF}".encode('UTF-16LE').force_encoding('UTF-8').lines.to_a
         | 
| 53 53 | 
             
                      reader = Asciidoctor::Reader.new data, nil, :normalize => true
         | 
| 54 | 
            -
                      assert_equal 'f', reader.lines.first | 
| 54 | 
            +
                      assert_equal 'f', reader.lines.first.chr
         | 
| 55 55 | 
             
                      assert_equal SAMPLE_DATA, reader.lines
         | 
| 56 56 | 
             
                    end
         | 
| 57 57 |  | 
| 58 58 | 
             
                    test 'should encode UTF-16BE string to UTF-8 when BOM is found' do
         | 
| 59 | 
            -
                      data = "\ | 
| 59 | 
            +
                      data = "\ufeff#{SAMPLE_DATA.join ::Asciidoctor::LF}".encode('UTF-16BE').force_encoding('UTF-8')
         | 
| 60 60 | 
             
                      reader = Asciidoctor::Reader.new data, nil, :normalize => true
         | 
| 61 | 
            -
                      assert_equal 'f', reader.lines.first | 
| 61 | 
            +
                      assert_equal 'f', reader.lines.first.chr
         | 
| 62 62 | 
             
                      assert_equal SAMPLE_DATA, reader.lines
         | 
| 63 63 | 
             
                    end
         | 
| 64 64 |  | 
| 65 65 | 
             
                    test 'should encode UTF-16BE string array to UTF-8 when BOM is found' do
         | 
| 66 | 
            -
                      data = "\ | 
| 66 | 
            +
                      data = "\ufeff#{SAMPLE_DATA.join ::Asciidoctor::LF}".encode('UTF-16BE').force_encoding('UTF-8').lines.to_a
         | 
| 67 67 | 
             
                      reader = Asciidoctor::Reader.new data, nil, :normalize => true
         | 
| 68 | 
            -
                      assert_equal 'f', reader.lines.first | 
| 68 | 
            +
                      assert_equal 'f', reader.lines.first.chr
         | 
| 69 69 | 
             
                      assert_equal SAMPLE_DATA, reader.lines
         | 
| 70 70 | 
             
                    end
         | 
| 71 71 | 
             
                  end
         | 
| @@ -150,6 +150,12 @@ third line | |
| 150 150 | 
             
                    assert_equal 1, reader.lineno
         | 
| 151 151 | 
             
                  end
         | 
| 152 152 |  | 
| 153 | 
            +
                  test 'peek_lines should not increment line number if reader overruns buffer' do
         | 
| 154 | 
            +
                    reader = Asciidoctor::Reader.new SAMPLE_DATA
         | 
| 155 | 
            +
                    assert_equal SAMPLE_DATA, (reader.peek_lines SAMPLE_DATA.size * 2)
         | 
| 156 | 
            +
                    assert_equal 1, reader.lineno
         | 
| 157 | 
            +
                  end
         | 
| 158 | 
            +
             | 
| 153 159 | 
             
                  test 'peek_lines should not invert order of lines' do
         | 
| 154 160 | 
             
                    reader = Asciidoctor::Reader.new SAMPLE_DATA
         | 
| 155 161 | 
             
                    assert_equal SAMPLE_DATA, reader.lines
         | 
| @@ -184,7 +190,7 @@ third line | |
| 184 190 |  | 
| 185 191 | 
             
                  test 'read should return all lines joined as String' do
         | 
| 186 192 | 
             
                    reader = Asciidoctor::Reader.new SAMPLE_DATA
         | 
| 187 | 
            -
                    assert_equal SAMPLE_DATA.join(::Asciidoctor:: | 
| 193 | 
            +
                    assert_equal SAMPLE_DATA.join(::Asciidoctor::LF), reader.read
         | 
| 188 194 | 
             
                  end
         | 
| 189 195 |  | 
| 190 196 | 
             
                  test 'has_more_lines? should return false after read_lines is invoked' do
         | 
| @@ -229,7 +235,7 @@ third line | |
| 229 235 | 
             
                  test 'source should return original data Array joined as String' do
         | 
| 230 236 | 
             
                    reader = Asciidoctor::Reader.new SAMPLE_DATA
         | 
| 231 237 | 
             
                    reader.read_lines
         | 
| 232 | 
            -
                    assert_equal SAMPLE_DATA.join(::Asciidoctor:: | 
| 238 | 
            +
                    assert_equal SAMPLE_DATA.join(::Asciidoctor::LF), reader.source
         | 
| 233 239 | 
             
                  end
         | 
| 234 240 |  | 
| 235 241 | 
             
                end
         | 
| @@ -286,7 +292,7 @@ This is another paragraph. | |
| 286 292 | 
             
                  end
         | 
| 287 293 |  | 
| 288 294 | 
             
                  test 'Read lines until until blank line preserving last line' do
         | 
| 289 | 
            -
                    lines = <<-EOS.chomp.split(::Asciidoctor:: | 
| 295 | 
            +
                    lines = <<-EOS.chomp.split(::Asciidoctor::LF)
         | 
| 290 296 | 
             
            This is one paragraph.
         | 
| 291 297 |  | 
| 292 298 | 
             
            This is another paragraph.
         | 
| @@ -300,7 +306,7 @@ This is another paragraph. | |
| 300 306 | 
             
                  end
         | 
| 301 307 |  | 
| 302 308 | 
             
                  test 'Read lines until until condition is true' do
         | 
| 303 | 
            -
                    lines = <<-EOS.chomp.split(::Asciidoctor:: | 
| 309 | 
            +
                    lines = <<-EOS.chomp.split(::Asciidoctor::LF)
         | 
| 304 310 | 
             
            --
         | 
| 305 311 | 
             
            This is one paragraph inside the block.
         | 
| 306 312 |  | 
| @@ -319,7 +325,7 @@ This is a paragraph outside the block. | |
| 319 325 | 
             
                  end
         | 
| 320 326 |  | 
| 321 327 | 
             
                  test 'Read lines until until condition is true, taking last line' do
         | 
| 322 | 
            -
                    lines = <<-EOS.chomp.split(::Asciidoctor:: | 
| 328 | 
            +
                    lines = <<-EOS.chomp.split(::Asciidoctor::LF)
         | 
| 323 329 | 
             
            --
         | 
| 324 330 | 
             
            This is one paragraph inside the block.
         | 
| 325 331 |  | 
| @@ -338,7 +344,7 @@ This is a paragraph outside the block. | |
| 338 344 | 
             
                  end
         | 
| 339 345 |  | 
| 340 346 | 
             
                  test 'Read lines until until condition is true, taking and preserving last line' do
         | 
| 341 | 
            -
                    lines = <<-EOS.chomp.split(::Asciidoctor:: | 
| 347 | 
            +
                    lines = <<-EOS.chomp.split(::Asciidoctor::LF)
         | 
| 342 348 | 
             
            --
         | 
| 343 349 | 
             
            This is one paragraph inside the block.
         | 
| 344 350 |  | 
| @@ -387,7 +393,7 @@ This is a paragraph outside the block. | |
| 387 393 | 
             
                    data = SAMPLE_DATA.map {|line| line.chomp}
         | 
| 388 394 | 
             
                    data.unshift ' '
         | 
| 389 395 | 
             
                    data.push ' '
         | 
| 390 | 
            -
                    data_as_string = data * ::Asciidoctor:: | 
| 396 | 
            +
                    data_as_string = data * ::Asciidoctor::LF
         | 
| 391 397 | 
             
                    doc = Asciidoctor::Document.new data_as_string
         | 
| 392 398 | 
             
                    reader = doc.reader
         | 
| 393 399 | 
             
                    assert_equal SAMPLE_DATA, reader.lines
         | 
| @@ -401,7 +407,7 @@ CRLF\r | |
| 401 407 | 
             
            endlines\r
         | 
| 402 408 | 
             
                  EOS
         | 
| 403 409 |  | 
| 404 | 
            -
                    [input, input.lines.to_a, input.split(::Asciidoctor:: | 
| 410 | 
            +
                    [input, input.lines.to_a, input.split(::Asciidoctor::LF), input.split(::Asciidoctor::LF).join(::Asciidoctor::LF)].each do |lines|
         | 
| 405 411 | 
             
                      doc = Asciidoctor::Document.new lines
         | 
| 406 412 | 
             
                      reader = doc.reader
         | 
| 407 413 | 
             
                      reader.lines.each do |line|
         | 
| @@ -551,7 +557,7 @@ include::fixtures/parent-include.adoc[] | |
| 551 557 | 
             
                    grandchild_include_docfile = File.join fixtures_dir, 'grandchild-include.adoc'
         | 
| 552 558 |  | 
| 553 559 | 
             
                    doc = empty_safe_document :base_dir => DIRNAME
         | 
| 554 | 
            -
                    reader = Asciidoctor::PreprocessorReader.new doc, input, pseudo_docfile
         | 
| 560 | 
            +
                    reader = Asciidoctor::PreprocessorReader.new doc, input, pseudo_docfile, :normalize => true
         | 
| 555 561 |  | 
| 556 562 | 
             
                    assert_equal pseudo_docfile, reader.file
         | 
| 557 563 | 
             
                    assert_equal DIRNAME, reader.dir
         | 
| @@ -608,10 +614,13 @@ trailing content | |
| 608 614 | 
             
                    EOS
         | 
| 609 615 |  | 
| 610 616 | 
             
                    begin
         | 
| 611 | 
            -
                      doc =  | 
| 617 | 
            +
                      doc, warnings = redirect_streams do |_, err|
         | 
| 618 | 
            +
                        [(document_from_string input, :safe => :safe, :base_dir => DIRNAME), err.string]
         | 
| 619 | 
            +
                      end
         | 
| 612 620 | 
             
                      assert_equal 2, doc.blocks.size
         | 
| 613 621 | 
             
                      assert_equal ['Unresolved directive in <stdin> - include::fixtures/no-such-file.adoc[]'], doc.blocks[0].lines
         | 
| 614 622 | 
             
                      assert_equal ['trailing content'], doc.blocks[1].lines
         | 
| 623 | 
            +
                      assert_includes warnings, 'include file not found'
         | 
| 615 624 | 
             
                    rescue
         | 
| 616 625 | 
             
                      flunk 'include directive should not raise exception on missing file'
         | 
| 617 626 | 
             
                    end
         | 
| @@ -627,10 +636,13 @@ trailing content | |
| 627 636 | 
             
                    EOS
         | 
| 628 637 |  | 
| 629 638 | 
             
                    begin
         | 
| 630 | 
            -
                      doc =  | 
| 639 | 
            +
                      doc, warnings = redirect_streams do |_, err|
         | 
| 640 | 
            +
                        [(document_from_string input, :safe => :safe, :base_dir => DIRNAME), err.string]
         | 
| 641 | 
            +
                      end
         | 
| 631 642 | 
             
                      assert_equal 2, doc.blocks.size
         | 
| 632 643 | 
             
                      assert_equal ['Unresolved directive in <stdin> - include::fixtures/chapter-a.adoc[]'], doc.blocks[0].lines
         | 
| 633 644 | 
             
                      assert_equal ['trailing content'], doc.blocks[1].lines
         | 
| 645 | 
            +
                      assert_includes warnings, 'include file not readable'
         | 
| 634 646 | 
             
                    rescue
         | 
| 635 647 | 
             
                      flunk 'include directive should not raise exception on missing file'
         | 
| 636 648 | 
             
                    ensure
         | 
| @@ -676,15 +688,20 @@ include::#{url}[] | |
| 676 688 | 
             
            ....
         | 
| 677 689 | 
             
                    EOS
         | 
| 678 690 |  | 
| 679 | 
            -
                     | 
| 680 | 
            -
                       | 
| 681 | 
            -
             | 
| 691 | 
            +
                    begin
         | 
| 692 | 
            +
                      output = warnings = nil
         | 
| 693 | 
            +
                      redirect_streams do |_, err|
         | 
| 694 | 
            +
                        output = using_test_webserver do
         | 
| 695 | 
            +
                          render_embedded_string input, :safe => :safe, :attributes => {'allow-uri-read' => ''}
         | 
| 696 | 
            +
                        end
         | 
| 697 | 
            +
                        warnings = err.string
         | 
| 682 698 | 
             
                      end
         | 
| 699 | 
            +
                      refute_nil output
         | 
| 700 | 
            +
                      assert_match(/Unresolved directive/, output)
         | 
| 701 | 
            +
                      assert_includes warnings, 'include uri not readable'
         | 
| 683 702 | 
             
                    rescue
         | 
| 684 703 | 
             
                      flunk 'include directive should not raise exception on inaccessible uri'
         | 
| 685 704 | 
             
                    end
         | 
| 686 | 
            -
                    refute_nil output
         | 
| 687 | 
            -
                    assert_match(/Unresolved directive/, output)
         | 
| 688 705 | 
             
                  end
         | 
| 689 706 |  | 
| 690 707 | 
             
                  test 'include directive supports line selection' do
         | 
| @@ -692,7 +709,7 @@ include::#{url}[] | |
| 692 709 | 
             
            include::fixtures/include-file.asciidoc[lines=1;3..4;6..-1]
         | 
| 693 710 | 
             
                    EOS
         | 
| 694 711 |  | 
| 695 | 
            -
                    output =  | 
| 712 | 
            +
                    output = render_embedded_string input, :safe => :safe, :base_dir => DIRNAME
         | 
| 696 713 | 
             
                    assert_match(/first line/, output)
         | 
| 697 714 | 
             
                    refute_match(/second line/, output)
         | 
| 698 715 | 
             
                    assert_match(/third line/, output)
         | 
| @@ -709,7 +726,7 @@ include::fixtures/include-file.asciidoc[lines=1;3..4;6..-1] | |
| 709 726 | 
             
            include::fixtures/include-file.asciidoc[lines="1, 3..4 , 6 .. -1"]
         | 
| 710 727 | 
             
                    EOS
         | 
| 711 728 |  | 
| 712 | 
            -
                    output =  | 
| 729 | 
            +
                    output = render_embedded_string input, :safe => :safe, :base_dir => DIRNAME
         | 
| 713 730 | 
             
                    assert_match(/first line/, output)
         | 
| 714 731 | 
             
                    refute_match(/second line/, output)
         | 
| 715 732 | 
             
                    assert_match(/third line/, output)
         | 
| @@ -721,12 +738,24 @@ include::fixtures/include-file.asciidoc[lines="1, 3..4 , 6 .. -1"] | |
| 721 738 | 
             
                    assert_match(/last line of included content/, output)
         | 
| 722 739 | 
             
                  end
         | 
| 723 740 |  | 
| 741 | 
            +
                  test 'include directive ignores empty lines attribute' do
         | 
| 742 | 
            +
                    input = <<-EOS
         | 
| 743 | 
            +
            ++++
         | 
| 744 | 
            +
            include::fixtures/include-file.asciidoc[lines=]
         | 
| 745 | 
            +
            ++++
         | 
| 746 | 
            +
                    EOS
         | 
| 747 | 
            +
             | 
| 748 | 
            +
                    output = render_embedded_string input, :safe => :safe, :base_dir => DIRNAME
         | 
| 749 | 
            +
                    assert_includes output, 'first line of included content'
         | 
| 750 | 
            +
                    assert_includes output, 'last line of included content'
         | 
| 751 | 
            +
                  end
         | 
| 752 | 
            +
             | 
| 724 753 | 
             
                  test 'include directive supports tagged selection' do
         | 
| 725 754 | 
             
                    input = <<-EOS
         | 
| 726 755 | 
             
            include::fixtures/include-file.asciidoc[tag=snippetA]
         | 
| 727 756 | 
             
                    EOS
         | 
| 728 757 |  | 
| 729 | 
            -
                    output =  | 
| 758 | 
            +
                    output = render_embedded_string input, :safe => :safe, :base_dir => DIRNAME
         | 
| 730 759 | 
             
                    assert_match(/snippetA content/, output)
         | 
| 731 760 | 
             
                    refute_match(/snippetB content/, output)
         | 
| 732 761 | 
             
                    refute_match(/non-tagged content/, output)
         | 
| @@ -738,27 +767,31 @@ include::fixtures/include-file.asciidoc[tag=snippetA] | |
| 738 767 | 
             
            include::fixtures/include-file.asciidoc[tags=snippetA;snippetB]
         | 
| 739 768 | 
             
                    EOS
         | 
| 740 769 |  | 
| 741 | 
            -
                    output =  | 
| 770 | 
            +
                    output = render_embedded_string input, :safe => :safe, :base_dir => DIRNAME
         | 
| 742 771 | 
             
                    assert_match(/snippetA content/, output)
         | 
| 743 772 | 
             
                    assert_match(/snippetB content/, output)
         | 
| 744 773 | 
             
                    refute_match(/non-tagged content/, output)
         | 
| 745 774 | 
             
                    refute_match(/included content/, output)
         | 
| 746 775 | 
             
                  end
         | 
| 747 776 |  | 
| 748 | 
            -
                  test 'include directive supports tagged selection in  | 
| 749 | 
            -
                     | 
| 777 | 
            +
                  test 'include directive supports tagged selection in language that uses circumfix comments' do
         | 
| 778 | 
            +
                    {
         | 
| 779 | 
            +
                      'include-file.xml' => '<snippet>content</snippet>',
         | 
| 780 | 
            +
                      'include-file.ml' => 'let s = SS.empty;;'
         | 
| 781 | 
            +
                    }.each do |filename, expect|
         | 
| 782 | 
            +
                      input = <<-EOS
         | 
| 750 783 | 
             
            [source,xml,indent=0]
         | 
| 751 784 | 
             
            ----
         | 
| 752 | 
            -
            include::fixtures | 
| 785 | 
            +
            include::fixtures/#{filename}[tag=snippet]
         | 
| 753 786 | 
             
            ----
         | 
| 754 | 
            -
             | 
| 787 | 
            +
                      EOS
         | 
| 755 788 |  | 
| 756 | 
            -
             | 
| 757 | 
            -
             | 
| 758 | 
            -
                     | 
| 789 | 
            +
                      doc = document_from_string input, :safe => :safe, :base_dir => DIRNAME
         | 
| 790 | 
            +
                      assert_equal expect, doc.blocks[0].source
         | 
| 791 | 
            +
                    end
         | 
| 759 792 | 
             
                  end
         | 
| 760 793 |  | 
| 761 | 
            -
                  test 'include directive does not select  | 
| 794 | 
            +
                  test 'include directive does not select lines with tag directives inside tagged selection' do
         | 
| 762 795 | 
             
                    input = <<-EOS
         | 
| 763 796 | 
             
            ++++
         | 
| 764 797 | 
             
            include::fixtures/include-file.asciidoc[tags=snippet]
         | 
| @@ -774,6 +807,137 @@ snippetB content) | |
| 774 807 | 
             
                    assert_equal expect, output
         | 
| 775 808 | 
             
                  end
         | 
| 776 809 |  | 
| 810 | 
            +
                  test 'include directive skips lines marked with negated tags' do
         | 
| 811 | 
            +
                    input = <<-EOS
         | 
| 812 | 
            +
            ----
         | 
| 813 | 
            +
            include::fixtures/tagged-class-enclosed.rb[tags=all;!bark]
         | 
| 814 | 
            +
            ----
         | 
| 815 | 
            +
                    EOS
         | 
| 816 | 
            +
             | 
| 817 | 
            +
                    output = render_embedded_string input, :safe => :safe, :base_dir => DIRNAME
         | 
| 818 | 
            +
                    expected = %(class Dog
         | 
| 819 | 
            +
              def initialize breed
         | 
| 820 | 
            +
                @breed = breed
         | 
| 821 | 
            +
              end
         | 
| 822 | 
            +
            end)
         | 
| 823 | 
            +
                    assert_includes output, expected
         | 
| 824 | 
            +
                  end
         | 
| 825 | 
            +
             | 
| 826 | 
            +
                  test 'include directive takes all lines without tag directives when value is double asterisk' do
         | 
| 827 | 
            +
                    input = <<-EOS
         | 
| 828 | 
            +
            ----
         | 
| 829 | 
            +
            include::fixtures/tagged-class.rb[tags=**]
         | 
| 830 | 
            +
            ----
         | 
| 831 | 
            +
                    EOS
         | 
| 832 | 
            +
             | 
| 833 | 
            +
                    output = render_embedded_string input, :safe => :safe, :base_dir => DIRNAME
         | 
| 834 | 
            +
                    expected = %(class Dog
         | 
| 835 | 
            +
              def initialize breed
         | 
| 836 | 
            +
                @breed = breed
         | 
| 837 | 
            +
              end
         | 
| 838 | 
            +
             | 
| 839 | 
            +
              def bark
         | 
| 840 | 
            +
                if @breed == 'beagle'
         | 
| 841 | 
            +
                  'woof woof woof woof woof'
         | 
| 842 | 
            +
                else
         | 
| 843 | 
            +
                  'woof woof'
         | 
| 844 | 
            +
                end
         | 
| 845 | 
            +
              end
         | 
| 846 | 
            +
            end)
         | 
| 847 | 
            +
                    assert_includes output, expected
         | 
| 848 | 
            +
                  end
         | 
| 849 | 
            +
             | 
| 850 | 
            +
                  test 'include directive takes all lines except negated tags when value contains double asterisk' do
         | 
| 851 | 
            +
                    input = <<-EOS
         | 
| 852 | 
            +
            ----
         | 
| 853 | 
            +
            include::fixtures/tagged-class.rb[tags=**;!bark]
         | 
| 854 | 
            +
            ----
         | 
| 855 | 
            +
                    EOS
         | 
| 856 | 
            +
             | 
| 857 | 
            +
                    output = render_embedded_string input, :safe => :safe, :base_dir => DIRNAME
         | 
| 858 | 
            +
                    expected = %(class Dog
         | 
| 859 | 
            +
              def initialize breed
         | 
| 860 | 
            +
                @breed = breed
         | 
| 861 | 
            +
              end
         | 
| 862 | 
            +
            end)
         | 
| 863 | 
            +
                    assert_includes output, expected
         | 
| 864 | 
            +
                  end
         | 
| 865 | 
            +
             | 
| 866 | 
            +
                  test 'include directive selects lines for all tags when value of tags attribute is wildcard' do
         | 
| 867 | 
            +
                    input = <<-EOS
         | 
| 868 | 
            +
            ----
         | 
| 869 | 
            +
            include::fixtures/tagged-class-enclosed.rb[tags=*]
         | 
| 870 | 
            +
            ----
         | 
| 871 | 
            +
                    EOS
         | 
| 872 | 
            +
             | 
| 873 | 
            +
                    output = render_embedded_string input, :safe => :safe, :base_dir => DIRNAME
         | 
| 874 | 
            +
                    expected = %(class Dog
         | 
| 875 | 
            +
              def initialize breed
         | 
| 876 | 
            +
                @breed = breed
         | 
| 877 | 
            +
              end
         | 
| 878 | 
            +
             | 
| 879 | 
            +
              def bark
         | 
| 880 | 
            +
                if @breed == 'beagle'
         | 
| 881 | 
            +
                  'woof woof woof woof woof'
         | 
| 882 | 
            +
                else
         | 
| 883 | 
            +
                  'woof woof'
         | 
| 884 | 
            +
                end
         | 
| 885 | 
            +
              end
         | 
| 886 | 
            +
            end)
         | 
| 887 | 
            +
                    assert_includes output, expected
         | 
| 888 | 
            +
                  end
         | 
| 889 | 
            +
             | 
| 890 | 
            +
                  test 'include directive selects lines for all tags except exclusions when value of tags attribute is wildcard' do
         | 
| 891 | 
            +
                    input = <<-EOS
         | 
| 892 | 
            +
            ----
         | 
| 893 | 
            +
            include::fixtures/tagged-class-enclosed.rb[tags=*;!init]
         | 
| 894 | 
            +
            ----
         | 
| 895 | 
            +
                    EOS
         | 
| 896 | 
            +
             | 
| 897 | 
            +
                    output = render_embedded_string input, :safe => :safe, :base_dir => DIRNAME
         | 
| 898 | 
            +
                    expected = %(class Dog
         | 
| 899 | 
            +
             | 
| 900 | 
            +
              def bark
         | 
| 901 | 
            +
                if @breed == 'beagle'
         | 
| 902 | 
            +
                  'woof woof woof woof woof'
         | 
| 903 | 
            +
                else
         | 
| 904 | 
            +
                  'woof woof'
         | 
| 905 | 
            +
                end
         | 
| 906 | 
            +
              end
         | 
| 907 | 
            +
            end)
         | 
| 908 | 
            +
                    assert_includes output, expected
         | 
| 909 | 
            +
                  end
         | 
| 910 | 
            +
             | 
| 911 | 
            +
                  test 'include directive skips lines all tagged lines when value of tags attribute is negated wildcard' do
         | 
| 912 | 
            +
                    input = <<-EOS
         | 
| 913 | 
            +
            ----
         | 
| 914 | 
            +
            include::fixtures/tagged-class.rb[tags=!*]
         | 
| 915 | 
            +
            ----
         | 
| 916 | 
            +
                    EOS
         | 
| 917 | 
            +
             | 
| 918 | 
            +
                    output = render_embedded_string input, :safe => :safe, :base_dir => DIRNAME
         | 
| 919 | 
            +
                    expected = %(class Dog
         | 
| 920 | 
            +
            end)
         | 
| 921 | 
            +
                    assert_includes output, expected
         | 
| 922 | 
            +
                  end
         | 
| 923 | 
            +
             | 
| 924 | 
            +
                  test 'include directive selects specified tagged lines and ignores the other tag directives' do
         | 
| 925 | 
            +
                    input = <<-EOS
         | 
| 926 | 
            +
            [indent=0]
         | 
| 927 | 
            +
            ----
         | 
| 928 | 
            +
            include::fixtures/tagged-class.rb[tags=bark;!bark-other]
         | 
| 929 | 
            +
            ----
         | 
| 930 | 
            +
                    EOS
         | 
| 931 | 
            +
             | 
| 932 | 
            +
                    output = render_embedded_string input, :safe => :safe, :base_dir => DIRNAME
         | 
| 933 | 
            +
                    expected = %(def bark
         | 
| 934 | 
            +
              if @breed == 'beagle'
         | 
| 935 | 
            +
                'woof woof woof woof woof'
         | 
| 936 | 
            +
              end
         | 
| 937 | 
            +
            end)
         | 
| 938 | 
            +
                    assert_includes output, expected
         | 
| 939 | 
            +
                  end
         | 
| 940 | 
            +
             | 
| 777 941 | 
             
                  test 'should warn if tag is not found in include file' do
         | 
| 778 942 | 
             
                    input = <<-EOS
         | 
| 779 943 | 
             
            include::fixtures/include-file.asciidoc[tag=snippetZ]
         | 
| @@ -782,7 +946,7 @@ include::fixtures/include-file.asciidoc[tag=snippetZ] | |
| 782 946 | 
             
                    old_stderr = $stderr
         | 
| 783 947 | 
             
                    $stderr = StringIO.new
         | 
| 784 948 | 
             
                    begin
         | 
| 785 | 
            -
                       | 
| 949 | 
            +
                      render_embedded_string input, :safe => :safe, :base_dir => DIRNAME
         | 
| 786 950 | 
             
                      warning = $stderr.tap(&:rewind).read
         | 
| 787 951 | 
             
                      refute_nil warning
         | 
| 788 952 | 
             
                      assert_match(/WARNING.*snippetZ/, warning)
         | 
| @@ -791,12 +955,40 @@ include::fixtures/include-file.asciidoc[tag=snippetZ] | |
| 791 955 | 
             
                    end
         | 
| 792 956 | 
             
                  end
         | 
| 793 957 |  | 
| 958 | 
            +
                  test 'should warn if end tag in included file is mismatched' do
         | 
| 959 | 
            +
                    input = <<-EOS
         | 
| 960 | 
            +
            ++++
         | 
| 961 | 
            +
            include::fixtures/mismatched-end-tag.adoc[tags=a;b]
         | 
| 962 | 
            +
            ++++
         | 
| 963 | 
            +
                    EOS
         | 
| 964 | 
            +
             | 
| 965 | 
            +
                    result, warnings = redirect_streams do |out, err|
         | 
| 966 | 
            +
                      [(render_embedded_string input, :safe => :safe, :base_dir => DIRNAME), err.string]
         | 
| 967 | 
            +
                    end
         | 
| 968 | 
            +
                    assert_equal %(a\nb), result
         | 
| 969 | 
            +
                    refute_nil warnings
         | 
| 970 | 
            +
                    assert_match(/WARNING: .*end tag/, warnings)
         | 
| 971 | 
            +
                  end
         | 
| 972 | 
            +
             | 
| 973 | 
            +
                  test 'include directive ignores tags attribute when empty' do
         | 
| 974 | 
            +
                    ['tag', 'tags'].each do |attr_name|
         | 
| 975 | 
            +
                      input = <<-EOS
         | 
| 976 | 
            +
            ++++
         | 
| 977 | 
            +
            include::fixtures/include-file.xml[#{attr_name}=]
         | 
| 978 | 
            +
            ++++
         | 
| 979 | 
            +
                      EOS
         | 
| 980 | 
            +
             | 
| 981 | 
            +
                      output = render_embedded_string input, :safe => :safe, :base_dir => DIRNAME
         | 
| 982 | 
            +
                      assert_match(/(?:tag|end)::/, output, 2)
         | 
| 983 | 
            +
                    end
         | 
| 984 | 
            +
                  end
         | 
| 985 | 
            +
             | 
| 794 986 | 
             
                  test 'lines attribute takes precedence over tags attribute in include directive' do
         | 
| 795 987 | 
             
                    input = <<-EOS
         | 
| 796 988 | 
             
            include::fixtures/include-file.asciidoc[lines=1, tags=snippetA;snippetB]
         | 
| 797 989 | 
             
                    EOS
         | 
| 798 990 |  | 
| 799 | 
            -
                    output =  | 
| 991 | 
            +
                    output = render_embedded_string input, :safe => :safe, :base_dir => DIRNAME
         | 
| 800 992 | 
             
                    assert_match(/first line of included content/, output)
         | 
| 801 993 | 
             
                    refute_match(/snippetA content/, output)
         | 
| 802 994 | 
             
                    refute_match(/snippetB content/, output)
         | 
| @@ -810,7 +1002,7 @@ include::fixtures/basic-docinfo.xml[lines=2..3, indent=0] | |
| 810 1002 | 
             
            ----
         | 
| 811 1003 | 
             
                    EOS
         | 
| 812 1004 |  | 
| 813 | 
            -
                    output =  | 
| 1005 | 
            +
                    output = render_embedded_string input, :safe => :safe, :base_dir => DIRNAME
         | 
| 814 1006 | 
             
                    result = xmlnodes_at_xpath('//pre', output, 1).text
         | 
| 815 1007 | 
             
                    assert_equal "<year>2013</year>\n<holder>Acme™, Inc.</holder>", result
         | 
| 816 1008 | 
             
                  end
         | 
| @@ -834,10 +1026,10 @@ include::fixtures/include-file.asciidoc[] | |
| 834 1026 | 
             
                    }
         | 
| 835 1027 |  | 
| 836 1028 | 
             
                    document = empty_safe_document :base_dir => DIRNAME
         | 
| 837 | 
            -
                    reader = Asciidoctor::PreprocessorReader.new document, input
         | 
| 1029 | 
            +
                    reader = Asciidoctor::PreprocessorReader.new document, input, nil, :normalize => true
         | 
| 838 1030 | 
             
                    reader.instance_variable_set '@include_processors', [include_processor.new(document)]
         | 
| 839 1031 | 
             
                    lines = reader.read_lines
         | 
| 840 | 
            -
                    source = lines * ::Asciidoctor:: | 
| 1032 | 
            +
                    source = lines * ::Asciidoctor::LF
         | 
| 841 1033 | 
             
                    assert_match(/included content/, source)
         | 
| 842 1034 | 
             
                  end
         | 
| 843 1035 |  | 
| @@ -846,7 +1038,7 @@ include::fixtures/include-file.asciidoc[] | |
| 846 1038 | 
             
            include::fixtures/master.adoc[]
         | 
| 847 1039 | 
             
                    EOS
         | 
| 848 1040 |  | 
| 849 | 
            -
                    expected = <<-EOS.chomp.split(::Asciidoctor:: | 
| 1041 | 
            +
                    expected = <<-EOS.chomp.split(::Asciidoctor::LF)
         | 
| 850 1042 | 
             
            = Master Document
         | 
| 851 1043 |  | 
| 852 1044 | 
             
            preamble
         | 
| @@ -882,9 +1074,13 @@ include::{fixturesdir}/include-file.{ext}[] | |
| 882 1074 | 
             
            include::{foodir}/include-file.asciidoc[]
         | 
| 883 1075 | 
             
                    EOS
         | 
| 884 1076 |  | 
| 885 | 
            -
                     | 
| 886 | 
            -
             | 
| 887 | 
            -
             | 
| 1077 | 
            +
                    line, warnings = redirect_streams do |_, err|
         | 
| 1078 | 
            +
                      doc = empty_safe_document :base_dir => DIRNAME
         | 
| 1079 | 
            +
                      reader = Asciidoctor::PreprocessorReader.new doc, input, nil, :normalize => true
         | 
| 1080 | 
            +
                      [reader.read_line, err.string]
         | 
| 1081 | 
            +
                    end
         | 
| 1082 | 
            +
                    assert_equal 'Unresolved directive in <stdin> - include::{foodir}/include-file.asciidoc[]', line
         | 
| 1083 | 
            +
                    assert_includes warnings, 'dropping line containing reference to missing attribute'
         | 
| 888 1084 | 
             
                  end
         | 
| 889 1085 |  | 
| 890 1086 | 
             
                  test 'line is dropped if target of include directive resolves to empty and attribute-missing attribute is not skip' do
         | 
| @@ -892,9 +1088,13 @@ include::{foodir}/include-file.asciidoc[] | |
| 892 1088 | 
             
            include::{foodir}/include-file.asciidoc[]
         | 
| 893 1089 | 
             
                    EOS
         | 
| 894 1090 |  | 
| 895 | 
            -
                     | 
| 896 | 
            -
             | 
| 897 | 
            -
             | 
| 1091 | 
            +
                    line, warnings = redirect_streams do |_, err|
         | 
| 1092 | 
            +
                      doc = empty_safe_document :base_dir => DIRNAME, :attributes => {'attribute-missing' => 'drop'}
         | 
| 1093 | 
            +
                      reader = Asciidoctor::PreprocessorReader.new doc, input, nil, :normalize => true
         | 
| 1094 | 
            +
                      [reader.read_line, err.string]
         | 
| 1095 | 
            +
                    end
         | 
| 1096 | 
            +
                    assert_nil line
         | 
| 1097 | 
            +
                    assert_includes warnings, 'dropping line containing reference to missing attribute'
         | 
| 898 1098 | 
             
                  end
         | 
| 899 1099 |  | 
| 900 1100 | 
             
                  test 'line following dropped include is not dropped' do
         | 
| @@ -903,9 +1103,13 @@ include::{foodir}/include-file.asciidoc[] | |
| 903 1103 | 
             
            yo
         | 
| 904 1104 | 
             
                    EOS
         | 
| 905 1105 |  | 
| 906 | 
            -
                     | 
| 907 | 
            -
             | 
| 908 | 
            -
             | 
| 1106 | 
            +
                    line, warnings = redirect_streams do |_, err|
         | 
| 1107 | 
            +
                      doc = empty_safe_document :base_dir => DIRNAME, :attributes => {'attribute-missing' => 'drop'}
         | 
| 1108 | 
            +
                      reader = Asciidoctor::PreprocessorReader.new doc, input, nil, :normalize => true
         | 
| 1109 | 
            +
                      [reader.read_line, err.string]
         | 
| 1110 | 
            +
                    end
         | 
| 1111 | 
            +
                    assert_equal 'yo', line
         | 
| 1112 | 
            +
                    assert_includes warnings, 'dropping line containing reference to missing attribute'
         | 
| 909 1113 | 
             
                  end
         | 
| 910 1114 |  | 
| 911 1115 | 
             
                  test 'escaped include directive is left unprocessed' do
         | 
| @@ -914,7 +1118,7 @@ yo | |
| 914 1118 | 
             
            \\escape preserved here
         | 
| 915 1119 | 
             
                    EOS
         | 
| 916 1120 | 
             
                    doc = empty_safe_document :base_dir => DIRNAME
         | 
| 917 | 
            -
                    reader = Asciidoctor::PreprocessorReader.new doc, input
         | 
| 1121 | 
            +
                    reader = Asciidoctor::PreprocessorReader.new doc, input, nil, :normalize => true
         | 
| 918 1122 | 
             
                    # we should be able to peek it multiple times and still have the backslash preserved
         | 
| 919 1123 | 
             
                    # this is the test for @unescape_next_line
         | 
| 920 1124 | 
             
                    assert_equal 'include::fixtures/include-file.asciidoc[]', reader.peek_line
         | 
| @@ -959,13 +1163,14 @@ include::include-file.asciidoc[] | |
| 959 1163 | 
             
            include::fixtures/parent-include.adoc[depth=1]
         | 
| 960 1164 | 
             
                    EOS
         | 
| 961 1165 |  | 
| 962 | 
            -
                     | 
| 963 | 
            -
             | 
| 964 | 
            -
             | 
| 965 | 
            -
             | 
| 966 | 
            -
             | 
| 967 | 
            -
                     | 
| 1166 | 
            +
                    lines, warnings = redirect_streams do |_, err|
         | 
| 1167 | 
            +
                      pseudo_docfile = File.join DIRNAME, 'include-master.adoc'
         | 
| 1168 | 
            +
                      doc = empty_safe_document :base_dir => DIRNAME
         | 
| 1169 | 
            +
                      reader = Asciidoctor::PreprocessorReader.new doc, input, Asciidoctor::Reader::Cursor.new(pseudo_docfile), :normalize => true
         | 
| 1170 | 
            +
                      [reader.readlines, err.string]
         | 
| 1171 | 
            +
                    end
         | 
| 968 1172 | 
             
                    assert lines.include?('include::child-include.adoc[]')
         | 
| 1173 | 
            +
                    assert_match(/maximum include depth .* exceeded/, warnings)
         | 
| 969 1174 | 
             
                  end
         | 
| 970 1175 |  | 
| 971 1176 | 
             
                  test 'include directive should be disabled if max include depth set in nested context has been exceeded' do
         | 
| @@ -973,14 +1178,15 @@ include::fixtures/parent-include.adoc[depth=1] | |
| 973 1178 | 
             
            include::fixtures/parent-include-restricted.adoc[depth=3]
         | 
| 974 1179 | 
             
                    EOS
         | 
| 975 1180 |  | 
| 976 | 
            -
                     | 
| 977 | 
            -
             | 
| 978 | 
            -
             | 
| 979 | 
            -
             | 
| 980 | 
            -
             | 
| 981 | 
            -
                     | 
| 1181 | 
            +
                    lines, warnings = redirect_streams do |_, err|
         | 
| 1182 | 
            +
                      pseudo_docfile = File.join DIRNAME, 'include-master.adoc'
         | 
| 1183 | 
            +
                      doc = empty_safe_document :base_dir => DIRNAME
         | 
| 1184 | 
            +
                      reader = Asciidoctor::PreprocessorReader.new doc, input, Asciidoctor::Reader::Cursor.new(pseudo_docfile), :normalize => true
         | 
| 1185 | 
            +
                      [reader.readlines, err.string]
         | 
| 1186 | 
            +
                    end
         | 
| 982 1187 | 
             
                    assert lines.include?('first line of child')
         | 
| 983 1188 | 
             
                    assert lines.include?('include::grandchild-include.adoc[]')
         | 
| 1189 | 
            +
                    assert_match(/maximum include depth .* exceeded/, warnings)
         | 
| 984 1190 | 
             
                  end
         | 
| 985 1191 |  | 
| 986 1192 | 
             
                  test 'read_lines_until should not process lines if process option is false' do
         | 
| @@ -991,7 +1197,7 @@ include::fixtures/no-such-file.adoc[] | |
| 991 1197 | 
             
                    EOS
         | 
| 992 1198 |  | 
| 993 1199 | 
             
                    doc = empty_safe_document :base_dir => DIRNAME
         | 
| 994 | 
            -
                    reader = Asciidoctor::PreprocessorReader.new doc, lines
         | 
| 1200 | 
            +
                    reader = Asciidoctor::PreprocessorReader.new doc, lines, nil, :normalize => true
         | 
| 995 1201 | 
             
                    reader.read_line
         | 
| 996 1202 | 
             
                    result = reader.read_lines_until(:terminator => '////', :skip_processing => true)
         | 
| 997 1203 | 
             
                    assert_equal lines.map {|l| l.chomp}[1..1], result
         | 
| @@ -1005,7 +1211,7 @@ include::fixtures/no-such-file.adoc[] | |
| 1005 1211 | 
             
                    EOS
         | 
| 1006 1212 |  | 
| 1007 1213 | 
             
                    doc = empty_safe_document :base_dir => DIRNAME
         | 
| 1008 | 
            -
                    reader = Asciidoctor::PreprocessorReader.new doc, lines
         | 
| 1214 | 
            +
                    reader = Asciidoctor::PreprocessorReader.new doc, lines, nil, :normalize => true
         | 
| 1009 1215 | 
             
                    result = reader.skip_comment_lines
         | 
| 1010 1216 | 
             
                    assert_equal lines.map {|l| l.chomp}, result
         | 
| 1011 1217 | 
             
                  end
         | 
| @@ -1093,7 +1299,7 @@ endif::holygrail[] | |
| 1093 1299 | 
             
                    while reader.has_more_lines?
         | 
| 1094 1300 | 
             
                      lines << reader.read_line
         | 
| 1095 1301 | 
             
                    end
         | 
| 1096 | 
            -
                    assert_equal 'There is a holy grail!', (lines * ::Asciidoctor:: | 
| 1302 | 
            +
                    assert_equal 'There is a holy grail!', (lines * ::Asciidoctor::LF)
         | 
| 1097 1303 | 
             
                  end
         | 
| 1098 1304 |  | 
| 1099 1305 | 
             
                  test 'ifdef with defined attribute includes text in brackets' do
         | 
| @@ -1109,7 +1315,21 @@ There was much rejoicing. | |
| 1109 1315 | 
             
                    while reader.has_more_lines?
         | 
| 1110 1316 | 
             
                      lines << reader.read_line
         | 
| 1111 1317 | 
             
                    end
         | 
| 1112 | 
            -
                    assert_equal "On our quest we go...\nThere is a holy grail!\nThere was much rejoicing.", (lines * ::Asciidoctor:: | 
| 1318 | 
            +
                    assert_equal "On our quest we go...\nThere is a holy grail!\nThere was much rejoicing.", (lines * ::Asciidoctor::LF)
         | 
| 1319 | 
            +
                  end
         | 
| 1320 | 
            +
             | 
| 1321 | 
            +
                  test 'ifdef with defined attribute processes include directive in brackets' do
         | 
| 1322 | 
            +
                    input = <<-EOS
         | 
| 1323 | 
            +
            ifdef::asciidoctor-version[include::fixtures/include-file.asciidoc[tag=snippetA]]
         | 
| 1324 | 
            +
                    EOS
         | 
| 1325 | 
            +
             | 
| 1326 | 
            +
                    doc = Asciidoctor::Document.new input, :safe => :safe, :base_dir => DIRNAME
         | 
| 1327 | 
            +
                    reader = doc.reader
         | 
| 1328 | 
            +
                    lines = []
         | 
| 1329 | 
            +
                    while reader.has_more_lines?
         | 
| 1330 | 
            +
                      lines << reader.read_line
         | 
| 1331 | 
            +
                    end
         | 
| 1332 | 
            +
                    assert_equal 'snippetA content', lines[0]
         | 
| 1113 1333 | 
             
                  end
         | 
| 1114 1334 |  | 
| 1115 1335 | 
             
                  test 'ifdef attribute name is not case sensitive' do
         | 
| @@ -1137,7 +1357,7 @@ There was no rejoicing. | |
| 1137 1357 | 
             
                    while reader.has_more_lines?
         | 
| 1138 1358 | 
             
                      lines << reader.read_line
         | 
| 1139 1359 | 
             
                    end
         | 
| 1140 | 
            -
                    assert_equal "On our quest we go...\nThere was no rejoicing.", (lines * ::Asciidoctor:: | 
| 1360 | 
            +
                    assert_equal "On our quest we go...\nThere was no rejoicing.", (lines * ::Asciidoctor::LF)
         | 
| 1141 1361 | 
             
                  end
         | 
| 1142 1362 |  | 
| 1143 1363 | 
             
                  test 'include with non-matching nested exclude' do
         | 
| @@ -1157,7 +1377,7 @@ endif::grail[] | |
| 1157 1377 | 
             
                    while reader.has_more_lines?
         | 
| 1158 1378 | 
             
                      lines << reader.read_line
         | 
| 1159 1379 | 
             
                    end
         | 
| 1160 | 
            -
                    assert_equal "holy\ngrail", (lines * ::Asciidoctor:: | 
| 1380 | 
            +
                    assert_equal "holy\ngrail", (lines * ::Asciidoctor::LF)
         | 
| 1161 1381 | 
             
                  end
         | 
| 1162 1382 |  | 
| 1163 1383 | 
             
                  test 'nested excludes with same condition' do
         | 
| @@ -1175,7 +1395,7 @@ endif::grail[] | |
| 1175 1395 | 
             
                    while reader.has_more_lines?
         | 
| 1176 1396 | 
             
                      lines << reader.read_line
         | 
| 1177 1397 | 
             
                    end
         | 
| 1178 | 
            -
                    assert_equal '', (lines * ::Asciidoctor:: | 
| 1398 | 
            +
                    assert_equal '', (lines * ::Asciidoctor::LF)
         | 
| 1179 1399 | 
             
                  end
         | 
| 1180 1400 |  | 
| 1181 1401 | 
             
                  test 'include with nested exclude of inverted condition' do
         | 
| @@ -1195,7 +1415,7 @@ endif::grail[] | |
| 1195 1415 | 
             
                    while reader.has_more_lines?
         | 
| 1196 1416 | 
             
                      lines << reader.read_line
         | 
| 1197 1417 | 
             
                    end
         | 
| 1198 | 
            -
                    assert_equal "holy\ngrail", (lines * ::Asciidoctor:: | 
| 1418 | 
            +
                    assert_equal "holy\ngrail", (lines * ::Asciidoctor::LF)
         | 
| 1199 1419 | 
             
                  end
         | 
| 1200 1420 |  | 
| 1201 1421 | 
             
                  test 'exclude with matching nested exclude' do
         | 
| @@ -1217,7 +1437,7 @@ gone | |
| 1217 1437 | 
             
                    while reader.has_more_lines?
         | 
| 1218 1438 | 
             
                      lines << reader.read_line
         | 
| 1219 1439 | 
             
                    end
         | 
| 1220 | 
            -
                    assert_equal "poof\ngone", (lines * ::Asciidoctor:: | 
| 1440 | 
            +
                    assert_equal "poof\ngone", (lines * ::Asciidoctor::LF)
         | 
| 1221 1441 | 
             
                  end
         | 
| 1222 1442 |  | 
| 1223 1443 | 
             
                  test 'exclude with nested include using shorthand end' do
         | 
| @@ -1239,7 +1459,7 @@ gone | |
| 1239 1459 | 
             
                    while reader.has_more_lines?
         | 
| 1240 1460 | 
             
                      lines << reader.read_line
         | 
| 1241 1461 | 
             
                    end
         | 
| 1242 | 
            -
                    assert_equal "poof\ngone", (lines * ::Asciidoctor:: | 
| 1462 | 
            +
                    assert_equal "poof\ngone", (lines * ::Asciidoctor::LF)
         | 
| 1243 1463 | 
             
                  end
         | 
| 1244 1464 |  | 
| 1245 1465 | 
             
                  test 'ifdef with one alternative attribute set includes content' do
         | 
| @@ -1255,7 +1475,7 @@ endif::holygrail,swallow[] | |
| 1255 1475 | 
             
                    while reader.has_more_lines?
         | 
| 1256 1476 | 
             
                      lines << reader.read_line
         | 
| 1257 1477 | 
             
                    end
         | 
| 1258 | 
            -
                    assert_equal 'Our quest is complete!', (lines * ::Asciidoctor:: | 
| 1478 | 
            +
                    assert_equal 'Our quest is complete!', (lines * ::Asciidoctor::LF)
         | 
| 1259 1479 | 
             
                  end
         | 
| 1260 1480 |  | 
| 1261 1481 | 
             
                  test 'ifdef with no alternative attributes set does not include content' do
         | 
| @@ -1271,7 +1491,7 @@ endif::holygrail,swallow[] | |
| 1271 1491 | 
             
                    while reader.has_more_lines?
         | 
| 1272 1492 | 
             
                      lines << reader.read_line
         | 
| 1273 1493 | 
             
                    end
         | 
| 1274 | 
            -
                    assert_equal '', (lines * ::Asciidoctor:: | 
| 1494 | 
            +
                    assert_equal '', (lines * ::Asciidoctor::LF)
         | 
| 1275 1495 | 
             
                  end
         | 
| 1276 1496 |  | 
| 1277 1497 | 
             
                  test 'ifdef with all required attributes set includes content' do
         | 
| @@ -1287,7 +1507,7 @@ endif::holygrail+swallow[] | |
| 1287 1507 | 
             
                    while reader.has_more_lines?
         | 
| 1288 1508 | 
             
                      lines << reader.read_line
         | 
| 1289 1509 | 
             
                    end
         | 
| 1290 | 
            -
                    assert_equal 'Our quest is complete!', (lines * ::Asciidoctor:: | 
| 1510 | 
            +
                    assert_equal 'Our quest is complete!', (lines * ::Asciidoctor::LF)
         | 
| 1291 1511 | 
             
                  end
         | 
| 1292 1512 |  | 
| 1293 1513 | 
             
                  test 'ifdef with missing required attributes does not include content' do
         | 
| @@ -1303,7 +1523,25 @@ endif::holygrail+swallow[] | |
| 1303 1523 | 
             
                    while reader.has_more_lines?
         | 
| 1304 1524 | 
             
                      lines << reader.read_line
         | 
| 1305 1525 | 
             
                    end
         | 
| 1306 | 
            -
                    assert_equal '', (lines * ::Asciidoctor:: | 
| 1526 | 
            +
                    assert_equal '', (lines * ::Asciidoctor::LF)
         | 
| 1527 | 
            +
                  end
         | 
| 1528 | 
            +
             | 
| 1529 | 
            +
                  test 'ifdef should permit leading, trailing, and repeat operators' do
         | 
| 1530 | 
            +
                    {
         | 
| 1531 | 
            +
                      'asciidoctor,' => 'content',
         | 
| 1532 | 
            +
                      ',asciidoctor' => 'content',
         | 
| 1533 | 
            +
                      'asciidoctor+' => '',
         | 
| 1534 | 
            +
                      '+asciidoctor' => '',
         | 
| 1535 | 
            +
                      'asciidoctor,,asciidoctor-version' => 'content',
         | 
| 1536 | 
            +
                      'asciidoctor++asciidoctor-version' => ''
         | 
| 1537 | 
            +
                    }.each do |condition, expected|
         | 
| 1538 | 
            +
                      input = <<-EOS
         | 
| 1539 | 
            +
            ifdef::#{condition}[]
         | 
| 1540 | 
            +
            content
         | 
| 1541 | 
            +
            endif::[]
         | 
| 1542 | 
            +
                      EOS
         | 
| 1543 | 
            +
                      assert_equal expected, (document_from_string input, :parse => false).reader.read
         | 
| 1544 | 
            +
                    end
         | 
| 1307 1545 | 
             
                  end
         | 
| 1308 1546 |  | 
| 1309 1547 | 
             
                  test 'ifndef with undefined attribute includes block' do
         | 
| @@ -1319,23 +1557,29 @@ endif::holygrail[] | |
| 1319 1557 | 
             
                    while reader.has_more_lines?
         | 
| 1320 1558 | 
             
                      lines << reader.read_line
         | 
| 1321 1559 | 
             
                    end
         | 
| 1322 | 
            -
                    assert_equal 'Our quest continues to find the holy grail!', (lines * ::Asciidoctor:: | 
| 1560 | 
            +
                    assert_equal 'Our quest continues to find the holy grail!', (lines * ::Asciidoctor::LF)
         | 
| 1323 1561 | 
             
                  end
         | 
| 1324 1562 |  | 
| 1325 | 
            -
                  test 'ifndef with one alternative attribute set  | 
| 1563 | 
            +
                  test 'ifndef with one alternative attribute set does not include content' do
         | 
| 1326 1564 | 
             
                    input = <<-EOS
         | 
| 1327 1565 | 
             
            ifndef::holygrail,swallow[]
         | 
| 1328 1566 | 
             
            Our quest is complete!
         | 
| 1329 1567 | 
             
            endif::holygrail,swallow[]
         | 
| 1330 1568 | 
             
                    EOS
         | 
| 1331 1569 |  | 
| 1332 | 
            -
                     | 
| 1333 | 
            -
                     | 
| 1334 | 
            -
             | 
| 1335 | 
            -
             | 
| 1336 | 
            -
             | 
| 1337 | 
            -
                     | 
| 1338 | 
            -
             | 
| 1570 | 
            +
                    result = (Asciidoctor::Document.new input, :attributes => { 'swallow' => '' }).reader.read
         | 
| 1571 | 
            +
                    assert_empty result
         | 
| 1572 | 
            +
                  end
         | 
| 1573 | 
            +
             | 
| 1574 | 
            +
                  test 'ifndef with both alternative attributes set does not include content' do
         | 
| 1575 | 
            +
                    input = <<-EOS
         | 
| 1576 | 
            +
            ifndef::holygrail,swallow[]
         | 
| 1577 | 
            +
            Our quest is complete!
         | 
| 1578 | 
            +
            endif::holygrail,swallow[]
         | 
| 1579 | 
            +
                    EOS
         | 
| 1580 | 
            +
             | 
| 1581 | 
            +
                    result = (Asciidoctor::Document.new input, :attributes => { 'swallow' => '', 'holygrail' => '' }).reader.read
         | 
| 1582 | 
            +
                    assert_empty result
         | 
| 1339 1583 | 
             
                  end
         | 
| 1340 1584 |  | 
| 1341 1585 | 
             
                  test 'ifndef with no alternative attributes set includes content' do
         | 
| @@ -1345,45 +1589,41 @@ Our quest is complete! | |
| 1345 1589 | 
             
            endif::holygrail,swallow[]
         | 
| 1346 1590 | 
             
                    EOS
         | 
| 1347 1591 |  | 
| 1348 | 
            -
                     | 
| 1349 | 
            -
                     | 
| 1350 | 
            -
                    lines = []
         | 
| 1351 | 
            -
                    while reader.has_more_lines?
         | 
| 1352 | 
            -
                      lines << reader.read_line
         | 
| 1353 | 
            -
                    end
         | 
| 1354 | 
            -
                    assert_equal 'Our quest is complete!', (lines * ::Asciidoctor::EOL)
         | 
| 1592 | 
            +
                    result = (Asciidoctor::Document.new input).reader.read
         | 
| 1593 | 
            +
                    assert_equal 'Our quest is complete!', result
         | 
| 1355 1594 | 
             
                  end
         | 
| 1356 1595 |  | 
| 1357 | 
            -
                  test 'ifndef with  | 
| 1596 | 
            +
                  test 'ifndef with no required attributes set includes content' do
         | 
| 1358 1597 | 
             
                    input = <<-EOS
         | 
| 1359 1598 | 
             
            ifndef::holygrail+swallow[]
         | 
| 1360 1599 | 
             
            Our quest is complete!
         | 
| 1361 1600 | 
             
            endif::holygrail+swallow[]
         | 
| 1362 1601 | 
             
                    EOS
         | 
| 1363 1602 |  | 
| 1364 | 
            -
                     | 
| 1365 | 
            -
                     | 
| 1366 | 
            -
                    lines = []
         | 
| 1367 | 
            -
                    while reader.has_more_lines?
         | 
| 1368 | 
            -
                      lines << reader.read_line
         | 
| 1369 | 
            -
                    end
         | 
| 1370 | 
            -
                    assert_equal '', (lines * ::Asciidoctor::EOL)
         | 
| 1603 | 
            +
                    result = (Asciidoctor::Document.new input).reader.read
         | 
| 1604 | 
            +
                    assert_equal 'Our quest is complete!', result
         | 
| 1371 1605 | 
             
                  end
         | 
| 1372 1606 |  | 
| 1373 | 
            -
                  test 'ifndef with  | 
| 1607 | 
            +
                  test 'ifndef with all required attributes set does not include content' do
         | 
| 1374 1608 | 
             
                    input = <<-EOS
         | 
| 1375 1609 | 
             
            ifndef::holygrail+swallow[]
         | 
| 1376 1610 | 
             
            Our quest is complete!
         | 
| 1377 1611 | 
             
            endif::holygrail+swallow[]
         | 
| 1378 1612 | 
             
                    EOS
         | 
| 1379 1613 |  | 
| 1380 | 
            -
                     | 
| 1381 | 
            -
                     | 
| 1382 | 
            -
             | 
| 1383 | 
            -
             | 
| 1384 | 
            -
             | 
| 1385 | 
            -
                     | 
| 1386 | 
            -
             | 
| 1614 | 
            +
                    result = (Asciidoctor::Document.new input, :attributes => { 'swallow' => '', 'holygrail' => '' }).reader.read
         | 
| 1615 | 
            +
                    assert_empty result
         | 
| 1616 | 
            +
                  end
         | 
| 1617 | 
            +
             | 
| 1618 | 
            +
                  test 'ifndef with at least one required attributes set does not include content' do
         | 
| 1619 | 
            +
                    input = <<-EOS
         | 
| 1620 | 
            +
            ifndef::holygrail+swallow[]
         | 
| 1621 | 
            +
            Our quest is complete!
         | 
| 1622 | 
            +
            endif::holygrail+swallow[]
         | 
| 1623 | 
            +
                    EOS
         | 
| 1624 | 
            +
             | 
| 1625 | 
            +
                    result = (Asciidoctor::Document.new input, :attributes => { 'swallow' => '' }).reader.read
         | 
| 1626 | 
            +
                    assert_equal 'Our quest is complete!', result
         | 
| 1387 1627 | 
             
                  end
         | 
| 1388 1628 |  | 
| 1389 1629 | 
             
                  test 'escaped ifdef is unescaped and ignored' do
         | 
| @@ -1399,7 +1639,7 @@ content | |
| 1399 1639 | 
             
                    while reader.has_more_lines?
         | 
| 1400 1640 | 
             
                      lines << reader.read_line
         | 
| 1401 1641 | 
             
                    end
         | 
| 1402 | 
            -
                    assert_equal "ifdef::holygrail[]\ncontent\nendif::holygrail[]", (lines * ::Asciidoctor:: | 
| 1642 | 
            +
                    assert_equal "ifdef::holygrail[]\ncontent\nendif::holygrail[]", (lines * ::Asciidoctor::LF)
         | 
| 1403 1643 | 
             
                  end
         | 
| 1404 1644 |  | 
| 1405 1645 | 
             
                  test 'ifeval comparing missing attribute to nil includes content' do
         | 
| @@ -1415,7 +1655,7 @@ endif::[] | |
| 1415 1655 | 
             
                    while reader.has_more_lines?
         | 
| 1416 1656 | 
             
                      lines << reader.read_line
         | 
| 1417 1657 | 
             
                    end
         | 
| 1418 | 
            -
                    assert_equal 'No foo for you!', (lines * ::Asciidoctor:: | 
| 1658 | 
            +
                    assert_equal 'No foo for you!', (lines * ::Asciidoctor::LF)
         | 
| 1419 1659 | 
             
                  end
         | 
| 1420 1660 |  | 
| 1421 1661 | 
             
                  test 'ifeval comparing missing attribute to 0 drops content' do
         | 
| @@ -1431,7 +1671,7 @@ endif::[] | |
| 1431 1671 | 
             
                    while reader.has_more_lines?
         | 
| 1432 1672 | 
             
                      lines << reader.read_line
         | 
| 1433 1673 | 
             
                    end
         | 
| 1434 | 
            -
                    assert_equal '', (lines * ::Asciidoctor:: | 
| 1674 | 
            +
                    assert_equal '', (lines * ::Asciidoctor::LF)
         | 
| 1435 1675 | 
             
                  end
         | 
| 1436 1676 |  | 
| 1437 1677 | 
             
                  test 'ifeval comparing double-quoted attribute to matching string includes content' do
         | 
| @@ -1447,7 +1687,7 @@ endif::[] | |
| 1447 1687 | 
             
                    while reader.has_more_lines?
         | 
| 1448 1688 | 
             
                      lines << reader.read_line
         | 
| 1449 1689 | 
             
                    end
         | 
| 1450 | 
            -
                    assert_equal 'Asciidoctor it is!', (lines * ::Asciidoctor:: | 
| 1690 | 
            +
                    assert_equal 'Asciidoctor it is!', (lines * ::Asciidoctor::LF)
         | 
| 1451 1691 | 
             
                  end
         | 
| 1452 1692 |  | 
| 1453 1693 | 
             
                  test 'ifeval comparing single-quoted attribute to matching string includes content' do
         | 
| @@ -1463,7 +1703,7 @@ endif::[] | |
| 1463 1703 | 
             
                    while reader.has_more_lines?
         | 
| 1464 1704 | 
             
                      lines << reader.read_line
         | 
| 1465 1705 | 
             
                    end
         | 
| 1466 | 
            -
                    assert_equal 'Asciidoctor it is!', (lines * ::Asciidoctor:: | 
| 1706 | 
            +
                    assert_equal 'Asciidoctor it is!', (lines * ::Asciidoctor::LF)
         | 
| 1467 1707 | 
             
                  end
         | 
| 1468 1708 |  | 
| 1469 1709 | 
             
                  test 'ifeval comparing quoted attribute to non-matching string drops content' do
         | 
| @@ -1479,7 +1719,7 @@ endif::[] | |
| 1479 1719 | 
             
                    while reader.has_more_lines?
         | 
| 1480 1720 | 
             
                      lines << reader.read_line
         | 
| 1481 1721 | 
             
                    end
         | 
| 1482 | 
            -
                    assert_equal '', (lines * ::Asciidoctor:: | 
| 1722 | 
            +
                    assert_equal '', (lines * ::Asciidoctor::LF)
         | 
| 1483 1723 | 
             
                  end
         | 
| 1484 1724 |  | 
| 1485 1725 | 
             
                  test 'ifeval comparing attribute to lower version number includes content' do
         | 
| @@ -1495,7 +1735,7 @@ endif::[] | |
| 1495 1735 | 
             
                    while reader.has_more_lines?
         | 
| 1496 1736 | 
             
                      lines << reader.read_line
         | 
| 1497 1737 | 
             
                    end
         | 
| 1498 | 
            -
                    assert_equal 'That version will do!', (lines * ::Asciidoctor:: | 
| 1738 | 
            +
                    assert_equal 'That version will do!', (lines * ::Asciidoctor::LF)
         | 
| 1499 1739 | 
             
                  end
         | 
| 1500 1740 |  | 
| 1501 1741 | 
             
                  test 'ifeval comparing attribute to self includes content' do
         | 
| @@ -1511,7 +1751,7 @@ endif::[] | |
| 1511 1751 | 
             
                    while reader.has_more_lines?
         | 
| 1512 1752 | 
             
                      lines << reader.read_line
         | 
| 1513 1753 | 
             
                    end
         | 
| 1514 | 
            -
                    assert_equal 'Of course it\'s the same!', (lines * ::Asciidoctor:: | 
| 1754 | 
            +
                    assert_equal 'Of course it\'s the same!', (lines * ::Asciidoctor::LF)
         | 
| 1515 1755 | 
             
                  end
         | 
| 1516 1756 |  | 
| 1517 1757 | 
             
                  test 'ifeval arguments can be transposed' do
         | 
| @@ -1527,7 +1767,7 @@ endif::[] | |
| 1527 1767 | 
             
                    while reader.has_more_lines?
         | 
| 1528 1768 | 
             
                      lines << reader.read_line
         | 
| 1529 1769 | 
             
                    end
         | 
| 1530 | 
            -
                    assert_equal 'That version will do!', (lines * ::Asciidoctor:: | 
| 1770 | 
            +
                    assert_equal 'That version will do!', (lines * ::Asciidoctor::LF)
         | 
| 1531 1771 | 
             
                  end
         | 
| 1532 1772 |  | 
| 1533 1773 | 
             
                  test 'ifeval matching numeric equality includes content' do
         | 
| @@ -1543,7 +1783,7 @@ endif::[] | |
| 1543 1783 | 
             
                    while reader.has_more_lines?
         | 
| 1544 1784 | 
             
                      lines << reader.read_line
         | 
| 1545 1785 | 
             
                    end
         | 
| 1546 | 
            -
                    assert_equal 'One ring to rule them all!', (lines * ::Asciidoctor:: | 
| 1786 | 
            +
                    assert_equal 'One ring to rule them all!', (lines * ::Asciidoctor::LF)
         | 
| 1547 1787 | 
             
                  end
         | 
| 1548 1788 |  | 
| 1549 1789 | 
             
                  test 'ifeval matching numeric inequality includes content' do
         | 
| @@ -1559,7 +1799,7 @@ endif::[] | |
| 1559 1799 | 
             
                    while reader.has_more_lines?
         | 
| 1560 1800 | 
             
                      lines << reader.read_line
         | 
| 1561 1801 | 
             
                    end
         | 
| 1562 | 
            -
                    assert_equal 'One ring to rule them all!', (lines * ::Asciidoctor:: | 
| 1802 | 
            +
                    assert_equal 'One ring to rule them all!', (lines * ::Asciidoctor::LF)
         | 
| 1563 1803 | 
             
                  end
         | 
| 1564 1804 |  | 
| 1565 1805 | 
             
                  test 'ifdef with no target is ignored' do
         | 
| @@ -1574,7 +1814,7 @@ content | |
| 1574 1814 | 
             
                    while reader.has_more_lines?
         | 
| 1575 1815 | 
             
                      lines << reader.read_line
         | 
| 1576 1816 | 
             
                    end
         | 
| 1577 | 
            -
                    assert_equal "ifdef::[]\ncontent", (lines * ::Asciidoctor:: | 
| 1817 | 
            +
                    assert_equal "ifdef::[]\ncontent", (lines * ::Asciidoctor::LF)
         | 
| 1578 1818 | 
             
                  end
         | 
| 1579 1819 | 
             
                end
         | 
| 1580 1820 | 
             
              end
         |