void KisStrokeStrategyUndoCommandBasedTest::testCancelledStroke() { QString result; KUndo2CommandSP initCommand(new TestingUndoCommand(kundo2_noi18n("init"), result)); KUndo2CommandSP dabCommand(new TestingUndoCommand(kundo2_noi18n("dab"), result)); KUndo2CommandSP finishCommand(new TestingUndoCommand(kundo2_noi18n("finish"), result)); const KoColorSpace *cs = KoColorSpaceRegistry::instance()->rgb8(); KisImageSP image = new KisImage(0, 300, 300, cs, "test", true); KisStrokeStrategy *strategy = new KisStrokeStrategyUndoCommandBased(kundo2_noi18n("test"), false, image->postExecutionUndoAdapter(), initCommand, finishCommand); KisStrokeId id = image->startStroke(strategy); image->addJob(id, new KisStrokeStrategyUndoCommandBased::Data(dabCommand)); QTest::qSleep(500); image->cancelStroke(id); image->waitForDone(); SCOMPARE(result.trimmed(), "init_redo dab_redo dab_undo init_undo"); }
void KisStrokeStrategyUndoCommandBasedTest::stressTestSequentialCommands() { const KoColorSpace *cs = KoColorSpaceRegistry::instance()->rgb8(); KisImageSP image = new KisImage(0, 300, 300, cs, "test", true); QAtomicInt counter; QAtomicInt hadConcurrency; KisStrokeStrategy *strategy = new KisStrokeStrategyUndoCommandBased(kundo2_noi18n("test"), false, 0); KisStrokeId id = image->startStroke(strategy); for(int i = 0; i < NUM_JOBS; i++) { bool isSequential = i % SEQUENTIAL_NTH == 0; KisStrokeJobData::Sequentiality seq = isSequential ? KisStrokeJobData::SEQUENTIAL : KisStrokeJobData::CONCURRENT; KUndo2CommandSP command(new ExclusivenessCheckerCommand(counter, hadConcurrency, isSequential)); image->addJob(id, new KisStrokeStrategyUndoCommandBased::Data(command, seq)); } image->endStroke(id); image->waitForDone(); QVERIFY(!counter); qDebug() << "Concurrency observed:" << hadConcurrency << "/" << NUM_CHECKS * NUM_JOBS; }