mirror of
https://github.com/taglib/taglib.git
synced 2025-07-22 23:14:33 -04:00
Merge branch 'master' into merge-master-to-taglib2
Conflicts: ConfigureChecks.cmake taglib/toolkit/tbytevector.cpp taglib/toolkit/tstring.cpp taglib/xm/xmfile.cpp tests/test_wav.cpp
This commit is contained in:
@ -41,6 +41,7 @@ class TestByteVector : public CppUnit::TestFixture
|
||||
CPPUNIT_TEST(testToHex);
|
||||
CPPUNIT_TEST(testNumericCoversion);
|
||||
CPPUNIT_TEST(testReplace);
|
||||
CPPUNIT_TEST(testIterator);
|
||||
CPPUNIT_TEST_SUITE_END();
|
||||
|
||||
public:
|
||||
@ -274,6 +275,36 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
void testIterator()
|
||||
{
|
||||
ByteVector v1("taglib");
|
||||
ByteVector v2 = v1;
|
||||
|
||||
ByteVector::Iterator it1 = v1.begin();
|
||||
ByteVector::Iterator it2 = v2.begin();
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL('t', *it1);
|
||||
CPPUNIT_ASSERT_EQUAL('t', *it2);
|
||||
|
||||
std::advance(it1, 4);
|
||||
std::advance(it2, 4);
|
||||
*it2 = 'I';
|
||||
CPPUNIT_ASSERT_EQUAL('i', *it1);
|
||||
CPPUNIT_ASSERT_EQUAL('I', *it2);
|
||||
|
||||
ByteVector::ReverseIterator it3 = v1.rbegin();
|
||||
ByteVector::ReverseIterator it4 = v2.rbegin();
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL('b', *it3);
|
||||
CPPUNIT_ASSERT_EQUAL('b', *it4);
|
||||
|
||||
std::advance(it3, 4);
|
||||
std::advance(it4, 4);
|
||||
*it4 = 'A';
|
||||
CPPUNIT_ASSERT_EQUAL('a', *it3);
|
||||
CPPUNIT_ASSERT_EQUAL('A', *it4);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
CPPUNIT_TEST_SUITE_REGISTRATION(TestByteVector);
|
||||
|
@ -51,8 +51,13 @@ public:
|
||||
l3.append(3);
|
||||
l3.append(4);
|
||||
CPPUNIT_ASSERT(l1 == l3);
|
||||
|
||||
List<int> l4 = l1;
|
||||
List<int>::Iterator it = l4.find(3);
|
||||
*it = 33;
|
||||
CPPUNIT_ASSERT_EQUAL(l1[2], 3);
|
||||
CPPUNIT_ASSERT_EQUAL(l4[2], 33);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
CPPUNIT_TEST_SUITE_REGISTRATION(TestList);
|
||||
|
@ -15,11 +15,21 @@ public:
|
||||
|
||||
void testInsert()
|
||||
{
|
||||
Map<String, int> m;
|
||||
m.insert("foo", 3);
|
||||
CPPUNIT_ASSERT_EQUAL(3, m["foo"]);
|
||||
m.insert("foo", 7);
|
||||
CPPUNIT_ASSERT_EQUAL(7, m["foo"]);
|
||||
Map<String, int> m1;
|
||||
m1.insert("foo", 3);
|
||||
CPPUNIT_ASSERT_EQUAL(3, m1["foo"]);
|
||||
m1.insert("foo", 7);
|
||||
CPPUNIT_ASSERT_EQUAL(7, m1["foo"]);
|
||||
|
||||
m1.insert("alice", 5);
|
||||
m1.insert("bob", 9);
|
||||
m1.insert("carol", 11);
|
||||
|
||||
Map<String, int> m2 = m1;
|
||||
Map<String, int>::Iterator it = m2.find("bob");
|
||||
(*it).second = 99;
|
||||
CPPUNIT_ASSERT_EQUAL(m1["bob"], 9);
|
||||
CPPUNIT_ASSERT_EQUAL(m2["bob"], 99);
|
||||
}
|
||||
|
||||
};
|
||||
|
@ -88,12 +88,17 @@ public:
|
||||
CPPUNIT_ASSERT_EQUAL(size_t(2), tags["UNUSUALTAG"].size());
|
||||
CPPUNIT_ASSERT_EQUAL(String("usual value"), tags["UNUSUALTAG"][0]);
|
||||
CPPUNIT_ASSERT_EQUAL(String("another value"), tags["UNUSUALTAG"][1]);
|
||||
CPPUNIT_ASSERT_EQUAL(String("öäüoΣø", String::UTF8), tags["UNICODETAG"][0]);
|
||||
CPPUNIT_ASSERT_EQUAL(
|
||||
String("\xC3\xB6\xC3\xA4\xC3\xBC\x6F\xCE\xA3\xC3\xB8", String::UTF8),
|
||||
tags["UNICODETAG"][0]);
|
||||
|
||||
tags["UNICODETAG"][0] = String("νεω ναλυε", String::UTF8);
|
||||
tags["UNICODETAG"][0] = String(
|
||||
"\xCE\xBD\xCE\xB5\xCF\x89\x20\xCE\xBD\xCE\xB1\xCE\xBB\xCF\x85\xCE\xB5", String::UTF8);
|
||||
tags.erase("UNUSUALTAG");
|
||||
f->tag()->setProperties(tags);
|
||||
CPPUNIT_ASSERT_EQUAL(String("νεω ναλυε", String::UTF8), f->tag()->properties()["UNICODETAG"][0]);
|
||||
CPPUNIT_ASSERT_EQUAL(
|
||||
String("\xCE\xBD\xCE\xB5\xCF\x89\x20\xCE\xBD\xCE\xB1\xCE\xBB\xCF\x85\xCE\xB5", String::UTF8),
|
||||
f->tag()->properties()["UNICODETAG"][0]);
|
||||
CPPUNIT_ASSERT_EQUAL(false, f->tag()->properties().contains("UNUSUALTAG"));
|
||||
|
||||
delete f;
|
||||
|
@ -20,12 +20,17 @@ public:
|
||||
TagLib::uint chunkDataSize(TagLib::uint i) { return RIFF::File::chunkDataSize(i); };
|
||||
ByteVector chunkName(TagLib::uint i) { return RIFF::File::chunkName(i); };
|
||||
ByteVector chunkData(TagLib::uint i) { return RIFF::File::chunkData(i); };
|
||||
void setChunkData(uint i, const ByteVector &data) {
|
||||
RIFF::File::setChunkData(i, data);
|
||||
}
|
||||
void setChunkData(const ByteVector &name, const ByteVector &data) {
|
||||
RIFF::File::setChunkData(name, data);
|
||||
};
|
||||
virtual TagLib::Tag* tag() const { return 0; };
|
||||
virtual TagLib::AudioProperties* audioProperties() const { return 0;};
|
||||
virtual bool save() { return false; };
|
||||
void removeChunk(uint i) { RIFF::File::removeChunk(i); }
|
||||
void removeChunk(const ByteVector &name) { RIFF::File::removeChunk(name); }
|
||||
};
|
||||
|
||||
class TestRIFF : public CppUnit::TestFixture
|
||||
@ -35,6 +40,7 @@ class TestRIFF : public CppUnit::TestFixture
|
||||
CPPUNIT_TEST(testLastChunkAtEvenPosition);
|
||||
CPPUNIT_TEST(testLastChunkAtEvenPosition2);
|
||||
CPPUNIT_TEST(testLastChunkAtEvenPosition3);
|
||||
CPPUNIT_TEST(testChunkOffset);
|
||||
CPPUNIT_TEST_SUITE_END();
|
||||
|
||||
public:
|
||||
@ -193,6 +199,63 @@ public:
|
||||
delete f;
|
||||
}
|
||||
|
||||
void testChunkOffset()
|
||||
{
|
||||
ScopedFileCopy copy("empty", ".aiff");
|
||||
string filename = copy.fileName();
|
||||
|
||||
PublicRIFF *f = new PublicRIFF(filename.c_str());
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("COMM"), f->chunkName(0));
|
||||
CPPUNIT_ASSERT_EQUAL(TagLib::uint(0x000C + 8), f->chunkOffset(0));
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("SSND"), f->chunkName(1));
|
||||
CPPUNIT_ASSERT_EQUAL(TagLib::uint(0x0026 + 8), f->chunkOffset(1));
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("TEST"), f->chunkName(2));
|
||||
CPPUNIT_ASSERT_EQUAL(TagLib::uint(0x1728 + 8), f->chunkOffset(2));
|
||||
|
||||
const ByteVector data(0x400, ' ');
|
||||
f->setChunkData("SSND", data);
|
||||
CPPUNIT_ASSERT_EQUAL(TagLib::uint(0x000C + 8), f->chunkOffset(0));
|
||||
CPPUNIT_ASSERT_EQUAL(TagLib::uint(0x0026 + 8), f->chunkOffset(1));
|
||||
CPPUNIT_ASSERT_EQUAL(TagLib::uint(0x042E + 8), f->chunkOffset(2));
|
||||
|
||||
f->seek(f->chunkOffset(0) - 8);
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("COMM"), f->readBlock(4));
|
||||
f->seek(f->chunkOffset(1) - 8);
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("SSND"), f->readBlock(4));
|
||||
f->seek(f->chunkOffset(2) - 8);
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("TEST"), f->readBlock(4));
|
||||
|
||||
f->setChunkData(0, data);
|
||||
CPPUNIT_ASSERT_EQUAL(TagLib::uint(0x000C + 8), f->chunkOffset(0));
|
||||
CPPUNIT_ASSERT_EQUAL(TagLib::uint(0x0414 + 8), f->chunkOffset(1));
|
||||
CPPUNIT_ASSERT_EQUAL(TagLib::uint(0x081C + 8), f->chunkOffset(2));
|
||||
|
||||
f->seek(f->chunkOffset(0) - 8);
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("COMM"), f->readBlock(4));
|
||||
f->seek(f->chunkOffset(1) - 8);
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("SSND"), f->readBlock(4));
|
||||
f->seek(f->chunkOffset(2) - 8);
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("TEST"), f->readBlock(4));
|
||||
|
||||
f->removeChunk("SSND");
|
||||
CPPUNIT_ASSERT_EQUAL(TagLib::uint(0x000C + 8), f->chunkOffset(0));
|
||||
CPPUNIT_ASSERT_EQUAL(TagLib::uint(0x0414 + 8), f->chunkOffset(1));
|
||||
|
||||
f->seek(f->chunkOffset(0) - 8);
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("COMM"), f->readBlock(4));
|
||||
f->seek(f->chunkOffset(1) - 8);
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("TEST"), f->readBlock(4));
|
||||
|
||||
f->removeChunk(0);
|
||||
CPPUNIT_ASSERT_EQUAL(TagLib::uint(0x000C + 8), f->chunkOffset(0));
|
||||
|
||||
f->seek(f->chunkOffset(0) - 8);
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("TEST"), f->readBlock(4));
|
||||
|
||||
delete f;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
CPPUNIT_TEST_SUITE_REGISTRATION(TestRIFF);
|
||||
|
@ -46,6 +46,7 @@ class TestString : public CppUnit::TestFixture
|
||||
CPPUNIT_TEST(testNewline);
|
||||
CPPUNIT_TEST(testUpper);
|
||||
CPPUNIT_TEST(testEncode);
|
||||
CPPUNIT_TEST(testIterator);
|
||||
CPPUNIT_TEST_SUITE_END();
|
||||
|
||||
public:
|
||||
@ -110,19 +111,6 @@ public:
|
||||
String unicode9(stduni, String::UTF16LE);
|
||||
CPPUNIT_ASSERT(unicode9[1] == (littleEndian ? L'\u672c' : L'\u2c67'));
|
||||
|
||||
CPPUNIT_ASSERT(strcmp(String::number(0).toCString(), "0") == 0);
|
||||
CPPUNIT_ASSERT(strcmp(String::number(12345678).toCString(), "12345678") == 0);
|
||||
CPPUNIT_ASSERT(strcmp(String::number(-12345678).toCString(), "-12345678") == 0);
|
||||
|
||||
String n = "123";
|
||||
CPPUNIT_ASSERT(n.toInt() == 123);
|
||||
|
||||
n = "-123";
|
||||
CPPUNIT_ASSERT(n.toInt() == -123);
|
||||
|
||||
CPPUNIT_ASSERT(String("0").toInt() == 0);
|
||||
CPPUNIT_ASSERT(String("1").toInt() == 1);
|
||||
|
||||
CPPUNIT_ASSERT(String(" foo ").stripWhiteSpace() == String("foo"));
|
||||
CPPUNIT_ASSERT(String("foo ").stripWhiteSpace() == String("foo"));
|
||||
CPPUNIT_ASSERT(String(" foo").stripWhiteSpace() == String("foo"));
|
||||
@ -232,6 +220,12 @@ public:
|
||||
CPPUNIT_ASSERT_EQUAL(String("-123").toInt(&ok), -123);
|
||||
CPPUNIT_ASSERT_EQUAL(ok, true);
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL(String("123aa").toInt(&ok), 123);
|
||||
CPPUNIT_ASSERT_EQUAL(ok, false);
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL(String("-123aa").toInt(&ok), -123);
|
||||
CPPUNIT_ASSERT_EQUAL(ok, false);
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL(String("abc").toInt(&ok), 0);
|
||||
CPPUNIT_ASSERT_EQUAL(ok, false);
|
||||
|
||||
@ -244,10 +238,8 @@ public:
|
||||
CPPUNIT_ASSERT_EQUAL(String("-").toInt(&ok), 0);
|
||||
CPPUNIT_ASSERT_EQUAL(ok, false);
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL(String("123").toInt(), 123);
|
||||
CPPUNIT_ASSERT_EQUAL(String("-123").toInt(), -123);
|
||||
CPPUNIT_ASSERT_EQUAL(String("123aa").toInt(), 123);
|
||||
CPPUNIT_ASSERT_EQUAL(String("-123aa").toInt(), -123);
|
||||
String("9999999999").toInt(&ok);
|
||||
CPPUNIT_ASSERT_EQUAL(ok, false);
|
||||
}
|
||||
|
||||
void testFromInt()
|
||||
@ -324,6 +316,23 @@ public:
|
||||
CPPUNIT_ASSERT(empty7.empty());
|
||||
}
|
||||
|
||||
void testIterator()
|
||||
{
|
||||
String s1 = "taglib string";
|
||||
String s2 = s1;
|
||||
|
||||
String::Iterator it1 = s1.begin();
|
||||
String::Iterator it2 = s2.begin();
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL(L't', *it1);
|
||||
CPPUNIT_ASSERT_EQUAL(L't', *it2);
|
||||
|
||||
std::advance(it1, 4);
|
||||
std::advance(it2, 4);
|
||||
*it2 = L'I';
|
||||
CPPUNIT_ASSERT_EQUAL(L'i', *it1);
|
||||
CPPUNIT_ASSERT_EQUAL(L'I', *it2);
|
||||
}
|
||||
};
|
||||
|
||||
CPPUNIT_TEST_SUITE_REGISTRATION(TestString);
|
||||
|
@ -14,6 +14,7 @@ class TestWAV : public CppUnit::TestFixture
|
||||
CPPUNIT_TEST_SUITE(TestWAV);
|
||||
CPPUNIT_TEST(testLength);
|
||||
CPPUNIT_TEST(testZeroSizeDataChunk);
|
||||
CPPUNIT_TEST(testStripTags);
|
||||
CPPUNIT_TEST(testFormat);
|
||||
CPPUNIT_TEST_SUITE_END();
|
||||
|
||||
@ -31,7 +32,44 @@ public:
|
||||
RIFF::WAV::File f(TEST_FILE_PATH_C("zero-size-chunk.wav"));
|
||||
CPPUNIT_ASSERT_EQUAL(false, f.isValid());
|
||||
}
|
||||
|
||||
|
||||
void testStripTags()
|
||||
{
|
||||
ScopedFileCopy copy("empty", ".wav");
|
||||
string filename = copy.fileName();
|
||||
|
||||
RIFF::WAV::File *f = new RIFF::WAV::File(filename.c_str());
|
||||
f->ID3v2Tag()->setTitle("test title");
|
||||
f->InfoTag()->setTitle("test title");
|
||||
f->save();
|
||||
delete f;
|
||||
|
||||
f = new RIFF::WAV::File(filename.c_str());
|
||||
CPPUNIT_ASSERT(f->hasID3v2Tag());
|
||||
CPPUNIT_ASSERT(f->hasInfoTag());
|
||||
f->save(RIFF::WAV::File::ID3v2, true);
|
||||
delete f;
|
||||
|
||||
f = new RIFF::WAV::File(filename.c_str());
|
||||
CPPUNIT_ASSERT(f->hasID3v2Tag());
|
||||
CPPUNIT_ASSERT(!f->hasInfoTag());
|
||||
f->ID3v2Tag()->setTitle("test title");
|
||||
f->InfoTag()->setTitle("test title");
|
||||
f->save();
|
||||
delete f;
|
||||
|
||||
f = new RIFF::WAV::File(filename.c_str());
|
||||
CPPUNIT_ASSERT(f->hasID3v2Tag());
|
||||
CPPUNIT_ASSERT(f->hasInfoTag());
|
||||
f->save(RIFF::WAV::File::Info, true);
|
||||
delete f;
|
||||
|
||||
f = new RIFF::WAV::File(filename.c_str());
|
||||
CPPUNIT_ASSERT(!f->hasID3v2Tag());
|
||||
CPPUNIT_ASSERT(f->hasInfoTag());
|
||||
delete f;
|
||||
}
|
||||
|
||||
void testFormat()
|
||||
{
|
||||
RIFF::WAV::File f1(TEST_FILE_PATH_C("empty.wav"));
|
||||
@ -42,7 +80,6 @@ public:
|
||||
CPPUNIT_ASSERT_EQUAL(true, f2.isValid());
|
||||
CPPUNIT_ASSERT_EQUAL((uint)6, f2.audioProperties()->format());
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
CPPUNIT_TEST_SUITE_REGISTRATION(TestWAV);
|
||||
|
Reference in New Issue
Block a user