mime-types 2.99.3 → 3.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/{Code-of-Conduct.rdoc → Code-of-Conduct.md} +29 -30
- data/Contributing.md +132 -0
- data/History.md +269 -0
- data/{Licence.rdoc → Licence.md} +4 -18
- data/Manifest.txt +8 -25
- data/README.rdoc +63 -73
- data/Rakefile +200 -97
- data/lib/mime/type/columnar.rb +30 -63
- data/lib/mime/type.rb +294 -458
- data/lib/mime/types/_columnar.rb +137 -0
- data/lib/mime/types/cache.rb +52 -74
- data/lib/mime/types/columnar.rb +2 -147
- data/lib/mime/types/container.rb +96 -0
- data/lib/mime/types/deprecations.rb +17 -34
- data/lib/mime/types/full.rb +19 -0
- data/lib/mime/types/loader.rb +36 -152
- data/lib/mime/types/logger.rb +7 -5
- data/lib/mime/types/registry.rb +90 -0
- data/lib/mime/types.rb +55 -148
- data/lib/mime-types.rb +2 -2
- data/test/minitest_helper.rb +8 -18
- data/test/test_mime_type.rb +489 -464
- data/test/test_mime_types.rb +139 -91
- data/test/test_mime_types_cache.rb +85 -57
- data/test/test_mime_types_class.rb +120 -100
- data/test/test_mime_types_lazy.rb +30 -28
- data/test/test_mime_types_loader.rb +18 -45
- metadata +92 -77
- data/Contributing.rdoc +0 -170
- data/History-Types.rdoc +0 -454
- data/History.rdoc +0 -590
- data/data/mime-types.json +0 -1
- data/data/mime.content_type.column +0 -1980
- data/data/mime.docs.column +0 -1980
- data/data/mime.encoding.column +0 -1980
- data/data/mime.friendly.column +0 -1980
- data/data/mime.obsolete.column +0 -1980
- data/data/mime.registered.column +0 -1980
- data/data/mime.signature.column +0 -1980
- data/data/mime.use_instead.column +0 -1980
- data/data/mime.xrefs.column +0 -1980
- data/docs/COPYING.txt +0 -339
- data/docs/artistic.txt +0 -127
- data/lib/mime/types/loader_path.rb +0 -15
- data/support/apache_mime_types.rb +0 -108
- data/support/benchmarks/load.rb +0 -64
- data/support/benchmarks/load_allocations.rb +0 -83
- data/support/benchmarks/object_counts.rb +0 -41
- data/support/convert/columnar.rb +0 -88
- data/support/convert.rb +0 -158
- data/support/iana_registry.rb +0 -172
    
        data/test/test_mime_types.rb
    CHANGED
    
    | @@ -1,121 +1,169 @@ | |
| 1 | 
            -
            #  | 
| 2 | 
            -
             | 
| 3 | 
            -
            require  | 
| 4 | 
            -
            require  | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 7 | 
            -
              def  | 
| 8 | 
            -
                @mime_types  | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require "mime/types"
         | 
| 4 | 
            +
            require "minitest_helper"
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            describe MIME::Types do
         | 
| 7 | 
            +
              def mime_types
         | 
| 8 | 
            +
                @mime_types ||= MIME::Types.new.tap { |mt|
         | 
| 9 | 
            +
                  mt.add MIME::Type.new(["text/plain", %w[txt]]),
         | 
| 10 | 
            +
                    MIME::Type.new(["image/jpeg", %w[jpg jpeg]]),
         | 
| 11 | 
            +
                    MIME::Type.new("application/x-wordperfect6.1"),
         | 
| 12 | 
            +
                    MIME::Type.new(
         | 
| 13 | 
            +
                      "content-type" => "application/x-www-form-urlencoded",
         | 
| 14 | 
            +
                      "registered" => true
         | 
| 15 | 
            +
                    ),
         | 
| 16 | 
            +
                    MIME::Type.new(["application/x-gzip", %w[gz]]),
         | 
| 17 | 
            +
                    MIME::Type.new(
         | 
| 18 | 
            +
                      "content-type" => "application/gzip",
         | 
| 19 | 
            +
                      "extensions" => "gz",
         | 
| 20 | 
            +
                      "registered" => true
         | 
| 21 | 
            +
                    )
         | 
| 22 | 
            +
                }
         | 
| 15 23 | 
             
              end
         | 
| 16 24 |  | 
| 17 | 
            -
               | 
| 18 | 
            -
                 | 
| 19 | 
            -
             | 
| 20 | 
            -
                 | 
| 21 | 
            -
              end
         | 
| 25 | 
            +
              describe "is enumerable" do
         | 
| 26 | 
            +
                it "correctly uses an Enumerable method like #any?" do
         | 
| 27 | 
            +
                  assert(mime_types.any? { |type| type.content_type == "text/plain" })
         | 
| 28 | 
            +
                end
         | 
| 22 29 |  | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 26 | 
            -
                 | 
| 27 | 
            -
              end
         | 
| 30 | 
            +
                it "implements each with no parameters to return an Enumerator" do
         | 
| 31 | 
            +
                  assert_kind_of Enumerator, mime_types.each
         | 
| 32 | 
            +
                  assert_kind_of Enumerator, mime_types.map
         | 
| 33 | 
            +
                end
         | 
| 28 34 |  | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 32 | 
            -
             | 
| 35 | 
            +
                it "will create a lazy enumerator" do
         | 
| 36 | 
            +
                  assert_kind_of Enumerator::Lazy, mime_types.lazy
         | 
| 37 | 
            +
                  assert_kind_of Enumerator::Lazy, mime_types.map.lazy
         | 
| 38 | 
            +
                end
         | 
| 33 39 |  | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 40 | 
            +
                it "is countable with an enumerator" do
         | 
| 41 | 
            +
                  assert_equal 6, mime_types.each.count
         | 
| 42 | 
            +
                  assert_equal 6, mime_types.lazy.count
         | 
| 43 | 
            +
                end
         | 
| 37 44 | 
             
              end
         | 
| 38 45 |  | 
| 39 | 
            -
               | 
| 40 | 
            -
                 | 
| 41 | 
            -
             | 
| 42 | 
            -
             | 
| 46 | 
            +
              describe "#[]" do
         | 
| 47 | 
            +
                it "can be searched with a MIME::Type" do
         | 
| 48 | 
            +
                  text_plain = MIME::Type.new("text/plain")
         | 
| 49 | 
            +
                  assert_includes mime_types[text_plain], "text/plain"
         | 
| 50 | 
            +
                  assert_equal 1, mime_types[text_plain].size
         | 
| 51 | 
            +
                end
         | 
| 43 52 |  | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 46 | 
            -
             | 
| 47 | 
            -
                 | 
| 48 | 
            -
                                         registered: true])
         | 
| 49 | 
            -
                refute_empty(@mime_types['application/gzip', registered: true])
         | 
| 50 | 
            -
                refute_equal(@mime_types['application/gzip'].size,
         | 
| 51 | 
            -
                             @mime_types['application/gzip', registered: true])
         | 
| 52 | 
            -
              end
         | 
| 53 | 
            +
                it "can be searched with a regular expression" do
         | 
| 54 | 
            +
                  assert_includes mime_types[/plain$/], "text/plain"
         | 
| 55 | 
            +
                  assert_equal 1, mime_types[/plain$/].size
         | 
| 56 | 
            +
                end
         | 
| 53 57 |  | 
| 54 | 
            -
             | 
| 55 | 
            -
             | 
| 56 | 
            -
                   | 
| 58 | 
            +
                it "sorts by priority with multiple matches" do
         | 
| 59 | 
            +
                  assert_equal %w[application/gzip application/x-gzip], mime_types[/gzip$/]
         | 
| 60 | 
            +
                  assert_equal 2, mime_types[/gzip$/].size
         | 
| 61 | 
            +
                end
         | 
| 62 | 
            +
             | 
| 63 | 
            +
                it "can be searched with a string" do
         | 
| 64 | 
            +
                  assert_includes mime_types["text/plain"], "text/plain"
         | 
| 65 | 
            +
                  assert_equal 1, mime_types["text/plain"].size
         | 
| 57 66 | 
             
                end
         | 
| 58 | 
            -
              end
         | 
| 59 67 |  | 
| 60 | 
            -
             | 
| 61 | 
            -
             | 
| 62 | 
            -
             | 
| 63 | 
            -
             | 
| 68 | 
            +
                it "can be searched with the complete flag" do
         | 
| 69 | 
            +
                  assert_empty mime_types[
         | 
| 70 | 
            +
                    "application/x-www-form-urlencoded",
         | 
| 71 | 
            +
                    complete: true
         | 
| 72 | 
            +
                  ]
         | 
| 73 | 
            +
                  assert_includes mime_types["text/plain", complete: true], "text/plain"
         | 
| 74 | 
            +
                  assert_equal 1, mime_types["text/plain", complete: true].size
         | 
| 64 75 | 
             
                end
         | 
| 65 76 |  | 
| 66 | 
            -
                 | 
| 77 | 
            +
                it "can be searched with the registered flag" do
         | 
| 78 | 
            +
                  assert_empty mime_types["application/x-wordperfect6.1", registered: true]
         | 
| 79 | 
            +
                  refute_empty mime_types[
         | 
| 80 | 
            +
                    "application/x-www-form-urlencoded",
         | 
| 81 | 
            +
                    registered: true
         | 
| 82 | 
            +
                  ]
         | 
| 83 | 
            +
                  refute_empty mime_types[/gzip/, registered: true]
         | 
| 84 | 
            +
                  refute_equal mime_types[/gzip/], mime_types[/gzip/, registered: true]
         | 
| 85 | 
            +
                end
         | 
| 67 86 |  | 
| 68 | 
            -
                 | 
| 87 | 
            +
                it "properly returns an empty result on a regular expression miss" do
         | 
| 88 | 
            +
                  assert_empty mime_types[/^foo/]
         | 
| 89 | 
            +
                  assert_empty mime_types[/^foo/, registered: true]
         | 
| 90 | 
            +
                  assert_empty mime_types[/^foo/, complete: true]
         | 
| 91 | 
            +
                end
         | 
| 69 92 | 
             
              end
         | 
| 70 93 |  | 
| 71 | 
            -
               | 
| 72 | 
            -
                 | 
| 73 | 
            -
             | 
| 74 | 
            -
             | 
| 75 | 
            -
                 | 
| 76 | 
            -
             | 
| 77 | 
            -
             | 
| 78 | 
            -
                  assert_equal(@mime_types.of('gif', true), @mime_types['image/gif'])
         | 
| 94 | 
            +
              describe "#add" do
         | 
| 95 | 
            +
                let(:eruby) { MIME::Type.new("application/x-eruby") }
         | 
| 96 | 
            +
                let(:jinja) { MIME::Type.new("application/jinja2") }
         | 
| 97 | 
            +
             | 
| 98 | 
            +
                it "successfully adds a new type" do
         | 
| 99 | 
            +
                  mime_types.add(eruby)
         | 
| 100 | 
            +
                  assert_equal mime_types["application/x-eruby"], [eruby]
         | 
| 79 101 | 
             
                end
         | 
| 80 | 
            -
             | 
| 81 | 
            -
                 | 
| 82 | 
            -
                   | 
| 102 | 
            +
             | 
| 103 | 
            +
                it "complains about adding a duplicate type" do
         | 
| 104 | 
            +
                  mime_types.add(eruby)
         | 
| 105 | 
            +
                  assert_output "", /is already registered as a variant/ do
         | 
| 106 | 
            +
                    mime_types.add(eruby)
         | 
| 107 | 
            +
                  end
         | 
| 108 | 
            +
                  assert_equal mime_types["application/x-eruby"], [eruby]
         | 
| 83 109 | 
             
                end
         | 
| 84 | 
            -
                assert_empty(@mime_types.type_for('zzz'))
         | 
| 85 | 
            -
              end
         | 
| 86 110 |  | 
| 87 | 
            -
             | 
| 88 | 
            -
             | 
| 89 | 
            -
             | 
| 111 | 
            +
                it "does not complain about adding a duplicate type when quiet" do
         | 
| 112 | 
            +
                  mime_types.add(eruby)
         | 
| 113 | 
            +
                  assert_output "", "" do
         | 
| 114 | 
            +
                    mime_types.add(eruby, :silent)
         | 
| 115 | 
            +
                  end
         | 
| 116 | 
            +
                  assert_equal mime_types["application/x-eruby"], [eruby]
         | 
| 117 | 
            +
                end
         | 
| 90 118 |  | 
| 91 | 
            -
             | 
| 92 | 
            -
             | 
| 93 | 
            -
             | 
| 94 | 
            -
             | 
| 95 | 
            -
                  @mime_types.add_type_variant(xtxp)
         | 
| 119 | 
            +
                it "successfully adds from an array" do
         | 
| 120 | 
            +
                  mime_types.add([eruby, jinja])
         | 
| 121 | 
            +
                  assert_equal mime_types["application/x-eruby"], [eruby]
         | 
| 122 | 
            +
                  assert_equal mime_types["application/jinja2"], [jinja]
         | 
| 96 123 | 
             
                end
         | 
| 97 | 
            -
                assert_includes(@mime_types['text/plain'], xtxp)
         | 
| 98 | 
            -
              end
         | 
| 99 124 |  | 
| 100 | 
            -
             | 
| 101 | 
            -
             | 
| 102 | 
            -
             | 
| 125 | 
            +
                it "successfully adds from another MIME::Types" do
         | 
| 126 | 
            +
                  mt = MIME::Types.new
         | 
| 127 | 
            +
                  mt.add(mime_types)
         | 
| 128 | 
            +
                  assert_equal mime_types.count, mt.count
         | 
| 103 129 |  | 
| 104 | 
            -
             | 
| 105 | 
            -
             | 
| 106 | 
            -
             | 
| 107 | 
            -
                assert_deprecated('MIME::Types#index_extensions', 'and will be private') do
         | 
| 108 | 
            -
                  @mime_types.index_extensions(xtxp)
         | 
| 130 | 
            +
                  mime_types.each do |type|
         | 
| 131 | 
            +
                    assert_equal mt[type.content_type], [type]
         | 
| 132 | 
            +
                  end
         | 
| 109 133 | 
             
                end
         | 
| 110 | 
            -
                assert_includes(@mime_types.of('tzt'), xtxp)
         | 
| 111 134 | 
             
              end
         | 
| 112 135 |  | 
| 113 | 
            -
               | 
| 114 | 
            -
                 | 
| 115 | 
            -
                   | 
| 136 | 
            +
              describe "#type_for" do
         | 
| 137 | 
            +
                it "finds all types for a given extension" do
         | 
| 138 | 
            +
                  assert_equal %w[application/gzip application/x-gzip],
         | 
| 139 | 
            +
                    mime_types.type_for("gz")
         | 
| 140 | 
            +
                end
         | 
| 141 | 
            +
             | 
| 142 | 
            +
                it "separates the extension from filenames" do
         | 
| 143 | 
            +
                  assert_equal %w[image/jpeg], mime_types.of(["foo.jpeg", "bar.jpeg"])
         | 
| 116 144 | 
             
                end
         | 
| 117 | 
            -
             | 
| 118 | 
            -
             | 
| 145 | 
            +
             | 
| 146 | 
            +
                it "finds multiple extensions" do
         | 
| 147 | 
            +
                  assert_equal %w[image/jpeg text/plain],
         | 
| 148 | 
            +
                    mime_types.type_for(%w[foo.txt foo.jpeg])
         | 
| 149 | 
            +
                end
         | 
| 150 | 
            +
             | 
| 151 | 
            +
                it "does not find unknown extensions" do
         | 
| 152 | 
            +
                  keys = mime_types.instance_variable_get(:@extension_index).keys
         | 
| 153 | 
            +
                  assert_empty mime_types.type_for("zzz")
         | 
| 154 | 
            +
                  assert_equal keys, mime_types.instance_variable_get(:@extension_index).keys
         | 
| 155 | 
            +
                end
         | 
| 156 | 
            +
             | 
| 157 | 
            +
                it "modifying type extensions causes reindexing" do
         | 
| 158 | 
            +
                  plain_text = mime_types["text/plain"].first
         | 
| 159 | 
            +
                  plain_text.add_extensions("xtxt")
         | 
| 160 | 
            +
                  assert_includes mime_types.type_for("xtxt"), "text/plain"
         | 
| 161 | 
            +
                end
         | 
| 162 | 
            +
              end
         | 
| 163 | 
            +
             | 
| 164 | 
            +
              describe "#count" do
         | 
| 165 | 
            +
                it "can count the number of types inside" do
         | 
| 166 | 
            +
                  assert_equal 6, mime_types.count
         | 
| 119 167 | 
             
                end
         | 
| 120 168 | 
             
              end
         | 
| 121 169 | 
             
            end
         | 
| @@ -1,19 +1,26 @@ | |
| 1 | 
            -
            #  | 
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 | 
            -
            require  | 
| 4 | 
            -
            require  | 
| 3 | 
            +
            require "mime/types"
         | 
| 4 | 
            +
            require "minitest_helper"
         | 
| 5 5 |  | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 6 | 
            +
            MUTEX = Mutex.new
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            describe MIME::Types::Cache do
         | 
| 9 | 
            +
              include Minitest::Hooks
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              def around
         | 
| 12 | 
            +
                require "fileutils"
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                MUTEX.synchronize do
         | 
| 15 | 
            +
                  @cache_file = File.expand_path("../cache.tst", __FILE__)
         | 
| 16 | 
            +
                  ENV["RUBY_MIME_TYPES_CACHE"] = @cache_file
         | 
| 17 | 
            +
                  clear_cache_file
         | 
| 13 18 |  | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 19 | 
            +
                  super
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  clear_cache_file
         | 
| 22 | 
            +
                  ENV.delete("RUBY_MIME_TYPES_CACHE")
         | 
| 23 | 
            +
                end
         | 
| 17 24 | 
             
              end
         | 
| 18 25 |  | 
| 19 26 | 
             
              def reset_mime_types
         | 
| @@ -25,66 +32,87 @@ class TestMIMETypesCache < Minitest::Test | |
| 25 32 | 
             
                FileUtils.rm @cache_file if File.exist? @cache_file
         | 
| 26 33 | 
             
              end
         | 
| 27 34 |  | 
| 28 | 
            -
               | 
| 29 | 
            -
                 | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 35 | 
            +
              describe ".load" do
         | 
| 36 | 
            +
                it "does not use cache when RUBY_MIME_TYPES_CACHE is unset" do
         | 
| 37 | 
            +
                  ENV.delete("RUBY_MIME_TYPES_CACHE")
         | 
| 38 | 
            +
                  assert_nil MIME::Types::Cache.load
         | 
| 39 | 
            +
                end
         | 
| 32 40 |  | 
| 33 | 
            -
             | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 41 | 
            +
                it "does not use cache when missing" do
         | 
| 42 | 
            +
                  assert_nil MIME::Types::Cache.load
         | 
| 43 | 
            +
                end
         | 
| 36 44 |  | 
| 37 | 
            -
             | 
| 38 | 
            -
             | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 45 | 
            +
                it "registers the data to be updated by #add_extensions" do
         | 
| 46 | 
            +
                  MIME::Types::Cache.save
         | 
| 47 | 
            +
                  reset_mime_types
         | 
| 48 | 
            +
                  assert_equal([], MIME::Types.type_for("foo.additional"))
         | 
| 49 | 
            +
                  html = MIME::Types["text/html"][0]
         | 
| 50 | 
            +
                  html.add_extensions("additional")
         | 
| 51 | 
            +
                  assert_equal([html], MIME::Types.type_for("foo.additional"))
         | 
| 52 | 
            +
                end
         | 
| 41 53 |  | 
| 42 | 
            -
             | 
| 43 | 
            -
             | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 54 | 
            +
                it "outputs an error when there is an invalid version" do
         | 
| 55 | 
            +
                  v = MIME::Types::Data::VERSION
         | 
| 56 | 
            +
                  MIME::Types::Data.send(:remove_const, :VERSION)
         | 
| 57 | 
            +
                  MIME::Types::Data.const_set(:VERSION, "0.0")
         | 
| 58 | 
            +
                  MIME::Types::Cache.save
         | 
| 59 | 
            +
                  MIME::Types::Data.send(:remove_const, :VERSION)
         | 
| 60 | 
            +
                  MIME::Types::Data.const_set(:VERSION, v)
         | 
| 61 | 
            +
                  MIME::Types.instance_variable_set(:@__types__, nil)
         | 
| 62 | 
            +
                  assert_output "", /MIME::Types cache: invalid version/ do
         | 
| 63 | 
            +
                    MIME::Types["text/html"]
         | 
| 64 | 
            +
                  end
         | 
| 65 | 
            +
                end
         | 
| 66 | 
            +
             | 
| 67 | 
            +
                it "outputs an error when there is a marshal file incompatibility" do
         | 
| 68 | 
            +
                  MIME::Types::Cache.save
         | 
| 69 | 
            +
                  data = File.binread(@cache_file).reverse
         | 
| 70 | 
            +
                  File.open(@cache_file, "wb") { |f| f.write(data) }
         | 
| 71 | 
            +
                  MIME::Types.instance_variable_set(:@__types__, nil)
         | 
| 72 | 
            +
                  assert_output "", /incompatible marshal file format/ do
         | 
| 73 | 
            +
                    MIME::Types["text/html"]
         | 
| 74 | 
            +
                  end
         | 
| 75 | 
            +
                end
         | 
| 46 76 | 
             
              end
         | 
| 47 77 |  | 
| 48 | 
            -
               | 
| 49 | 
            -
                 | 
| 50 | 
            -
             | 
| 51 | 
            -
             | 
| 78 | 
            +
              describe ".save" do
         | 
| 79 | 
            +
                it "does not create cache when RUBY_MIME_TYPES_CACHE is unset" do
         | 
| 80 | 
            +
                  ENV.delete("RUBY_MIME_TYPES_CACHE")
         | 
| 81 | 
            +
                  assert_nil MIME::Types::Cache.save
         | 
| 82 | 
            +
                end
         | 
| 52 83 |  | 
| 53 | 
            -
                 | 
| 84 | 
            +
                it "creates the cache " do
         | 
| 85 | 
            +
                  assert_equal(false, File.exist?(@cache_file))
         | 
| 86 | 
            +
                  MIME::Types::Cache.save
         | 
| 87 | 
            +
                  assert_equal(true, File.exist?(@cache_file))
         | 
| 88 | 
            +
                end
         | 
| 54 89 |  | 
| 55 | 
            -
                 | 
| 56 | 
            -
             | 
| 90 | 
            +
                it "uses the cache" do
         | 
| 91 | 
            +
                  MIME::Types["text/html"].first.add_extensions("hex")
         | 
| 92 | 
            +
                  MIME::Types::Cache.save
         | 
| 93 | 
            +
                  MIME::Types.instance_variable_set(:@__types__, nil)
         | 
| 57 94 |  | 
| 58 | 
            -
             | 
| 59 | 
            -
                v = MIME::Types::VERSION.dup
         | 
| 60 | 
            -
                MIME::Types::VERSION.gsub!(/.*/, '0.0')
         | 
| 61 | 
            -
                MIME::Types::Cache.save
         | 
| 62 | 
            -
                MIME::Types::VERSION.gsub!(/.*/, v)
         | 
| 63 | 
            -
                MIME::Types.instance_variable_set(:@__types__, nil)
         | 
| 64 | 
            -
                assert_output(nil, /MIME::Types cache: invalid version/) do
         | 
| 65 | 
            -
                  MIME::Types['text/html']
         | 
| 66 | 
            -
                end
         | 
| 67 | 
            -
              end
         | 
| 95 | 
            +
                  assert_includes MIME::Types["text/html"].first.extensions, "hex"
         | 
| 68 96 |  | 
| 69 | 
            -
             | 
| 70 | 
            -
                MIME::Types::Cache.save
         | 
| 71 | 
            -
                data = File.binread(@cache_file).reverse
         | 
| 72 | 
            -
                File.open(@cache_file, 'wb') { |f| f.write(data) }
         | 
| 73 | 
            -
                MIME::Types.instance_variable_set(:@__types__, nil)
         | 
| 74 | 
            -
                assert_output(nil, /Could not load MIME::Types cache: incompatible marshal file format/) do
         | 
| 75 | 
            -
                  MIME::Types['text/html']
         | 
| 97 | 
            +
                  reset_mime_types
         | 
| 76 98 | 
             
                end
         | 
| 77 99 | 
             
              end
         | 
| 100 | 
            +
            end
         | 
| 78 101 |  | 
| 79 | 
            -
             | 
| 102 | 
            +
            describe MIME::Types::Container do
         | 
| 103 | 
            +
              it "marshals and unmarshals correctly" do
         | 
| 80 104 | 
             
                container = MIME::Types::Container.new
         | 
| 81 | 
            -
                 | 
| 82 | 
            -
             | 
| 105 | 
            +
                container.add("xyz", "abc")
         | 
| 106 | 
            +
             | 
| 107 | 
            +
                # default proc should return Set[]
         | 
| 108 | 
            +
                assert_equal(Set[], container["abc"])
         | 
| 109 | 
            +
                assert_equal(Set["abc"], container["xyz"])
         | 
| 83 110 |  | 
| 84 111 | 
             
                marshalled = Marshal.dump(container)
         | 
| 85 112 | 
             
                loaded_container = Marshal.load(marshalled)
         | 
| 86 113 |  | 
| 87 | 
            -
                # default proc should still return []
         | 
| 88 | 
            -
                assert_equal([], loaded_container[ | 
| 114 | 
            +
                # default proc should still return Set[]
         | 
| 115 | 
            +
                assert_equal(Set[], loaded_container["abc"])
         | 
| 116 | 
            +
                assert_equal(Set["abc"], container["xyz"])
         | 
| 89 117 | 
             
              end
         | 
| 90 118 | 
             
            end
         |