void MainWindow::on_actionExecute_triggered() { Q_ASSERT(testCaseView); TestSuite *const ts = static_cast<TestSuite *>(sourceModel()->root()); const TestItem::ExecutionStage stage = compileOnly->isChecked() ? TestItem::CompileOnly : TestItem::CompileAndRun; m_userTC->setLanguage(isXSLT20->isChecked() ? QXmlQuery::XSLT20 : QXmlQuery::XQuery10); if(m_currentTC) { const TestResult::List rlist(m_currentTC->execute(stage, ts)); Q_ASSERT(rlist.count() == 1); const TestResult *const result = rlist.first(); Q_ASSERT(result); testResultView->displayTestResult(result); } else { const QModelIndexList indexes = testSuiteView->selectionModel()->selectedIndexes(); for (int i = 0; i < indexes.count(); ++i) { const QModelIndex source(sourceIndex(indexes.at(i))); TestItem *const ti = static_cast<TestItem *>(source.internalPointer()); if(!ti) return; /* ti is a TestGroup. It now executes its children, changed(TreeItem *) signals is * emitted which the view receives, and thus updates. */ ti->execute(stage, ts); } } }