mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-07-11 05:24:10 +08:00
Test pptx to odp animation audio, refactor tests project
This commit is contained in:
BIN
OdfFile/Test/ExampleFiles/audio.pptx
Normal file
BIN
OdfFile/Test/ExampleFiles/audio.pptx
Normal file
Binary file not shown.
@ -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<cpdoccore::odf_reader::odf_document> ODP2OOX_AnimationAudioEnvironment::sInputOdf;
|
||||
boost::shared_ptr<cpdoccore::oox::pptx_conversion_context> ODP2OOX_AnimationAudioEnvironment::sConverionContext;
|
||||
|
||||
@ -124,3 +133,36 @@ TEST_F(ODP2OOX_AnimationAudioTest, name)
|
||||
|
||||
EXPECT_EQ(audio->Name.value(), nameExp);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
boost::shared_ptr<Oox2Odf::Converter> 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<anim_audio>(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);
|
||||
}
|
||||
@ -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<Oox2Odf::Converter> mConverter;
|
||||
static cpdoccore::odf_writer::odp_conversion_context* mContext;
|
||||
};
|
||||
|
||||
class OOX2ODP_AudioAnimationTest : public OOX2ODP_AnimationTest
|
||||
{
|
||||
public:
|
||||
void SetUp() override;
|
||||
void TearDown() override {}
|
||||
};
|
||||
@ -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<cpdoccore::odf_reader::odf_document> 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<Oox2Odf::Converter>* 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<Oox2Odf::Converter>(mTempUnpackedOox, _T("presentation"), L"", false, mTemp);
|
||||
|
||||
try
|
||||
{
|
||||
(*mConverter)->convert();
|
||||
*mContext = dynamic_cast<cpdoccore::odf_writer::odp_conversion_context*>((*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<draw_page*>(mContext->current_slide().page_elm_.get());
|
||||
if (!page)
|
||||
return nullptr;
|
||||
|
||||
anim_par* timing_root = dynamic_cast<anim_par*>(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<anim_seq*>(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<anim_par*>(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<anim_par*>(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<anim_par*>(innermost->anim_par_.get());
|
||||
if (!innermost)
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return innermost;
|
||||
}
|
||||
|
||||
const cpdoccore::odf_writer::odp_conversion_context* OOX2ODP_AnimationTest::GetContext() const
|
||||
{
|
||||
return mContext;
|
||||
}
|
||||
|
||||
@ -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 <boost/shared_ptr.hpp>
|
||||
#include <string>
|
||||
|
||||
@ -61,4 +66,58 @@ private:
|
||||
|
||||
boost::shared_ptr<cpdoccore::odf_reader::odf_document>* mDocument;
|
||||
boost::shared_ptr<cpdoccore::oox::pptx_conversion_context>* mContext;
|
||||
};
|
||||
|
||||
class OOX2ODP_AnimationEnvironment : public testing::Environment
|
||||
{
|
||||
public:
|
||||
OOX2ODP_AnimationEnvironment(const std::wstring& exampleFilename,
|
||||
boost::shared_ptr<Oox2Odf::Converter>* 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<Oox2Odf::Converter>* 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<typename T>
|
||||
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<T*>(par->content_[index].get());
|
||||
if (!behaviour)
|
||||
return nullptr;
|
||||
|
||||
return behaviour;
|
||||
}
|
||||
|
||||
protected:
|
||||
const Oox2Odf::Converter* mConverter;
|
||||
cpdoccore::odf_writer::odp_conversion_context* mContext;
|
||||
};
|
||||
@ -642,48 +642,22 @@ TEST_F(ODP2OOX_EntranceAnimationTest, entrance_transition_filter_checker_iris_wi
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// OOX2ODP
|
||||
|
||||
boost::shared_ptr<Oox2Odf::Converter> OOX2ODP_EntranceAnimationTestEnvironment::mConverter;
|
||||
cpdoccore::odf_writer::odp_conversion_context* OOX2ODP_EntranceAnimationTestEnvironment::mContext;
|
||||
boost::shared_ptr<Oox2Odf::Converter> 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<Oox2Odf::Converter>(sTempUnpackedOox, _T("presentation"), L"", false, sTemp);
|
||||
|
||||
try
|
||||
{
|
||||
mConverter->convert();
|
||||
mContext = dynamic_cast<cpdoccore::odf_writer::odp_conversion_context*>(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)
|
||||
|
||||
@ -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<Oox2Odf::Converter> 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<draw_page*>(mContext->current_slide().page_elm_.get());
|
||||
if (!page)
|
||||
return nullptr;
|
||||
|
||||
anim_par* timing_root = dynamic_cast<anim_par*>(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<anim_seq*>(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<anim_par*>(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<anim_par*>(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<anim_par*>(innermost->anim_par_.get());
|
||||
if (!innermost)
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return innermost;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
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<T*>(par->content_[index].get());
|
||||
if (!behaviour)
|
||||
return nullptr;
|
||||
|
||||
return behaviour;
|
||||
}
|
||||
|
||||
public:
|
||||
const Oox2Odf::Converter* mConverter;
|
||||
cpdoccore::odf_writer::odp_conversion_context* mContext;
|
||||
};
|
||||
@ -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();
|
||||
}
|
||||
@ -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
|
||||
|
||||
Reference in New Issue
Block a user