annotate vendor/gems/coderay-1.0.0/test/functional/basic.rb @ 1171:b4558bc5837f bug_505

Close obsolete branch bug_505
author Chris Cannam
date Fri, 03 Aug 2012 19:40:23 +0100
parents cbb26bc654de
children
rev   line source
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">&quot;</span>' +
Chris@909 34 '<span class="content">Hello, World!</span><span class="delimiter">&quot;</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