]> granicus.if.org Git - taglib/commitdiff
Try to read track also from TRACKNUM and year from YEAR.
authorLukáš Lalinský <lalinsky@gmail.com>
Sat, 11 Jul 2009 13:17:06 +0000 (13:17 +0000)
committerLukáš Lalinský <lalinsky@gmail.com>
Sat, 11 Jul 2009 13:17:06 +0000 (13:17 +0000)
Patch by David Bishop
BUG:144396

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@994811 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

taglib/ogg/xiphcomment.cpp
tests/CMakeLists.txt
tests/test_xiphcomment.cpp [new file with mode: 0644]

index d7c5c5c4ddba7a8dfa2dd2467651d9d046e74311..406137a04f5beb12fe68bdfb15e42347b63bcadd 100644 (file)
@@ -103,16 +103,20 @@ String Ogg::XiphComment::genre() const
 
 TagLib::uint Ogg::XiphComment::year() const
 {
-  if(d->fieldListMap["DATE"].isEmpty())
-    return 0;
-  return d->fieldListMap["DATE"].front().toInt();
+  if(!d->fieldListMap["DATE"].isEmpty())
+    return d->fieldListMap["DATE"].front().toInt();
+  if(!d->fieldListMap["YEAR"].isEmpty())
+    return d->fieldListMap["YEAR"].front().toInt();
+  return 0;
 }
 
 TagLib::uint Ogg::XiphComment::track() const
 {
-  if(d->fieldListMap["TRACKNUMBER"].isEmpty())
-    return 0;
-  return d->fieldListMap["TRACKNUMBER"].front().toInt();
+  if(!d->fieldListMap["TRACKNUMBER"].isEmpty())
+    return d->fieldListMap["TRACKNUMBER"].front().toInt();
+  if(!d->fieldListMap["TRACKNUM"].isEmpty())
+    return d->fieldListMap["TRACKNUM"].front().toInt();
+  return 0;
 }
 
 void Ogg::XiphComment::setTitle(const String &s)
@@ -142,6 +146,7 @@ void Ogg::XiphComment::setGenre(const String &s)
 
 void Ogg::XiphComment::setYear(uint i)
 {
+  removeField("YEAR");
   if(i == 0)
     removeField("DATE");
   else
@@ -150,6 +155,7 @@ void Ogg::XiphComment::setYear(uint i)
 
 void Ogg::XiphComment::setTrack(uint i)
 {
+  removeField("TRACKNUM");
   if(i == 0)
     removeField("TRACKNUMBER");
   else
index bde62c19a9b6d202c9e95b98d0fb07b597d2bb1f..18b62a54a7f95fb150d5c3961bb0582cf5d766dc 100644 (file)
@@ -10,6 +10,7 @@ INCLUDE_DIRECTORIES(
   ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/mpeg
   ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/mp4
   ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/trueaudio
+  ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/ogg
 )
 
 SET(test_runner_SRCS
@@ -24,6 +25,7 @@ SET(test_runner_SRCS
   test_fileref.cpp
   test_id3v1.cpp
   test_id3v2.cpp
+  test_xiphcomment.cpp
 )
 IF(WITH_MP4)
    SET(test_runner_SRCS ${test_runner_SRCS} test_mp4.cpp)
diff --git a/tests/test_xiphcomment.cpp b/tests/test_xiphcomment.cpp
new file mode 100644 (file)
index 0000000..359206e
--- /dev/null
@@ -0,0 +1,64 @@
+#include <cppunit/extensions/HelperMacros.h>
+#include <string>
+#include <stdio.h>
+#include <xiphcomment.h>
+#include <tdebug.h>
+#include "utils.h"
+
+using namespace std;
+using namespace TagLib;
+
+class TestXiphComment : public CppUnit::TestFixture
+{
+  CPPUNIT_TEST_SUITE(TestXiphComment);
+  CPPUNIT_TEST(testYear);
+  CPPUNIT_TEST(testSetYear);
+  CPPUNIT_TEST(testTrack);
+  CPPUNIT_TEST(testSetTrack);
+  CPPUNIT_TEST_SUITE_END();
+
+public:
+
+  void testYear()
+  {
+    Ogg::XiphComment cmt;
+    CPPUNIT_ASSERT_EQUAL(TagLib::uint(0), cmt.year());
+    cmt.addField("YEAR", "2009");
+    CPPUNIT_ASSERT_EQUAL(TagLib::uint(2009), cmt.year());
+    cmt.addField("DATE", "2008");
+    CPPUNIT_ASSERT_EQUAL(TagLib::uint(2008), cmt.year());
+  }
+
+  void testSetYear()
+  {
+    Ogg::XiphComment cmt;
+    cmt.addField("YEAR", "2009");
+    cmt.addField("DATE", "2008");
+    cmt.setYear(1995);
+    CPPUNIT_ASSERT(cmt.fieldListMap()["YEAR"].isEmpty());
+    CPPUNIT_ASSERT_EQUAL(String("1995"), cmt.fieldListMap()["DATE"].front());
+  }
+
+  void testTrack()
+  {
+    Ogg::XiphComment cmt;
+    CPPUNIT_ASSERT_EQUAL(TagLib::uint(0), cmt.track());
+    cmt.addField("TRACKNUM", "7");
+    CPPUNIT_ASSERT_EQUAL(TagLib::uint(7), cmt.track());
+    cmt.addField("TRACKNUMBER", "8");
+    CPPUNIT_ASSERT_EQUAL(TagLib::uint(8), cmt.track());
+  }
+
+  void testSetTrack()
+  {
+    Ogg::XiphComment cmt;
+    cmt.addField("TRACKNUM", "7");
+    cmt.addField("TRACKNUMBER", "8");
+    cmt.setTrack(3);
+    CPPUNIT_ASSERT(cmt.fieldListMap()["TRACKNUM"].isEmpty());
+    CPPUNIT_ASSERT_EQUAL(String("3"), cmt.fieldListMap()["TRACKNUMBER"].front());
+  }
+
+};
+
+CPPUNIT_TEST_SUITE_REGISTRATION(TestXiphComment);