Chris@909
|
1 # encoding: utf-8
|
Chris@909
|
2 require 'test/unit'
|
Chris@909
|
3 require File.expand_path('../../lib/assert_warning', __FILE__)
|
Chris@909
|
4
|
Chris@909
|
5 $:.unshift File.expand_path('../../../lib', __FILE__)
|
Chris@909
|
6 require 'coderay'
|
Chris@909
|
7
|
Chris@909
|
8 class BasicTest < Test::Unit::TestCase
|
Chris@909
|
9
|
Chris@909
|
10 def test_version
|
Chris@909
|
11 assert_nothing_raised do
|
Chris@909
|
12 assert_match(/\A\d\.\d\.\d?\z/, CodeRay::VERSION)
|
Chris@909
|
13 end
|
Chris@909
|
14 end
|
Chris@909
|
15
|
Chris@909
|
16 RUBY_TEST_CODE = 'puts "Hello, World!"'
|
Chris@909
|
17
|
Chris@909
|
18 RUBY_TEST_TOKENS = [
|
Chris@909
|
19 ['puts', :ident],
|
Chris@909
|
20 [' ', :space],
|
Chris@909
|
21 [:begin_group, :string],
|
Chris@909
|
22 ['"', :delimiter],
|
Chris@909
|
23 ['Hello, World!', :content],
|
Chris@909
|
24 ['"', :delimiter],
|
Chris@909
|
25 [:end_group, :string]
|
Chris@909
|
26 ].flatten
|
Chris@909
|
27 def test_simple_scan
|
Chris@909
|
28 assert_nothing_raised do
|
Chris@909
|
29 assert_equal RUBY_TEST_TOKENS, CodeRay.scan(RUBY_TEST_CODE, :ruby).tokens
|
Chris@909
|
30 end
|
Chris@909
|
31 end
|
Chris@909
|
32
|
Chris@909
|
33 RUBY_TEST_HTML = 'puts <span class="string"><span class="delimiter">"</span>' +
|
Chris@909
|
34 '<span class="content">Hello, World!</span><span class="delimiter">"</span></span>'
|
Chris@909
|
35 def test_simple_highlight
|
Chris@909
|
36 assert_nothing_raised do
|
Chris@909
|
37 assert_equal RUBY_TEST_HTML, CodeRay.scan(RUBY_TEST_CODE, :ruby).html
|
Chris@909
|
38 end
|
Chris@909
|
39 end
|
Chris@909
|
40
|
Chris@909
|
41 def test_scan_file
|
Chris@909
|
42 CodeRay.scan_file __FILE__
|
Chris@909
|
43 end
|
Chris@909
|
44
|
Chris@909
|
45 def test_encode
|
Chris@909
|
46 assert_equal 1, CodeRay.encode('test', :python, :count)
|
Chris@909
|
47 end
|
Chris@909
|
48
|
Chris@909
|
49 def test_encode_tokens
|
Chris@909
|
50 assert_equal 1, CodeRay.encode_tokens(CodeRay::Tokens['test', :string], :count)
|
Chris@909
|
51 end
|
Chris@909
|
52
|
Chris@909
|
53 def test_encode_file
|
Chris@909
|
54 assert_equal File.read(__FILE__), CodeRay.encode_file(__FILE__, :text)
|
Chris@909
|
55 end
|
Chris@909
|
56
|
Chris@909
|
57 def test_highlight
|
Chris@909
|
58 assert_match '<pre>test</pre>', CodeRay.highlight('test', :python)
|
Chris@909
|
59 end
|
Chris@909
|
60
|
Chris@909
|
61 def test_highlight_file
|
Chris@909
|
62 assert_match "require <span class=\"string\"><span class=\"delimiter\">'</span><span class=\"content\">test/unit</span><span class=\"delimiter\">'</span></span>\n", CodeRay.highlight_file(__FILE__)
|
Chris@909
|
63 end
|
Chris@909
|
64
|
Chris@909
|
65 def test_duo
|
Chris@909
|
66 assert_equal(RUBY_TEST_CODE,
|
Chris@909
|
67 CodeRay::Duo[:plain, :text].highlight(RUBY_TEST_CODE))
|
Chris@909
|
68 assert_equal(RUBY_TEST_CODE,
|
Chris@909
|
69 CodeRay::Duo[:plain => :text].highlight(RUBY_TEST_CODE))
|
Chris@909
|
70 end
|
Chris@909
|
71
|
Chris@909
|
72 def test_duo_stream
|
Chris@909
|
73 assert_equal(RUBY_TEST_CODE,
|
Chris@909
|
74 CodeRay::Duo[:plain, :text].highlight(RUBY_TEST_CODE, :stream => true))
|
Chris@909
|
75 end
|
Chris@909
|
76
|
Chris@909
|
77 def test_comment_filter
|
Chris@909
|
78 assert_equal <<-EXPECTED, CodeRay.scan(<<-INPUT, :ruby).comment_filter.text
|
Chris@909
|
79 #!/usr/bin/env ruby
|
Chris@909
|
80
|
Chris@909
|
81 code
|
Chris@909
|
82
|
Chris@909
|
83 more code
|
Chris@909
|
84 EXPECTED
|
Chris@909
|
85 #!/usr/bin/env ruby
|
Chris@909
|
86 =begin
|
Chris@909
|
87 A multi-line comment.
|
Chris@909
|
88 =end
|
Chris@909
|
89 code
|
Chris@909
|
90 # A single-line comment.
|
Chris@909
|
91 more code # and another comment, in-line.
|
Chris@909
|
92 INPUT
|
Chris@909
|
93 end
|
Chris@909
|
94
|
Chris@909
|
95 def test_lines_of_code
|
Chris@909
|
96 assert_equal 2, CodeRay.scan(<<-INPUT, :ruby).lines_of_code
|
Chris@909
|
97 #!/usr/bin/env ruby
|
Chris@909
|
98 =begin
|
Chris@909
|
99 A multi-line comment.
|
Chris@909
|
100 =end
|
Chris@909
|
101 code
|
Chris@909
|
102 # A single-line comment.
|
Chris@909
|
103 more code # and another comment, in-line.
|
Chris@909
|
104 INPUT
|
Chris@909
|
105 rHTML = <<-RHTML
|
Chris@909
|
106 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
Chris@909
|
107 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
Chris@909
|
108
|
Chris@909
|
109 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
Chris@909
|
110 <head>
|
Chris@909
|
111 <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
|
Chris@909
|
112 <title><%= controller.controller_name.titleize %>: <%= controller.action_name %></title>
|
Chris@909
|
113 <%= stylesheet_link_tag 'scaffold' %>
|
Chris@909
|
114 </head>
|
Chris@909
|
115 <body>
|
Chris@909
|
116
|
Chris@909
|
117 <p style="color: green"><%= flash[:notice] %></p>
|
Chris@909
|
118
|
Chris@909
|
119 <div id="main">
|
Chris@909
|
120 <%= yield %>
|
Chris@909
|
121 </div>
|
Chris@909
|
122
|
Chris@909
|
123 </body>
|
Chris@909
|
124 </html>
|
Chris@909
|
125 RHTML
|
Chris@909
|
126 assert_equal 0, CodeRay.scan(rHTML, :html).lines_of_code
|
Chris@909
|
127 assert_equal 0, CodeRay.scan(rHTML, :php).lines_of_code
|
Chris@909
|
128 assert_equal 0, CodeRay.scan(rHTML, :yaml).lines_of_code
|
Chris@909
|
129 assert_equal 4, CodeRay.scan(rHTML, :erb).lines_of_code
|
Chris@909
|
130 end
|
Chris@909
|
131
|
Chris@909
|
132 def test_list_of_encoders
|
Chris@909
|
133 assert_kind_of(Array, CodeRay::Encoders.list)
|
Chris@909
|
134 assert CodeRay::Encoders.list.include?(:count)
|
Chris@909
|
135 end
|
Chris@909
|
136
|
Chris@909
|
137 def test_list_of_scanners
|
Chris@909
|
138 assert_kind_of(Array, CodeRay::Scanners.list)
|
Chris@909
|
139 assert CodeRay::Scanners.list.include?(:text)
|
Chris@909
|
140 end
|
Chris@909
|
141
|
Chris@909
|
142 def test_token_kinds
|
Chris@909
|
143 assert_kind_of Hash, CodeRay::TokenKinds
|
Chris@909
|
144 for kind, css_class in CodeRay::TokenKinds
|
Chris@909
|
145 assert_kind_of Symbol, kind
|
Chris@909
|
146 if css_class != false
|
Chris@909
|
147 assert_kind_of String, css_class, "TokenKinds[%p] == %p" % [kind, css_class]
|
Chris@909
|
148 end
|
Chris@909
|
149 end
|
Chris@909
|
150 assert_equal 'reserved', CodeRay::TokenKinds[:reserved]
|
Chris@909
|
151 assert_warning 'Undefined Token kind: :shibboleet' do
|
Chris@909
|
152 assert_equal false, CodeRay::TokenKinds[:shibboleet]
|
Chris@909
|
153 end
|
Chris@909
|
154 end
|
Chris@909
|
155
|
Chris@909
|
156 class Milk < CodeRay::Encoders::Encoder
|
Chris@909
|
157 FILE_EXTENSION = 'cocoa'
|
Chris@909
|
158 end
|
Chris@909
|
159
|
Chris@909
|
160 class HoneyBee < CodeRay::Encoders::Encoder
|
Chris@909
|
161 end
|
Chris@909
|
162
|
Chris@909
|
163 def test_encoder_file_extension
|
Chris@909
|
164 assert_nothing_raised do
|
Chris@909
|
165 assert_equal 'html', CodeRay::Encoders::Page::FILE_EXTENSION
|
Chris@909
|
166 assert_equal 'cocoa', Milk::FILE_EXTENSION
|
Chris@909
|
167 assert_equal 'cocoa', Milk.new.file_extension
|
Chris@909
|
168 assert_equal 'honeybee', HoneyBee::FILE_EXTENSION
|
Chris@909
|
169 assert_equal 'honeybee', HoneyBee.new.file_extension
|
Chris@909
|
170 end
|
Chris@909
|
171 assert_raise NameError do
|
Chris@909
|
172 HoneyBee::MISSING_CONSTANT
|
Chris@909
|
173 end
|
Chris@909
|
174 end
|
Chris@909
|
175
|
Chris@909
|
176 def test_encoder_tokens
|
Chris@909
|
177 encoder = CodeRay::Encoders::Encoder.new
|
Chris@909
|
178 encoder.send :setup, {}
|
Chris@909
|
179 assert_raise(ArgumentError) { encoder.token :strange, '' }
|
Chris@909
|
180 encoder.token 'test', :debug
|
Chris@909
|
181 end
|
Chris@909
|
182
|
Chris@909
|
183 def test_encoder_deprecated_interface
|
Chris@909
|
184 encoder = CodeRay::Encoders::Encoder.new
|
Chris@909
|
185 encoder.send :setup, {}
|
Chris@909
|
186 assert_warning 'Using old Tokens#<< interface.' do
|
Chris@909
|
187 encoder << ['test', :content]
|
Chris@909
|
188 end
|
Chris@909
|
189 assert_raise ArgumentError do
|
Chris@909
|
190 encoder << [:strange, :input]
|
Chris@909
|
191 end
|
Chris@909
|
192 assert_raise ArgumentError do
|
Chris@909
|
193 encoder.encode_tokens [['test', :token]]
|
Chris@909
|
194 end
|
Chris@909
|
195 end
|
Chris@909
|
196
|
Chris@909
|
197 def encoder_token_interface_deprecation_warning_given
|
Chris@909
|
198 CodeRay::Encoders::Encoder.send :class_variable_get, :@@CODERAY_TOKEN_INTERFACE_DEPRECATION_WARNING_GIVEN
|
Chris@909
|
199 end
|
Chris@909
|
200
|
Chris@909
|
201 def test_scanner_file_extension
|
Chris@909
|
202 assert_equal 'rb', CodeRay::Scanners::Ruby.file_extension
|
Chris@909
|
203 assert_equal 'rb', CodeRay::Scanners::Ruby.new.file_extension
|
Chris@909
|
204 assert_equal 'java', CodeRay::Scanners::Java.file_extension
|
Chris@909
|
205 assert_equal 'java', CodeRay::Scanners::Java.new.file_extension
|
Chris@909
|
206 end
|
Chris@909
|
207
|
Chris@909
|
208 def test_scanner_lang
|
Chris@909
|
209 assert_equal :ruby, CodeRay::Scanners::Ruby.lang
|
Chris@909
|
210 assert_equal :ruby, CodeRay::Scanners::Ruby.new.lang
|
Chris@909
|
211 assert_equal :java, CodeRay::Scanners::Java.lang
|
Chris@909
|
212 assert_equal :java, CodeRay::Scanners::Java.new.lang
|
Chris@909
|
213 end
|
Chris@909
|
214
|
Chris@909
|
215 def test_scanner_tokenize
|
Chris@909
|
216 assert_equal ['foo', :plain], CodeRay::Scanners::Plain.new.tokenize('foo')
|
Chris@909
|
217 assert_equal [['foo', :plain], ['bar', :plain]], CodeRay::Scanners::Plain.new.tokenize(['foo', 'bar'])
|
Chris@909
|
218 CodeRay::Scanners::Plain.new.tokenize 42
|
Chris@909
|
219 end
|
Chris@909
|
220
|
Chris@909
|
221 def test_scanner_tokens
|
Chris@909
|
222 scanner = CodeRay::Scanners::Plain.new
|
Chris@909
|
223 scanner.tokenize('foo')
|
Chris@909
|
224 assert_equal ['foo', :plain], scanner.tokens
|
Chris@909
|
225 scanner.string = ''
|
Chris@909
|
226 assert_equal ['', :plain], scanner.tokens
|
Chris@909
|
227 end
|
Chris@909
|
228
|
Chris@909
|
229 def test_scanner_line_and_column
|
Chris@909
|
230 scanner = CodeRay::Scanners::Plain.new "foo\nbär+quux"
|
Chris@909
|
231 assert_equal 0, scanner.pos
|
Chris@909
|
232 assert_equal 1, scanner.line
|
Chris@909
|
233 assert_equal 1, scanner.column
|
Chris@909
|
234 scanner.scan(/foo/)
|
Chris@909
|
235 assert_equal 3, scanner.pos
|
Chris@909
|
236 assert_equal 1, scanner.line
|
Chris@909
|
237 assert_equal 4, scanner.column
|
Chris@909
|
238 scanner.scan(/\n/)
|
Chris@909
|
239 assert_equal 4, scanner.pos
|
Chris@909
|
240 assert_equal 2, scanner.line
|
Chris@909
|
241 assert_equal 1, scanner.column
|
Chris@909
|
242 scanner.scan(/b/)
|
Chris@909
|
243 assert_equal 5, scanner.pos
|
Chris@909
|
244 assert_equal 2, scanner.line
|
Chris@909
|
245 assert_equal 2, scanner.column
|
Chris@909
|
246 scanner.scan(/a/)
|
Chris@909
|
247 assert_equal 5, scanner.pos
|
Chris@909
|
248 assert_equal 2, scanner.line
|
Chris@909
|
249 assert_equal 2, scanner.column
|
Chris@909
|
250 scanner.scan(/ä/)
|
Chris@909
|
251 assert_equal 7, scanner.pos
|
Chris@909
|
252 assert_equal 2, scanner.line
|
Chris@909
|
253 assert_equal 4, scanner.column
|
Chris@909
|
254 scanner.scan(/r/)
|
Chris@909
|
255 assert_equal 8, scanner.pos
|
Chris@909
|
256 assert_equal 2, scanner.line
|
Chris@909
|
257 assert_equal 5, scanner.column
|
Chris@909
|
258 end
|
Chris@909
|
259
|
Chris@909
|
260 def test_scanner_use_subclasses
|
Chris@909
|
261 assert_raise NotImplementedError do
|
Chris@909
|
262 CodeRay::Scanners::Scanner.new
|
Chris@909
|
263 end
|
Chris@909
|
264 end
|
Chris@909
|
265
|
Chris@909
|
266 class InvalidScanner < CodeRay::Scanners::Scanner
|
Chris@909
|
267 end
|
Chris@909
|
268
|
Chris@909
|
269 def test_scanner_scan_tokens
|
Chris@909
|
270 assert_raise NotImplementedError do
|
Chris@909
|
271 InvalidScanner.new.tokenize ''
|
Chris@909
|
272 end
|
Chris@909
|
273 end
|
Chris@909
|
274
|
Chris@909
|
275 class RaisingScanner < CodeRay::Scanners::Scanner
|
Chris@909
|
276 def scan_tokens encoder, options
|
Chris@909
|
277 raise_inspect 'message', [], :initial
|
Chris@909
|
278 end
|
Chris@909
|
279 end
|
Chris@909
|
280
|
Chris@909
|
281 def test_scanner_raise_inspect
|
Chris@909
|
282 assert_raise CodeRay::Scanners::Scanner::ScanError do
|
Chris@909
|
283 RaisingScanner.new.tokenize ''
|
Chris@909
|
284 end
|
Chris@909
|
285 end
|
Chris@909
|
286
|
Chris@909
|
287 def test_scan_a_frozen_string
|
Chris@909
|
288 assert_nothing_raised do
|
Chris@909
|
289 CodeRay.scan RUBY_VERSION, :ruby
|
Chris@909
|
290 CodeRay.scan RUBY_VERSION, :plain
|
Chris@909
|
291 end
|
Chris@909
|
292 end
|
Chris@909
|
293
|
Chris@909
|
294 def test_scan_a_non_string
|
Chris@909
|
295 assert_nothing_raised do
|
Chris@909
|
296 CodeRay.scan 42, :ruby
|
Chris@909
|
297 CodeRay.scan nil, :ruby
|
Chris@909
|
298 CodeRay.scan self, :ruby
|
Chris@909
|
299 CodeRay.encode ENV.to_hash, :ruby, :page
|
Chris@909
|
300 CodeRay.highlight CodeRay, :plain
|
Chris@909
|
301 end
|
Chris@909
|
302 end
|
Chris@909
|
303
|
Chris@909
|
304 end
|