Changeset View
Changeset View
Standalone View
Standalone View
debuggers/gdb/unittests/test_gdb.cpp
Show First 20 Lines • Show All 1991 Lines • ▼ Show 20 Line(s) | 1981 | #ifdef HAVE_PATH_WITH_SPACES_TEST | |||
---|---|---|---|---|---|
1992 | session->run(); | 1992 | session->run(); | ||
1993 | WAIT_FOR_STATE(session, DebugSession::EndedState); | 1993 | WAIT_FOR_STATE(session, DebugSession::EndedState); | ||
1994 | #endif | 1994 | #endif | ||
1995 | } | 1995 | } | ||
1996 | 1996 | | |||
1997 | bool GdbTest::waitForState(DebugSession *session, DebugSession::DebuggerState state, | 1997 | bool GdbTest::waitForState(DebugSession *session, DebugSession::DebuggerState state, | ||
1998 | const char *file, int line, bool waitForIdle) | 1998 | const char *file, int line, bool waitForIdle) | ||
1999 | { | 1999 | { | ||
2000 | QPointer<DebugSession> s(session); //session can get deleted in DebugController | 2000 | QPointer<MIDebugSession> s(session); //session can get deleted in DebugController | ||
2001 | QTime stopWatch; | 2001 | QTime stopWatch; | ||
2002 | stopWatch.start(); | 2002 | stopWatch.start(); | ||
2003 | while (s.data()->state() != state || (waitForIdle && s->debuggerStateIsOn(s_dbgBusy))) { | 2003 | | ||
2004 | // legacy behavior for tests that implicitly may require waiting for idle, | ||||
2005 | // but which were written before waitForIdle was added | ||||
2006 | waitForIdle = waitForIdle || state != MIDebugSession::EndedState; | ||||
2007 | | ||||
2008 | while (s && (s->state() != state || (waitForIdle && s->debuggerStateIsOn(s_dbgBusy)))) { | ||||
2004 | if (stopWatch.elapsed() > 5000) { | 2009 | if (stopWatch.elapsed() > 5000) { | ||
2005 | qWarning() << "current state" << s.data()->state() << "waiting for" << state; | 2010 | qWarning() << "current state" << s->state() << "waiting for" << state; | ||
2006 | QTest::qFail(qPrintable(QString("Timeout before reaching state %0").arg(state)), | 2011 | QTest::qFail(qPrintable(QString("Timeout before reaching state %0").arg(state)), | ||
2007 | file, line); | 2012 | file, line); | ||
2008 | return false; | 2013 | return false; | ||
2009 | } | 2014 | } | ||
2010 | QTest::qWait(20); | 2015 | QTest::qWait(20); | ||
2011 | if (!s) { | 2016 | } | ||
2012 | if (state == DebugSession::EndedState) | 2017 | | ||
2013 | break; | 2018 | // NOTE: don't wait anymore after leaving the loop. Waiting re-enters event loop and | ||
2019 | // may change session state. | ||||
2020 | | ||||
2021 | if (!s && state != MIDebugSession::EndedState) { | ||||
2014 | QTest::qFail(qPrintable(QString("Session ended before reaching state %0").arg(state)), | 2022 | QTest::qFail(qPrintable(QString("Session ended before reaching state %0").arg(state)), | ||
2015 | file, line); | 2023 | file, line); | ||
2016 | return false; | 2024 | return false; | ||
2017 | } | 2025 | } | ||
2018 | } | | |||
2019 | if (!waitForIdle && state != DebugSession::EndedState) { | | |||
2020 | // legacy behavior for tests that implicitly may require waiting for idle, | | |||
2021 | // but which were written before waitForIdle was added | | |||
2022 | QTest::qWait(100); | | |||
2023 | } | | |||
2024 | 2026 | | |||
2025 | qDebug() << "Reached state " << state << " in " << file << ':' << line; | 2027 | qDebug() << "Reached state " << state << " in " << file << ':' << line; | ||
2026 | return true; | 2028 | return true; | ||
2027 | } | 2029 | } | ||
2028 | } // end of namespace GDB | 2030 | } // end of namespace GDB | ||
2029 | } // end of namespace KDevMI | 2031 | } // end of namespace KDevMI | ||
2030 | 2032 | | |||
2031 | QTEST_MAIN(KDevMI::GDB::GdbTest) | 2033 | QTEST_MAIN(KDevMI::GDB::GdbTest) | ||
2032 | 2034 | | |||
2033 | 2035 | | |||
2034 | #include "test_gdb.moc" | 2036 | #include "test_gdb.moc" | ||
2035 | #include "moc_test_gdb.cpp" | 2037 | #include "moc_test_gdb.cpp" | ||
2036 | 2038 | |