From 36d9c94f1f499f22dbedd8a485e39716381a8c90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Lalinsk=C3=BD?= Date: Thu, 14 Jul 2011 14:13:24 +0200 Subject: [PATCH] Add unit tests --- taglib/mpeg/mpegfile.cpp | 6 +- tests/data/apetag-replaygain-lyrics3v2.mp3 | Bin 0 -> 2300 bytes tests/data/apetag-replaygain.mp3 | Bin 0 -> 2256 bytes tests/data/lyrics3v2.mp3 | Bin 0 -> 1978 bytes tests/test_mpeg.cpp | 75 +++++++++++++++++++++ 5 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 tests/data/apetag-replaygain-lyrics3v2.mp3 create mode 100644 tests/data/apetag-replaygain.mp3 create mode 100644 tests/data/lyrics3v2.mp3 diff --git a/taglib/mpeg/mpegfile.cpp b/taglib/mpeg/mpegfile.cpp index 985370c9..54ddecdd 100644 --- a/taglib/mpeg/mpegfile.cpp +++ b/taglib/mpeg/mpegfile.cpp @@ -234,8 +234,9 @@ bool MPEG::File::save(int tags, bool stripOthers, int id3v2Version) // Dont save an APE-tag unless one has been created if((APE & tags) && APETag()) { - if(d->hasAPE) + if(d->hasAPE) { insert(APETag()->render(), d->APELocation, d->APEOriginalSize); + } else { if(d->hasID3v1) { insert(APETag()->render(), d->ID3v1Location, 0); @@ -257,8 +258,9 @@ bool MPEG::File::save(int tags, bool stripOthers, int id3v2Version) } } } - else if(d->hasAPE && stripOthers) + else if(d->hasAPE && stripOthers) { success = strip(APE, false) && success; + } return success; } diff --git a/tests/data/apetag-replaygain-lyrics3v2.mp3 b/tests/data/apetag-replaygain-lyrics3v2.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..4667c44744e9608dcd632b3c2bb32f7fc65928bd GIT binary patch literal 2300 zcmeZtF=k-^0!HtU;9yrE!vu(Z9DQ9C%uJFpONtfBQj3Z+^Yavp^(-y)OcXRSN=gc> z^!3Zj%k^>#j8js}^zw_+^)*9$T>XGLnSt2cA|${+7|37(@(n_q{e6LKMj$&R(lrPs z45VoX{{NnkLdf)p%)E4<8h#)K1_0Ym26r5w6&E;z3;f3gfOc7d!WI;kMa=7APBc+a zVRGM)66OaK4f0E(ca42N?W95{p*NJuT1D*q9s|80x23{ww0&zx^MdjBxu|0fhnv zEqU?I<^=`}OhWG)S}#lyJdX!=?R`5(LaQVZV z$zajAe-iuY=7S%MpBy;d&8%U;b4x(Rhk>tNos(Uit1pA;vBLpwrbUel1lXb&7BC*D z|NH%LF7F$?gc`xdSKJfaQ=|8!e=t;t2tj%Hv&`Ipg@A-#+B(9F-zdN$WXQqHG` zyRL)de!>JdCSdAh;Q#mar&r&T#I2LE?H|wnss+qje6fGO-Q!?(yrR;;T{J(HfEo~yMndGX!XJmS%&84{T*=B{@y@eZh}GX8hk=(8>Rlc)D*9i6YY z%r5F^@uSKYMrw=aul6qdc`IJM>ip@gzfOz4e>-#b#{6sc=4sRZH08_w`)qv8b^q-v zb6?ikp1J;TxBRr?eIHA!UuS*ZKiPEi8uRO?gYN*7fB-)%uQ)hq=1ucVTve%j$Rprm zqpm>4_FdBEELUs0-2|BLR&V?2Wg=2gx%_XCu(@@?M_Z!`rsDfMr%&6`zFZ{1lV3e> z{|pQ3$rf5XQwj=>{J6bfbrW0Lt>iE@(`YNV71mK_jplM5JbjOo?_AdxApxH&cIxet zuS9w!4^HJ4Ih*;cM9J07sLJ-Jk~pxW64+VXyPL1(t`aDfvT+`fN)OKVmd@Z&kZfR3 zV(foe?;AR`LBoeZg{#4U;j)53s2GnS?;f{0=ZJF?DrRJ|1ij>9Xz|(pi*+aandIjs zN1Y#4-}zCtN#$vT#AA*N5?LnY#xeDV%X{=fs?XS(gleXX!6=GQd49XsH7PzT$#kr-NnS0$1kBLxE~g5|NsA0u$k?CdRnfN zk3!7kiikB^1XtA@nzto$=4}7+4Izw2Kc~*(^*g!r{hMQ|R}MZ~d;4McqLt5Q2C;ve zR~|MWibeHV=XR+_$ zTKBGh&u?v2&Mx|Or8;VIpWZs1cYGEfHVAOm16{Ej=%U|1XTAFC66ys?yiCE(_vqMN(dSN$libc^$#@@c`*7O% z=DAk(YS&w5e6JhMxfUss_5BrVa!AFsj~VCI-7&wqyYbrMbSKe1dH%QAr^Vxchskc7 zT5VJ2K2h}jibXi9qr%+!sHQZ36 zU?zn6x%e~a8W@=BfC)bysC2gd?JH9or9fR-97z0{ak=9H83(X01ARw NU|?hkQDS6Z0060_4C(*? literal 0 HcmV?d00001 diff --git a/tests/data/apetag-replaygain.mp3 b/tests/data/apetag-replaygain.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..bd8003abbb8e7f3489cce06077e18e4a681adc9b GIT binary patch literal 2256 zcmeZtF=k-^0!HtU;9yrE!vu(Z9DQ9C%uJFpONtfBQj3Z+^Yavp^(-y)OcXRSN=gc> z^!3Zj%k^>#j8js}^zw_+^)*9$T>XGLnSt2cA|${+7|37(@(n_q{e6LKMj$&R(lrPs z45VoX{{NnkLdf)p%)E4<8h#)K1_0Ym26r5w6&E;z3;f3gfOc7d!WI;kMa=7APBc+a zVRGM)66OaK4f0E(ca42N?W95{p*NJuT1D*q9s|80x23{ww0&zx^MdjBxu|0fhnv zEqU?I<^=`}OhWG)S}#lyJdX!=?R`5(LaQVZV z$zajAe-iuY=7S%MpBy;d&8%U;b4x(Rhk>tNos(Uit1pA;vBLpwrbUel1lXb&7BC*D z|NH%LF7F$?gc`xdSKJfaQ=|8!e=t;t2tj%Hv&`Ipg@A-#+B(9F-zdN$WXQqHG` zyRL)de!>JdCSdAh;Q#mar&r&T#I2LE?H|wnss+qje6fGO-Q!?(yrR;;T{J(HfEo~yMndGX!XJmS%&84{T*=B{@y@eZh}GX8hk=(8>Rlc)D*9i6YY z%r5F^@uSKYMrw=aul6qdc`IJM>ip@gzfOz4e>-#b#{6sc=4sRZH08_w`)qv8b^q-v zb6?ikp1J;TxBRr?eIHA!UuS*ZKiPEi8uRO?gYN*7fB-)%uQ)hq=1ucVTve%j$Rprm zqpm>4_FdBEELUs0-2|BLR&V?2Wg=2gx%_XCu(@@?M_Z!`rsDfMr%&6`zFZ{1lV3e> z{|pQ3$rf5XQwj=>{J6bfbrW0Lt>iE@(`YNV71mK_jplM5JbjOo?_AdxApxH&cIxet zuS9w!4^HJ4Ih*;cM9J07sLJ-Jk~pxW64+VXyPL1(t`aDfvT+`fN)OKVmd@Z&kZfR3 zV(foe?;AR`LBoeZg{#4U;j)53s2GnS?;f{0=ZJF?DrRJ|1ij>9Xz|(pi*+aandIjs zN1Y#4-}zCtN#$vT#AA*N5?LnY#xeDV%X{=fs?XS(gleXX!6=GQd49XsH7PzT$#kr-NnS0$1kBLxE~g5|NsA0u$k?CdRnfN zk3!7kiikB^1XtA@nzto$=4}7+4Izw2Kc~*(^*g!r{hMQ|R}MZ~d;4McqLt5Q2C;ve zR~|MWibeHV=XR+_$ zTKBGh&u?v2&Mx|Or8;VIpWZs1cYGEfHVAOm16{Ej=%U|1XTAFC66ys?yiCE(_vqMN(dSN$libc^$#@@c`*7O% z=DAk(YS&w5e6JhMxfUss_5BrVa!AFsj~VCI-7&wqyYbrMbSKe1dH%QAr^Vxchskc7 zT5VJ2K2h}jibXi9qr%+!sHQZ36 zU?zn6x%e~a8W@=BfC)bysC2g08u6a2LJ#7 literal 0 HcmV?d00001 diff --git a/tests/data/lyrics3v2.mp3 b/tests/data/lyrics3v2.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..0c3301db209333b002fba3c8f6330b7446d042e8 GIT binary patch literal 1978 zcmeZtF=k-^0!HtU;9yrE!vu(Z9DQ9C%uJFpONtfBQj3Z+^Yavp^(-y)OcXRSN=gc> z^!3Zj%k^>#j8js}^zw_+^)*9$T>XGLnSt2cA|${+7|37(@(n_q{e6LKMj$&R(lrPs z45VoX{{NnkLdf)p%)E4<8h#)K1_0Ym26r5w6&E;z3;f3gfOc7d!WI;kMa=7APBc+a zVRGM)66OaK4f0E(ca42N?W95{p*NJuT1D*q9s|80x23{ww0&zx^MdjBxu|0fhnv zEqU?I<^=`}OhWG)S}#lyJdX!=?R`5(LaQVZV z$zajAe-iuY=7S%MpBy;d&8%U;b4x(Rhk>tNos(Uit1pA;vBLpwrbUel1lXb&7BC*D z|NH%LF7F$?gc`xdSKJfaQ=|8!e=t;t2tj%Hv&`Ipg@A-#+B(9F-zdN$WXQqHG` zyRL)de!>JdCSdAh;Q#mar&r&T#I2LE?H|wnss+qje6fGO-Q!?(yrR;;T{J(HfEo~yMndGX!XJmS%&84{T*=B{@y@eZh}GX8hk=(8>Rlc)D*9i6YY z%r5F^@uSKYMrw=aul6qdc`IJM>ip@gzfOz4e>-#b#{6sc=4sRZH08_w`)qv8b^q-v zb6?ikp1J;TxBRr?eIHA!UuS*ZKiPEi8uRO?gYN*7fB-)%uQ)hq=1ucVTve%j$Rprm zqpm>4_FdBEELUs0-2|BLR&V?2Wg=2gx%_XCu(@@?M_Z!`rsDfMr%&6`zFZ{1lV3e> z{|pQ3$rf5XQwj=>{J6bfbrW0Lt>iE@(`YNV71mK_jplM5JbjOo?_AdxApxH&cIxet zuS9w!4^HJ4Ih*;cM9J07sLJ-Jk~pxW64+VXyPL1(t`aDfvT+`fN)OKVmd@Z&kZfR3 zV(foe?;AR`LBoeZg{#4U;j)53s2GnS?;f{0=ZJF?DrRJ|1ij>9Xz|(pi*+aandIjs zN1Y#4-}zCtN#$vT#AA*N5?LnY#xeDV%X{=fs?XS(gleXX!6=GQd49XsH7PzT$#kr-NnS0$1kBLxE~g5|NsA0u$k?CdRnfN zk3!7kiikB^1XtA@nzto$=4}7+4Izw2Kc~*(^*g!r{hMQ|R}MZ~d;4McqLt5Q2C;ve zR~|MWibeHV=XR+_$ zTKBGh&u?v2&Mx|Or8;VIpWZs1cYGEfHVAOm16{Ej=%U|1XTAFC66ys?yiCE(_vqMN(dSN$libc^$#@@c`*7O% z=DAk(YS&w5e6JhMxfUss_5BrVa!AFsj~VCI-7&wqyYbrMbSKe1dH%QAr^Vxchskc7 zT5VJ2K2h}j #include #include +#include #include "utils.h" using namespace std; @@ -15,6 +16,11 @@ class TestMPEG : public CppUnit::TestFixture CPPUNIT_TEST(testSaveID3v24); CPPUNIT_TEST(testSaveID3v24WrongParam); CPPUNIT_TEST(testSaveID3v23); + CPPUNIT_TEST(testReadAPEv2); + CPPUNIT_TEST(testReadAPEv2WithLyrics3v2); + CPPUNIT_TEST(testSaveAPEv2); + CPPUNIT_TEST(testSaveAPEv2WithLyrics3v2); + CPPUNIT_TEST(testSaveAPEv2EmptyWithLyrics3v2); CPPUNIT_TEST_SUITE_END(); public: @@ -76,6 +82,75 @@ public: CPPUNIT_ASSERT_EQUAL(xxx, f2.tag()->title()); } + void testReadAPEv2() + { + ScopedFileCopy copy("apetag-replaygain", ".mp3"); + string newname = copy.fileName(); + + MPEG::File f(newname.c_str()); + String s = f.APETag()->itemListMap()["MP3GAIN_ALBUM_MINMAX"].toString(); + CPPUNIT_ASSERT_EQUAL(String("129,170"), s); + } + + void testReadAPEv2WithLyrics3v2() + { + ScopedFileCopy copy("apetag-replaygain-lyrics3v2", ".mp3"); + string newname = copy.fileName(); + + MPEG::File f(newname.c_str()); + String s = f.APETag()->itemListMap()["MP3GAIN_ALBUM_MINMAX"].toString(); + CPPUNIT_ASSERT_EQUAL(String("129,170"), s); + } + + void testSaveAPEv2() + { + ScopedFileCopy copy("apetag-replaygain", ".mp3"); + string newname = copy.fileName(); + + MPEG::File f(newname.c_str()); + f.APETag()->addValue("MP3GAIN_ALBUM_MINMAX", String("xxx")); + f.save(); + + MPEG::File f2(newname.c_str()); + String s = f2.APETag()->itemListMap()["MP3GAIN_ALBUM_MINMAX"].toString(); + CPPUNIT_ASSERT_EQUAL(String("xxx"), s); + } + + void testSaveAPEv2WithLyrics3v2() + { + ScopedFileCopy copy("apetag-replaygain-lyrics3v2", ".mp3"); + string newname = copy.fileName(); + + MPEG::File f(newname.c_str()); + f.APETag()->addValue("MP3GAIN_ALBUM_MINMAX", String("xxx")); + f.save(); + + MPEG::File f2(newname.c_str()); + String s = f2.APETag()->itemListMap()["MP3GAIN_ALBUM_MINMAX"].toString(); + CPPUNIT_ASSERT_EQUAL(String("xxx"), s); + f2.seek(-9, File::End); + CPPUNIT_ASSERT_EQUAL(ByteVector("LYRICS200"), f2.readBlock(9)); + } + + void testSaveAPEv2EmptyWithLyrics3v2() + { + ScopedFileCopy copy("lyrics3v2", ".mp3", false); + string newname = copy.fileName(); + + { + MPEG::File f(newname.c_str()); + f.APETag(true)->addValue("MP3GAIN_ALBUM_MINMAX", String("xxx")); + f.save(); + } + + MPEG::File f2(newname.c_str()); + CPPUNIT_ASSERT(f2.APETag()); + String s = f2.APETag()->itemListMap()["MP3GAIN_ALBUM_MINMAX"].toString(); + CPPUNIT_ASSERT_EQUAL(String("xxx"), s); + f2.seek(-9, File::End); + CPPUNIT_ASSERT_EQUAL(ByteVector("LYRICS200"), f2.readBlock(9)); + } + }; CPPUNIT_TEST_SUITE_REGISTRATION(TestMPEG);