From ca64874f1a9f6453a0bd5a0f6b8ae61d49900314 Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Mon, 12 Apr 2010 14:11:32 +1000 Subject: Support recording visual snapshot tests. --- tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp | 13 +++++++++++-- tools/qml/main.cpp | 4 ++++ tools/qml/qdeclarativetester.cpp | 11 +++++++++-- tools/qml/qmlruntime.h | 3 ++- 4 files changed, 26 insertions(+), 5 deletions(-) diff --git a/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp b/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp index 05c2ebd..718e3a6 100644 --- a/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp +++ b/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp @@ -47,7 +47,7 @@ #include #include -enum Mode { Record, RecordNoVisuals, Play, TestVisuals, RemoveVisuals, UpdateVisuals, UpdatePlatformVisuals, Test }; +enum Mode { Record, RecordNoVisuals, RecordSnapshot, Play, TestVisuals, RemoveVisuals, UpdateVisuals, UpdatePlatformVisuals, Test }; static QString testdir; class tst_qmlvisual : public QObject @@ -133,7 +133,7 @@ void tst_qmlvisual::visual() QStringList arguments; arguments << "-script" << testdata << "-scriptopts" << "play,testimages,testerror,exitoncomplete,exitonfailure" - << file << "-graphicssystem" << "raster"; + << file; #ifdef Q_WS_QWS arguments << "-qws"; #endif @@ -246,6 +246,11 @@ void action(Mode mode, const QString &file) << "-scriptopts" << "record,saveonexit" << file; break; + case RecordSnapshot: + arguments << "-script" << testdata + << "-scriptopts" << "record,testimages,snapshot,saveonexit" + << file; + break; case Play: arguments << "-script" << testdata << "-scriptopts" << "play,testimages,testerror,exitoncomplete" @@ -283,6 +288,7 @@ void usage() fprintf(stderr, " -listtests : list all the tests seen by tst_qmlvisual, and then exit immediately\n"); fprintf(stderr, " -record file : record new test data for file\n"); fprintf(stderr, " -recordnovisuals file : record new test data for file, but ignore visuals\n"); + fprintf(stderr, " -recordsnapshot file : record new snapshot for file (like record but only records a single frame and then exits)\n"); fprintf(stderr, " -play file : playback test data for file, printing errors\n"); fprintf(stderr, " -testvisuals file : playback test data for file, without errors\n"); fprintf(stderr, " -updatevisuals file : playback test data for file, accept new visuals for file\n"); @@ -340,6 +346,9 @@ int main(int argc, char **argv) } else if (arg == "-recordnovisuals" && (ii + 1) < argc) { mode = RecordNoVisuals; file = argv[++ii]; + } else if (arg == "-recordsnapshot" && (ii + 1) < argc) { + mode = RecordSnapshot; + file = argv[++ii]; } else if (arg == "-testvisuals" && (ii + 1) < argc) { mode = TestVisuals; file = argv[++ii]; diff --git a/tools/qml/main.cpp b/tools/qml/main.cpp index 01b3912..341908e 100644 --- a/tools/qml/main.cpp +++ b/tools/qml/main.cpp @@ -121,6 +121,8 @@ void scriptOptsUsage() qWarning(" play ..................................... playback an existing script"); qWarning(" testimages ............................... record images or compare images on playback"); qWarning(" testerror ................................ test 'error' property of root item on playback"); + qWarning(" snapshot ................................. file being recorded is static,"); + qWarning(" only one frame will be recorded or tested"); qWarning(" exitoncomplete ........................... cleanly exit the viewer on script completion"); qWarning(" exitonfailure ............................ immediately exit the viewer on script failure"); qWarning(" saveonexit ............................... save recording on viewer exit"); @@ -309,6 +311,8 @@ int main(int argc, char ** argv) scriptOptions |= QDeclarativeViewer::ExitOnFailure; } else if (option == QLatin1String("saveonexit")) { scriptOptions |= QDeclarativeViewer::SaveOnExit; + } else if (option == QLatin1String("snapshot")) { + scriptOptions |= QDeclarativeViewer::Snapshot; } else { scriptOptsUsage(); } diff --git a/tools/qml/qdeclarativetester.cpp b/tools/qml/qdeclarativetester.cpp index 6245124..cf537ee 100644 --- a/tools/qml/qdeclarativetester.cpp +++ b/tools/qml/qdeclarativetester.cpp @@ -240,6 +240,8 @@ void QDeclarativeTester::save() void QDeclarativeTester::updateCurrentTime(int msec) { QDeclarativeItemPrivate::setConsistentTime(msec); + if (!testscript && msec > 16 && options & QDeclarativeViewer::Snapshot) + return; QImage img(m_view->width(), m_view->height(), QImage::Format_RGB32); @@ -249,11 +251,13 @@ void QDeclarativeTester::updateCurrentTime(int msec) m_view->render(&p); } + bool snapshot = msec == 16 && options & QDeclarativeViewer::Snapshot; + FrameEvent fe; fe.msec = msec; if (msec == 0 || !(options & QDeclarativeViewer::TestImages)) { // Skip first frame, skip if not doing images - } else if (0 == (m_savedFrameEvents.count() % 60)) { + } else if (0 == (m_savedFrameEvents.count() % 60) || snapshot) { fe.image = img; } else { QCryptographicHash hash(QCryptographicHash::Md5); @@ -366,8 +370,11 @@ void QDeclarativeTester::updateCurrentTime(int msec) filterEvents = true; - if (testscript && testscript->count() <= testscriptidx) + if (testscript && testscript->count() <= testscriptidx) { + //if (msec == 16) //for a snapshot, leave it up long enough to see + // (void)::sleep(1); complete(); + } } void QDeclarativeTester::registerTypes() diff --git a/tools/qml/qmlruntime.h b/tools/qml/qmlruntime.h index 6f1e425..b934a70 100644 --- a/tools/qml/qmlruntime.h +++ b/tools/qml/qmlruntime.h @@ -81,7 +81,8 @@ public: TestErrorProperty = 0x00000008, SaveOnExit = 0x00000010, ExitOnComplete = 0x00000020, - ExitOnFailure = 0x00000040 + ExitOnFailure = 0x00000040, + Snapshot = 0x00000080 }; Q_DECLARE_FLAGS(ScriptOptions, ScriptOption) void setScript(const QString &s) { m_script = s; } -- cgit v0.12