diff --git a/OdfFile/Test/ExampleFiles/audio.pptx b/OdfFile/Test/ExampleFiles/audio.pptx new file mode 100644 index 0000000000..9f087eaa8b Binary files /dev/null and b/OdfFile/Test/ExampleFiles/audio.pptx differ diff --git a/OdfFile/Test/audio.cpp b/OdfFile/Test/audio.cpp index d37906f551..ef180f3617 100644 --- a/OdfFile/Test/audio.cpp +++ b/OdfFile/Test/audio.cpp @@ -32,6 +32,15 @@ #include "audio.h" + +#include "../../DesktopEditor/common/File.h" +#include "../../DesktopEditor/common/Directory.h" +#include "../../OfficeUtils/src/OfficeUtils.h" + +#include "Writer/Converter/Converter.h" +#include "Writer/Converter/PptxConverter.h" +#include "Writer/Format/office_elements.h" + boost::shared_ptr ODP2OOX_AnimationAudioEnvironment::sInputOdf; boost::shared_ptr ODP2OOX_AnimationAudioEnvironment::sConverionContext; @@ -124,3 +133,36 @@ TEST_F(ODP2OOX_AnimationAudioTest, name) EXPECT_EQ(audio->Name.value(), nameExp); } + +////////////////////////////////////////////////////////////////////////// + +boost::shared_ptr OOX2ODP_AudioAnimationEnvironment::mConverter; +cpdoccore::odf_writer::odp_conversion_context* OOX2ODP_AudioAnimationEnvironment::mContext; + +OOX2ODP_AudioAnimationEnvironment::OOX2ODP_AudioAnimationEnvironment() + : OOX2ODP_AnimationEnvironment(L"audio.pptx", &mConverter, &mContext) +{ +} + +cpdoccore::odf_writer::odp_conversion_context* OOX2ODP_AudioAnimationEnvironment::GetContext() +{ + return mContext; +} + +void OOX2ODP_AudioAnimationTest::SetUp() +{ + mContext = OOX2ODP_AudioAnimationEnvironment::GetContext(); +} + +TEST_F(OOX2ODP_AudioAnimationTest, a_test) +{ + using namespace cpdoccore::odf_writer; + using namespace cpdoccore::odf_types; + + const anim_audio* audio = GetAnimationBehaviourByIndex(GetInnermostPar(GetMainSequenceParByIndex(0)), 1); + ASSERT_NE(audio, nullptr); + + const std::wstring xpathExp = L"Media/media1.wav"; + + EXPECT_EQ(audio->audio_attlist_.xlink_href_.value(), xpathExp); +} \ No newline at end of file diff --git a/OdfFile/Test/audio.h b/OdfFile/Test/audio.h index 20272b8e1d..bc2d42b57f 100644 --- a/OdfFile/Test/audio.h +++ b/OdfFile/Test/audio.h @@ -35,6 +35,14 @@ #include "gtest/gtest.h" +#include "Writer/Converter/Oox2OdfConverter.h" +#include "Writer/Format/odp_conversion_context.h" +#include "Writer/Format/anim_elements.h" +#include "Writer/Format/draw_page.h" + +#include "Reader/Format/odf_document.h" +#include "Reader/Converter/pptx_conversion_context.h" + class ODP2OOX_AnimationAudioEnvironment : public ODP2OOX_AnimationEnvironment { public: @@ -65,3 +73,23 @@ public: public: const cpdoccore::oox::pptx_animation_context* mAnimationContext; }; + +class OOX2ODP_AudioAnimationEnvironment : public OOX2ODP_AnimationEnvironment +{ +public: + OOX2ODP_AudioAnimationEnvironment(); + +public: + static cpdoccore::odf_writer::odp_conversion_context* GetContext(); + +private: + static boost::shared_ptr mConverter; + static cpdoccore::odf_writer::odp_conversion_context* mContext; +}; + +class OOX2ODP_AudioAnimationTest : public OOX2ODP_AnimationTest +{ +public: + void SetUp() override; + void TearDown() override {} +}; \ No newline at end of file diff --git a/OdfFile/Test/common.cpp b/OdfFile/Test/common.cpp index 80277b47ae..42da3e35e8 100644 --- a/OdfFile/Test/common.cpp +++ b/OdfFile/Test/common.cpp @@ -35,6 +35,10 @@ #include "../../OfficeUtils/src/OfficeUtils.h" #include "Reader/Converter/pptx_package.h" +#include "Writer/Converter/Converter.h" +#include "Writer/Converter/PptxConverter.h" +#include "Writer/Format/office_elements.h" + boost::shared_ptr ReadOdfDocument(const std::wstring& from, const std::wstring& temp, const std::wstring& tempUnpackedOdf) { COfficeUtils oCOfficeUtils(NULL); @@ -90,3 +94,131 @@ void ODP2OOX_AnimationEnvironment::TearDown() NSDirectory::DeleteDirectory(sTemp); } +////////////////////////////////////////////////////////////////////////// + +OOX2ODP_AnimationEnvironment::OOX2ODP_AnimationEnvironment(const std::wstring& exampleFilename, boost::shared_ptr* converter, cpdoccore::odf_writer::odp_conversion_context** context) +{ + mExampleFilename = exampleFilename; + mConverter = converter; + mContext = context; +} + +void OOX2ODP_AnimationEnvironment::SetUp() +{ + std::wstring rootDir = NSFile::GetProcessDirectory() + CH_DIR(".."); + std::wstring exampleFilesDirectory = rootDir + CH_DIR("ExampleFiles"); + + mFrom = exampleFilesDirectory + FILE_SEPARATOR_STR + mExampleFilename; + mTemp = mFrom + _T(".tmp"); + mTempUnpackedOox = mTemp + CH_DIR("pptx_unpacked"); + + NSDirectory::CreateDirectory(mTemp); + NSDirectory::CreateDirectory(mTempUnpackedOox); + + COfficeUtils oCOfficeUtils(NULL); + if (S_OK == oCOfficeUtils.ExtractToDirectory(mFrom, mTempUnpackedOox, NULL, 0)) + { + *mConverter = boost::make_shared(mTempUnpackedOox, _T("presentation"), L"", false, mTemp); + + try + { + (*mConverter)->convert(); + *mContext = dynamic_cast((*mConverter)->get_ooxConverter()->odf_context()); + } + catch (...) + { + _CP_LOG << L"[ error ]: Failed to setup OOX2ODP_EntranceAnimationTestEnvironment"; + } + } +} + +void OOX2ODP_AnimationEnvironment::TearDown() +{ + NSDirectory::DeleteDirectory(mTemp); +} + +const cpdoccore::odf_writer::anim_par* OOX2ODP_AnimationTest::GetTimingRoot() +{ + using namespace cpdoccore::odf_writer; + draw_page* page = dynamic_cast(mContext->current_slide().page_elm_.get()); + if (!page) + return nullptr; + + anim_par* timing_root = dynamic_cast(page->animation_.get()); + if (!timing_root) + return nullptr; + + return timing_root; + +} + +const cpdoccore::odf_writer::anim_seq* OOX2ODP_AnimationTest::GetMainSequence() +{ + using namespace cpdoccore::odf_writer; + const anim_par* timing_root = GetTimingRoot(); + if (!timing_root) + return nullptr; + + if (timing_root->anim_seq_array_.size() < 1) + return nullptr; + + const anim_seq* main_sequence = dynamic_cast(timing_root->anim_seq_array_.at(0).get()); + if (!main_sequence) + return nullptr; + + return main_sequence; +} + +const cpdoccore::odf_writer::anim_par* OOX2ODP_AnimationTest::GetMainSequenceParByIndex(size_t index) +{ + using namespace cpdoccore::odf_writer; + const anim_seq* main_sequence = GetMainSequence(); + + if (index >= main_sequence->anim_par_array_.size()) + return nullptr; + + const anim_par* par = dynamic_cast(main_sequence->anim_par_array_[index].get()); + if (!par) + return nullptr; + + return par; +} + +const cpdoccore::odf_writer::anim_par* OOX2ODP_AnimationTest::GetInnerPar(const cpdoccore::odf_writer::anim_par* par) +{ + using namespace cpdoccore::odf_writer; + + if (!par) + return nullptr; + + const anim_par* inner_par = dynamic_cast(par->anim_par_.get()); + + if (!inner_par) + return nullptr; + + return inner_par; +} + +const cpdoccore::odf_writer::anim_par* OOX2ODP_AnimationTest::GetInnermostPar(const cpdoccore::odf_writer::anim_par* par) +{ + using namespace cpdoccore::odf_writer; + + if (!par) + return nullptr; + + const anim_par* innermost = GetInnerPar(par); + + while (innermost->anim_par_) + { + innermost = dynamic_cast(innermost->anim_par_.get()); + if (!innermost) + return nullptr; + } + + return innermost; +} + +const cpdoccore::odf_writer::odp_conversion_context* OOX2ODP_AnimationTest::GetContext() const +{ + return mContext; +} diff --git a/OdfFile/Test/common.h b/OdfFile/Test/common.h index 6244cd0f9a..3a9e967dcd 100644 --- a/OdfFile/Test/common.h +++ b/OdfFile/Test/common.h @@ -36,6 +36,11 @@ #include "Reader/Converter/pptx_conversion_context.h" #include "Reader/Format/odf_document.h" +#include "Writer/Converter/Oox2OdfConverter.h" +#include "Writer/Format/odp_conversion_context.h" +#include "Writer/Format/anim_elements.h" +#include "Writer/Format/draw_page.h" + #include #include @@ -61,4 +66,58 @@ private: boost::shared_ptr* mDocument; boost::shared_ptr* mContext; +}; + +class OOX2ODP_AnimationEnvironment : public testing::Environment +{ +public: + OOX2ODP_AnimationEnvironment(const std::wstring& exampleFilename, + boost::shared_ptr* converter, + cpdoccore::odf_writer::odp_conversion_context** context); + + void SetUp() override; + void TearDown() override; + +private: + std::wstring mExampleFilename; + std::wstring mFrom; + std::wstring mTemp; + std::wstring mTempUnpackedOox; + + boost::shared_ptr* mConverter; + cpdoccore::odf_writer::odp_conversion_context** mContext; +}; + +class OOX2ODP_AnimationTest : public testing::Test +{ +public: + const cpdoccore::odf_writer::anim_par* GetTimingRoot(); + const cpdoccore::odf_writer::anim_seq* GetMainSequence(); + const cpdoccore::odf_writer::anim_par* GetMainSequenceParByIndex(size_t index); + const cpdoccore::odf_writer::anim_par* GetInnerPar(const cpdoccore::odf_writer::anim_par* par); + const cpdoccore::odf_writer::anim_par* GetInnermostPar(const cpdoccore::odf_writer::anim_par* par); + + const cpdoccore::odf_writer::odp_conversion_context* GetContext() const; + + template + const T* GetAnimationBehaviourByIndex(const cpdoccore::odf_writer::anim_par* par, size_t index) + { + using namespace cpdoccore::odf_writer; + + if (!par) + return nullptr; + + if (par->content_.size() <= index) + return nullptr; + + T* behaviour = dynamic_cast(par->content_[index].get()); + if (!behaviour) + return nullptr; + + return behaviour; + } + +protected: + const Oox2Odf::Converter* mConverter; + cpdoccore::odf_writer::odp_conversion_context* mContext; }; \ No newline at end of file diff --git a/OdfFile/Test/entrance.cpp b/OdfFile/Test/entrance.cpp index b4dd9f3e15..2cd06fbed1 100644 --- a/OdfFile/Test/entrance.cpp +++ b/OdfFile/Test/entrance.cpp @@ -642,48 +642,22 @@ TEST_F(ODP2OOX_EntranceAnimationTest, entrance_transition_filter_checker_iris_wi ////////////////////////////////////////////////////////////////////////// // OOX2ODP -boost::shared_ptr OOX2ODP_EntranceAnimationTestEnvironment::mConverter; -cpdoccore::odf_writer::odp_conversion_context* OOX2ODP_EntranceAnimationTestEnvironment::mContext; +boost::shared_ptr OOX2ODP_EntranceAnimationEnvironment::mConverter; +cpdoccore::odf_writer::odp_conversion_context* OOX2ODP_EntranceAnimationEnvironment::mContext; -void OOX2ODP_EntranceAnimationTestEnvironment::SetUp() +OOX2ODP_EntranceAnimationEnvironment::OOX2ODP_EntranceAnimationEnvironment() + : OOX2ODP_AnimationEnvironment(L"entrance.pptx", &mConverter, &mContext) { - sExampleFilename = L"entrance.pptx"; - - std::wstring rootDir = NSFile::GetProcessDirectory() + CH_DIR(".."); - std::wstring sExampleFilesDirectory = rootDir + CH_DIR("ExampleFiles"); - - sFrom = sExampleFilesDirectory + FILE_SEPARATOR_STR + sExampleFilename; - sTemp = rootDir + CH_DIR("OOX2ODP_EntranceAnimationTestEnvironment_tmp"); - sTempUnpackedOox = sTemp + CH_DIR("pptx_unpacked"); - - NSDirectory::CreateDirectory(sTemp); - NSDirectory::CreateDirectory(sTempUnpackedOox); - - COfficeUtils oCOfficeUtils(NULL); - if (S_OK == oCOfficeUtils.ExtractToDirectory(sFrom, sTempUnpackedOox, NULL, 0)) - { - mConverter = boost::make_shared(sTempUnpackedOox, _T("presentation"), L"", false, sTemp); - - try - { - mConverter->convert(); - mContext = dynamic_cast(mConverter->get_ooxConverter()->odf_context()); - } - catch (...) - { - _CP_LOG << L"[ error ]: Failed to setup OOX2ODP_EntranceAnimationTestEnvironment"; - } - } } -void OOX2ODP_EntranceAnimationTestEnvironment::TearDown() +cpdoccore::odf_writer::odp_conversion_context* OOX2ODP_EntranceAnimationEnvironment::GetContext() { - NSDirectory::DeleteDirectory(sTemp); + return mContext; } void OOX2ODP_EntranceAnimationTest::SetUp() { - mContext = OOX2ODP_EntranceAnimationTestEnvironment::GetContext(); + mContext = OOX2ODP_EntranceAnimationEnvironment::GetContext(); } TEST_F(OOX2ODP_EntranceAnimationTest, timing_root_node_type) diff --git a/OdfFile/Test/entrance.h b/OdfFile/Test/entrance.h index 452d4f95d2..335b704f2d 100644 --- a/OdfFile/Test/entrance.h +++ b/OdfFile/Test/entrance.h @@ -76,131 +76,22 @@ public: ////////////////////////////////////////////////////////////////////////// // OOX2ODP -class OOX2ODP_EntranceAnimationTestEnvironment : public ::testing::Environment +class OOX2ODP_EntranceAnimationEnvironment : public OOX2ODP_AnimationEnvironment { - ~OOX2ODP_EntranceAnimationTestEnvironment() override {} - - void SetUp() override; - void TearDown() override; +public: + OOX2ODP_EntranceAnimationEnvironment(); public: - static cpdoccore::odf_writer::odp_conversion_context* GetContext() - { - return mContext; - } + static cpdoccore::odf_writer::odp_conversion_context* GetContext(); private: - std::wstring sExampleFilename; - std::wstring sFrom; - std::wstring sTemp; - std::wstring sTempUnpackedOox; - static boost::shared_ptr mConverter; static cpdoccore::odf_writer::odp_conversion_context* mContext; }; -class OOX2ODP_EntranceAnimationTest : public testing::Test +class OOX2ODP_EntranceAnimationTest : public OOX2ODP_AnimationTest { public: void SetUp() override; void TearDown() override {} - - const cpdoccore::odf_writer::anim_par* GetTimingRoot() - { - using namespace cpdoccore::odf_writer; - draw_page* page = dynamic_cast(mContext->current_slide().page_elm_.get()); - if (!page) - return nullptr; - - anim_par* timing_root = dynamic_cast(page->animation_.get()); - if (!timing_root) - return nullptr; - - return timing_root; - } - - const cpdoccore::odf_writer::anim_seq* GetMainSequence() - { - using namespace cpdoccore::odf_writer; - const anim_par* timing_root = GetTimingRoot(); - if (!timing_root) - return nullptr; - - if (timing_root->anim_seq_array_.size() < 1) - return nullptr; - - const anim_seq* main_sequence = dynamic_cast(timing_root->anim_seq_array_.at(0).get()); - if (!main_sequence) - return nullptr; - - return main_sequence; - } - - const cpdoccore::odf_writer::anim_par* GetMainSequenceParByIndex(size_t index) - { - using namespace cpdoccore::odf_writer; - const anim_seq* main_sequence = GetMainSequence(); - - if (index >= main_sequence->anim_par_array_.size()) - return nullptr; - - const anim_par* par = dynamic_cast(main_sequence->anim_par_array_[index].get()); - if (!par) - return nullptr; - - return par; - } - - const cpdoccore::odf_writer::anim_par* GetInnerPar(const cpdoccore::odf_writer::anim_par* par) - { - using namespace cpdoccore::odf_writer; - - if (!par) - return nullptr; - - const anim_par* inner_par = dynamic_cast(par->anim_par_.get()); - - if (!inner_par) - return nullptr; - - return inner_par; - } - - const cpdoccore::odf_writer::anim_par* GetInnermostPar(const cpdoccore::odf_writer::anim_par* par) - { - using namespace cpdoccore::odf_writer; - - if (!par) - return nullptr; - - const anim_par* innermost = GetInnerPar(par); - - while (innermost->anim_par_) - { - innermost = dynamic_cast(innermost->anim_par_.get()); - if (!innermost) - return nullptr; - } - - return innermost; - } - - template - const T* GetAnimationBehaviourByIndex(const cpdoccore::odf_writer::anim_par* par, size_t index) - { - using namespace cpdoccore::odf_writer; - - if (!par) - return nullptr; - - T* behaviour = dynamic_cast(par->content_[index].get()); - if (!behaviour) - return nullptr; - - return behaviour; - } - -public: - const Oox2Odf::Converter* mConverter; - cpdoccore::odf_writer::odp_conversion_context* mContext; }; \ No newline at end of file diff --git a/OdfFile/Test/test.cpp b/OdfFile/Test/test.cpp index 3a6442fdd3..2714ca3717 100644 --- a/OdfFile/Test/test.cpp +++ b/OdfFile/Test/test.cpp @@ -44,7 +44,8 @@ int main(int argc, char* argv[]) ::testing::AddGlobalTestEnvironment(new ODP2OOX_AnimationMotionEnvironment); ::testing::AddGlobalTestEnvironment(new ODP2OOX_AnimationAudioEnvironment); - ::testing::AddGlobalTestEnvironment(new OOX2ODP_EntranceAnimationTestEnvironment); + ::testing::AddGlobalTestEnvironment(new OOX2ODP_EntranceAnimationEnvironment); + ::testing::AddGlobalTestEnvironment(new OOX2ODP_AudioAnimationEnvironment); return RUN_ALL_TESTS(); } \ No newline at end of file diff --git a/OdfFile/Test/test_odf.pro b/OdfFile/Test/test_odf.pro index a81cf0570f..1c8cad1591 100644 --- a/OdfFile/Test/test_odf.pro +++ b/OdfFile/Test/test_odf.pro @@ -53,13 +53,15 @@ core_linux { HEADERS += \ common.h\ entrance.h\ - motion.h + motion.h\ + audio.h SOURCES += \ test.cpp\ common.cpp\ entrance.cpp\ motion.cpp\ + audio.cpp\ $$CORE_ROOT_DIR/Common/OfficeFileFormatChecker2.cpp SOURCES -= $$CORE_GTEST_PATH/src/gtest_main.cc