#include #include #include #include "shared.hpp" using namespace Hyprutils::Signal; using namespace Hyprutils::Memory; void legacy(int& ret) { CSignal signal; int data = 0; auto listener = signal.registerListener([&]([[maybe_unused]] std::any d) { data = 1; }); signal.emit(); EXPECT(data, 1); data = 0; listener.reset(); signal.emit(); EXPECT(data, 0); } void legacyListenerEmit(int& ret) { int data = 0; CSignal signal; auto listener = signal.registerListener([&](std::any d) { data = std::any_cast(d); }); listener->emit(1); // not a typo EXPECT(data, 1); } void empty(int& ret) { int data = 0; CSignalT<> signal; auto listener = signal.registerListener([&] { data = 1; }); signal.emit(); EXPECT(data, 1); data = 0; listener.reset(); signal.emit(); EXPECT(data, 0); } void typed(int& ret) { int data = 0; CSignalT signal; auto listener = signal.registerListener([&](int newData) { data = newData; }); signal.emit(1); EXPECT(data, 1); } void typedMany(int& ret) { int data1 = 0; int data2 = 0; int data3 = 0; CSignalT signal; auto listener = signal.registerListener([&](int d1, int d2, int d3) { data1 = d1; data2 = d2; data3 = d3; }); signal.emit(1, 2, 3); EXPECT(data1, 1); EXPECT(data2, 2); EXPECT(data3, 3); } void staticListener(int& ret) { struct STestOwner { int data = 0; } owner; CSignalT signal; signal.registerStaticListener([&](STestOwner* owner, int newData) { owner->data = newData; }, &owner); signal.emit(1); EXPECT(owner.data, 1); } int main(int argc, char** argv, char** envp) { int ret = 0; legacy(ret); legacyListenerEmit(ret); empty(ret); typed(ret); typedMany(ret); staticListener(ret); return ret; }