summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormurphy <murphy@rubychan.de>2007-11-22 15:15:35 +0000
committermurphy <murphy@rubychan.de>2007-11-22 15:15:35 +0000
commitfce733bc0566b191932663dcb9e70b6bf7de2590 (patch)
treeff5255091a4e8225b9e7fd71123c7d6e372eda15
parent499415cc2d1c3a81491cd827848e9d79ed9813f0 (diff)
downloadcoderay-fce733bc0566b191932663dcb9e70b6bf7de2590.tar.gz
Fixed FileType shebang recognition for empty files. [Jeremy Hinegardner]
-rw-r--r--lib/coderay/helpers/file_type.rb29
1 files changed, 24 insertions, 5 deletions
diff --git a/lib/coderay/helpers/file_type.rb b/lib/coderay/helpers/file_type.rb
index 3d29d78..8d86e57 100644
--- a/lib/coderay/helpers/file_type.rb
+++ b/lib/coderay/helpers/file_type.rb
@@ -1,3 +1,4 @@
+#!/usr/bin/env ruby
module CodeRay
# = FileType
@@ -49,8 +50,11 @@ module FileType
def shebang filename
begin
File.open filename, 'r' do |f|
- first_line = f.gets
- first_line[TypeFromShebang]
+ if first_line = f.gets
+ if type = first_line[TypeFromShebang]
+ type.to_sym
+ end
+ end
end
rescue IOError
nil
@@ -113,11 +117,12 @@ if $0 == __FILE__
end
__END__
-
require 'test/unit'
class TC_FileType < Test::Unit::TestCase
-
+
+ include CodeRay
+
def test_fetch
assert_raise FileType::UnknownFileType do
FileType.fetch ''
@@ -177,7 +182,7 @@ class TC_FileType < Test::Unit::TestCase
assert_not_equal :yaml, FileType['YAML']
end
- def test_shebang
+ def test_no_shebang
dir = './test'
if File.directory? dir
Dir.chdir dir do
@@ -185,5 +190,19 @@ class TC_FileType < Test::Unit::TestCase
end
end
end
+
+ def test_shebang_empty_file
+ require 'tmpdir'
+ tmpfile = File.join(Dir.tmpdir, 'bla')
+ File.open(tmpfile, 'w') { } # touch
+ assert_equal nil, FileType[tmpfile]
+ end
+
+ def test_shebang
+ require 'tmpdir'
+ tmpfile = File.join(Dir.tmpdir, 'bla')
+ File.open(tmpfile, 'w') { |f| f.puts '#!/usr/bin/env ruby' }
+ assert_equal :ruby, FileType[tmpfile, true]
+ end
end