require "../spec_helper" include Nodes describe PageContent do it "renders a single parent/child node structure" do page = Page.new(nodes: [ Paragraph.new(children: [ Text.new(content: "hi"), ] of Child) ] of Child) html = PageContent.new(page: page).render_to_string html.should eq %(

hi

) end it "renders multiple childrens" do page = Page.new(nodes: [ Paragraph.new(children: [ Text.new(content: "Hello, "), Emphasis.new(children: [ Text.new(content: "World!") ] of Child) ] of Child), UnorderedList.new(children: [ ListItem.new(children: [ Text.new(content: "List!") ] of Child), ListItem.new(children: [ Text.new(content: "Again!"), ] of Child) ] of Child) ] of Child) html = PageContent.new(page: page).render_to_string html.should eq %(

Hello, World!

) end it "renders an anchor" do page = Page.new(nodes: [ Anchor.new(href: "https://example.com", text: "link"), ] of Child) html = PageContent.new(page: page).render_to_string html.should eq %(link) end it "renders a blockquote" do page = Page.new(nodes: [ BlockQuote.new(children: [ Text.new("Wayne Gretzky. Michael Scott.") ] of Child) ] of Child) html = PageContent.new(page: page).render_to_string html.should eq %(
Wayne Gretzky. Michael Scott.
) end it "renders code" do page = Page.new(nodes: [ Code.new(children: [ Text.new("foo = bar") ] of Child) ] of Child) html = PageContent.new(page: page).render_to_string html.should eq %(foo = bar) end it "renders empasis" do page = Page.new(nodes: [ Paragraph.new(children: [ Text.new(content: "This is "), Emphasis.new(children: [ Text.new(content: "neat!") ] of Child), ] of Child), ] of Child) html = PageContent.new(page: page).render_to_string html.should eq %(

This is neat!

) end it "renders a figure and figure caption" do page = Page.new(nodes: [ Figure.new(children: [ Image.new(src: "image.png", originalWidth: 100, originalHeight: 100), FigureCaption.new(children: [ Text.new("A caption") ] of Child), ] of Child), ] of Child) html = PageContent.new(page: page).render_to_string html.should eq stripped_html <<-HTML
A caption
HTML end it "renders an H3" do page = Page.new(nodes: [ Heading3.new(children: [ Text.new(content: "Title!"), ] of Child), ] of Child) html = PageContent.new(page: page).render_to_string html.should eq %(

Title!

) end it "renders an H4" do page = Page.new(nodes: [ Heading4.new(children: [ Text.new(content: "In Conclusion..."), ] of Child), ] of Child) html = PageContent.new(page: page).render_to_string html.should eq %(

In Conclusion...

) end it "renders an image" do page = Page.new(nodes: [ Paragraph.new(children: [ Image.new(src: "image.png", originalWidth: 100, originalHeight: 100), ] of Child) ] of Child) html = PageContent.new(page: page).render_to_string html.should eq stripped_html <<-HTML

HTML end it "renders an iframe container" do page = Page.new(nodes: [ Paragraph.new(children: [ IFrame.new(href: "https://example.com"), ] of Child) ] of Child) html = PageContent.new(page: page).render_to_string html.should eq %(

Click to visit embedded content

) end it "renders an ordered list" do page = Page.new(nodes: [ OrderedList.new(children: [ ListItem.new(children: [Text.new("One")] of Child), ListItem.new(children: [Text.new("Two")] of Child), ] of Child), ] of Child) html = PageContent.new(page: page).render_to_string html.should eq %(
  1. One
  2. Two
) end it "renders an preformatted text" do page = Page.new(nodes: [ Paragraph.new(children: [ Text.new("Hello, world!"), ] of Child), ] of Child) html = PageContent.new(page: page).render_to_string html.should eq %(

Hello, world!

) end it "renders an preformatted text" do page = Page.new(nodes: [ Preformatted.new(children: [ Text.new("New\nline"), ] of Child), ] of Child) html = PageContent.new(page: page).render_to_string html.should eq %(
New\nline
) end it "renders strong text" do page = Page.new(nodes: [ Strong.new(children: [ Text.new("Oh yeah!"), ] of Child), ] of Child) html = PageContent.new(page: page).render_to_string html.should eq %(Oh yeah!) end it "renders an unordered list" do page = Page.new(nodes: [ UnorderedList.new(children: [ ListItem.new(children: [Text.new("Apple")] of Child), ListItem.new(children: [Text.new("Banana")] of Child), ] of Child), ] of Child) html = PageContent.new(page: page).render_to_string html.should eq %() end it "renders a user anchor" do page = Page.new(nodes: [ UserAnchor.new(userId: "abc123", text: "Some User"), ] of Child) html = PageContent.new(page: page).render_to_string html.should eq %(Some User) end end def stripped_html(html : String) html.gsub(/\n\s*/, "").strip end