diff options
Diffstat (limited to 'tests/lib/unit++/guitester.cc')
| -rw-r--r-- | tests/lib/unit++/guitester.cc | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/tests/lib/unit++/guitester.cc b/tests/lib/unit++/guitester.cc new file mode 100644 index 00000000..34269af2 --- /dev/null +++ b/tests/lib/unit++/guitester.cc @@ -0,0 +1,100 @@ +#ifdef GUI +#include "optmap.h" +#include "main.h" +#include "guitester.h" +#include <qapplication.h> + +using namespace unitpp; +using namespace std; + +class gui_test_runner : public test_runner { + virtual bool run_tests(int argc, const char** argv) + { + QApplication a(argc, const_cast<char**>(argv)); + gui g(a); + g_setup setup(&g); + suite::main().visit(&setup); + a.setMainWidget(&g); + g.show(); + return a.exec(); + } +}; +class gui_flag : public options_utils::optmap::cmd { + bool do_cmd(options_utils::optmap* om) + { + static gui_test_runner gtr; + set_tester(>r); + return true; + } +}; +gui_hook::gui_hook() +{ + options().add("g", new gui_flag()); + options().alias("gui", "g"); +} + + +g_setup::g_setup(gui* gp) : gp(gp), running(false), n_suites(0), n_tests(0) +{ + connect(gp, SIGNAL(run()), this, SLOT(run())); +} +void g_setup::add_node(node* np) +{ + nodes.push_back(np); + rev[np->lvi()] = np; +} +void g_setup::visit(test& t) +{ + ++n_tests; + node* np = new node(branch.top(), t); + add_node(np); + gp->add_test(np); +} +void g_setup::visit(suite& t) +{ + ++n_suites; + suite_node* np = branch.size() ? new suite_node(branch.top(), t) + : new suite_node(gp, t); + branch.push(np); + add_node(np); + gp->add_suite(np); +} +void g_setup::visit(suite& t, int) +{ + branch.pop(); + if (!branch.size()) { + gp->totSuites(n_suites); + gp->totTests(n_tests); + } +} + +void g_setup::run() +{ + if (running) + return; + running = true; + selected.clear(); + find_selected(gp->test_tree()->firstChild()); + if (!selected.size()) + selected.push_back(rev[gp->test_tree()->firstChild()]); + gp->reset(); + for (vector<node*>::iterator p = selected.begin(); p!=selected.end(); ++p) { + (*p)->run(); + gp->processEvents(20); + if (!running) + break; + } + running = false; +} + +void g_setup::find_selected(QListViewItem* lvi) +{ + if (!lvi) + return; + if (lvi->isSelected()) + selected.push_back(rev[lvi]); + else + find_selected(lvi->firstChild()); + find_selected(lvi->nextSibling()); +} +#endif |
