# frozen_string_literal: true require 'test_helper' class TestVariousTocHtml < Minitest::Test # ref. https://github.com/toshimaru/jekyll-toc/issues/45 ANGLE_BRACKET_HTML = <<~HTML

h1

<base href>

& < >

HTML NO_TOC_HTML = <<~HTML

h1

no_toc h1

h2

no_toc h2

h3

no_toc h3

h4

no_toc h4

HTML JAPANESE_HEADINGS_HTML = <<~HTML

HTML TAGS_INSIDE_HEADINGS_HTML = <<~HTML

h2

h2

HTML TEST_HTML_1 = <<~HTML

h1

h3

h6
HTML TEST_HTML_2 = <<~HTML

h1

h3

h2

h6
HTML TEST_HTML_3 = <<~HTML
h6
h5

h4

h3

h2

h1

HTML TEST_HTML_4 = <<~HTML

h1

h3

h2

h4

h5
HTML def test_nested_toc parser = Jekyll::TableOfContents::Parser.new(TEST_HTML_1) doc = Nokogiri::HTML(parser.toc) expected = <<~HTML HTML actual = doc.css('ul.section-nav').to_s assert_equal(expected, actual) end def test_nested_toc_with_min_and_max parser = Jekyll::TableOfContents::Parser.new(TEST_HTML_1, 'min_level' => 2, 'max_level' => 5) doc = Nokogiri::HTML(parser.toc) expected = <<~HTML HTML actual = doc.css('ul.section-nav').to_s assert_equal(expected, actual) end def test_complex_nested_toc parser = Jekyll::TableOfContents::Parser.new(TEST_HTML_2) doc = Nokogiri::HTML(parser.toc) expected = <<~HTML HTML actual = doc.css('ul.section-nav').to_s assert_equal(expected, actual) end def test_decremental_headings1 parser = Jekyll::TableOfContents::Parser.new(TEST_HTML_3) doc = Nokogiri::HTML(parser.toc) expected = <<~HTML HTML actual = doc.css('ul.section-nav').to_s assert_equal(expected, actual) end def test_decremental_headings2 parser = Jekyll::TableOfContents::Parser.new(TEST_HTML_4) doc = Nokogiri::HTML(parser.toc) expected = <<~HTML HTML assert_equal(expected, doc.css('ul.section-nav').to_s) end def test_no_toc parser = Jekyll::TableOfContents::Parser.new(NO_TOC_HTML) doc = Nokogiri::HTML(parser.toc) expected = <<~HTML HTML actual = doc.css('ul.section-nav').to_s assert_equal(expected, actual) end def test_japanese_toc parser = Jekyll::TableOfContents::Parser.new(JAPANESE_HEADINGS_HTML) doc = Nokogiri::HTML(parser.toc) expected = <<~HTML HTML actual = doc.css('ul.section-nav').to_s assert_equal(expected, actual) end def test_angle_bracket parser = Jekyll::TableOfContents::Parser.new(ANGLE_BRACKET_HTML) doc = Nokogiri::HTML(parser.toc) expected = <<~HTML HTML actual = doc.css('ul.section-nav').to_s assert_equal(expected, actual) end def test_tags_inside_heading parser = Jekyll::TableOfContents::Parser.new(TAGS_INSIDE_HEADINGS_HTML) doc = Nokogiri::HTML(parser.toc) expected = <<~HTML HTML actual = doc.css('ul.section-nav').to_s assert_equal(expected, actual) end TEST_HTML_IGNORE = <<~HTML

h1

h2

h3

h6
HTML def test_nested_toc_with_no_toc_section_class parser = Jekyll::TableOfContents::Parser.new(TEST_HTML_IGNORE) doc = Nokogiri::HTML(parser.toc) expected = <<~HTML HTML actual = doc.css('ul.section-nav').to_s assert_equal(expected, actual) html = parser.inject_anchors_into_html assert_match(%r{

.+

}m, html) assert_match(%r{

.+

}m, html) assert_match(%r{
.+
}m, html) assert_includes(html, '

h2

') end TEST_HTML_IGNORE_2 = <<~HTML

h1

h2

h3

h4

h5
h6
HTML def test_nested_toc_with_no_toc_section_class_option parser = Jekyll::TableOfContents::Parser.new(TEST_HTML_IGNORE_2, 'no_toc_section_class' => 'exclude') doc = Nokogiri::HTML(parser.toc) expected = <<~HTML HTML actual = doc.css('ul.section-nav').to_s assert_equal(expected, actual) html = parser.inject_anchors_into_html assert_match(%r{

.+

}m, html) assert_match(%r{

.+

}m, html) assert_match(%r{
.+
}m, html) assert_includes(html, '

h2

') assert_includes(html, '

h4

') assert_includes(html, '
h5
') end TEST_HTML_IGNORE_3 = <<~HTML

h1

h2

h3

h4

h5
h6
HTML def test_multiple_no_toc_section_classes parser = Jekyll::TableOfContents::Parser.new(TEST_HTML_IGNORE_3, 'no_toc_section_class' => ['no_toc_section', 'exclude']) doc = Nokogiri::HTML(parser.toc) expected = <<~HTML HTML actual = doc.css('ul.section-nav').to_s assert_equal(expected, actual) html = parser.inject_anchors_into_html assert_match(%r{

.+

}m, html) assert_match(%r{

.+

}m, html) assert_match(%r{
.+
}m, html) assert_includes(html, '

h2

') assert_includes(html, '

h4

') assert_includes(html, '
h5
') end TEST_EXPLICIT_ID = <<~HTML

h1

h2

h3

HTML def test_toc_with_explicit_id parser = Jekyll::TableOfContents::Parser.new(TEST_EXPLICIT_ID) doc = Nokogiri::HTML(parser.toc) expected = <<~HTML HTML actual = doc.css('ul.section-nav').to_s assert_equal(expected, actual) html = parser.inject_anchors_into_html assert_includes(html, %( HTML actual = doc.css('ul.section-nav').to_s assert_equal(expected, actual) end def test_custom_css_classes parser = Jekyll::TableOfContents::Parser.new( TEST_HTML_1, 'item_class' => 'custom-item', 'list_class' => 'custom-list', 'sublist_class' => 'custom-sublist', 'item_prefix' => 'custom-prefix-' ) doc = Nokogiri::HTML(parser.toc) expected = <<~HTML HTML assert_equal(expected, doc.css('ul.custom-list').to_s) end end