Merge pull request 'piobject_tests' (#80) from piobject_tests into master

Reviewed-on: https://git.shs.tools/SHS/pip/pulls/80
This commit was merged in pull request #80.
This commit is contained in:
2021-10-04 12:11:51 +03:00
2 changed files with 236 additions and 0 deletions

View File

@@ -25,3 +25,4 @@ endmacro()
pip_test(concurrent "")
pip_test(math "")
pip_test(core "")
pip_test(piobject "")

235
tests/piobject/connect.cpp Normal file
View File

@@ -0,0 +1,235 @@
#include "gtest/gtest.h"
#include "piobject.h"
class Object : public PIObject
{
PIOBJECT(Object)
public:
Object() {x=0;}
void test() {event_test();}
void test_val() {event_val(x);}
int getX() const {return x;}
EVENT(event_test)
EVENT1(event_val, int, arg)
EVENT_HANDLER(void, handler_test) {x++;}
EVENT_HANDLER1(void, handler_val, int, arg) {x = arg;}
private:
int x;
};
TEST(PiobjectConnections, CONNECT0) {
Object a;
Object b;
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 0);
a.test();
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 0);
b.test();
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 0);
CONNECT0(void, &a, event_test, &b, handler_test);
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 0);
a.test();
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 1);
b.test();
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 1);
}
TEST(PiobjectConnections, CONNECT0_DISCONNECT) {
Object a;
Object b;
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 0);
a.test();
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 0);
b.test();
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 0);
CONNECT0(void, &a, event_test, &b, handler_test);
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 0);
a.test();
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 1);
b.test();
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 1);
a.piDisconnect(&b);
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 1);
a.test();
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 1);
b.test();
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 1);
}
TEST(PiobjectConnections, CONNECTU) {
Object a;
Object b;
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 0);
a.test();
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 0);
b.test();
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 0);
CONNECTU(&a, event_test, &b, handler_test);
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 0);
a.test();
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 1);
b.test();
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 1);
}
TEST(PiobjectConnections, CONNECTU_DISCONNECT) {
Object a;
Object b;
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 0);
a.test();
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 0);
b.test();
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 0);
CONNECTU(&a, event_test, &b, handler_test);
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 0);
a.test();
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 1);
b.test();
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 1);
PIObject::piDisconnect(&a);
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 1);
a.test();
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 1);
b.test();
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 1);
a.handler_val(99);
ASSERT_EQ(a.getX(), 99);
ASSERT_EQ(b.getX(), 1);
CONNECTU(&a, event_val, &b, handler_val);
ASSERT_EQ(a.getX(), 99);
ASSERT_EQ(b.getX(), 1);
a.test_val();
ASSERT_EQ(a.getX(), 99);
ASSERT_EQ(b.getX(), 99);
a.handler_val(-1);
ASSERT_EQ(a.getX(), -1);
ASSERT_EQ(b.getX(), 99);
PIObject::piDisconnect(&a, "event_val", &b);
ASSERT_EQ(a.getX(), -1);
ASSERT_EQ(b.getX(), 99);
a.test_val();
ASSERT_EQ(a.getX(), -1);
ASSERT_EQ(b.getX(), 99);
}
TEST(PiobjectConnections, CONNECTL) {
Object a;
Object b;
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 0);
a.test();
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 0);
b.test();
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 0);
CONNECTL(&a, event_test, [&b](){
b.handler_val(7);
});
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 0);
a.test();
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 7);
b.test();
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 7);
}
TEST(PiobjectConnections, CONNECTL_DISCONNECT) {
Object a;
Object b;
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 0);
a.test();
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 0);
b.test();
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 0);
CONNECTL(&a, event_test, [&b](){
b.handler_test();
});
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 0);
a.test();
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 1);
b.test();
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 1);
b.handler_test();
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 2);
PIObject::piDisconnect(&a);
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 2);
a.test();
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 2);
}
TEST(PiobjectConnections, CONNECTL_twice) {
Object a;
Object b;
CONNECTL(&a, event_test, [&b](){
b.handler_test();
});
a.test();
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 1);
CONNECTL(&a, event_test, [&b](){
b.handler_test();
});
a.test();
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 3);
b.handler_val(0);
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 0);
PIObject::piDisconnect(&a);
a.test();
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 0);
CONNECTL(&a, event_test, [&b](){
b.handler_test();
});
a.test();
ASSERT_EQ(a.getX(), 0);
ASSERT_EQ(b.getX(), 1);
}