# 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_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, %())
assert_includes(html, %())
assert_includes(html, %())
end
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