root/lang/objective-cplusplus/i3/trunk/src/Tester.cpp @ 37265

Revision 37224, 2.8 kB (checked in by saturday06, 3 years ago)

test run!

Line 
1#include <PrecompiledHeaders.h>
2#include "Mediator.h"
3#include "Tester.h"
4#include <mil/Synchronize.h>
5
6namespace i3 {
7
8Tester* tester_ptr = NULL;
9extern void (**tester_tests)(Tester&);
10extern unsigned int tester_tests_length;
11
12#define CHECK_VALID { if (!valid) { throw std::logic_error("Tester"); }}
13
14Tester::Tester() : mediator(*(std::auto_ptr<Mediator>(new Mediator()))), valid(false), passed(true), index(0) {
15}
16
17Tester::Tester(Mediator& mediator) : mediator(mediator), valid(true), passed(true), index(0) {
18}
19
20std::string Tester::getName() {
21    CHECK_VALID;
22    synchronized (mutex) {
23        if (passed) {
24            return "test passed";
25        }
26        return name;
27    }
28
29    return "";
30}
31
32void Tester::pass() {
33    CHECK_VALID;
34
35    synchronized (mutex) {
36        passed = true;
37    }
38}
39
40void Tester::next(const char* name_) {
41    CHECK_VALID;
42    name = name_;
43    passed = false;
44}
45
46void Tester::run() {
47    CHECK_VALID;
48
49    sleep(5);
50
51#if MIL_GUI_COCOA
52    return; //XXX
53#endif
54
55    while (!break_loop_request) {
56        this->execute_front();
57        mil::yield();
58        synchronized (mutex) {
59            if (!passed) {
60                continue;
61            }
62            if (!startNext()) {
63                return;
64            }
65        }
66    }
67}
68
69
70#ifdef MIL_OS_WINDOWS
71void send_key(char c_) {
72    unsigned char c = c_;
73    if (c == '\r' || c == '\n') {
74        keybd_event(VK_RETURN, 0, 0, 0 );
75        keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0);
76        return;
77    }
78
79    if (isalnum(c)) {
80        unsigned char u = toupper(c);
81        keybd_event(u, 0, 0, 0 );
82        keybd_event(u, 0, KEYEVENTF_KEYUP, 0);
83    }
84}
85#else
86void send_key(char c_) {
87}
88#endif
89
90void Tester::sendKeys(std::string keys) {
91    for (unsigned i = 0; i < keys.size(); i++) {
92        send_key(keys[i]);
93    }
94}
95
96bool Tester::startNext() {
97    CHECK_VALID;
98
99    if (index < tester_tests_length) {
100        (tester_tests[index])(*this);
101        index++;
102        return true;
103    }
104    return false;
105}
106
107bool Tester::completed() const {
108    CHECK_VALID;
109
110    return (index == tester_tests_length);
111}
112
113}
114
115using namespace i3;
116
117QT_TEST(event_exchange) {
118    char argv1[] = "foo";
119    char argv2[] = "bar";
120    char* argv[] = {argv1, argv2};
121    int argc = _countof(argv);
122
123    int exit_status = 0;
124
125    exit_status = init_common_global_data(argc, argv);
126    QT_CHECK(!exit_status);
127
128    exit_status = init_os_global_data(argc, argv);
129    QT_CHECK(!exit_status);
130
131    exit_status = init_gui_global_data(argc, argv);
132    QT_CHECK(!exit_status);
133
134#ifdef MIL_GUI_WINDOWS
135    {
136        i3::Mediator mediator;
137        exit_status = mediator.start();
138        if (exit_status) {
139            QT_CHECK(!exit_status);
140        }
141    }
142#endif
143}
144
Note: See TracBrowser for help on using the browser.