1
0
Fork 0
mirror of https://github.com/KingDuckZ/dindexer.git synced 2024-11-25 00:53:43 +00:00
dindexer/test/unit/test_diriterator.cpp

184 lines
10 KiB
C++

/* Copyright 2015, 2016, Michele Santullo
* This file is part of "dindexer".
*
* "dindexer" is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* "dindexer" is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with "dindexer". If not, see <http://www.gnu.org/licenses/>.
*/
#include "dindexer-machinery/set_listing.hpp"
#include "helpers/lengthof.h"
#include <gtest/gtest.h>
#include <vector>
#include <utility>
#include <algorithm>
//TEST_F for class
namespace {
void flatten_filelist (const mchlib::SetListingView<true>& parContent, std::vector<std::string>& parOut) {
const auto end = parContent.end();
for (auto itcurr = parContent.cbegin(); itcurr != end; ++itcurr) {
parOut.push_back(itcurr->abs_path);
if (itcurr->is_directory) {
flatten_filelist(mchlib::SetListingView<true>(itcurr), parOut);
}
}
}
} //unnamed namespace
TEST(machinery, diriterator) {
using mchlib::SetListing;
using mchlib::SetListingView;
using mchlib::FileRecordData;
FileRecordData test_data_arr[] = {
FileRecordData("",0,0,0,true,false),
FileRecordData("BestAndBest",0,0,1,true,false),
FileRecordData("BestAndBest/CD1",0,0,2,true,false),
FileRecordData("BestAndBest/CD1/01 - 紅三四郎.flac",0,0,3,false,false),
FileRecordData("BestAndBest/CD1/堀江美都子.-.[BEST.And.BEST.Disc1].专辑.(ape).cue",0,0,3,false,false),
FileRecordData("BestAndBest/CD2",0,0,2,true,false),
FileRecordData("BestAndBest/CD2/01 - ダルタニアスの歌.flac",0,0,3,false,false),
FileRecordData("BestAndBest/CD2/02 - 花のなかの花.flac",0,0,3,false,false),
FileRecordData("BestAndBest/CD2/堀江美都子.-.[BEST.And.BEST.Disc2].专辑.(ape).cue",0,0,3,false,false),
FileRecordData("BestAndBest/CD.txt",0,0,2,false,false),
FileRecordData("BestAndBest/Scans",0,0,2,true,false),
FileRecordData("BestAndBest/Scans/01.jpg",0,0,3,false,false),
FileRecordData("Cowboy Bebop - Tank - The Best",0,0,1,true,false),
FileRecordData("Cowboy Bebop - Tank - The Best/01 - Tank! (TV stretch).mp3",0,0,2,false,false),
FileRecordData("Escaflowne",0,0,1,true,false),
FileRecordData("Escaflowne/cd1 - Over the sky",0,0,2,true,false),
FileRecordData("Escaflowne/cd1 - Over the sky/01 - Yakusoku wa iranai.mp3",0,0,3,false,false),
FileRecordData("Escaflowne/cd2",0,0,2,true,false),
FileRecordData("Escaflowne/cd2/01 - The vision of Escaflowne.mp3",0,0,3,false,false),
FileRecordData("Escaflowne/cd3",0,0,2,true,false),
FileRecordData("Escaflowne/cd3/01 - Short notice.mp3",0,0,3,false,false),
FileRecordData("Last Exile",0,0,1,true,false),
FileRecordData("Last Exile/cd1",0,0,2,true,false),
FileRecordData("Last Exile/cd2",0,0,2,true,false),
FileRecordData("Ragnarok",0,0,1,true,false),
FileRecordData("Tekkaman",0,0,1,true,false),
FileRecordData("Tekkaman LP",0,0,1,true,false),
FileRecordData("Tekkaman LP/01 - Ichirou Mizuki - Tekkaman no uta.mp3",0,0,2,false,false),
FileRecordData("Tekkaman LP/02 - Ichirou Mizuki - Space Knight no uta.mp3",0,0,2,false,false),
FileRecordData("Vultus 5",0,0,1,true,false),
FileRecordData("Vultus 5/voltes_v_ending_full_minus_one_karaoke.mp3",0,0,2,false,false),
FileRecordData("Vultus 5/voltes_v_ending_full.mp3",0,0,2,false,false),
FileRecordData("Vultus 5/voltes_v_ending_tv.mp3",0,0,2,false,false),
FileRecordData("Vultus 5/voltes_v_opening_full_minus_one_karaoke.mp3",0,0,2,false,false),
FileRecordData("Vultus 5/voltes_v_opening_full.mp3",0,0,2,false,false),
FileRecordData("Vultus 5/voltes_v_opening_full_reperformed.mp3",0,0,2,false,false),
FileRecordData("Vultus 5/voltes_v_opening_horie_mitsuko_live.mp3",0,0,2,false,false),
FileRecordData("Vultus 5/voltes_v_opening_tv.mp3",0,0,2,false,false),
FileRecordData("Vultus 5/テレビオリジナルBGMコレクション 超電磁マシーン ボルテスV",0,0,2,true,false),
FileRecordData("Vultus 5/テレビオリジナルBGMコレクション 超電磁マシーン ボルテスV/01_ボルテスVの歌 (TV用唄入り).mp3",0,0,3,false,false),
FileRecordData("Vultus 5/テレビオリジナルBGMコレクション 超電磁マシーン ボルテスV/02_侵略の魔手 〜ボアザン星辺境征軍地球に来襲す〜.mp3",0,0,3,false,false),
FileRecordData("Vultus 5/テレビオリジナルBGMコレクション 超電磁マシーン ボルテスV/03_ボルテス・雄姿の出現 〜地球の命運を双肩に賭けて〜.mp3",0,0,3,false,false),
FileRecordData("Vultus 5/テレビオリジナルBGMコレクション 超電磁マシーン ボルテスV/04_若き英雄たち 〜正義に燃える青春の血潮〜.mp3",0,0,3,false,false),
FileRecordData("Vultus 5/テレビオリジナルBGMコレクション 超電磁マシーン ボルテスV/05_ブリッジ・コレクション.mp3",0,0,3,false,false),
FileRecordData("Vultus 5/テレビオリジナルBGMコレクション 超電磁マシーン ボルテスV/06_ボルテス・死闘の戦歴 〜壮絶なる超電磁の攻防戦〜.mp3",0,0,3,false,false),
FileRecordData("Vultus 5/テレビオリジナルBGMコレクション 超電磁マシーン ボルテスV/07_剛兄弟出生の秘密 〜ラ・ゴール如何に宿命と闘いしか〜.mp3",0,0,3,false,false),
FileRecordData("Vultus 5/テレビオリジナルBGMコレクション 超電磁マシーン ボルテスV/08_大宇宙への出発 〜悲劇のボアザン星解放へ向かって〜.mp3",0,0,3,false,false),
FileRecordData("Vultus 5/テレビオリジナルBGMコレクション 超電磁マシーン ボルテスV/09_悲劇の終幕 〜貴公子ハイネル紅蓮の炎に消ゆ〜.mp3",0,0,3,false,false),
FileRecordData("Vultus 5/テレビオリジナルBGMコレクション 超電磁マシーン ボルテスV/10_父をもとめて (TV用唄入り).mp3",0,0,3,false,false)
};
const char* const expected_list[] = {
"BestAndBest",
"BestAndBest/CD1",
"BestAndBest/CD1/01 - 紅三四郎.flac",
"BestAndBest/CD1/堀江美都子.-.[BEST.And.BEST.Disc1].专辑.(ape).cue",
"BestAndBest/CD2",
"BestAndBest/CD2/01 - ダルタニアスの歌.flac",
"BestAndBest/CD2/02 - 花のなかの花.flac",
"BestAndBest/CD2/堀江美都子.-.[BEST.And.BEST.Disc2].专辑.(ape).cue",
"BestAndBest/Scans",
"BestAndBest/Scans/01.jpg",
"BestAndBest/CD.txt",
"Cowboy Bebop - Tank - The Best",
"Cowboy Bebop - Tank - The Best/01 - Tank! (TV stretch).mp3",
"Escaflowne",
"Escaflowne/cd1 - Over the sky",
"Escaflowne/cd1 - Over the sky/01 - Yakusoku wa iranai.mp3",
"Escaflowne/cd2",
"Escaflowne/cd2/01 - The vision of Escaflowne.mp3",
"Escaflowne/cd3",
"Escaflowne/cd3/01 - Short notice.mp3",
"Last Exile",
"Last Exile/cd1",
"Last Exile/cd2",
"Ragnarok",
"Tekkaman",
"Tekkaman LP",
"Tekkaman LP/01 - Ichirou Mizuki - Tekkaman no uta.mp3",
"Tekkaman LP/02 - Ichirou Mizuki - Space Knight no uta.mp3",
"Vultus 5",
"Vultus 5/テレビオリジナルBGMコレクション 超電磁マシーン ボルテスV",
"Vultus 5/テレビオリジナルBGMコレクション 超電磁マシーン ボルテスV/01_ボルテスVの歌 (TV用唄入り).mp3",
"Vultus 5/テレビオリジナルBGMコレクション 超電磁マシーン ボルテスV/02_侵略の魔手 〜ボアザン星辺境征軍地球に来襲す〜.mp3",
"Vultus 5/テレビオリジナルBGMコレクション 超電磁マシーン ボルテスV/03_ボルテス・雄姿の出現 〜地球の命運を双肩に賭けて〜.mp3",
"Vultus 5/テレビオリジナルBGMコレクション 超電磁マシーン ボルテスV/04_若き英雄たち 〜正義に燃える青春の血潮〜.mp3",
"Vultus 5/テレビオリジナルBGMコレクション 超電磁マシーン ボルテスV/05_ブリッジ・コレクション.mp3",
"Vultus 5/テレビオリジナルBGMコレクション 超電磁マシーン ボルテスV/06_ボルテス・死闘の戦歴 〜壮絶なる超電磁の攻防戦〜.mp3",
"Vultus 5/テレビオリジナルBGMコレクション 超電磁マシーン ボルテスV/07_剛兄弟出生の秘密 〜ラ・ゴール如何に宿命と闘いしか〜.mp3",
"Vultus 5/テレビオリジナルBGMコレクション 超電磁マシーン ボルテスV/08_大宇宙への出発 〜悲劇のボアザン星解放へ向かって〜.mp3",
"Vultus 5/テレビオリジナルBGMコレクション 超電磁マシーン ボルテスV/09_悲劇の終幕 〜貴公子ハイネル紅蓮の炎に消ゆ〜.mp3",
"Vultus 5/テレビオリジナルBGMコレクション 超電磁マシーン ボルテスV/10_父をもとめて (TV用唄入り).mp3",
"Vultus 5/voltes_v_ending_full.mp3",
"Vultus 5/voltes_v_ending_full_minus_one_karaoke.mp3",
"Vultus 5/voltes_v_ending_tv.mp3",
"Vultus 5/voltes_v_opening_full.mp3",
"Vultus 5/voltes_v_opening_full_minus_one_karaoke.mp3",
"Vultus 5/voltes_v_opening_full_reperformed.mp3",
"Vultus 5/voltes_v_opening_horie_mitsuko_live.mp3",
"Vultus 5/voltes_v_opening_tv.mp3",
};
std::vector<FileRecordData> test_data(std::make_move_iterator(std::begin(test_data_arr)), std::make_move_iterator(std::end(test_data_arr)));
SetListing lst(std::move(test_data));
auto i = lst.begin();
EXPECT_EQ("BestAndBest", i->abs_path);
{
auto view = SetListingView<true>(i);
auto i2 = view.cbegin();
EXPECT_EQ("BestAndBest/CD1", i2->abs_path);
++i2;
EXPECT_EQ("BestAndBest/CD2", i2->abs_path);
++i2;
EXPECT_EQ("BestAndBest/Scans", i2->abs_path);
++i2;
EXPECT_EQ("BestAndBest/CD.txt", i2->abs_path);
++i2;
EXPECT_TRUE(view.end() == i2);
}
++i;
EXPECT_EQ("Cowboy Bebop - Tank - The Best", i->abs_path);
std::vector<std::string> flattened;
flattened.reserve(lengthof(expected_list));
flatten_filelist(lst.make_cview(), flattened);
EXPECT_EQ(lengthof(expected_list), flattened.size());
const auto count = std::min(lengthof(expected_list), flattened.size());
for (std::size_t z = 0; z < count; ++z) {
EXPECT_EQ(expected_list[z], flattened[z]);
}
}