|
|
|
@ -44,6 +44,10 @@ class CueParserTest : public ::testing::Test {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
qlonglong to_nanosec(int minutes, int seconds, int frames) {
|
|
|
|
|
return (minutes * 60 * 75 + seconds * 75 + frames) * kNsecPerSec / 75;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CueParser parser_;
|
|
|
|
|
MockFileRefFactory taglib_;
|
|
|
|
|
};
|
|
|
|
@ -63,7 +67,7 @@ TEST_F(CueParserTest, ParsesASong) {
|
|
|
|
|
ASSERT_EQ("Zucchero", first_song.artist());
|
|
|
|
|
ASSERT_EQ("Zucchero himself", first_song.albumartist());
|
|
|
|
|
ASSERT_EQ("", first_song.album());
|
|
|
|
|
ASSERT_EQ(1 * kNsecPerSec, first_song.beginning_nanosec());
|
|
|
|
|
ASSERT_EQ(to_nanosec(0, 1, 15), first_song.beginning_nanosec());
|
|
|
|
|
ASSERT_EQ(1, first_song.track());
|
|
|
|
|
ASSERT_EQ("CUEPATH", first_song.cue_path());
|
|
|
|
|
|
|
|
|
@ -87,7 +91,7 @@ TEST_F(CueParserTest, ParsesTwoSongs) {
|
|
|
|
|
ASSERT_EQ("Chocabeck", first_song.album());
|
|
|
|
|
ASSERT_EQ("Zucchero himself", first_song.artist());
|
|
|
|
|
ASSERT_EQ("Zucchero himself", first_song.albumartist());
|
|
|
|
|
ASSERT_EQ(1 * kNsecPerSec, first_song.beginning_nanosec());
|
|
|
|
|
ASSERT_EQ(to_nanosec(0, 1, 0), first_song.beginning_nanosec());
|
|
|
|
|
ASSERT_EQ(second_song.beginning_nanosec() - first_song.beginning_nanosec(), first_song.length_nanosec());
|
|
|
|
|
ASSERT_EQ(1, first_song.track());
|
|
|
|
|
|
|
|
|
@ -95,7 +99,7 @@ TEST_F(CueParserTest, ParsesTwoSongs) {
|
|
|
|
|
ASSERT_EQ("Chocabeck", second_song.album());
|
|
|
|
|
ASSERT_EQ("Zucchero himself", second_song.artist());
|
|
|
|
|
ASSERT_EQ("Zucchero himself", second_song.albumartist());
|
|
|
|
|
ASSERT_EQ((5 * 60 + 3) * kNsecPerSec, second_song.beginning_nanosec());
|
|
|
|
|
ASSERT_EQ(to_nanosec(5, 3, 68), second_song.beginning_nanosec());
|
|
|
|
|
ASSERT_EQ(2, second_song.track());
|
|
|
|
|
|
|
|
|
|
validate_songs(song_list);
|
|
|
|
@ -118,7 +122,7 @@ TEST_F(CueParserTest, SkipsBrokenSongs) {
|
|
|
|
|
ASSERT_EQ("Chocabeck", first_song.album());
|
|
|
|
|
ASSERT_EQ("Zucchero himself", first_song.artist());
|
|
|
|
|
ASSERT_EQ("Zucchero himself", first_song.albumartist());
|
|
|
|
|
ASSERT_EQ(1 * kNsecPerSec, first_song.beginning_nanosec());
|
|
|
|
|
ASSERT_EQ(to_nanosec(0, 1, 0), first_song.beginning_nanosec());
|
|
|
|
|
// includes the broken song too; this entry will span from it's
|
|
|
|
|
// INDEX (beginning) to the end of the next correct song
|
|
|
|
|
ASSERT_EQ(second_song.beginning_nanosec() - first_song.beginning_nanosec(), first_song.length_nanosec());
|
|
|
|
@ -128,7 +132,7 @@ TEST_F(CueParserTest, SkipsBrokenSongs) {
|
|
|
|
|
ASSERT_EQ("Chocabeck", second_song.album());
|
|
|
|
|
ASSERT_EQ("Zucchero himself", second_song.artist());
|
|
|
|
|
ASSERT_EQ("Zucchero himself", second_song.albumartist());
|
|
|
|
|
ASSERT_EQ((5 * 60) * kNsecPerSec, second_song.beginning_nanosec());
|
|
|
|
|
ASSERT_EQ(to_nanosec(5, 0, 0), second_song.beginning_nanosec());
|
|
|
|
|
ASSERT_EQ(2, second_song.track());
|
|
|
|
|
|
|
|
|
|
validate_songs(song_list);
|
|
|
|
@ -153,7 +157,7 @@ TEST_F(CueParserTest, UsesAllMetadataInformation) {
|
|
|
|
|
ASSERT_EQ("Zucchero", first_song.artist());
|
|
|
|
|
ASSERT_EQ("Zucchero himself", first_song.albumartist());
|
|
|
|
|
ASSERT_EQ("Some guy", first_song.composer());
|
|
|
|
|
ASSERT_EQ(1 * kNsecPerSec, first_song.beginning_nanosec());
|
|
|
|
|
ASSERT_EQ(to_nanosec(0, 1, 0), first_song.beginning_nanosec());
|
|
|
|
|
ASSERT_EQ(second_song.beginning_nanosec() - first_song.beginning_nanosec(), first_song.length_nanosec());
|
|
|
|
|
ASSERT_EQ(1, first_song.track());
|
|
|
|
|
|
|
|
|
@ -163,7 +167,7 @@ TEST_F(CueParserTest, UsesAllMetadataInformation) {
|
|
|
|
|
ASSERT_EQ("Zucchero himself", second_song.artist());
|
|
|
|
|
ASSERT_EQ("Zucchero himself", second_song.albumartist());
|
|
|
|
|
ASSERT_EQ("Some other guy", second_song.composer());
|
|
|
|
|
ASSERT_EQ(2 * kNsecPerSec, second_song.beginning_nanosec());
|
|
|
|
|
ASSERT_EQ(to_nanosec(0, 2, 0), second_song.beginning_nanosec());
|
|
|
|
|
ASSERT_EQ(2, second_song.track());
|
|
|
|
|
|
|
|
|
|
validate_songs(song_list);
|
|
|
|
@ -190,7 +194,7 @@ TEST_F(CueParserTest, AcceptsMultipleFileBasedCues) {
|
|
|
|
|
ASSERT_EQ("Artist One Album", first_song.album());
|
|
|
|
|
ASSERT_EQ("Artist One", first_song.artist());
|
|
|
|
|
ASSERT_EQ("Artist One", first_song.albumartist());
|
|
|
|
|
ASSERT_EQ(1 * kNsecPerSec, first_song.beginning_nanosec());
|
|
|
|
|
ASSERT_EQ(to_nanosec(0, 1, 0), first_song.beginning_nanosec());
|
|
|
|
|
ASSERT_EQ(second_song.beginning_nanosec() - first_song.beginning_nanosec(), first_song.length_nanosec());
|
|
|
|
|
ASSERT_EQ(-1, first_song.track());
|
|
|
|
|
ASSERT_EQ("CUEPATH", first_song.cue_path());
|
|
|
|
@ -200,7 +204,7 @@ TEST_F(CueParserTest, AcceptsMultipleFileBasedCues) {
|
|
|
|
|
ASSERT_EQ("Artist One Album", second_song.album());
|
|
|
|
|
ASSERT_EQ("Artist One", second_song.artist());
|
|
|
|
|
ASSERT_EQ("Artist One", second_song.albumartist());
|
|
|
|
|
ASSERT_EQ((5 * 60 + 3) * kNsecPerSec, second_song.beginning_nanosec());
|
|
|
|
|
ASSERT_EQ(to_nanosec(5, 3, 68), second_song.beginning_nanosec());
|
|
|
|
|
ASSERT_EQ(-1, second_song.track());
|
|
|
|
|
|
|
|
|
|
ASSERT_TRUE(third_song.filename().endsWith("files/longer_two_p1.mp3"));
|
|
|
|
@ -208,7 +212,7 @@ TEST_F(CueParserTest, AcceptsMultipleFileBasedCues) {
|
|
|
|
|
ASSERT_EQ("Artist Two Album", third_song.album());
|
|
|
|
|
ASSERT_EQ("Artist X", third_song.artist());
|
|
|
|
|
ASSERT_EQ("Artist Two", third_song.albumartist());
|
|
|
|
|
ASSERT_EQ(0, third_song.beginning_nanosec());
|
|
|
|
|
ASSERT_EQ(to_nanosec(0, 0, 12), third_song.beginning_nanosec());
|
|
|
|
|
ASSERT_EQ(fourth_song.beginning_nanosec() - third_song.beginning_nanosec(), third_song.length_nanosec());
|
|
|
|
|
ASSERT_EQ(-1, third_song.track());
|
|
|
|
|
ASSERT_EQ("CUEPATH", third_song.cue_path());
|
|
|
|
@ -218,7 +222,7 @@ TEST_F(CueParserTest, AcceptsMultipleFileBasedCues) {
|
|
|
|
|
ASSERT_EQ("Artist Two Album", fourth_song.album());
|
|
|
|
|
ASSERT_EQ("Artist Two", fourth_song.artist());
|
|
|
|
|
ASSERT_EQ("Artist Two", fourth_song.albumartist());
|
|
|
|
|
ASSERT_EQ((4 * 60) * kNsecPerSec, fourth_song.beginning_nanosec());
|
|
|
|
|
ASSERT_EQ(to_nanosec(4, 0, 13), fourth_song.beginning_nanosec());
|
|
|
|
|
ASSERT_EQ(-1, fourth_song.track());
|
|
|
|
|
|
|
|
|
|
ASSERT_TRUE(fifth_song.filename().endsWith("files/longer_two_p2.mp3"));
|
|
|
|
@ -226,7 +230,7 @@ TEST_F(CueParserTest, AcceptsMultipleFileBasedCues) {
|
|
|
|
|
ASSERT_EQ("Artist Two Album", fifth_song.album());
|
|
|
|
|
ASSERT_EQ("Artist Two", fifth_song.artist());
|
|
|
|
|
ASSERT_EQ("Artist Two", fifth_song.albumartist());
|
|
|
|
|
ASSERT_EQ(1 * kNsecPerSec, fifth_song.beginning_nanosec());
|
|
|
|
|
ASSERT_EQ(to_nanosec(0, 1, 0), fifth_song.beginning_nanosec());
|
|
|
|
|
ASSERT_EQ(-1, fifth_song.track());
|
|
|
|
|
ASSERT_EQ("CUEPATH", fifth_song.cue_path());
|
|
|
|
|
|
|
|
|
@ -253,7 +257,7 @@ TEST_F(CueParserTest, SkipsBrokenSongsInMultipleFileBasedCues) {
|
|
|
|
|
ASSERT_EQ("Artist One", first_song.artist());
|
|
|
|
|
ASSERT_EQ("Artist One Album", first_song.album());
|
|
|
|
|
ASSERT_EQ("A1", first_song.title());
|
|
|
|
|
ASSERT_EQ(1 * kNsecPerSec, first_song.beginning_nanosec());
|
|
|
|
|
ASSERT_EQ(to_nanosec(0, 1, 15), first_song.beginning_nanosec());
|
|
|
|
|
ASSERT_EQ(second_song.beginning_nanosec() - first_song.beginning_nanosec(), first_song.length_nanosec());
|
|
|
|
|
ASSERT_EQ(-1, first_song.track());
|
|
|
|
|
|
|
|
|
@ -261,7 +265,7 @@ TEST_F(CueParserTest, SkipsBrokenSongsInMultipleFileBasedCues) {
|
|
|
|
|
ASSERT_EQ("Artist One", second_song.artist());
|
|
|
|
|
ASSERT_EQ("Artist One Album", second_song.album());
|
|
|
|
|
ASSERT_EQ("A3", second_song.title());
|
|
|
|
|
ASSERT_EQ(60 * kNsecPerSec, second_song.beginning_nanosec());
|
|
|
|
|
ASSERT_EQ(to_nanosec(1, 0, 16), second_song.beginning_nanosec());
|
|
|
|
|
ASSERT_EQ(-1, second_song.track());
|
|
|
|
|
|
|
|
|
|
// all B* songs are broken
|
|
|
|
@ -271,7 +275,7 @@ TEST_F(CueParserTest, SkipsBrokenSongsInMultipleFileBasedCues) {
|
|
|
|
|
ASSERT_EQ("Artist Three", third_song.artist());
|
|
|
|
|
ASSERT_EQ("Artist Three Album", third_song.album());
|
|
|
|
|
ASSERT_EQ("C1", third_song.title());
|
|
|
|
|
ASSERT_EQ(1 * kNsecPerSec, third_song.beginning_nanosec());
|
|
|
|
|
ASSERT_EQ(to_nanosec(0, 1, 0), third_song.beginning_nanosec());
|
|
|
|
|
ASSERT_EQ(-1, third_song.track());
|
|
|
|
|
|
|
|
|
|
// D* - broken song at the beginning
|
|
|
|
@ -279,7 +283,7 @@ TEST_F(CueParserTest, SkipsBrokenSongsInMultipleFileBasedCues) {
|
|
|
|
|
ASSERT_EQ("Artist Four", fourth_song.artist());
|
|
|
|
|
ASSERT_EQ("Artist Four Album", fourth_song.album());
|
|
|
|
|
ASSERT_EQ("D2", fourth_song.title());
|
|
|
|
|
ASSERT_EQ(61 * kNsecPerSec, fourth_song.beginning_nanosec());
|
|
|
|
|
ASSERT_EQ(to_nanosec(15, 55, 66), fourth_song.beginning_nanosec());
|
|
|
|
|
ASSERT_EQ(-1, fourth_song.track());
|
|
|
|
|
|
|
|
|
|
validate_songs(song_list);
|
|
|
|
@ -302,14 +306,14 @@ TEST_F(CueParserTest, SkipsDataFiles) {
|
|
|
|
|
ASSERT_EQ("Artist One", first_song.artist());
|
|
|
|
|
ASSERT_EQ("Artist One Album", first_song.album());
|
|
|
|
|
ASSERT_EQ("A1", first_song.title());
|
|
|
|
|
ASSERT_EQ(1 * kNsecPerSec, first_song.beginning_nanosec());
|
|
|
|
|
ASSERT_EQ(to_nanosec(0, 1, 0), first_song.beginning_nanosec());
|
|
|
|
|
ASSERT_EQ(-1, first_song.track());
|
|
|
|
|
|
|
|
|
|
ASSERT_TRUE(second_song.filename().endsWith("file4.mp3"));
|
|
|
|
|
ASSERT_EQ("Artist Four", second_song.artist());
|
|
|
|
|
ASSERT_EQ("Artist Four Album", second_song.album());
|
|
|
|
|
ASSERT_EQ("D1", second_song.title());
|
|
|
|
|
ASSERT_EQ(61 * kNsecPerSec, second_song.beginning_nanosec());
|
|
|
|
|
ASSERT_EQ(to_nanosec(1, 1, 0), second_song.beginning_nanosec());
|
|
|
|
|
ASSERT_EQ(-1, second_song.track());
|
|
|
|
|
|
|
|
|
|
validate_songs(song_list);
|
|
|
|
|