#include <string>
#include <catch2/catch_test_macros.hpp>
#include "sygac-components.hpp"
#include "sygbp-test_component.hpp"
#include "sygup-test_logger.hpp"
#include "sygbp-output_logger.hpp"
 
using std::string;
 
using namespace sygaldry::sygbp;
using namespace sygaldry;
 
void test_logger(auto& logger, auto& components, string expected_output, auto input_callback)
{
    logger.log.put.ss.str("");
    input_callback();
    components.tc();
    logger.external_destinations(components);
    CHECK(logger.log.put.ss.str() == string(expected_output));
}
 
struct TestComponents
{
    sygaldry::sygbp::TestComponent tc;
};
 
TEST_CASE("sygaldry Output Logger", "[bindings][output_logger]")
{
    auto components = TestComponents{};
    auto& tc = components.tc;
 
    static_assert(Component<decltype(logger)>);
 
    
    test_logger(logger, components, "/Test_Component_1/button_out 1\n", [&](){
        tc.inputs.button_in = 1;
    });
 
    
    test_logger(logger, components, "/Test_Component_1/button_out 0\n", [&](){
        tc.inputs.button_in = 0;
    });
 
    
    test_logger(logger, components, "", [&](){
        tc.inputs.button_in = 0;
    });
 
    
    test_logger(logger, components, "/Test_Component_1/bang_out\n", [&](){
        tc.inputs.bang_in();
    });
 
    
    test_logger(logger, components, "/Test_Component_1/bang_out\n", [&](){
        tc.inputs.bang_in();
    });
 
    
    test_logger(logger, components, "", [&](){
        tc.inputs.bang_in = {};
    });
}
Definition sygbp-output_logger.hpp:26