1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
|
#include "persalys/MorrisAnalysis.hxx"
#include "persalys/ScreeningAnalysisWizard.hxx"
#include "persalys/SymbolicPhysicalModel.hxx"
#include <openturns/OTtypes.hxx>
#include <openturns/Normal.hxx>
#include <QtTest/QtTest>
using namespace OT;
namespace PERSALYS
{
class TestScreeningAnalysisWizard : public QObject
{
Q_OBJECT
public:
TestScreeningAnalysisWizard()
{
// create the model
Input Q("Q", 10200, Normal(10200, 100), "Primary energy");
Input E("E", 3000, Normal(3000, 15), "Produced electric energy");
Input C("C", 4000, Normal(4000, 60), "Valued thermal energy");
Output Ep("Ep", "Primary energy savings");
InputCollection inputCollection(3);
inputCollection[0] = Q;
inputCollection[1] = E;
inputCollection[2] = C;
OutputCollection outputCollection(1, Ep);
Description formula(1, "1-(Q/((E/((1-0.05)*0.54))+(C/0.8)))");
model = SymbolicPhysicalModel("model", inputCollection, outputCollection, formula);
}
private:
SymbolicPhysicalModel model;
private slots:
void TestOutputsSelection()
{
// create the analysis
MorrisAnalysis analysis("analysis", model);
// create the wizard
ScreeningAnalysisWizard wizard(analysis);
wizard.show();
// checks
// - first page
OutputsSelectionGroupBox * outputsSelectionGroupBox = wizard.introPage_->findChild<OutputsSelectionGroupBox*>();
TemporaryLabel * errorMessageLabel = wizard.introPage_->findChild<TemporaryLabel*>();
TitledComboBox * comboBox = outputsSelectionGroupBox->findChild<TitledComboBox*>();
ListWidgetWithCheckBox * listWidget = outputsSelectionGroupBox->findChild<ListWidgetWithCheckBox*>();
QVERIFY2(wizard.validateCurrentPage(), "Page must be valid");
QVERIFY2(errorMessageLabel->text().isEmpty(), "Label must be empty");
QTest::mouseClick(comboBox, Qt::LeftButton); // open listwidget
QTest::mouseClick(listWidget->viewport(), Qt::LeftButton); // deselect all
QVERIFY2(!wizard.validateCurrentPage(), "Page must be not valid");
QVERIFY2(!errorMessageLabel->text().isEmpty(), "Label must be not empty");
wizard.next();
QVERIFY2(wizard.currentId() == 0, "Current page ID must be 0"); // can not go to next page
QTest::mouseClick(listWidget->viewport(), Qt::LeftButton); // select all
QVERIFY2(wizard.validateCurrentPage(), "Page must be valid");
QVERIFY2(errorMessageLabel->text().isEmpty(), "Label must be empty");
}
void TestMorrisPage()
{
// create the analysis
MorrisAnalysis analysis("analysis", model);
Interval initBounds(analysis.getBounds());
// create the wizard
ScreeningAnalysisWizard wizard(analysis);
wizard.show();
// checks
// - second page
wizard.next();
TemporaryLabel * errorMessageLabel = wizard.morrisPage_->findChild<TemporaryLabel*>();
MorrisTableModel * tableModel = wizard.morrisPage_->findChild<MorrisTableModel*>();
QVERIFY2(wizard.currentId() == 1, "Current page ID must be 1");
QVERIFY2(wizard.validateCurrentPage(), "Page must be valid");
QVERIFY2(errorMessageLabel->text().isEmpty(), "Label must be empty");
QVERIFY2(tableModel->data(tableModel->index(0, 0)).toString() == "Q", "wrong name");
QVERIFY2(tableModel->data(tableModel->index(0, 1)).toString() == "Primary energy", "wrong description");
QVERIFY2(tableModel->data(tableModel->index(0, 2)).toString() == QString::number(initBounds.getLowerBound()[0], 'g', 12), "wrong lower bound value");
QVERIFY2(tableModel->data(tableModel->index(0, 3)).toString() == QString::number(initBounds.getUpperBound()[0], 'g', 12), "wrong upper bound value");
tableModel->setData(tableModel->index(0, 2), 10500, Qt::EditRole);
QVERIFY2(!wizard.validateCurrentPage(), "Page must be not valid");
QVERIFY2(!errorMessageLabel->text().isEmpty(), "Label must be not empty");
tableModel->setData(tableModel->index(0, 2), initBounds.getLowerBound()[0], Qt::EditRole);
QVERIFY2(wizard.validateCurrentPage(), "Page must be valid");
QVERIFY2(errorMessageLabel->text().isEmpty(), "Label must be empty");
bool analysisEquality = wizard.getAnalysis().getParameters() == analysis.getParameters();
QVERIFY2(analysisEquality, "The two MorrisAnalysis must be equal");
}
void TestMorris()
{
// create the analysis
MorrisAnalysis analysis("analysis", model);
// create the wizard
ScreeningAnalysisWizard wizard(analysis);
wizard.show();
// checks
// - first page
QVERIFY2(wizard.currentId() == 0, "Current page ID must be 0");
// - second page
wizard.next();
QVERIFY2(wizard.currentId() == 1, "Current page ID must be 1");
// - third page
wizard.next();
QVERIFY2(wizard.currentId() == 2, "Current page ID must be 2");
QVERIFY2(wizard.nextId() == -1, "Next page ID must be -1");
bool analysisEquality = wizard.getAnalysis().getParameters() == analysis.getParameters();
QVERIFY2(analysisEquality, "The two MorrisAnalysis must be equal");
}
};
}
QTEST_MAIN(PERSALYS::TestScreeningAnalysisWizard)
#include "t_ScreeningAnalysisWizard_std.moc"
|