UI snapshot tool (#28356)

* UI: snapshot testing tool

* gitignore

* cleanup

* remove prime type arg

* rename

* add script

* commit snapshots

* use base setup

* updates

* always run base

* echo

* use imagemagick

* test_snapshots

* fixes

* update

* set language

* revert

* default arg

* just remove translations

* formatting

* output arg

* improved help

* fix assets

* change dir back before saving snapshot

* unused imports

* simpler

* add default to description

* use uiUpdate signal
old-commit-hash: 15ac8c041b
beeps
Cameron Clough 2 years ago committed by GitHub
parent 31c1e66a01
commit 11889dd024
  1. 1
      selfdrive/ui/SConscript
  2. 1
      selfdrive/ui/tests/.gitignore
  3. 66
      selfdrive/ui/tests/ui_snapshot.cc
  4. 5
      selfdrive/ui/tests/ui_snapshot.h

@ -64,6 +64,7 @@ qt_env.Program("_ui", qt_src + [asset_obj], LIBS=qt_libs)
if GetOption('test'):
qt_src.remove("main.cc") # replaced by test_runner
qt_env.Program('tests/test_translations', [asset_obj, 'tests/test_runner.cc', 'tests/test_translations.cc'] + qt_src, LIBS=qt_libs)
qt_env.Program('tests/ui_snapshot', [asset_obj, "tests/ui_snapshot.cc"] + qt_src, LIBS=qt_libs)
# build translation files

@ -2,3 +2,4 @@ test
playsound
test_sound
test_translations
ui_snapshot

@ -0,0 +1,66 @@
#include "selfdrive/ui/tests/ui_snapshot.h"
#include <QApplication>
#include <QCommandLineParser>
#include <QDir>
#include <QImage>
#include <QPainter>
#include "selfdrive/ui/qt/home.h"
#include "selfdrive/ui/qt/util.h"
#include "selfdrive/ui/qt/window.h"
#include "selfdrive/ui/ui.h"
void saveWidgetAsImage(QWidget *widget, const QString &fileName) {
QImage image(widget->size(), QImage::Format_ARGB32);
QPainter painter(&image);
widget->render(&painter);
image.save(fileName);
}
int main(int argc, char *argv[]) {
initApp(argc, argv);
QApplication app(argc, argv);
QCommandLineParser parser;
parser.setApplicationDescription("Take a snapshot of the UI.");
parser.addHelpOption();
parser.addOption(QCommandLineOption(QStringList() << "o"
<< "output",
"Output image file path. The file's suffix is used to "
"determine the format. Supports PNG and JPEG formats. "
"Defaults to \"snapshot.png\".",
"file", "snapshot.png"));
parser.process(app);
const QString output = parser.value("output");
if (output.isEmpty()) {
qCritical() << "No output file specified";
return 1;
}
auto current = QDir::current();
// change working directory to find assets
if (!QDir::setCurrent(QCoreApplication::applicationDirPath() + QDir::separator() + "..")) {
qCritical() << "Failed to set current directory";
return 1;
}
MainWindow w;
w.setFixedSize(2160, 1080);
w.show();
app.installEventFilter(&w);
// restore working directory
QDir::setCurrent(current.absolutePath());
// wait for the UI to update
QObject::connect(uiState(), &UIState::uiUpdate, [&](const UIState &s) {
saveWidgetAsImage(&w, output);
app.quit();
});
return app.exec();
}

@ -0,0 +1,5 @@
#pragma once
#include <QWidget>
void saveWidgetAsImage(QWidget *widget, const QString &fileName);
Loading…
Cancel
Save