Added tests that ensure sane behaviour with non-existing/invalid files.
[ruby-vorbistagger.git] / test / test_main.rb
index 3003783554337a3bd3b2b05722ea3d29d414038a..6da6d6dd556d90920819c3fa914d3032b89f428c 100644 (file)
@@ -1,6 +1,7 @@
 require "test/unit"
 require "ogg/vorbis/tagger"
 require "fileutils"
+require "digest/md5"
 
 class MainTest < Test::Unit::TestCase
        OGG_FILE = "test/test.ogg"
@@ -29,6 +30,32 @@ class MainTest < Test::Unit::TestCase
                end
        end
 
+       def test_write_is_non_destructive
+               a = Digest::MD5.hexdigest(File.read(OGG_FILE))
+
+               Ogg::Vorbis::Tagger.open(OGG_FILE) do |t|
+                       t.write
+               end
+
+               b = Digest::MD5.hexdigest(File.read(OGG_FILE))
+
+               assert_equal(a, b)
+       end
+
+       def test_multiple_writes
+               a = Digest::MD5.hexdigest(File.read(OGG_FILE))
+
+               Ogg::Vorbis::Tagger.open(OGG_FILE) do |t|
+                       1.upto(10) do
+                               t.write
+                       end
+               end
+
+               b = Digest::MD5.hexdigest(File.read(OGG_FILE))
+
+               assert_equal(a, b)
+       end
+
        def test_write_stable_order
                Ogg::Vorbis::Tagger.open(OGG_FILE) do |t|
                        assert_equal(3, t.write)
@@ -225,4 +252,22 @@ EOF
        def test_close
                Ogg::Vorbis::Tagger.new(OGG_FILE).close
        end
+
+       def test_open_non_existing_file
+               assert_raises(Ogg::Vorbis::Tagger::OpenError) do
+                       Ogg::Vorbis::Tagger.new("foo.bar")
+               end
+       end
+
+       def test_open_non_ogg_file
+               File.open("test/foo.bar", "w") do |f|
+                       f << "foobarbazxyzzy"
+               end
+
+               assert_raises(Ogg::Vorbis::Tagger::InvalidDataError) do
+                       Ogg::Vorbis::Tagger.new("test/foo.bar")
+               end
+       ensure
+               FileUtils.rm_f("test/foo.bar")
+       end
 end