test for proper code block ending detecton
[gitorious:makeup.git] / test / makeup / markup_test.rb
1 # encoding: utf-8
2 # --
3 # The MIT License (MIT)
4 #
5 # Copyright (C) 2012 Gitorious AS
6 #
7 # Permission is hereby granted, free of charge, to any person obtaining a copy
8 # of this software and associated documentation files (the "Software"), to deal
9 # in the Software without restriction, including without limitation the rights
10 # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 # copies of the Software, and to permit persons to whom the Software is
12 # furnished to do so, subject to the following conditions:
13 #
14 # The above copyright notice and this permission notice shall be included in all
15 # copies or substantial portions of the Software.
16 #
17 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23 # SOFTWARE.
24 #++
25 require "test_helper"
26 require "makeup/markup"
27
28 describe Makeup::Markup do
29   before do
30     @highlighter = Makeup::SyntaxHighlighter.new
31     @renderer = Makeup::Markup.new(:highlighter => @highlighter)
32   end
33
34   describe "#render" do
35     it "renders multi-line code blocks with syntax highlighting" do
36       html = @renderer.render("file.md", <<-MD)
37 ```cl
38 (s-trim-left "trim ") ;; => "trim "
39 (s-trim-left " this") ;; => "this"
40 ```
41       MD
42
43       assert_match "<pre class=\"common-lisp prettyprint\">", html
44     end
45
46     it "highlights multiple separate multi-line code blocks" do
47       html = @renderer.render("file.md", <<-MD)
48 # This stuff
49
50 ```cl
51 (s-trim-left "trim ") ;; => "trim "
52 (s-trim-left " this") ;; => "this"
53 ```
54
55 # And this stuff
56
57 ```cl
58 (s-trim-left "trim ") ;; => "trim "
59 (s-trim-left " this") ;; => "this"
60 ```
61       MD
62
63       assert_equal 2, html.scan(/common-lisp/).length
64     end
65   end
66   
67   describe "#render" do
68     it "should detect end of code blocks properly" do
69       html = @renderer.render("file.md", <<-MD)
70 # This stuff
71
72 ```ruby
73 class Hello
74   def say
75     puts "hallo"
76   end
77 end
78 ```hidden-charaters
79
80 # And this stuff
81
82 ```ruby
83 class Bonjour
84   def say
85     puts "bonjour"
86   end
87 end
88 ```
89       MD
90       
91       assert_equal 2, html.scan(/rb/).length
92     end
93   end
94
95   describe "#highlight_code_blocks" do
96     it "does not touch non-markdown files" do
97       content = "```cl\n(yup)\n```"
98       highlighted = @renderer.highlight_code_blocks("file.rst", content)
99       assert_equal content, highlighted
100     end
101
102     it "highlights one-line code block" do
103       content = "```cl\n(yup)\n```"
104       highlighted = @renderer.highlight_code_blocks("file.md", content)
105       assert_match "common-lisp", highlighted
106     end
107
108     it "highlights multi-line code block" do
109       content = "```cl\n(yup)\n(yessir-p t)\n```"
110       highlighted = @renderer.highlight_code_blocks("file.md", content)
111       assert_match "(</span><span class=\"nv\">yessir-p</span>", highlighted
112     end
113
114     it "preserves code block white-space" do
115       content = "```cl\n(yup\n  (yessir-p t))\n```"
116       highlighted = @renderer.highlight_code_blocks("file.md", content)
117       assert_match "\n  <span class=\"p\">(</span>", highlighted
118     end
119   end
120
121   describe "markups" do
122     it "provides a list of supported markups" do
123       markups = Makeup::Markup.markups
124
125       assert Array === markups
126       assert(markups.find { |m| m[:suffix] == "*.md" })
127     end
128   end
129 end