annotate .svn/pristine/e1/e13d4eff8ef6e4c2192ff1fb6a6cfbcfa8709f65.svn-base @ 1082:997f6d7738f7 bug_531

In repo controller entry action, show the page for the file even if it's binary (so user still has access to history etc links). This makes it possible to use the entry action as the default when a file is clicked on
author Chris Cannam <chris.cannam@soundsoftware.ac.uk>
date Thu, 22 Nov 2012 18:04:17 +0000
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