mirror of
https://github.com/JulianGro/overte.git
synced 2025-04-15 08:57:19 +02:00
Merge branch 'commandLineParametersForAutotester' of github.com:NissimHadar/hifi into commandLineParametersForAutotester
This commit is contained in:
commit
6d8eee6b32
9 changed files with 116 additions and 33 deletions
|
@ -996,13 +996,22 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo
|
|||
setProperty(hifi::properties::STEAM, (steamClient && steamClient->isRunning()));
|
||||
setProperty(hifi::properties::CRASHED, _previousSessionCrashed);
|
||||
{
|
||||
const QString TEST_SCRIPT = "--testScript";
|
||||
const QString TEST_SCRIPT { "--testScript" };
|
||||
const QString TEST_SNAPSHOT_LOCATION { "--testSnapshotLocation" };
|
||||
|
||||
const QStringList args = arguments();
|
||||
for (int i = 0; i < args.size() - 1; ++i) {
|
||||
if (args.at(i) == TEST_SCRIPT) {
|
||||
QString testScriptPath = args.at(i + 1);
|
||||
if (QFileInfo(testScriptPath).exists()) {
|
||||
setProperty(hifi::properties::TEST, QUrl::fromLocalFile(testScriptPath));
|
||||
}
|
||||
} else if (args.at(i) == TEST_SNAPSHOT_LOCATION) {
|
||||
// Set test snapshot location only if it is a writeable directory
|
||||
QString pathname(args.at(i + 1));
|
||||
QFileInfo fileInfo(pathname);
|
||||
if (fileInfo.isDir() && fileInfo.isWritable()) {
|
||||
testSnapshotLocation = pathname;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -7331,7 +7340,7 @@ void Application::loadAvatarBrowser() const {
|
|||
void Application::takeSnapshot(bool notify, bool includeAnimated, float aspectRatio, const QString& filename) {
|
||||
postLambdaEvent([notify, includeAnimated, aspectRatio, filename, this] {
|
||||
// Get a screenshot and save it
|
||||
QString path = Snapshot::saveSnapshot(getActiveDisplayPlugin()->getScreenshot(aspectRatio), filename);
|
||||
QString path = Snapshot::saveSnapshot(getActiveDisplayPlugin()->getScreenshot(aspectRatio), filename, QString());
|
||||
// If we're not doing an animated snapshot as well...
|
||||
if (!includeAnimated) {
|
||||
// Tell the dependency manager that the capture of the still snapshot has taken place.
|
||||
|
@ -7345,7 +7354,7 @@ void Application::takeSnapshot(bool notify, bool includeAnimated, float aspectRa
|
|||
|
||||
void Application::takeSecondaryCameraSnapshot(const QString& filename) {
|
||||
postLambdaEvent([filename, this] {
|
||||
QString snapshotPath = Snapshot::saveSnapshot(getActiveDisplayPlugin()->getSecondaryCameraScreenshot(), filename);
|
||||
QString snapshotPath = Snapshot::saveSnapshot(getActiveDisplayPlugin()->getSecondaryCameraScreenshot(), filename, testSnapshotLocation);
|
||||
emit DependencyManager::get<WindowScriptingInterface>()->stillSnapshotTaken(snapshotPath, true);
|
||||
});
|
||||
}
|
||||
|
|
|
@ -721,5 +721,7 @@ private:
|
|||
|
||||
std::atomic<bool> _pendingIdleEvent { true };
|
||||
std::atomic<bool> _pendingRenderEvent { true };
|
||||
|
||||
QString testSnapshotLocation { QString() };
|
||||
};
|
||||
#endif // hifi_Application_h
|
||||
|
|
|
@ -89,10 +89,10 @@ QString Snapshot::saveSnapshot(QImage image, const QString& filename) {
|
|||
|
||||
QTemporaryFile* Snapshot::saveTempSnapshot(QImage image) {
|
||||
// return whatever we get back from saved file for snapshot
|
||||
return static_cast<QTemporaryFile*>(savedFileForSnapshot(image, true));
|
||||
return static_cast<QTemporaryFile*>(savedFileForSnapshot(image, true, QString(), QString()));
|
||||
}
|
||||
|
||||
QFile* Snapshot::savedFileForSnapshot(QImage & shot, bool isTemporary, const QString& userSelectedFilename) {
|
||||
QFile* Snapshot::savedFileForSnapshot(QImage & shot, bool isTemporary, const QString& userSelectedFilename, QString userSelectedPathname) {
|
||||
|
||||
// adding URL to snapshot
|
||||
QUrl currentURL = DependencyManager::get<AddressManager>()->currentPublicAddress();
|
||||
|
@ -117,7 +117,13 @@ QFile* Snapshot::savedFileForSnapshot(QImage & shot, bool isTemporary, const QSt
|
|||
const int IMAGE_QUALITY = 100;
|
||||
|
||||
if (!isTemporary) {
|
||||
QString snapshotFullPath = snapshotsLocation.get();
|
||||
// If user has requested specific path then use it, else use the application value
|
||||
QString snapshotFullPath;
|
||||
if (!userSelectedPathname.isNull()) {
|
||||
snapshotFullPath = userSelectedPathname;
|
||||
} else {
|
||||
snapshotFullPath = snapshotsLocation.get();
|
||||
}
|
||||
|
||||
if (snapshotFullPath.isEmpty()) {
|
||||
snapshotFullPath = OffscreenUi::getExistingDirectory(nullptr, "Choose Snapshots Directory", QStandardPaths::writableLocation(QStandardPaths::DesktopLocation));
|
||||
|
|
|
@ -37,7 +37,7 @@ class Snapshot : public QObject, public Dependency {
|
|||
Q_OBJECT
|
||||
SINGLETON_DEPENDENCY
|
||||
public:
|
||||
static QString saveSnapshot(QImage image, const QString& filename);
|
||||
static QString saveSnapshot(QImage image, const QString& filename, const QString& pathname);
|
||||
static QTemporaryFile* saveTempSnapshot(QImage image);
|
||||
static SnapshotMetaData* parseSnapshotData(QString snapshotPath);
|
||||
|
||||
|
@ -51,7 +51,7 @@ public slots:
|
|||
Q_INVOKABLE QString getSnapshotsLocation();
|
||||
Q_INVOKABLE void setSnapshotsLocation(const QString& location);
|
||||
private:
|
||||
static QFile* savedFileForSnapshot(QImage & image, bool isTemporary, const QString& userSelectedFilename = QString());
|
||||
static QFile* savedFileForSnapshot(QImage & image, bool isTemporary, const QString& userSelectedFilename, QString userSelectedPathname);
|
||||
};
|
||||
|
||||
#endif // hifi_Snapshot_h
|
||||
|
|
|
@ -498,6 +498,12 @@ ExtractedText Test::getTestScriptLines(QString testFileName) {
|
|||
const QString regexAssertGPU(ws + functionAssertGPU + ws + "\\(" + ws + quotedString + ".*");
|
||||
const QRegularExpression lineAssertGPU = QRegularExpression(regexAssertGPU);
|
||||
|
||||
// Assert the correct amount of memory
|
||||
const QString functionAssertPhysicalMemoryGB(ws + "autoTester" + ws + "\\." + ws + "assertPhysicalMemoryGB");
|
||||
const QString regexAssertPhysicalMemoryGB(ws + functionAssertPhysicalMemoryGB + ws + "\\(" + ws + quotedString + ".*");
|
||||
const QRegularExpression lineAssertPhysicalMemoryGB = QRegularExpression(regexAssertPhysicalMemoryGB);
|
||||
|
||||
|
||||
// Each step is either of the following forms:
|
||||
// autoTester.addStepSnapshot("Take snapshot"...
|
||||
// autoTester.addStep("Clean up after test"...
|
||||
|
@ -514,18 +520,27 @@ ExtractedText Test::getTestScriptLines(QString testFileName) {
|
|||
if (lineContainingTitle.match(line).hasMatch()) {
|
||||
QStringList tokens = line.split('"');
|
||||
relevantTextFromTest.title = tokens[1];
|
||||
|
||||
} else if (lineAssertPlatform.match(line).hasMatch()) {
|
||||
QStringList platforms = line.split('"');
|
||||
relevantTextFromTest.platform = platforms[1];
|
||||
|
||||
} else if (lineAssertDisplay.match(line).hasMatch()) {
|
||||
QStringList displays = line.split('"');
|
||||
relevantTextFromTest.display = displays[1];
|
||||
|
||||
} else if (lineAssertCPU.match(line).hasMatch()) {
|
||||
QStringList cpus = line.split('"');
|
||||
relevantTextFromTest.cpu = cpus[1];
|
||||
|
||||
} else if (lineAssertGPU.match(line).hasMatch()) {
|
||||
QStringList gpus = line.split('"');
|
||||
relevantTextFromTest.gpu = gpus[1];
|
||||
|
||||
} else if (lineAssertPhysicalMemoryGB.match(line).hasMatch()) {
|
||||
QStringList physicalMemoryGB = line.split('"');
|
||||
relevantTextFromTest.physicalMemoryGB = physicalMemoryGB[1];
|
||||
|
||||
} else if (lineStepSnapshot.match(line).hasMatch()) {
|
||||
QStringList tokens = line.split('"');
|
||||
QString nameOfStep = tokens[1];
|
||||
|
@ -534,6 +549,7 @@ ExtractedText Test::getTestScriptLines(QString testFileName) {
|
|||
step->text = nameOfStep;
|
||||
step->takeSnapshot = true;
|
||||
relevantTextFromTest.stepList.emplace_back(step);
|
||||
|
||||
} else if (lineStep.match(line).hasMatch()) {
|
||||
QStringList tokens = line.split('"');
|
||||
QString nameOfStep = tokens[1];
|
||||
|
@ -630,62 +646,74 @@ void Test::createMDFile(QString testDirectory) {
|
|||
|
||||
// Platform
|
||||
QStringList platforms = testScriptLines.platform.split(" ");;
|
||||
stream << "## Platforms\n";
|
||||
stream << "Run the test on each of the following platforms\n";
|
||||
for (int i = 0; i < platforms.size(); ++i) {
|
||||
// Note that the platforms parameter may include extra spaces, these appear as empty strings in the list
|
||||
if (platforms[i] != QString()) {
|
||||
stream << " - " << platforms[i] << "\n";
|
||||
if (platforms.size() > 0) {
|
||||
stream << "## Platforms\n";
|
||||
stream << "Run the test on each of the following platforms\n";
|
||||
for (int i = 0; i < platforms.size(); ++i) {
|
||||
// Note that the platforms parameter may include extra spaces, these appear as empty strings in the list
|
||||
if (platforms[i] != QString()) {
|
||||
stream << " - " << platforms[i] << "\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Display
|
||||
QStringList displays = testScriptLines.display.split(" ");
|
||||
stream << "## Displays\n";
|
||||
stream << "Run the test on each of the following displays\n";
|
||||
for (int i = 0; i < displays.size(); ++i) {
|
||||
// Note that the displays parameter may include extra spaces, these appear as empty strings in the list
|
||||
if (displays[i] != QString()) {
|
||||
stream << " - " << displays[i] << "\n";
|
||||
if (displays.size()) {
|
||||
stream << "## Displays\n";
|
||||
stream << "Run the test on each of the following displays\n";
|
||||
for (int i = 0; i < displays.size(); ++i) {
|
||||
// Note that the displays parameter may include extra spaces, these appear as empty strings in the list
|
||||
if (displays[i] != QString()) {
|
||||
stream << " - " << displays[i] << "\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// CPU
|
||||
QStringList cpus = testScriptLines.cpu.split(" ");
|
||||
stream << "## Processors\n";
|
||||
stream << "Run the test on each of the following processors\n";
|
||||
for (int i = 0; i < cpus.size(); ++i) {
|
||||
// Note that the cpus parameter may include extra spaces, these appear as empty strings in the list
|
||||
if (cpus[i] != QString()) {
|
||||
stream << " - " << cpus[i] << "\n";
|
||||
if (cpus.size() > 0) {
|
||||
stream << "## Processors\n";
|
||||
stream << "Run the test on each of the following processors\n";
|
||||
for (int i = 0; i < cpus.size(); ++i) {
|
||||
// Note that the cpus parameter may include extra spaces, these appear as empty strings in the list
|
||||
if (cpus[i] != QString()) {
|
||||
stream << " - " << cpus[i] << "\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// GPU
|
||||
QStringList gpus = testScriptLines.gpu.split(" ");
|
||||
stream << "## Graphics Cards\n";
|
||||
stream << "Run the test on graphics cards from each of the following vendors\n";
|
||||
for (int i = 0; i < gpus.size(); ++i) {
|
||||
// Note that the gpus parameter may include extra spaces, these appear as empty strings in the list
|
||||
if (gpus[i] != QString()) {
|
||||
stream << " - " << gpus[i] << "\n";
|
||||
if (gpus.size() > 0) {
|
||||
stream << "## Graphics Cards\n";
|
||||
stream << "Run the test on graphics cards from each of the following vendors\n";
|
||||
for (int i = 0; i < gpus.size(); ++i) {
|
||||
// Note that the gpus parameter may include extra spaces, these appear as empty strings in the list
|
||||
if (gpus[i] != QString()) {
|
||||
stream << " - " << gpus[i] << "\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stream << "## Steps\n";
|
||||
stream << "Press space bar to advance step by step\n\n";
|
||||
|
||||
// Note that snapshots of step n are taken in step n+1
|
||||
// (this implies that if the LAST step requests a snapshot then this will not work - caveat emptor)
|
||||
int snapShotIndex { 0 };
|
||||
for (size_t i = 0; i < testScriptLines.stepList.size(); ++i) {
|
||||
stream << "### Step " << QString::number(i + 1) << "\n";
|
||||
stream << "- " << testScriptLines.stepList[i]->text << "\n";
|
||||
if (testScriptLines.stepList[i]->takeSnapshot) {
|
||||
if ((i + 1 < testScriptLines.stepList.size()) && testScriptLines.stepList[i + 1]->takeSnapshot) {
|
||||
stream << "- .rightJustified(5, '0') << ".png)\n";
|
||||
++snapShotIndex;
|
||||
}
|
||||
}
|
||||
|
||||
mdFile.close();
|
||||
|
||||
messageBox.information(0, "Success", "Test MD file " + mdFilename + " has been created");
|
||||
}
|
||||
|
||||
void Test::createTestsOutline() {
|
||||
|
|
|
@ -34,6 +34,8 @@ public:
|
|||
QString display;
|
||||
QString cpu;
|
||||
QString gpu;
|
||||
QString physicalMemoryGB;
|
||||
|
||||
StepList stepList;
|
||||
};
|
||||
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
//
|
||||
#include "AutoTester.h"
|
||||
|
||||
#include <QMessageBox>
|
||||
|
||||
AutoTester::AutoTester(QWidget *parent) : QMainWindow(parent) {
|
||||
ui.setupUi(this);
|
||||
ui.checkBoxInteractiveMode->setChecked(true);
|
||||
|
@ -18,6 +20,9 @@ AutoTester::AutoTester(QWidget *parent) : QMainWindow(parent) {
|
|||
test = new Test();
|
||||
|
||||
signalMapper = new QSignalMapper();
|
||||
|
||||
connect(ui.actionClose, &QAction::triggered, this, &AutoTester::on_closeButton_clicked);
|
||||
connect(ui.actionAbout, &QAction::triggered, this, &AutoTester::about);
|
||||
}
|
||||
|
||||
void AutoTester::on_evaluateTestsButton_clicked() {
|
||||
|
@ -100,3 +105,8 @@ void AutoTester::saveImage(int index) {
|
|||
ui.progressBar->setValue(_numberOfImagesDownloaded);
|
||||
}
|
||||
}
|
||||
|
||||
void AutoTester::about() {
|
||||
QMessageBox messageBox;
|
||||
messageBox.information(0, "About", QString("Built ") + __DATE__ + " : " + __TIME__);
|
||||
}
|
|
@ -37,6 +37,8 @@ private slots:
|
|||
|
||||
void saveImage(int index);
|
||||
|
||||
void about();
|
||||
|
||||
private:
|
||||
Ui::AutoTesterClass ui;
|
||||
Test* test;
|
||||
|
|
|
@ -157,6 +157,20 @@
|
|||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<widget class="QMenu" name="menuFile">
|
||||
<property name="title">
|
||||
<string>File</string>
|
||||
</property>
|
||||
<addaction name="actionClose"/>
|
||||
</widget>
|
||||
<widget class="QMenu" name="menuHelp">
|
||||
<property name="title">
|
||||
<string>Help</string>
|
||||
</property>
|
||||
<addaction name="actionAbout"/>
|
||||
</widget>
|
||||
<addaction name="menuFile"/>
|
||||
<addaction name="menuHelp"/>
|
||||
</widget>
|
||||
<widget class="QToolBar" name="mainToolBar">
|
||||
<attribute name="toolBarArea">
|
||||
|
@ -167,6 +181,16 @@
|
|||
</attribute>
|
||||
</widget>
|
||||
<widget class="QStatusBar" name="statusBar"/>
|
||||
<action name="actionClose">
|
||||
<property name="text">
|
||||
<string>Close</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionAbout">
|
||||
<property name="text">
|
||||
<string>About</string>
|
||||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
<layoutdefault spacing="6" margin="11"/>
|
||||
<resources/>
|
||||
|
|
Loading…
Reference in a new issue