comparison vendor/gems/coderay-1.0.0/test/functional/examples.rb @ 909:cbb26bc654de redmine-1.3

Update to Redmine 1.3-stable branch (Redmine SVN rev 8964)
author Chris Cannam
date Fri, 24 Feb 2012 19:09:32 +0000
parents
children
comparison
equal deleted inserted replaced
908:c6c2cbd0afee 909:cbb26bc654de
1 require 'test/unit'
2
3 $:.unshift File.expand_path('../../../lib', __FILE__)
4 require 'coderay'
5
6 class ExamplesTest < Test::Unit::TestCase
7
8 def test_examples
9 # output as HTML div (using inline CSS styles)
10 div = CodeRay.scan('puts "Hello, world!"', :ruby).div
11 assert_equal <<-DIV, div
12 <div class="CodeRay">
13 <div class="code"><pre>puts <span style="background-color:hsla(0,100%,50%,0.05)"><span style="color:#710">&quot;</span><span style="color:#D20">Hello, world!</span><span style="color:#710">&quot;</span></span></pre></div>
14 </div>
15 DIV
16
17 # ...with line numbers
18 div = CodeRay.scan(<<-CODE.chomp, :ruby).div(:line_numbers => :table)
19 5.times do
20 puts 'Hello, world!'
21 end
22 CODE
23 assert_equal <<-DIV, div
24 <table class="CodeRay"><tr>
25 <td class="line-numbers" title="double click to toggle" ondblclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"><pre><a href="#n1" name="n1">1</a>
26 <a href="#n2" name="n2">2</a>
27 <a href="#n3" name="n3">3</a>
28 </pre></td>
29 <td class="code"><pre><span style="color:#00D">5</span>.times <span style="color:#080;font-weight:bold">do</span>
30 puts <span style="background-color:hsla(0,100%,50%,0.05)"><span style="color:#710">'</span><span style="color:#D20">Hello, world!</span><span style="color:#710">'</span></span>
31 <span style="color:#080;font-weight:bold">end</span></pre></td>
32 </tr></table>
33 DIV
34
35 # output as standalone HTML page (using CSS classes)
36 page = CodeRay.scan('puts "Hello, world!"', :ruby).page
37 assert page[<<-PAGE]
38 <body style="background-color: white;">
39
40 <table class="CodeRay"><tr>
41 <td class="line-numbers" title="double click to toggle" ondblclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"><pre>
42 </pre></td>
43 <td class="code"><pre>puts <span class="string"><span class="delimiter">&quot;</span><span class="content">Hello, world!</span><span class="delimiter">&quot;</span></span></pre></td>
44 </tr></table>
45
46 </body>
47 PAGE
48
49 # keep scanned tokens for later use
50 tokens = CodeRay.scan('{ "just": "an", "example": 42 }', :json)
51 assert_kind_of CodeRay::TokensProxy, tokens
52
53 assert_equal ["{", :operator, " ", :space, :begin_group, :key,
54 "\"", :delimiter, "just", :content, "\"", :delimiter,
55 :end_group, :key, ":", :operator, " ", :space,
56 :begin_group, :string, "\"", :delimiter, "an", :content,
57 "\"", :delimiter, :end_group, :string, ",", :operator,
58 " ", :space, :begin_group, :key, "\"", :delimiter,
59 "example", :content, "\"", :delimiter, :end_group, :key,
60 ":", :operator, " ", :space, "42", :integer,
61 " ", :space, "}", :operator], tokens.tokens
62
63 # produce a token statistic
64 assert_equal <<-STATISTIC, tokens.statistic
65
66 Code Statistics
67
68 Tokens 26
69 Non-Whitespace 15
70 Bytes Total 31
71
72 Token Types (7):
73 type count ratio size (average)
74 -------------------------------------------------------------
75 TOTAL 26 100.00 % 1.2
76 delimiter 6 23.08 % 1.0
77 operator 5 19.23 % 1.0
78 space 5 19.23 % 1.0
79 key 4 15.38 % 0.0
80 :begin_group 3 11.54 % 0.0
81 :end_group 3 11.54 % 0.0
82 content 3 11.54 % 4.3
83 string 2 7.69 % 0.0
84 integer 1 3.85 % 2.0
85
86 STATISTIC
87
88 # count the tokens
89 assert_equal 26, tokens.count
90
91 # produce a HTML div, but with CSS classes
92 div = tokens.div(:css => :class)
93 assert_equal <<-DIV, div
94 <div class="CodeRay">
95 <div class="code"><pre>{ <span class="key"><span class="delimiter">&quot;</span><span class="content">just</span><span class="delimiter">&quot;</span></span>: <span class="string"><span class="delimiter">&quot;</span><span class="content">an</span><span class="delimiter">&quot;</span></span>, <span class="key"><span class="delimiter">&quot;</span><span class="content">example</span><span class="delimiter">&quot;</span></span>: <span class="integer">42</span> }</pre></div>
96 </div>
97 DIV
98
99 # highlight a file (HTML div); guess the file type base on the extension
100 require 'coderay/helpers/file_type'
101 assert_equal :ruby, CodeRay::FileType[__FILE__]
102
103 # get a new scanner for Python
104 python_scanner = CodeRay.scanner :python
105 assert_kind_of CodeRay::Scanners::Python, python_scanner
106
107 # get a new encoder for terminal
108 terminal_encoder = CodeRay.encoder :term
109 assert_kind_of CodeRay::Encoders::Terminal, terminal_encoder
110
111 # scanning into tokens
112 tokens = python_scanner.tokenize 'import this; # The Zen of Python'
113 assert_equal ["import", :keyword, " ", :space, "this", :include,
114 ";", :operator, " ", :space, "# The Zen of Python", :comment], tokens
115
116 # format the tokens
117 term = terminal_encoder.encode_tokens(tokens)
118 assert_equal "\e[1;31mimport\e[0m \e[33mthis\e[0m; \e[37m# The Zen of Python\e[0m", term
119
120 # re-using scanner and encoder
121 ruby_highlighter = CodeRay::Duo[:ruby, :div]
122 div = ruby_highlighter.encode('puts "Hello, world!"')
123 assert_equal <<-DIV, div
124 <div class="CodeRay">
125 <div class="code"><pre>puts <span style="background-color:hsla(0,100%,50%,0.05)"><span style="color:#710">&quot;</span><span style="color:#D20">Hello, world!</span><span style="color:#710">&quot;</span></span></pre></div>
126 </div>
127 DIV
128 end
129
130 end