Browse Source

bind up tiny process lib and add test should also fix terminal warnings

merge-requests/181/head
Jørgen Lien Sellæg 5 years ago
parent
commit
4e6c2c2d95
  1. 1
      src/CMakeLists.txt
  2. 2
      src/python_module.cc
  3. 10
      src/terminal.cpp
  4. 27
      src/tiny_process_module.cpp
  5. 6
      src/tiny_process_module.hpp
  6. 11
      tests/python_bindings/Terminal_tests/terminal_test.cc
  7. 13
      tests/python_bindings/Terminal_tests/terminal_test.py

1
src/CMakeLists.txt

@ -22,6 +22,7 @@ set(JUCI_SHARED_FILES
source_language_protocol.cpp
source_spellcheck.cpp
terminal.cpp
tiny_process_module.cpp
tooltips.cpp
usages_clang.cpp
utility.cpp

2
src/python_module.cc

@ -9,6 +9,7 @@
#include "dialogs.hpp"
#include "git.hpp"
#include "terminal.hpp"
#include "tiny_process_module.hpp"
PyObject *Module::init_jucipp_module() {
auto api = py::module("Jucipp", "API");
@ -23,5 +24,6 @@ PyObject *Module::init_jucipp_module() {
Dispatcher::init_module(api);
Git::init_module(api);
Terminal::init_module(api);
TinyProcessModule::init_module(api);
return api.ptr();
}

10
src/terminal.cpp

@ -7,6 +7,8 @@
#include "utility.hpp"
#include <future>
#include <iostream>
#include <pybind11/functional.h>
#include <pybind11/stl.h>
#include <regex>
#include <thread>
@ -611,7 +613,7 @@ void Terminal::init_module(pybind11::module &api) {
py::arg("command"),
py::arg("path") = "",
py::arg("use_pipes") = false)
.def("async_process", (void (Terminal::*)(const std::string &, const boost::filesystem::path &, const std::function<void(int)> &, bool)) & Terminal::async_process,
.def("async_process", &Terminal::async_process,
py::arg("command"),
py::arg("path") = "",
py::arg("callback") = nullptr,
@ -623,14 +625,12 @@ void Terminal::init_module(pybind11::module &api) {
.def("print", &Terminal::print,
py::arg("message"),
py::arg("bold") = false)
.def("async_print", (void (Terminal::*)(const std::string &, bool)) & Terminal::async_print,
.def("async_print", (void (Terminal::*)(std::string, bool)) & Terminal::async_print,
py::arg("message"),
py::arg("bold") = false)
.def("async_print", (void (Terminal::*)(size_t, const std::string &)) & Terminal::async_print,
py::arg("line_nr"),
py::arg("message"))
.def("configure", &Terminal::configure)
.def("clear", &Terminal::clear)
.def_readwrite("", &Terminal::scroll_to_bottom)
;
}

27
src/tiny_process_module.cpp

@ -0,0 +1,27 @@
#include "tiny_process_module.hpp"
#include <process.hpp>
void TinyProcessModule::init_module(py::module &api) {
py::class_<TinyProcessLib::Process, std::shared_ptr<TinyProcessLib::Process>> process(api, "Process");
process
// .def("kill", (void (TinyProcessLib::Process::*)(TinyProcessLib::Process::id_type, bool)) & TinyProcessLib::Process::kill,
// py::arg("id"),
// py::arg("force") = false)
// .def(py::init<const TinyProcessLib::Process::string_type &, const TinyProcessLib::Process::string_type &>(),
// py::arg("command"),
// py::arg("path") = TinyProcessLib::Process::string_type())
.def("get_id", &TinyProcessLib::Process::get_id)
.def("get_exit_status", &TinyProcessLib::Process::get_exit_status)
.def("try_get_exit_status", &TinyProcessLib::Process::try_get_exit_status,
py::arg("exit_status"))
.def("write", (bool (TinyProcessLib::Process::*)(const char *, size_t)) & TinyProcessLib::Process::write,
py::arg("bytes"),
py::arg("n"))
.def("write", (bool (TinyProcessLib::Process::*)(const std::string &)) & TinyProcessLib::Process::write,
py::arg("string"))
.def("close_stdin", &TinyProcessLib::Process::close_stdin)
.def("kill", (void (TinyProcessLib::Process::*)(bool)) & TinyProcessLib::Process::kill,
py::arg("force"))
;
}

6
src/tiny_process_module.hpp

@ -0,0 +1,6 @@
#include "python_bind.h"
class TinyProcessModule {
public:
static void init_module(py::module &api);
};

11
tests/python_bindings/Terminal_tests/terminal_test.cc

@ -37,4 +37,15 @@ int main() {
connection.disconnect();
}
}
{
suite test_suite(test_directory);
try {
const auto ls_dir = test_suite.test_file_path / test_directory / "ls";
py::module::import("terminal_test").attr("async_process")(ls_dir);
test_suite.has_assertion = true;
}
catch(const py::error_already_set &error) {
std::cout << error.what();
}
}
}

13
tests/python_bindings/Terminal_tests/terminal_test.py

@ -1,4 +1,5 @@
from Jucipp import Terminal
from jucipp_test import assert_equal
t = Terminal()
@ -9,7 +10,17 @@ def clear():
t.clear()
def process(path):
return t.process("ls", path, True)
p = t.process("ls", path, True)
assert_equal(p, 0)
return p
def async_print():
return t.async_print("Hello, World!")
def callback(exit_code):
assert_equal(0, exit_code)
def async_process(path):
p = t.async_process("ls", path, callback, True)
assert_equal(0, p.get_exit_status())
return p.get_exit_status()

Loading…
Cancel
Save