Skip to content

Commit 4535a36

Browse files
committed
Add test for xinspect, Update tags
1 parent 1fe6daf commit 4535a36

File tree

4 files changed

+91
-22
lines changed

4 files changed

+91
-22
lines changed

CMakeLists.txt

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,16 @@ set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake;${CMAKE_MODULE_PATH}")
2323

2424
set(XEUS_CPP_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)
2525

26+
# xeus-cpp tag files
27+
set(XEUS_CPP_DATA_DIR "share/xeus-cpp" CACHE STRING "xeus-cpp data directory")
28+
set(XCPP_TAGFILES_DIR ${CMAKE_CURRENT_SOURCE_DIR}/share/xeus-cpp/tagfiles)
29+
30+
set(XEUS_CPP_CONF_DIR "etc/xeus-cpp" CACHE STRING "xeus-cpp configuration directory")
31+
set(XCPP_TAGCONFS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/etc/xeus-cpp/tags.d)
32+
33+
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/include/xeus-cpp/xeus_cpp_config.hpp.in"
34+
"${CMAKE_CURRENT_SOURCE_DIR}/include/xeus-cpp/xeus_cpp_config.hpp")
35+
2636
# Versionning
2737
# ===========
2838

@@ -387,6 +397,12 @@ include(CMakePackageConfigHelpers)
387397

388398
set(XEUS_CPP_CMAKECONFIG_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" CACHE STRING "install path for xeus-cppConfig.cmake")
389399

400+
install(DIRECTORY ${XCPP_TAGFILES_DIR}
401+
DESTINATION ${XEUS_CPP_DATA_DIR})
402+
403+
install(DIRECTORY ${XCPP_TAGCONFS_DIR}
404+
DESTINATION ${XEUS_CPP_CONF_DIR})
405+
390406
# Install xeus-cpp and xeus-cpp-static
391407
if (XEUS_CPP_BUILD_SHARED)
392408
install(TARGETS ${XEUS_CPP_TARGETS}
@@ -434,26 +450,6 @@ configure_package_config_file(${PROJECT_NAME}Config.cmake.in
434450
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
435451
INSTALL_DESTINATION ${PROJECT_BINARY_DIR})
436452

437-
# Install xeus-cpp tag files
438-
set(XEUS_CPP_DATA_DIR "share/xeus-cpp" CACHE STRING "xeus-cpp data directory")
439-
set(XCPP_TAGFILES_DIR ${CMAKE_CURRENT_SOURCE_DIR}/share/xeus-cpp/tagfiles)
440-
install(DIRECTORY ${XCPP_TAGFILES_DIR}
441-
DESTINATION ${XEUS_CPP_DATA_DIR})
442-
443-
set(XEUS_CPP_CONF_DIR "etc/xeus-cpp" CACHE STRING "xeus-cpp configuration directory")
444-
set(XCPP_TAGCONFS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/etc/xeus-cpp/tags.d)
445-
install(DIRECTORY ${XCPP_TAGCONFS_DIR}
446-
DESTINATION ${XEUS_CPP_CONF_DIR})
447-
448-
# Add definitions for the kernel to find tagfiles.
449-
add_definitions(-DXCPP_TAGFILES_DIR="${CMAKE_INSTALL_PREFIX}/${XEUS_CPP_DATA_DIR}/tagfiles")
450-
if(CMAKE_INSTALL_PREFIX STREQUAL "/usr")
451-
# install into /etc instead of /usr/etc
452-
add_definitions(-DXCPP_TAGCONFS_DIR="/${XEUS_CPP_CONF_DIR}/tags.d")
453-
else()
454-
add_definitions(-DXCPP_TAGCONFS_DIR="${CMAKE_INSTALL_PREFIX}/${XEUS_CPP_CONF_DIR}/tags.d")
455-
endif()
456-
457453
# Configure 'xeus-cppConfig.cmake.in for an install tree
458454
set(XEUS_CPP_CONFIG_CODE "")
459455
configure_package_config_file(${PROJECT_NAME}Config.cmake.in

include/xeus-cpp/xeus_cpp_config.hpp renamed to include/xeus-cpp/xeus_cpp_config.hpp.in

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414
#define XEUS_CPP_VERSION_MINOR 4
1515
#define XEUS_CPP_VERSION_PATCH 0
1616

17+
#define XCPP_TAGFILES_DIR "@XCPP_TAGFILES_DIR@"
18+
#define XCPP_TAGCONFS_DIR "@XCPP_TAGCONFS_DIR@"
19+
1720
// Composing the version string from major, minor and patch
1821
#define XEUS_CPP_CONCATENATE(A, B) XEUS_CPP_CONCATENATE_IMPL(A, B)
1922
#define XEUS_CPP_CONCATENATE_IMPL(A, B) A##B

src/xinterpreter.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222

2323
#include "xeus-cpp/xbuffer.hpp"
2424
#include "xeus-cpp/xeus_cpp_config.hpp"
25-
2625
#include "xeus-cpp/xinterpreter.hpp"
2726
#include "xeus-cpp/xmagics.hpp"
2827

test/test_interpreter.cpp

Lines changed: 72 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,16 @@
1212
#include "xeus-cpp/xmanager.hpp"
1313
#include "xeus-cpp/xutils.hpp"
1414
#include "xeus-cpp/xoptions.hpp"
15+
#include "xeus-cpp/xeus_cpp_config.hpp"
1516

1617
#include "../src/xparser.hpp"
1718
#include "../src/xsystem.hpp"
1819
#include "../src/xmagics/os.hpp"
20+
#include "../src/xinspect.hpp"
1921

20-
#include <iostream>
2122

23+
#include <iostream>
24+
#include <pugixml.hpp>
2225
#include <fstream>
2326
#if defined(__GNUC__) && !defined(XEUS_CPP_EMSCRIPTEN_WASM_BUILD)
2427
#include <sys/wait.h>
@@ -718,6 +721,20 @@ TEST_SUITE("xmagics_apply"){
718721
REQUIRE(redirect.getCaptured() == "UsageError: %%test is a cell magic, but the cell body is empty.\n"
719722
"If you only intend to display %%test help, please use a double line break to fill in the cell body.\n");
720723
}
724+
TEST_CASE("cell magic with empty cell body") {
725+
xcpp::xmagics_manager manager;
726+
727+
std::stringstream ss;
728+
auto cerr_buff = std::cerr.rdbuf();
729+
std::cerr.rdbuf(ss.rdbuf());
730+
731+
manager.apply("test", "line", "");
732+
733+
std::cerr.rdbuf(cerr_buff);
734+
REQUIRE(ss.str() == "UsageError: %%test is a cell magic, but the cell body is empty.\n"
735+
"If you only intend to display %%test help, please use a double line break to fill in the cell body.\n");
736+
737+
}
721738
}
722739

723740
#if defined(__GNUC__) && !defined(XEUS_CPP_EMSCRIPTEN_WASM_BUILD)
@@ -765,4 +782,58 @@ TEST_SUITE("complete_request")
765782
}
766783
REQUIRE(found == 2);
767784
}
785+
}
786+
787+
TEST_SUITE("xinspect"){
788+
TEST_CASE("class_member_predicate_get_filename"){
789+
xcpp::class_member_predicate cmp;
790+
cmp.class_name = "TestClass";
791+
cmp.kind = "public";
792+
cmp.child_value = "testMethod";
793+
794+
pugi::xml_document doc;
795+
pugi::xml_node node = doc.append_child("node");
796+
node.append_attribute("kind") = "class";
797+
pugi::xml_node name = node.append_child("name");
798+
name.append_child(pugi::node_pcdata).set_value("TestClass");
799+
pugi::xml_node child = node.append_child("node");
800+
child.append_attribute("kind") = "public";
801+
pugi::xml_node child_name = child.append_child("name");
802+
child_name.append_child(pugi::node_pcdata).set_value("testMethod");
803+
pugi::xml_node anchorfile = child.append_child("anchorfile");
804+
anchorfile.append_child(pugi::node_pcdata).set_value("testfile.cpp");
805+
806+
REQUIRE(cmp.get_filename(node) == "testfile.cpp");
807+
808+
cmp.child_value = "nonexistentMethod";
809+
REQUIRE(cmp.get_filename(node) == "");
810+
}
811+
812+
TEST_CASE("class_member_predicate_operator"){
813+
xcpp::class_member_predicate cmp;
814+
cmp.class_name = "TestClass";
815+
cmp.kind = "public";
816+
cmp.child_value = "testMethod";
817+
818+
pugi::xml_document doc;
819+
pugi::xml_node node = doc.append_child("node");
820+
node.append_attribute("kind") = "class";
821+
pugi::xml_node name = node.append_child("name");
822+
name.append_child(pugi::node_pcdata).set_value("TestClass");
823+
pugi::xml_node child = node.append_child("node");
824+
child.append_attribute("kind") = "public";
825+
pugi::xml_node child_name = child.append_child("name");
826+
child_name.append_child(pugi::node_pcdata).set_value("testMethod");
827+
828+
829+
REQUIRE(cmp(node) == true);
830+
node.attribute("kind").set_value("struct");
831+
REQUIRE(cmp(node) == true);
832+
cmp.class_name = "NonexistentClass";
833+
REQUIRE(cmp(node) == false);
834+
cmp.kind = "private";
835+
REQUIRE(cmp(node) == false);
836+
cmp.child_value = "nonexistentMethod";
837+
REQUIRE(cmp(node) == false);
838+
}
768839
}

0 commit comments

Comments
 (0)