You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
cmake/Tests/CMakeGUI/EnvironmentDialogTest.cxx

143 lines
4.2 KiB

/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
file Copyright.txt or https://cmake.org/licensing for details. */
#include "EnvironmentDialogTest.h"
#include <QDialogButtonBox>
#include <QMessageBox>
#include <QObject>
#include <QPushButton>
#include <QString>
#include <QtTest>
#include "CatchShow.h"
#include "EnvironmentDialog.h"
EnvironmentDialogTest::EnvironmentDialogTest(QObject* parent)
: QObject(parent)
{
}
void EnvironmentDialogTest::environmentDialog()
{
CatchShow catcher;
catcher.setCallback<QMessageBox>([](QMessageBox* box) { box->accept(); });
QProcessEnvironment env;
env.insert("DELETED_VARIABLE_1", "Deleted variable 1");
env.insert("DELETED_VARIABLE_2", "Deleted variable 2");
env.insert("KEPT_VARIABLE", "Kept variable");
env.insert("CHANGED_VARIABLE", "This will be changed");
EnvironmentDialog dialog(env);
{
QStringList expected{
"CHANGED_VARIABLE=This will be changed",
"DELETED_VARIABLE_1=Deleted variable 1",
"DELETED_VARIABLE_2=Deleted variable 2",
"KEPT_VARIABLE=Kept variable",
};
QCOMPARE(dialog.environment().toStringList(), expected);
QCOMPARE(catcher.count(), 0);
}
{
CatchShow catcher2;
bool done = false;
catcher2.setCallback<QDialog>([&catcher, &done](QDialog* box) {
if (done) {
return;
}
done = true;
auto name = box->findChild<QLineEdit*>("name");
auto value = box->findChild<QLineEdit*>("value");
auto acceptReject = box->findChild<QDialogButtonBox*>();
name->setText("");
value->setText("");
acceptReject->button(QDialogButtonBox::Ok)->click();
QCOMPARE(catcher.count(), 1);
name->setText("KEPT_VARIABLE");
value->setText("");
acceptReject->button(QDialogButtonBox::Ok)->click();
QCOMPARE(catcher.count(), 2);
name->setText("ADDED_VARIABLE");
value->setText("Added variable");
acceptReject->button(QDialogButtonBox::Ok)->click();
QCOMPARE(catcher.count(), 2);
});
dialog.AddEntry->click();
QStringList expected{
"ADDED_VARIABLE=Added variable",
"CHANGED_VARIABLE=This will be changed",
"DELETED_VARIABLE_1=Deleted variable 1",
"DELETED_VARIABLE_2=Deleted variable 2",
"KEPT_VARIABLE=Kept variable",
};
QCOMPARE(dialog.environment().toStringList(), expected);
QCOMPARE(catcher.count(), 2);
QVERIFY(done);
}
{
CatchShow catcher2;
bool done = false;
catcher2.setCallback<QDialog>([&done](QDialog* box) {
if (done) {
return;
}
done = true;
auto name = box->findChild<QLineEdit*>("name");
auto value = box->findChild<QLineEdit*>("value");
auto acceptReject = box->findChild<QDialogButtonBox*>();
name->setText("DISCARDED_VARIABLE");
value->setText("Discarded variable");
acceptReject->button(QDialogButtonBox::Cancel)->click();
});
dialog.AddEntry->click();
QStringList expected{
"ADDED_VARIABLE=Added variable",
"CHANGED_VARIABLE=This will be changed",
"DELETED_VARIABLE_1=Deleted variable 1",
"DELETED_VARIABLE_2=Deleted variable 2",
"KEPT_VARIABLE=Kept variable",
};
QCOMPARE(dialog.environment().toStringList(), expected);
QCOMPARE(catcher.count(), 2);
QVERIFY(done);
}
{
auto* model = dialog.Environment->model();
auto* selectionModel = dialog.Environment->selectionModel();
for (int i = 0; i < model->rowCount(); ++i) {
auto index1 = model->index(i, 0);
auto index2 = model->buddy(index1);
auto name = model->data(index1, Qt::DisplayRole).toString();
if (name == "DELETED_VARIABLE_1" || name == "DELETED_VARIABLE_2") {
selectionModel->select(index1, QItemSelectionModel::Select);
selectionModel->select(index2, QItemSelectionModel::Select);
} else if (name == "CHANGED_VARIABLE") {
model->setData(index2, "Changed variable", Qt::DisplayRole);
}
}
dialog.RemoveEntry->click();
QStringList expected{
"ADDED_VARIABLE=Added variable",
"CHANGED_VARIABLE=Changed variable",
"KEPT_VARIABLE=Kept variable",
};
QCOMPARE(dialog.environment().toStringList(), expected);
}
}
QTEST_MAIN(EnvironmentDialogTest)