From dbcb7005be8d49cf6188cace04dbf3bd55e8f158 Mon Sep 17 00:00:00 2001 From: eidheim Date: Thu, 29 Jun 2017 08:51:52 +0200 Subject: [PATCH] Added source_key_test.cc that for instance include indentation tests after enter is pressed in a buffer --- tests/CMakeLists.txt | 5 + tests/source_key_test.cc | 457 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 462 insertions(+) create mode 100644 tests/source_key_test.cc diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 780bdb2..1837a07 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -49,6 +49,11 @@ add_executable(source_clang_test source_clang_test.cc target_link_libraries(source_clang_test ${global_libraries}) add_test(source_clang_test source_clang_test) +add_executable(source_key_test source_key_test.cc + $ $) +target_link_libraries(source_key_test ${global_libraries}) +add_test(source_key_test source_key_test) + if(LIBLLDB_FOUND AND (NOT LIBCLANG_LIBRARIES STREQUAL "/usr/lib/llvm-3.5/lib/libclang.so")) add_executable(lldb_test lldb_test.cc $ $) diff --git a/tests/source_key_test.cc b/tests/source_key_test.cc new file mode 100644 index 0000000..d63d96e --- /dev/null +++ b/tests/source_key_test.cc @@ -0,0 +1,457 @@ +#include "source.h" +#include + +//Requires display server to work +//However, it is possible to use the Broadway backend if the test is run in a pure terminal environment: +//broadwayd& +//make test + +int main() { + auto app = Gtk::Application::create(); + Gsv::init(); + + auto tests_path = boost::filesystem::canonical(JUCI_TESTS_PATH); + auto source_file = tests_path / "tmp" / "source_file.cpp"; + + auto language_manager = Gsv::LanguageManager::get_default(); + GdkEventKey event; + event.state=0; + + { + Source::View view(source_file, language_manager->get_language("cpp")); + view.set_tab_char_and_size(' ', 2); + event.keyval = GDK_KEY_Return; + + { + view.get_buffer()->set_text(" int main() {"); + view.on_key_press_event(&event); + g_assert(view.get_buffer()->get_text() == " int main() {\n" + " \n" + " }"); + g_assert(view.get_buffer()->get_insert()->get_iter().get_line() == 1); + g_assert(view.get_buffer()->get_insert()->get_iter().get_line_offset() == 4); + } + { + view.get_buffer()->set_text(" int main() { "); + view.on_key_press_event(&event); + g_assert(view.get_buffer()->get_text() == " int main() {\n" + " \n" + " }"); + g_assert(view.get_buffer()->get_insert()->get_iter().get_line() == 1); + g_assert(view.get_buffer()->get_insert()->get_iter().get_line_offset() == 4); + } + { + view.get_buffer()->set_text(" int main() {\n" + " }"); + auto iter = view.get_buffer()->get_insert()->get_iter(); + iter.backward_chars(4); + view.get_buffer()->place_cursor(iter); + view.on_key_press_event(&event); + g_assert(view.get_buffer()->get_text() == " int main() {\n" + " \n" + " }"); + g_assert(view.get_buffer()->get_insert()->get_iter().get_line() == 1); + g_assert(view.get_buffer()->get_insert()->get_iter().get_line_offset() == 4); + } + { + view.get_buffer()->set_text(" int main()\n" + " {"); + view.on_key_press_event(&event); + g_assert(view.get_buffer()->get_text() == " int main()\n" + " {\n" + " \n" + " }"); + g_assert(view.get_buffer()->get_insert()->get_iter().get_line() == 2); + g_assert(view.get_buffer()->get_insert()->get_iter().get_line_offset() == 4); + } + { + view.get_buffer()->set_text(" int main()\n" + " {\n" + " }"); + auto iter = view.get_buffer()->get_insert()->get_iter(); + iter.backward_chars(4); + view.get_buffer()->place_cursor(iter); + view.on_key_press_event(&event); + g_assert(view.get_buffer()->get_text() == " int main()\n" + " {\n" + " \n" + " }"); + g_assert(view.get_buffer()->get_insert()->get_iter().get_line() == 2); + g_assert(view.get_buffer()->get_insert()->get_iter().get_line_offset() == 4); + } + + { + view.get_buffer()->set_text(" if(true &&\n" + " false"); + view.on_key_press_event(&event); + g_assert(view.get_buffer()->get_text() == " if(true &&\n" + " false\n" + " "); + g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end()); + } + { + view.get_buffer()->set_text(" if(true &&\n" + " false)"); + view.on_key_press_event(&event); + g_assert(view.get_buffer()->get_text() == " if(true &&\n" + " false)\n" + " "); + g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end()); + } + { + view.get_buffer()->set_text(" if(true &&\n" + " false)\n" + " ;"); + view.on_key_press_event(&event); + g_assert(view.get_buffer()->get_text() == " if(true &&\n" + " false)\n" + " ;\n" + " "); + g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end()); + } + { + view.get_buffer()->set_text(" if(true &&\n" + " false)\n" + " cout << endl <<\n" + " << endl <<"); + view.on_key_press_event(&event); + g_assert(view.get_buffer()->get_text() == " if(true &&\n" + " false)\n" + " cout << endl <<\n" + " << endl <<\n" + " "); + g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end()); + } + { + view.get_buffer()->set_text(" if(true &&\n" + " false)\n" + " cout << endl <<\n" + " << endl;"); + view.on_key_press_event(&event); + g_assert(view.get_buffer()->get_text() == " if(true &&\n" + " false)\n" + " cout << endl <<\n" + " << endl;\n" + " "); + g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end()); + } + + { + view.get_buffer()->set_text(" func(["); + view.on_key_press_event(&event); + g_assert(view.get_buffer()->get_text() == " func([\n" + " "); + g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end()); + } + { + view.get_buffer()->set_text(" func([] {},"); + view.on_key_press_event(&event); + g_assert(view.get_buffer()->get_text() == " func([] {},\n" + " "); + g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end()); + } + { + view.get_buffer()->set_text(" func([]() -> std::vector> {},"); + view.on_key_press_event(&event); + g_assert(view.get_buffer()->get_text() == " func([]() -> std::vector> {},\n" + " "); + g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end()); + } + { + view.get_buffer()->set_text(" func([] {"); + view.on_key_press_event(&event); + g_assert(view.get_buffer()->get_text() == " func([] {\n" + " \n" + " }"); + g_assert(view.get_buffer()->get_insert()->get_iter().get_line() == 1); + g_assert(view.get_buffer()->get_insert()->get_iter().get_line_offset() == 4); + } + { + view.get_buffer()->set_text(" func([]() -> std::vector> {"); + view.on_key_press_event(&event); + g_assert(view.get_buffer()->get_text() == " func([]() -> std::vector> {\n" + " \n" + " }"); + g_assert(view.get_buffer()->get_insert()->get_iter().get_line() == 1); + g_assert(view.get_buffer()->get_insert()->get_iter().get_line_offset() == 4); + } + { + view.get_buffer()->set_text(" func([] {)"); + auto iter = view.get_buffer()->get_insert()->get_iter(); + iter.backward_char(); + view.get_buffer()->place_cursor(iter); + view.on_key_press_event(&event); + g_assert(view.get_buffer()->get_text() == " func([] {\n" + " \n" + " })"); + g_assert(view.get_buffer()->get_insert()->get_iter().get_line() == 1); + g_assert(view.get_buffer()->get_insert()->get_iter().get_line_offset() == 4); + } + { + view.get_buffer()->set_text(" func([]->std::vector>{)"); + auto iter = view.get_buffer()->get_insert()->get_iter(); + iter.backward_char(); + view.get_buffer()->place_cursor(iter); + view.on_key_press_event(&event); + g_assert(view.get_buffer()->get_text() == " func([]->std::vector>{\n" + " \n" + " })"); + g_assert(view.get_buffer()->get_insert()->get_iter().get_line() == 1); + g_assert(view.get_buffer()->get_insert()->get_iter().get_line_offset() == 4); + } + { + view.get_buffer()->set_text(" func([] {\n" + " })"); + auto iter = view.get_buffer()->get_insert()->get_iter(); + iter.backward_chars(5); + view.get_buffer()->place_cursor(iter); + view.on_key_press_event(&event); + g_assert(view.get_buffer()->get_text() == " func([] {\n" + " \n" + " })"); + g_assert(view.get_buffer()->get_insert()->get_iter().get_line() == 1); + g_assert(view.get_buffer()->get_insert()->get_iter().get_line_offset() == 4); + } + { + view.get_buffer()->set_text(" func([]()->std::vector> {\n" + " })"); + auto iter = view.get_buffer()->get_insert()->get_iter(); + iter.backward_chars(5); + view.get_buffer()->place_cursor(iter); + view.on_key_press_event(&event); + g_assert(view.get_buffer()->get_text() == " func([]()->std::vector> {\n" + " \n" + " })"); + g_assert(view.get_buffer()->get_insert()->get_iter().get_line() == 1); + g_assert(view.get_buffer()->get_insert()->get_iter().get_line_offset() == 4); + } + { + view.get_buffer()->set_text(" func([]->bool{return true;\n" + " });"); + auto iter = view.get_buffer()->get_insert()->get_iter(); + iter.backward_chars(18); + view.get_buffer()->place_cursor(iter); + view.on_key_press_event(&event); + g_assert(view.get_buffer()->get_text() == " func([]->bool{\n" + " return true;\n" + " });"); + g_assert(view.get_buffer()->get_insert()->get_iter().get_line() == 1); + g_assert(view.get_buffer()->get_insert()->get_iter().get_line_offset() == 4); + } + { + view.get_buffer()->set_text(" func([] {}, [] {"); + view.on_key_press_event(&event); + g_assert(view.get_buffer()->get_text() == " func([] {}, [] {\n" + " \n" + " }"); + g_assert(view.get_buffer()->get_insert()->get_iter().get_line() == 1); + g_assert(view.get_buffer()->get_insert()->get_iter().get_line_offset() == 4); + } + { + view.get_buffer()->set_text(" func([]()->bool {}, []()->bool {"); + view.on_key_press_event(&event); + g_assert(view.get_buffer()->get_text() == " func([]()->bool {}, []()->bool {\n" + " \n" + " }"); + g_assert(view.get_buffer()->get_insert()->get_iter().get_line() == 1); + g_assert(view.get_buffer()->get_insert()->get_iter().get_line_offset() == 4); + } + { + view.get_buffer()->set_text(" func([] {}, [] {},"); + view.on_key_press_event(&event); + g_assert(view.get_buffer()->get_text() == " func([] {}, [] {},\n" + " "); + g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end()); + } + { + view.get_buffer()->set_text(" func([]()->bool {}, []()->bool {},"); + view.on_key_press_event(&event); + g_assert(view.get_buffer()->get_text() == " func([]()->bool {}, []()->bool {},\n" + " "); + g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end()); + } + { + view.get_buffer()->set_text(" func([] {}, [] {}"); + view.on_key_press_event(&event); + g_assert(view.get_buffer()->get_text() == " func([] {}, [] {}\n" + " "); + g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end()); + } + { + view.get_buffer()->set_text(" func([]->bool {}, []->bool {}"); + view.on_key_press_event(&event); + g_assert(view.get_buffer()->get_text() == " func([]->bool {}, []->bool {}\n" + " "); + g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end()); + } + { + view.get_buffer()->set_text(" func([] {}, [] {}) {"); + view.on_key_press_event(&event); + g_assert(view.get_buffer()->get_text() == " func([] {}, [] {}) {\n" + " \n" + " }"); + g_assert(view.get_buffer()->get_insert()->get_iter().get_line() == 1); + g_assert(view.get_buffer()->get_insert()->get_iter().get_line_offset() == 4); + } + { + view.get_buffer()->set_text(" func([]->bool {}, []->bool {}) {"); + view.on_key_press_event(&event); + g_assert(view.get_buffer()->get_text() == " func([]->bool {}, []->bool {}) {\n" + " \n" + " }"); + g_assert(view.get_buffer()->get_insert()->get_iter().get_line() == 1); + g_assert(view.get_buffer()->get_insert()->get_iter().get_line_offset() == 4); + } + { + view.get_buffer()->set_text(" func([] {\n" + " \n" + " }, [] {\n" + " \n" + " }, {);"); + auto iter = view.get_buffer()->get_insert()->get_iter(); + iter.backward_chars(2); + view.get_buffer()->place_cursor(iter); + view.on_key_press_event(&event); + g_assert(view.get_buffer()->get_text() == " func([] {\n" + " \n" + " }, [] {\n" + " \n" + " }, {\n" + " \n" + " });"); + g_assert(view.get_buffer()->get_insert()->get_iter().get_line() == 5); + g_assert(view.get_buffer()->get_insert()->get_iter().get_line_offset() == 4); + } + { + view.get_buffer()->set_text(" func([]() -> std::vector> {\n" + " return std::vector>();\n" + " }, []() -> std::vector> {\n" + " return std::vector>();\n" + " }, {);"); + auto iter = view.get_buffer()->get_insert()->get_iter(); + iter.backward_chars(2); + view.get_buffer()->place_cursor(iter); + view.on_key_press_event(&event); + g_assert(view.get_buffer()->get_text() == " func([]() -> std::vector> {\n" + " return std::vector>();\n" + " }, []() -> std::vector> {\n" + " return std::vector>();\n" + " }, {\n" + " \n" + " });"); + g_assert(view.get_buffer()->get_insert()->get_iter().get_line() == 5); + g_assert(view.get_buffer()->get_insert()->get_iter().get_line_offset() == 4); + } + + { + view.get_buffer()->set_text(" auto func=[] {"); + view.on_key_press_event(&event); + g_assert(view.get_buffer()->get_text() == " auto func=[] {\n" + " \n" + " };"); + g_assert(view.get_buffer()->get_insert()->get_iter().get_line() == 1); + g_assert(view.get_buffer()->get_insert()->get_iter().get_line_offset() == 4); + } + + { + view.get_buffer()->set_text(" void Class::Class()\n" + " : var(1) {"); + view.on_key_press_event(&event); + g_assert(view.get_buffer()->get_text() == " void Class::Class()\n" + " : var(1) {\n" + " \n" + " }"); + g_assert(view.get_buffer()->get_insert()->get_iter().get_line() == 2); + g_assert(view.get_buffer()->get_insert()->get_iter().get_line_offset() == 4); + } + { + view.get_buffer()->set_text(" void Class::Class() :\n" + " var(1) {"); + view.on_key_press_event(&event); + g_assert(view.get_buffer()->get_text() == " void Class::Class() :\n" + " var(1) {\n" + " \n" + " }"); + g_assert(view.get_buffer()->get_insert()->get_iter().get_line() == 2); + g_assert(view.get_buffer()->get_insert()->get_iter().get_line_offset() == 4); + } + { + view.get_buffer()->set_text(" void Class::Class(int a,\n" + " int b) {"); + view.on_key_press_event(&event); + g_assert(view.get_buffer()->get_text() == " void Class::Class(int a,\n" + " int b) {\n" + " \n" + " }"); + g_assert(view.get_buffer()->get_insert()->get_iter().get_line() == 2); + g_assert(view.get_buffer()->get_insert()->get_iter().get_line_offset() == 4); + } + + { + view.get_buffer()->set_text(" class Class : BaseClass {\n" + " public:"); + view.on_key_press_event(&event); + g_assert(view.get_buffer()->get_text() == " class Class : BaseClass {\n" + " public:\n" + " "); + g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end()); + } + { + view.get_buffer()->set_text(" class Class : BaseClass {\n" + " public:"); + view.on_key_press_event(&event); + g_assert(view.get_buffer()->get_text() == " class Class : BaseClass {\n" + " public:\n" + " "); + g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end()); + } + { + view.get_buffer()->set_text(" class Class : BaseClass {\n" + " int a;\n" + " public:"); + view.on_key_press_event(&event); + g_assert(view.get_buffer()->get_text() == " class Class : BaseClass {\n" + " int a;\n" + " public:\n" + " "); + g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end()); + } + { + view.get_buffer()->set_text(" class Class : BaseClass {\n" + " int a;\n" + " public:"); + view.on_key_press_event(&event); + g_assert(view.get_buffer()->get_text() == " class Class : BaseClass {\n" + " int a;\n" + " public:\n" + " "); + g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end()); + } + + event.keyval = GDK_KEY_braceleft; + { + view.get_buffer()->set_text(" int main()\n" + " "); + view.on_key_press_event(&event); + g_assert(view.get_buffer()->get_text() == " int main()\n" + " {"); + g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end()); + } + { + view.get_buffer()->set_text(" if(true)\n" + " "); + view.on_key_press_event(&event); + g_assert(view.get_buffer()->get_text() == " if(true)\n" + " {"); + g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end()); + } + { + view.get_buffer()->set_text(" if(true)\n" + " "); + view.on_key_press_event(&event); + g_assert(view.get_buffer()->get_text() == " if(true)\n" + " {"); + g_assert(view.get_buffer()->get_insert()->get_iter() == view.get_buffer()->end()); + } + } +}