444120e664
Fixes #1978 * Move tail and non-tail handler to method Defining them in the constructor is ugly. * script: Iterate over defined actions instead of fixed list * Separate running logic and lock m_output * Include POLYBAR_FLAGS in linker flags * Stop using m_prev in script_runner * Join module threads in stop function Joining in the destructor may lead to UB because the subclass is already deconstructed but the threads may still require it to be around (e.g. for calling any functions on the instance) * Cleanup script module * Update changelog * Remove AfterReturn class * Remove m_stopping from script module * Fix polybar not reading the entire line from child process. For every `readline` call we created a new fd_streambuf. This means once `readline` returns, the streambuf is destructed and and pending data in its temporary buffer discarded and we never actually read it. * Remove unused includes
48 lines
1.1 KiB
C++
48 lines
1.1 KiB
C++
#include "utils/command.hpp"
|
|
|
|
#include <unistd.h>
|
|
|
|
#include "common/test.hpp"
|
|
|
|
using namespace polybar;
|
|
|
|
TEST(Command, status) {
|
|
// Test for command<output_policy::IGNORED>::exec(bool);
|
|
{
|
|
auto cmd = command_util::make_command<output_policy::IGNORED>("echo polybar > /dev/null");
|
|
int status = cmd->exec();
|
|
|
|
EXPECT_EQ(status, EXIT_SUCCESS);
|
|
}
|
|
|
|
// Test for command<output_policy::REDIRECTED>::exec(bool);
|
|
{
|
|
auto cmd = command_util::make_command<output_policy::REDIRECTED>("echo polybar");
|
|
int status = cmd->exec();
|
|
|
|
EXPECT_EQ(status, EXIT_SUCCESS);
|
|
}
|
|
}
|
|
|
|
TEST(Command, status_async) {
|
|
{
|
|
auto cmd = command_util::make_command<output_policy::IGNORED>("echo polybar > /dev/null");
|
|
EXPECT_EQ(cmd->exec(false), EXIT_SUCCESS);
|
|
|
|
cmd->wait();
|
|
|
|
EXPECT_FALSE(cmd->is_running());
|
|
EXPECT_EQ(cmd->get_exit_status(), EXIT_SUCCESS);
|
|
}
|
|
}
|
|
|
|
TEST(Command, output) {
|
|
auto cmd = command_util::make_command<output_policy::REDIRECTED>("echo polybar");
|
|
string str;
|
|
cmd->exec(false);
|
|
cmd->tail([&str](string&& string) { str = string; });
|
|
cmd->wait();
|
|
|
|
EXPECT_EQ(str, "polybar");
|
|
}
|