From 0656330548b1740a62632e0d8986e64767283373 Mon Sep 17 00:00:00 2001 From: David Sansome Date: Tue, 20 Apr 2010 22:00:02 +0000 Subject: [PATCH] Test we can load various popular file formats --- src/engines/gstengine.cpp | 29 ++++------- src/engines/gstengine.h | 4 -- tests/CMakeLists.txt | 7 ++- tests/data/beep.flac | Bin 0 -> 10752 bytes tests/data/beep.mp3 | Bin 0 -> 6614 bytes tests/data/beep.ogg | Bin 0 -> 4105 bytes tests/data/beep.spx | Bin 0 -> 1673 bytes tests/data/beep.wav | Bin 0 -> 98348 bytes tests/data/testdata.qrc | 9 ++++ tests/fileformats_test.cpp | 100 +++++++++++++++++++++++++++++++++++++ tests/resources_env.h | 1 + 11 files changed, 126 insertions(+), 24 deletions(-) create mode 100644 tests/data/beep.flac create mode 100644 tests/data/beep.mp3 create mode 100644 tests/data/beep.ogg create mode 100644 tests/data/beep.spx create mode 100644 tests/data/beep.wav create mode 100644 tests/data/testdata.qrc create mode 100644 tests/fileformats_test.cpp diff --git a/src/engines/gstengine.cpp b/src/engines/gstengine.cpp index 2007fd3a0..5a5689e22 100644 --- a/src/engines/gstengine.cpp +++ b/src/engines/gstengine.cpp @@ -53,10 +53,7 @@ GstEngine::GstEngine() : Engine::Base(), delayq_(g_queue_new()), current_sample_(0), - equalizer_enabled_(false), - can_decode_pipeline_(NULL), - can_decode_src_(NULL), - can_decode_bin_(NULL) + equalizer_enabled_(false) { ReloadSettings(); } @@ -64,9 +61,6 @@ GstEngine::GstEngine() GstEngine::~GstEngine() { current_pipeline_.reset(); - if (can_decode_pipeline_) - gst_object_unref(GST_OBJECT(can_decode_pipeline_)); - // Destroy scope delay queue ClearScopeBuffers(); g_queue_free(delayq_); @@ -117,21 +111,19 @@ bool GstEngine::CanDecode(const QUrl &url) { can_decode_last_ = false; // Create the pipeline - if (!can_decode_pipeline_) { - can_decode_pipeline_ = CreateElement("pipeline"); - can_decode_src_ = CreateElement("giosrc", can_decode_pipeline_); - can_decode_bin_ = CreateElement("decodebin", can_decode_pipeline_); + GstElement* pipeline = CreateElement("pipeline"); + GstElement* src = CreateElement("giosrc", pipeline); + GstElement* bin = CreateElement("decodebin", pipeline); - gst_element_link(can_decode_src_, can_decode_bin_); - g_signal_connect(G_OBJECT(can_decode_bin_), "new-decoded-pad", G_CALLBACK(CanDecodeNewPadCallback), this); - g_signal_connect(G_OBJECT(can_decode_bin_), "no-more-pads", G_CALLBACK(CanDecodeLastCallback), this); - } + gst_element_link(src, bin); + g_signal_connect(G_OBJECT(bin), "new-decoded-pad", G_CALLBACK(CanDecodeNewPadCallback), this); + g_signal_connect(G_OBJECT(bin), "no-more-pads", G_CALLBACK(CanDecodeLastCallback), this); // Set the file we're testing - g_object_set(G_OBJECT(can_decode_src_), "location", url.toEncoded().constData(), NULL); + g_object_set(G_OBJECT(src), "location", url.toEncoded().constData(), NULL); // Start the pipeline playing - gst_element_set_state(can_decode_pipeline_, GST_STATE_PLAYING); + gst_element_set_state(pipeline, GST_STATE_PLAYING); // Wait until found audio stream int count = 0; @@ -141,7 +133,8 @@ bool GstEngine::CanDecode(const QUrl &url) { } // Stop playing - gst_element_set_state(can_decode_pipeline_, GST_STATE_NULL); + gst_element_set_state(pipeline, GST_STATE_NULL); + gst_object_unref(pipeline); return can_decode_success_; } diff --git a/src/engines/gstengine.h b/src/engines/gstengine.h index cf2c6a62e..3bf842fa1 100644 --- a/src/engines/gstengine.h +++ b/src/engines/gstengine.h @@ -136,10 +136,6 @@ class GstEngine : public Engine::Base { mutable bool can_decode_success_; mutable bool can_decode_last_; - - GstElement* can_decode_pipeline_; - GstElement* can_decode_src_; - GstElement* can_decode_bin_; }; diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 941faf48a..365b246ee 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -54,11 +54,13 @@ add_custom_target(build_tests ) add_dependencies(test build_tests) -add_library(test_gui_main EXCLUDE_FROM_ALL main.cpp) +qt4_add_resources(TEST-RESOURCE-SOURCES data/testdata.qrc) + +add_library(test_gui_main EXCLUDE_FROM_ALL ${TEST-RESOURCE-SOURCES} main.cpp) target_link_libraries(test_gui_main clementine_lib) set_target_properties(test_gui_main PROPERTIES COMPILE_DEFINITIONS GUI) -add_library(test_main EXCLUDE_FROM_ALL main.cpp) +add_library(test_main EXCLUDE_FROM_ALL ${TEST-RESOURCE-SOURCES} main.cpp) target_link_libraries(test_main clementine_lib) # Given a file foo_test.cpp, creates a target foo_test and adds it to the test target. @@ -98,3 +100,4 @@ add_test_file(songplaylistitem_test.cpp false) add_test_file(translations_test.cpp false) add_test_file(playlist_test.cpp true) add_test_file(scopedtransaction_test.cpp true) +add_test_file(fileformats_test.cpp true) diff --git a/tests/data/beep.flac b/tests/data/beep.flac new file mode 100644 index 0000000000000000000000000000000000000000..521ca2f46a0432f3f550ab704449765d22317959 GIT binary patch literal 10752 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 GqyG;Lov23u literal 0 HcmV?d00001 diff --git a/tests/data/beep.mp3 b/tests/data/beep.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..80341ecc0bb2181082d1c0ef90e06864d4226d87 GIT binary patch literal 6614 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 literal 0 HcmV?d00001 diff --git a/tests/data/beep.ogg b/tests/data/beep.ogg new file mode 100644 index 0000000000000000000000000000000000000000..9a88f3679369b71e67ccf3f61e9584a5e4a64d83 GIT binary patch literal 4105 zcmai14O~;#6~BB3WHd;KK%+uSB%$aMniOK8l0Xy!DddI6M_5J$GoUe43Grha4oN_U z$Y>g(rLhA`EGTH>3Km$N)^C>;Cbhw>BC^zMQghT-D~R!v0@=L5RImCvfJ_=-Fx!3jv1pLRf*j-~*arK-d~&2p3RR8iIM7{82qZ zO@~-Dhge?Jpc7u`0z%X{8SVU5#>Lke7j29slwV}K!7(5T$R*aaB-VYEXbjCZGRZ#m z$0HE~C&(U2swX0pCi50=rFoEgn-HQjMb}ufYOIAd)75npLsh#oDo4l_%<$snF&j(? zpQhtuU7D*u={aUqAgK;Mq+TxiO`Cf)$0g96JO@}txo-`pr+m@Lfd?cE4+)0Up5Y%d2DX4`qGF`VFS9lG_3 z#kUWrRUJF)8~1er<%P^o>l zzOYaqi;!}plVQJc)T(_OudykYrwfDE`{o5j-V)Bua6E(b7ST7uGleatwG?K9{=(^CPxWWtJD9)Y8 z$eJ%%bvL7pp-Dz&k+EQ>x%JJ)TW`J{euNZ3R6>MkHHUZ9wC$*A-BCAFZ7h7#+}hUo zT>s%ar;gqJe|-rV;Gu9Gg>EPb-GGIPF(63qmU|Q4W&DjBDlUl_xXg3xao8^w9GY3` zxHJ|H03q*-@6iT^8PcUpJGL5^ueM`iyBz<2O*+Dp`hjCTiG;nR&<=L&uM^I+@4vum zX&QT3Fx4_P$f~eRQ@QyE&STto?>@88U~&Vexgr_l754(Shfy+=^i8OEND#i<+9%l1 z_ReQAiS4lBMTxa5U47F6kNqsGBKhcYYr6V~4U~`v{FXFds`qz_qan208}njUn(~I& z)Ad-tV2Y7fBY4-6KO|rsH1!L@4!*IJZG}hnw8b=(G-Y|?auN&TL@eGWF`|Z{ z>suJoH+WJSQ|c#9r76e!#P$Z>Cp^9^9hcIi_H;a(F2&7E>GM)44VU|gaerKHmg1eN zPkEXv>G%X4w|A*>X3H|ox{2qdSBOWL)xo2(OEaL&&Fs|3b($PM@t8kuH;d&uKq<@BsjiGA4C};rgNiWOpi*vE zWu62T4Zf{xvQ(+uuTy6ICTFg4M5j|Ws3tR2*>fu8`BB~ET*^q7bj+?B!F7|Py072V zT%89s9d5471-Y@x8#{|9mc1>*brU9KE~qUl&W-x~OmWO{P5#xFP8@&Md&8OcB9vEO zICVyPKsPb-bo`B|D&ENZ8o-+52jjmiQE5HBAp!0ozcI^#m9O1?)gACStc$V%XjQeZ626Q~R=n)oe|ZBsUvI zMQmForr6wJZ&d8%8!jtY*3LA^-ZpDcj+(!|R(QekhEWh^HIWm8g7AZSxI*EgQ$(

ZD(^YAJxlVc4WN>_qiNV)m`Ijz0jk*c^{B9L zb<5Ix7PF6@f2^Z3D4y*wZl~vWoFvE`?^ul-rYN{)^z`~QG2Pa zQz1|3CRWw$maV;aT7L<4-kT<=?dVkG)C%@27_aFBD79@CCIBi~!tV-D*YRf?6-Qx0 z{iaa0|wrVi>T<>0px)BPh(v+G51i%_aVcY^pU&72 z%??@;L9Pl4H#l2iVu+p!uTm=&lfc~=um#EzPO~>H=)_V~4Y5jj9bS?9OvHPVpsc2) zk886hRoc%eH#DCbjpo;lH?eKeam^vmIh6zG*#PT-67RL1Y<{i4z1d^}Pi?H_QmieX zDUutsR7p}>=XhSbMW2RAI(mchA*MzZ?Y7az7a?xx>UP06LsGQ5FH1XgdafQ*b4L~0 z`=|Gh=C$*uuj#2Dzfa3Q);)XuclX&{3iT(k^TCERn_Z!OKopaExpUX_51_#ORjpup zh2g^dZ4o*&It*;J+C+0&JEvq=(H4y zl!fN%>Pk`&hsf2{@o`iBOUESfaYOJM)+SE-Jrl!R#e@b!ES*ND(fs{uZ|^-BevpMK zTv4>s)5oPpHXZ%f%qLNkwRJv!<9I{&|84&lKEJlE`)~&>x}rSYfl7}5_#z&;iP-f=gDwaSZZDQOIixQBK=-^eFaJ5zx?Rf>s+Yi}cTsd#p~yJJz{ z1Q3#+D@9&Uuwu5u=VepZgMC$K8ytm_8T;W5UbM)i?THAwbECX$NEq|2?)E#M#(ekS z_~g9m%)Qk)U5_SKK03GZBVQsIOm~lF$A)LQlWK8p2mYxJ3UNag2lt~NOUNKZ57)6! z%g-d2jsNwxTZ<%%+-oO;NQClbCs~9xemXqsqg_M|4xe}SuvpTL)z3d-_ANh>S>Jc; z5W&R3_@nO%enB#;ry_od$VhcX9Fl{GNClsv%nVMsQ$(%icEp`n^elSsboo;&_B~qj i2jRcgeK|M3V)Ewie*dTY4?X|UVl9G}qt284EGlPoxo@dMqYa;-FGe+*-3Nl)I89>T`yOnPa}3|RX6V-Vwjg!J~y1te4X{(CW&==t9t~W zuDve!NEo-9(s!PN_)ca*N8G%Ag{ZiW0h>tn;EA`IG>uhNjxTitozQiNId=2ASq1BN&# z6*$Q}zUnIj|A#nZv6*-yPxWfr*l3)zm zL_-CE$B7wM>#Riz_uMupDU1yl3y3~8`(Kui-s%qD>!ONpWv}8kiNh9>3It<9Cg#md z_;9Z8rU$*Wk%$X4zE_8`~o$?tY@pY@4eZ(Yr@5(;I9k0N& F1^_CrM4PBqAk>h=>f)L`AhKsgPz$ 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 z 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 R?)`91N|bO;GB@I!{2$&<|3v@* literal 0 HcmV?d00001 diff --git a/tests/data/testdata.qrc b/tests/data/testdata.qrc new file mode 100644 index 000000000..da37a0422 --- /dev/null +++ b/tests/data/testdata.qrc @@ -0,0 +1,9 @@ + + + beep.flac + beep.mp3 + beep.ogg + beep.spx + beep.wav + + diff --git a/tests/fileformats_test.cpp b/tests/fileformats_test.cpp new file mode 100644 index 000000000..24a91ecfb --- /dev/null +++ b/tests/fileformats_test.cpp @@ -0,0 +1,100 @@ +/* This file is part of Clementine. + + Clementine 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. + + Clementine 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 Clementine. If not, see . +*/ + +#include "song.h" +#include "engines/gstengine.h" + +#include "gmock/gmock.h" +#include "gtest/gtest.h" + +#include "test_utils.h" + +#include +#include +#include +#include + +namespace { + +class FileformatsTest : public ::testing::TestWithParam { + public: + static void SetUpTestCase() { + sGstEngine = new GstEngine; + ASSERT_TRUE(sGstEngine->Init()); + } + + static void TearDownTestCase() { + delete sGstEngine; + sGstEngine = NULL; + } + + protected: + FileformatsTest() { + kFormatsWithoutMetadata.insert("wav"); + } + + void SetUp() { + format_ = GetParam(); + resource_filename_ = ":/testdata/beep." + format_; + temp_filetemplate_ = QDir::tempPath() + "/fileformatstest-XXXXXX." + format_; + } + + void SaveToTempFile(QTemporaryFile* file) { + QResource resource(resource_filename_); + file->open(); + file->write(reinterpret_cast(resource.data()), resource.size()); + file->flush(); + } + + static GstEngine* sGstEngine; + + QSet kFormatsWithoutMetadata; + QString format_; + QString resource_filename_; + QString temp_filetemplate_; +}; + +GstEngine* FileformatsTest::sGstEngine = NULL; + + +TEST_P(FileformatsTest, Exists) { + EXPECT_TRUE(QFile::exists(resource_filename_)); +} + +TEST_P(FileformatsTest, LoadsTags) { + QTemporaryFile temp(temp_filetemplate_); + SaveToTempFile(&temp); + + Song song; + song.InitFromFile(temp.fileName(), -1); + ASSERT_TRUE(song.is_valid()); + + if (!kFormatsWithoutMetadata.contains(format_)) { + EXPECT_EQ("Beep " + format_, song.title()); + } +} + +TEST_P(FileformatsTest, GstCanDecode) { + QTemporaryFile temp(temp_filetemplate_); + SaveToTempFile(&temp); + + EXPECT_TRUE(sGstEngine->CanDecode(QUrl::fromLocalFile(temp.fileName()))); +} + +INSTANTIATE_TEST_CASE_P(Formats, FileformatsTest, ::testing::Values( + "flac", "mp3", "ogg", "spx", "wav")); + +} // namespace diff --git a/tests/resources_env.h b/tests/resources_env.h index e04e02ec6..0bca4357d 100644 --- a/tests/resources_env.h +++ b/tests/resources_env.h @@ -26,6 +26,7 @@ public: void SetUp() { Q_INIT_RESOURCE(data); Q_INIT_RESOURCE(translations); + Q_INIT_RESOURCE(testdata); } };