Commit f3f8cdeb authored by Vincent Pinon's avatar Vincent Pinon
Browse files

Make RTTR optional

parent 2bf8cb46
Pipeline #48927 failed with stage
in 9 minutes and 25 seconds
......@@ -22,6 +22,7 @@ endif()
# To be switched on when releasing.
option(RELEASE_BUILD "Remove Git revision from program version" ON)
option(BUILD_TESTING "Build tests" ON)
option(CRASH_AUTO_TEST "Auto-generate testcases upon some crashes (uses RTTR library, needed for fuzzing)" OFF)
option(BUILD_FUZZING "Build fuzzing target" OFF)
# Minimum versions of main dependencies.
......@@ -109,10 +110,15 @@ if(NOT RELEASE_BUILD AND EXISTS ${CMAKE_SOURCE_DIR}/.git)
endif()
endif()
find_package(RTTR 0.9.6 QUIET)
if(NOT RTTR_FOUND)
message(STATUS "RTTR not found on system, will download source and build it")
include(rttr.CMakeLists.txt)
if(CRASH_AUTO_TEST)
find_package(RTTR 0.9.6 QUIET)
if(NOT RTTR_FOUND)
message(STATUS "RTTR not found on system, will download source and build it")
include(rttr.CMakeLists.txt)
endif()
if(BUILD_FUZZING)
set(ECM_ENABLE_SANITIZERS fuzzer;address)
endif()
endif()
feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES)
......@@ -121,10 +127,6 @@ set(FFMPEG_SUFFIX "" CACHE STRING "FFmpeg custom suffix")
configure_file(config-kdenlive.h.cmake config-kdenlive.h @ONLY)
set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
if(BUILD_FUZZING)
set(ECM_ENABLE_SANITIZERS fuzzer;address)
endif()
# Sources
add_subdirectory(src)
add_subdirectory(renderer)
......
......@@ -70,6 +70,9 @@ if(Qt5WebEngineWidgets_FOUND)
endif()
## top_SRCS
file(GLOB top_SRCS "*.cpp")
if(NOT CRASH_AUTO_TEST)
list(REMOVE_ITEM top_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/logger.cpp)
endif()
# string(REGEX REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/lib/[^;]+;?" "" top_SRCS "${top_SRCS}")
list(REMOVE_ITEM top_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp)
list(APPEND kdenlive_SRCS ${top_SRCS})
......@@ -146,12 +149,6 @@ target_link_libraries(kdenliveLib
${CMAKE_DL_LIBS}
${CMAKE_THREAD_LIBS_INIT}
kiss_fft)
if(TARGET RTTR::Core)
target_link_libraries(kdenliveLib RTTR::Core)
else()
target_link_libraries(kdenliveLib RTTR::Core_Lib)
endif()
if(BUILD_COVERAGE)
target_link_libraries(kdenliveLib gcov)
endif()
......@@ -159,6 +156,15 @@ set_property(TARGET kdenliveLib PROPERTY CXX_STANDARD 14)
add_definitions(${qt5gui_definitions} -DQT_STRICT_ITERATORS -DQT_NO_CAST_FROM_BYTEARRAY)
# Optional deps
if(CRASH_AUTO_TEST)
target_compile_definitions(kdenliveLib PRIVATE CRASH_AUTO_TEST)
if(TARGET RTTR::Core)
target_link_libraries(kdenliveLib RTTR::Core)
else()
target_link_libraries(kdenliveLib RTTR::Core_Lib)
endif()
endif()
if(DRMINGW_FOUND)
target_compile_definitions(kdenlive PRIVATE -DUSE_DRMINGW)
target_include_directories(kdenlive SYSTEM PRIVATE ${DRMINGW_INCLUDE_DIR})
......
......@@ -53,7 +53,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <kimagecache.h>
#include "kdenlive_debug.h"
#include "logger.hpp"
#include <KLocalizedString>
#include <KMessageBox>
#include <QApplication>
......@@ -63,6 +62,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <QFile>
#include <memory>
#ifdef CRASH_AUTO_TEST
#include "logger.hpp"
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-parameter"
#pragma GCC diagnostic ignored "-Wsign-conversion"
......@@ -77,6 +78,8 @@ RTTR_REGISTRATION
using namespace rttr;
registration::class_<ProjectClip>("ProjectClip");
}
#endif
ProjectClip::ProjectClip(const QString &id, const QIcon &thumb, const std::shared_ptr<ProjectItemModel> &model, std::shared_ptr<Mlt::Producer> producer)
: AbstractProjectItem(AbstractProjectItem::ClipItem, id, model)
......
......@@ -22,6 +22,7 @@
#include <QColor>
#ifdef CRASH_AUTO_TEST
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-parameter"
#pragma GCC diagnostic ignored "-Wsign-conversion"
......@@ -48,6 +49,7 @@ RTTR_REGISTRATION
);
// clang-format on
}
#endif
QDebug operator<<(QDebug qd, const ItemInfo &info)
{
......
......@@ -19,7 +19,9 @@
***************************************************************************/
#include "core.h"
#ifdef CRASH_AUTO_TEST
#include "logger.hpp"
#endif
#include "dialogs/splash.hpp"
#include <config-kdenlive.h>
......@@ -74,7 +76,9 @@ int main(int argc, char *argv[])
// Force QDomDocument to use a deterministic XML attribute order
qSetGlobalQHashSeed(0);
#ifdef CRASH_AUTO_TEST
Logger::init();
#endif
QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
//TODO: is it a good option ?
QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts, true);
......
......@@ -24,7 +24,11 @@
#include "clipsnapmodel.hpp"
#include "core.h"
#include "effects/effectstack/model/effectstackmodel.hpp"
#ifdef CRASH_AUTO_TEST
#include "logger.hpp"
#else
#define TRACE_CONSTR(...)
#endif
#include "macros.hpp"
#include "timelinemodel.hpp"
#include "trackmodel.hpp"
......
......@@ -31,7 +31,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "doc/kdenlivedoc.h"
#include "effects/effectstack/model/effectstackmodel.hpp"
#include "groupsmodel.hpp"
#include "logger.hpp"
#include "timelineitemmodel.hpp"
#include "trackmodel.hpp"
#include "transitions/transitionsrepository.hpp"
......@@ -44,6 +43,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <klocalizedstring.h>
#include <unordered_map>
#ifdef CRASH_AUTO_TEST
#include "logger.hpp"
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-parameter"
#pragma GCC diagnostic ignored "-Wsign-conversion"
......@@ -53,11 +54,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <rttr/registration>
#pragma GCC diagnostic pop
QStringList waitingBinIds;
QMap<QString, QString> mappedIds;
QMap<int, int> tracksMap;
QSemaphore semaphore(1);
RTTR_REGISTRATION
{
using namespace rttr;
......@@ -65,6 +61,15 @@ RTTR_REGISTRATION
.method("requestClipCut", select_overload<bool(std::shared_ptr<TimelineItemModel>, int, int)>(&TimelineFunctions::requestClipCut))(
parameter_names("timeline", "clipId", "position"));
}
#else
#define TRACE_STATIC(...)
#define TRACE_RES(...)
#endif
QStringList waitingBinIds;
QMap<QString, QString> mappedIds;
QMap<int, int> tracksMap;
QSemaphore semaphore(1);
bool TimelineFunctions::cloneClip(const std::shared_ptr<TimelineItemModel> &timeline, int clipId, int &newId, PlaylistState::ClipState state, Fun &undo,
Fun &redo)
......
......@@ -41,6 +41,7 @@
#include <mlt++/MltTractor.h>
#include <mlt++/MltTransition.h>
#ifdef CRASH_AUTO_TEST
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-parameter"
#pragma GCC diagnostic ignored "-Wsign-conversion"
......@@ -54,6 +55,7 @@ RTTR_REGISTRATION
using namespace rttr;
registration::class_<TimelineItemModel>("TimelineItemModel");
}
#endif
TimelineItemModel::TimelineItemModel(Mlt::Profile *profile, std::weak_ptr<DocUndoStack> undo_stack)
: TimelineModel(profile, std::move(undo_stack))
......
......@@ -33,7 +33,6 @@
#include "jobs/jobmanager.h"
#include "groupsmodel.hpp"
#include "kdenlivesettings.h"
#include "logger.hpp"
#include "snapmodel.hpp"
#include "timelinefunctions.hpp"
#include "trackmodel.hpp"
......@@ -48,9 +47,12 @@
#include <mlt++/MltTractor.h>
#include <mlt++/MltTransition.h>
#include <queue>
#include <set>
#include "macros.hpp"
#ifdef CRASH_AUTO_TEST
#include "logger.hpp"
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-parameter"
#pragma GCC diagnostic ignored "-Wsign-conversion"
......@@ -101,6 +103,12 @@ RTTR_REGISTRATION
// parameter_names("transitionId", "trackId", "position", "length", "transProps", "id", "logUndo"))
.method("requestClipTimeWarp", select_overload<bool(int, double,bool,bool)>(&TimelineModel::requestClipTimeWarp))(parameter_names("clipId", "speed","pitchCompensate","changeDuration"));
}
#else
#define TRACE_CONSTR(...)
#define TRACE_STATIC(...)
#define TRACE_RES(...)
#define TRACE(...)
#endif
int TimelineModel::next_id = 0;
int TimelineModel::seekDuration = 30000;
......
......@@ -26,7 +26,11 @@
#include "effects/effectstack/model/effectstackmodel.hpp"
#include "transitions/transitionsrepository.hpp"
#include "kdenlivesettings.h"
#ifdef CRASH_AUTO_TEST
#include "logger.hpp"
#else
#define TRACE_CONSTR(...)
#endif
#include "snapmodel.hpp"
#include "jobs/jobmanager.h"
#include "timelinemodel.hpp"
......@@ -2119,7 +2123,7 @@ void TrackModel::syncronizeMixes(bool finalMove)
{
QList<int>toDelete;
for( const auto& n : m_sameCompositions ) {
std::cout << "Key:[" << n.first << "] Value:[" << n.second << "]\n";
//qDebug() << "Key:[" << n.first << "] Value:[" << n.second << "]\n";
int secondClipId = n.first;
int firstClip = m_mixList.key(secondClipId, -1);
Q_ASSERT(firstClip > -1);
......
<RCC>
<qresource prefix="images">
<file>stylesheet-branch-closed.png</file>
<file>stylesheet-branch-open.png</file>
</qresource>
</RCC>
......@@ -20,7 +20,9 @@
***************************************************************************/
#include "undohelper.hpp"
#ifdef CRASH_AUTO_TEST
#include "logger.hpp"
#endif
#include <QDebug>
#include <utility>
FunctionalUndoCommand::FunctionalUndoCommand(Fun undo, Fun redo, const QString &text, QUndoCommand *parent)
......@@ -35,7 +37,9 @@ FunctionalUndoCommand::FunctionalUndoCommand(Fun undo, Fun redo, const QString &
void FunctionalUndoCommand::undo()
{
// qDebug() << "UNDOING " <<text();
#ifdef CRASH_AUTO_TEST
Logger::log_undo(true);
#endif
m_undone = true;
bool res = m_undo();
Q_ASSERT(res);
......@@ -45,7 +49,9 @@ void FunctionalUndoCommand::redo()
{
if (m_undone) {
// qDebug() << "REDOING " <<text();
#ifdef CRASH_AUTO_TEST
Logger::log_undo(false);
#endif
bool res = m_redo();
Q_ASSERT(res);
}
......
......@@ -7,7 +7,6 @@
#define private public
#define protected public
#include "core.h"
#include "logger.hpp"
#include "src/effects/effectsrepository.hpp"
#include "src/mltcontroller/clipcontroller.h"
/* This file is intended to remain empty.
......@@ -20,7 +19,6 @@ int main(int argc, char *argv[])
std::unique_ptr<Mlt::Repository> repo(Mlt::Factory::init(nullptr));
qputenv("MLT_TESTS", QByteArray("1"));
Core::build(false);
Logger::init();
// if Kdenlive is not installed, ensure we have one keyframable effect
EffectsRepository::get()->reloadCustom(QFileInfo("../data/effects/audiobalance.xml").absoluteFilePath());
......
......@@ -4,7 +4,6 @@ Mlt::Profile profile_composition;
QString aCompo;
TEST_CASE("Basic creation/deletion of a composition", "[CompositionModel]")
{
Logger::clear();
// Check whether repo works
QVector<QPair<QString, QString>> transitions = TransitionsRepository::get()->getNames();
REQUIRE(!transitions.isEmpty());
......@@ -45,12 +44,10 @@ TEST_CASE("Basic creation/deletion of a composition", "[CompositionModel]")
REQUIRE(timeline->getCompositionsCount() == 1);
REQUIRE(timeline->requestItemDeletion(id1));
REQUIRE(timeline->getCompositionsCount() == 0);
Logger::print_trace();
}
TEST_CASE("Composition manipulation", "[CompositionModel]")
{
Logger::clear();
std::shared_ptr<DocUndoStack> undoStack = std::make_shared<DocUndoStack>(nullptr);
std::shared_ptr<MarkerListModel> guideModel(new MarkerListModel(undoStack));
std::shared_ptr<TimelineItemModel> timeline = TimelineItemModel::construct(&profile_composition, guideModel, undoStack);
......@@ -412,5 +409,4 @@ TEST_CASE("Composition manipulation", "[CompositionModel]")
REQUIRE(timeline->requestItemResize(cid1, length - 2, true) > -1);
REQUIRE(timeline->requestItemResize(cid2, length, false) > -1);
}
Logger::print_trace();
}
......@@ -20,7 +20,6 @@ Mlt::Profile profile_effects;
QString anEffect;
TEST_CASE("Effects stack", "[Effects]")
{
Logger::clear();
// Create timeline
auto binModel = pCore->projectItemModel();
std::shared_ptr<DocUndoStack> undoStack = std::make_shared<DocUndoStack>(nullptr);
......@@ -112,5 +111,4 @@ TEST_CASE("Effects stack", "[Effects]")
REQUIRE(clipModel->rowCount() == 0);
REQUIRE(splitModel->rowCount() == 1);
}
Logger::print_trace();
}
......@@ -26,7 +26,6 @@ Mlt::Profile profile_group;
TEST_CASE("Functional test of the group hierarchy", "[GroupsModel]")
{
Logger::clear();
auto binModel = pCore->projectItemModel();
binModel->clean();
std::shared_ptr<DocUndoStack> undoStack = std::make_shared<DocUndoStack>(nullptr);
......@@ -229,7 +228,6 @@ TEST_CASE("Functional test of the group hierarchy", "[GroupsModel]")
REQUIRE(groups.getRootId(n) == 3);
}
}
Logger::print_trace();
}
TEST_CASE("Interface test of the group hierarchy", "[GroupsModel]")
......
......@@ -28,7 +28,6 @@ bool check_anim_identity(const std::shared_ptr<KeyframeModel> &m)
TEST_CASE("Keyframe model", "[KeyframeModel]")
{
Logger::clear();
std::shared_ptr<DocUndoStack> undoStack = std::make_shared<DocUndoStack>(nullptr);
std::shared_ptr<MarkerListModel> guideModel = std::make_shared<MarkerListModel>(undoStack);
// Here we do some trickery to enable testing.
......@@ -252,5 +251,4 @@ TEST_CASE("Keyframe model", "[KeyframeModel]")
state1(6.1);
}
pCore->m_projectManager = nullptr;
Logger::print_trace();
}
......@@ -18,7 +18,6 @@ Mlt::Profile profile_mix;
TEST_CASE("Simple Mix", "[SameTrackMix]")
{
Logger::clear();
// Create timeline
auto binModel = pCore->projectItemModel();
std::shared_ptr<DocUndoStack> undoStack = std::make_shared<DocUndoStack>(nullptr);
......@@ -435,5 +434,4 @@ TEST_CASE("Simple Mix", "[SameTrackMix]")
binModel->clean();
pCore->m_projectManager = nullptr;
Logger::print_trace();
}
......@@ -6,7 +6,6 @@ Mlt::Profile profile_model;
TEST_CASE("Basic creation/deletion of a track", "[TrackModel]")
{
Logger::clear();
auto binModel = pCore->projectItemModel();
std::shared_ptr<DocUndoStack> undoStack = std::make_shared<DocUndoStack>(nullptr);
std::shared_ptr<MarkerListModel> guideModel = std::make_shared<MarkerListModel>(undoStack);
......@@ -114,12 +113,10 @@ TEST_CASE("Basic creation/deletion of a track", "[TrackModel]")
}
binModel->clean();
pCore->m_projectManager = nullptr;
Logger::print_trace();
}
TEST_CASE("Basic creation/deletion of a clip", "[ClipModel]")
{
Logger::clear();
auto binModel = pCore->projectItemModel();
std::shared_ptr<DocUndoStack> undoStack = std::make_shared<DocUndoStack>(nullptr);
......@@ -163,12 +160,10 @@ TEST_CASE("Basic creation/deletion of a clip", "[ClipModel]")
REQUIRE(timeline->getClipsCount() == 0);
binModel->clean();
pCore->m_projectManager = nullptr;
Logger::print_trace();
}
TEST_CASE("Clip manipulation", "[ClipModel]")
{
Logger::clear();
auto binModel = pCore->projectItemModel();
binModel->clean();
std::shared_ptr<DocUndoStack> undoStack = std::make_shared<DocUndoStack>(nullptr);
......@@ -1045,12 +1040,10 @@ TEST_CASE("Clip manipulation", "[ClipModel]")
}
binModel->clean();
pCore->m_projectManager = nullptr;
Logger::print_trace();
}
TEST_CASE("Check id unicity", "[ClipModel]")
{
Logger::clear();
auto binModel = pCore->projectItemModel();
binModel->clean();
std::shared_ptr<DocUndoStack> undoStack = std::make_shared<DocUndoStack>(nullptr);
......@@ -1102,12 +1095,10 @@ TEST_CASE("Check id unicity", "[ClipModel]")
REQUIRE(all_ids.size() != track_ids.size());
binModel->clean();
pCore->m_projectManager = nullptr;
Logger::print_trace();
}
TEST_CASE("Undo and Redo", "[ClipModel]")
{
Logger::clear();
auto binModel = pCore->projectItemModel();
binModel->clean();
std::shared_ptr<DocUndoStack> undoStack = std::make_shared<DocUndoStack>(nullptr);
......@@ -1718,12 +1709,10 @@ TEST_CASE("Undo and Redo", "[ClipModel]")
}
binModel->clean();
pCore->m_projectManager = nullptr;
Logger::print_trace();
}
TEST_CASE("Snapping", "[Snapping]")
{
Logger::clear();
auto binModel = pCore->projectItemModel();
binModel->clean();
std::shared_ptr<DocUndoStack> undoStack = std::make_shared<DocUndoStack>(nullptr);
......@@ -1836,12 +1825,10 @@ TEST_CASE("Snapping", "[Snapping]")
}
binModel->clean();
pCore->m_projectManager = nullptr;
Logger::print_trace();
}
TEST_CASE("Operations under locked tracks", "[Locked]")
{
Logger::clear();
QString aCompo;
// Look for a compo
......@@ -2069,5 +2056,4 @@ TEST_CASE("Operations under locked tracks", "[Locked]")
binModel->clean();
pCore->m_projectManager = nullptr;
Logger::print_trace();
}
......@@ -3,7 +3,6 @@
Mlt::Profile reg_profile;
TEST_CASE("Regression")
{
Logger::clear();
auto binModel = pCore->projectItemModel();
binModel->clean();
std::shared_ptr<DocUndoStack> undoStack = std::make_shared<DocUndoStack>(nullptr);
......@@ -64,12 +63,10 @@ TEST_CASE("Regression")
REQUIRE(timeline->getTrackById(1)->checkConsistency());
binModel->clean();
pCore->m_projectManager = nullptr;
Logger::print_trace();
}
TEST_CASE("Regression2")
{
Logger::clear();
auto binModel = pCore->projectItemModel();
binModel->clean();
std::shared_ptr<DocUndoStack> undoStack = std::make_shared<DocUndoStack>(nullptr);
......@@ -218,7 +215,6 @@ TEST_CASE("Regression2")
undoStack->redo();
binModel->clean();
pCore->m_projectManager = nullptr;
Logger::print_trace();
}
/*
......@@ -420,7 +416,6 @@ TEST_CASE("Regression 4")
TEST_CASE("FuzzBug1")
{
Logger::clear();
auto binModel = pCore->projectItemModel();
std::shared_ptr<DocUndoStack> undoStack = std::make_shared<DocUndoStack>(nullptr);
std::shared_ptr<MarkerListModel> guideModel = std::make_shared<MarkerListModel>(undoStack);
......@@ -556,12 +551,10 @@ TEST_CASE("FuzzBug1")
REQUIRE(timeline_0->checkConsistency());
}
pCore->m_projectManager = nullptr;
Logger::print_trace();
}
TEST_CASE("FuzzBug2")
{
Logger::clear();
auto binModel = pCore->projectItemModel();
binModel->clean();
std::shared_ptr<DocUndoStack> undoStack = std::make_shared<DocUndoStack>(nullptr);
......@@ -640,7 +633,6 @@ TEST_CASE("FuzzBug2")
REQUIRE(timeline_0->checkConsistency());
}
pCore->m_projectManager = nullptr;
Logger::print_trace();
}
TEST_CASE("FuzzBug3")
......
#include "test_utils.hpp"
#include "logger.hpp"
QString createProducer(Mlt::Profile &prof, std::string color, std::shared_ptr<ProjectItemModel> binModel, int length, bool limited)
{
Logger::log_create_producer("test_producer", {color, binModel, length, limited});
std::shared_ptr<Mlt::Producer> producer = std::make_shared<Mlt::Producer>(prof, "color", color.c_str());
producer->set("length", length);
producer->set("out", length - 1);
......@@ -24,7 +22,6 @@ QString createProducer(Mlt::Profile &prof, std::string color, std::shared_ptr<Pr
QString createProducerWithSound(Mlt::Profile &prof, std::shared_ptr<ProjectItemModel> binModel, int length)
{
Logger::log_create_producer("test_producer_sound", {binModel});
// std::shared_ptr<Mlt::Producer> producer = std::make_shared<Mlt::Producer>(prof,
// QFileInfo("../tests/small.mkv").absoluteFilePath().toStdString().c_str());
......
......@@ -8,7 +8,6 @@
#include <random>
#include <string>
#include "logger.hpp"
#pragma GCC diagnostic ignored "-Wnon-virtual-dtor"
#pragma GCC diagnostic push
#include "fakeit.hpp"
......
......@@ -5,7 +5,6 @@ Mlt::Profile profile_timewarp;
TEST_CASE("Test of timewarping", "[Timewarp]")
{
Logger::clear();
auto binModel = pCore->projectItemModel();
binModel->clean();
std::shared_ptr<DocUndoStack> undoStack = std::make_shared<DocUndoStack>(nullptr);
......@@ -107,5 +106,4 @@ TEST_CASE("Test of timewarping", "[Timewarp]")
}
binModel->clean();
pCore->m_projectManager = nullptr;
Logger::print_trace();
}
......@@ -6,7 +6,6 @@ Mlt::Profile profile_trimming;
TEST_CASE("Advanced trimming operations", "[Trimming]")
{
Logger::clear();
auto binModel = pCore->projectItemModel();
binModel->clean();
std::shared_ptr<DocUndoStack> undoStack = std::make_shared<DocUndoStack>(nullptr);
......@@ -531,12 +530,10 @@ TEST_CASE("Advanced trimming operations", "[Trimming]")
binModel->clean();
pCore->m_projectManager = nullptr;
Logger::print_trace();
}
TEST_CASE("Insert/delete", "[Trimming2]")
{
Logger::clear();
auto binModel = pCore->projectItemModel();
binModel->clean();
std::shared_ptr<DocUndoStack> undoStack = std::make_shared<DocUndoStack>(nullptr);
......@@ -694,12 +691,10 @@ TEST_CASE("Insert/delete", "[Trimming2]")
binModel->clean();
pCore->m_projectManager = nullptr;
Logger::print_trace();
}
TEST_CASE("Copy/paste", "[CP]")
{
Logger::clear();
auto binModel = pCore->projectItemModel();
binModel->clean();
std::shared_ptr<DocUndoStack> undoStack = std::make_shared<DocUndoStack>(nullptr);
......@@ -1073,5 +1068,4 @@ TEST_CASE("Copy/paste", "[CP]")
}