File: mimemagic_test.rb

package info (click to toggle)
ruby-mimemagic 0.3.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 300 kB
  • ctags: 30
  • sloc: ruby: 2,143; makefile: 2
file content (125 lines) | stat: -rw-r--r-- 5,690 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
require 'bacon'
require 'mimemagic'
require 'stringio'

describe 'MimeMagic' do
  it 'should have type, mediatype and subtype' do
    MimeMagic.new('text/html').type.should.equal 'text/html'
    MimeMagic.new('text/html').mediatype.should.equal 'text'
    MimeMagic.new('text/html').subtype.should.equal 'html'
  end

  it 'should have mediatype helpers' do
    MimeMagic.new('text/plain').should.be.text
    MimeMagic.new('text/html').should.be.text
    MimeMagic.new('application/xhtml+xml').should.be.text
    MimeMagic.new('application/octet-stream').should.not.be.text
    MimeMagic.new('image/png').should.not.be.text
    MimeMagic.new('image/png').should.be.image
    MimeMagic.new('video/ogg').should.be.video
    MimeMagic.new('audio/mpeg').should.be.audio
  end

  it 'should have hierarchy' do
    MimeMagic.new('text/html').should.be.child_of 'text/plain'
    MimeMagic.new('text/x-java').should.be.child_of 'text/plain'
  end

  it 'should have extensions' do
    MimeMagic.new('text/html').extensions.should.equal %w(htm html)
  end

  it 'should have comment' do
    MimeMagic.new('text/html').comment.should.equal 'HTML document'
  end

  it 'should recognize extensions' do
    MimeMagic.by_extension('.html').should.equal 'text/html'
    MimeMagic.by_extension('html').should.equal 'text/html'
    MimeMagic.by_extension(:html).should.equal 'text/html'
    MimeMagic.by_extension('rb').should.equal 'application/x-ruby'
    MimeMagic.by_extension('crazy').should.equal nil
    MimeMagic.by_extension('').should.equal nil
  end

  it 'should recognize by a path' do
    MimeMagic.by_path('/adsjkfa/kajsdfkadsf/kajsdfjasdf.html').should.equal 'text/html'
    MimeMagic.by_path('something.html').should.equal 'text/html'
    MimeMagic.by_path('wtf.rb').should.equal 'application/x-ruby'
    MimeMagic.by_path('where/am.html/crazy').should.equal nil
    MimeMagic.by_path('').should.equal nil
  end

  it 'should recognize xlsx as zip without magic' do
    file = "test/files/application.vnd.openxmlformats-officedocument.spreadsheetml.sheet"
    MimeMagic.by_magic(File.read(file)).should.equal "application/zip"
    MimeMagic.by_magic(File.open(file, 'rb')).should.equal "application/zip"
  end

  it 'should recognize by magic' do
    require "mimemagic/overlay"
    Dir['test/files/*'].each do |file|
      mime = file[11..-1].sub('.', '/')
      MimeMagic.by_magic(File.read(file)).should.equal mime
      MimeMagic.by_magic(File.open(file, 'rb')).should.equal mime
    end
  end

  it 'should have add' do
    MimeMagic.add('application/mimemagic-test',
                  extensions: %w(ext1 ext2),
                  parents: 'application/xml',
                  comment: 'Comment')
    MimeMagic.by_extension('ext1').should.equal 'application/mimemagic-test'
    MimeMagic.by_extension('ext2').should.equal 'application/mimemagic-test'
    MimeMagic.by_extension('ext2').comment.should.equal 'Comment'
    MimeMagic.new('application/mimemagic-test').extensions.should.equal %w(ext1 ext2)
    MimeMagic.new('application/mimemagic-test').should.be.child_of 'text/plain'
  end

  it 'should process magic' do
    MimeMagic.add('application/mimemagic-test',
                  magic: [[0, 'MAGICTEST'], # MAGICTEST at position 0
                             [1, 'MAGICTEST'], # MAGICTEST at position 1
                             [9..12, 'MAGICTEST'], # MAGICTEST starting at position 9 to 12
                             [2, 'MAGICTEST', [[0, 'X'], [0, 'Y']]]]) # MAGICTEST at position 2 and (X at 0 or Y at 0)

    MimeMagic.by_magic('MAGICTEST').should.equal 'application/mimemagic-test'
    MimeMagic.by_magic('XMAGICTEST').should.equal 'application/mimemagic-test'
    MimeMagic.by_magic(' MAGICTEST').should.equal 'application/mimemagic-test'
    MimeMagic.by_magic('123456789MAGICTEST').should.equal 'application/mimemagic-test'
    MimeMagic.by_magic('123456789ABMAGICTEST').should.equal 'application/mimemagic-test'
    MimeMagic.by_magic('123456789ABCMAGICTEST').should.equal 'application/mimemagic-test'
    MimeMagic.by_magic('123456789ABCDMAGICTEST').should.equal nil
    MimeMagic.by_magic('X MAGICTEST').should.equal 'application/mimemagic-test'
    MimeMagic.by_magic('Y MAGICTEST').should.equal 'application/mimemagic-test'
    MimeMagic.by_magic('Z MAGICTEST').should.equal nil

    MimeMagic.by_magic(StringIO.new 'MAGICTEST').should.equal 'application/mimemagic-test'
    MimeMagic.by_magic(StringIO.new 'XMAGICTEST').should.equal 'application/mimemagic-test'
    MimeMagic.by_magic(StringIO.new ' MAGICTEST').should.equal 'application/mimemagic-test'
    MimeMagic.by_magic(StringIO.new '123456789MAGICTEST').should.equal 'application/mimemagic-test'
    MimeMagic.by_magic(StringIO.new '123456789ABMAGICTEST').should.equal 'application/mimemagic-test'
    MimeMagic.by_magic(StringIO.new '123456789ABCMAGICTEST').should.equal 'application/mimemagic-test'
    MimeMagic.by_magic(StringIO.new '123456789ABCDMAGICTEST').should.equal nil
    MimeMagic.by_magic(StringIO.new 'X MAGICTEST').should.equal 'application/mimemagic-test'
    MimeMagic.by_magic(StringIO.new 'Y MAGICTEST').should.equal 'application/mimemagic-test'
    MimeMagic.by_magic(StringIO.new 'Z MAGICTEST').should.equal nil
  end

  it 'should handle different file objects' do
    MimeMagic.add('application/mimemagic-test', magic: [[0, 'MAGICTEST']])
    class ReadableObj
      def read
        'MAGICTEST'
      end
    end
    MimeMagic.by_magic(ReadableObj.new).should.equal 'application/mimemagic-test'
    class StringableObject
      def to_s
        'MAGICTEST'
      end
    end
    MimeMagic.by_magic(StringableObject.new).should.equal 'application/mimemagic-test'
  end
end