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:
Tsuda Kageyu
2014-08-22 10:25:33 +09:00
34 changed files with 478 additions and 293 deletions

View File

@ -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);

View File

@ -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);

View File

@ -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);
}
};

View File

@ -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;

View File

@ -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);

View File

@ -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);

View File

@ -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);