Skip to content

Commit 6f94347

Browse files
committed
Add tests for xinspect, update cmake
1 parent 1fe6daf commit 6f94347

File tree

5 files changed

+107
-33
lines changed

5 files changed

+107
-33
lines changed

CMakeLists.txt

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -23,19 +23,30 @@ 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+
2633
# Versionning
2734
# ===========
2835

29-
file(STRINGS "${XEUS_CPP_INCLUDE_DIR}/xeus-cpp/xeus_cpp_config.hpp" version_defines
30-
REGEX "#define XEUS_CPP_VERSION_(MAJOR|MINOR|PATCH)")
31-
foreach (ver ${version_defines})
32-
if (ver MATCHES "#define XEUS_CPP_VERSION_(MAJOR|MINOR|PATCH) +([^ ]+)$")
33-
set(XEUS_CPP_VERSION_${CMAKE_MATCH_1} "${CMAKE_MATCH_2}" CACHE INTERNAL "")
34-
endif ()
35-
endforeach ()
36+
file(STRINGS "VERSION" XEUS_CPP_VERSION)
37+
string(REPLACE "." ";" VERSION_LIST "${XEUS_CPP_VERSION}")
38+
string(REPLACE "\\" "" VERSION_LIST "${VERSION_LIST}")
39+
list(GET VERSION_LIST 0 XEUS_CPP_VERSION_MAJOR)
40+
list(GET VERSION_LIST 1 XEUS_CPP_VERSION_MINOR)
41+
list(GET VERSION_LIST 2 XEUS_CPP_VERSION_PATCH)
42+
3643
set(${PROJECT_NAME}_VERSION
3744
${XEUS_CPP_VERSION_MAJOR}.${XEUS_CPP_VERSION_MINOR}.${XEUS_CPP_VERSION_PATCH})
38-
message(STATUS "Building xeus-cpp v${${PROJECT_NAME}_VERSION}")
45+
46+
# message("Major version: ${XEUS_CPP_VERSION_MAJOR}")
47+
# message("Minor version: ${XEUS_CPP_VERSION_MINOR}")
48+
# message("Patch version: ${XEUS_CPP_VERSION_PATCH}")
49+
message(STATUS "Building xeus-cpp v${XEUS_CPP_VERSION}")
3950

4051
# Build options
4152
# =============
@@ -168,6 +179,9 @@ message("Configure kernels: ...")
168179
configure_kernel("/share/jupyter/kernels/xcpp17/")
169180
configure_kernel("/share/jupyter/kernels/xcpp20/")
170181

182+
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/include/xeus-cpp/xeus_cpp_config.hpp.in"
183+
"${CMAKE_CURRENT_SOURCE_DIR}/include/xeus-cpp/xeus_cpp_config.hpp")
184+
171185
# Source files
172186
# ============
173187

@@ -387,6 +401,12 @@ include(CMakePackageConfigHelpers)
387401

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

404+
install(DIRECTORY ${XCPP_TAGFILES_DIR}
405+
DESTINATION ${XEUS_CPP_DATA_DIR})
406+
407+
install(DIRECTORY ${XCPP_TAGCONFS_DIR}
408+
DESTINATION ${XEUS_CPP_CONF_DIR})
409+
390410
# Install xeus-cpp and xeus-cpp-static
391411
if (XEUS_CPP_BUILD_SHARED)
392412
install(TARGETS ${XEUS_CPP_TARGETS}
@@ -434,26 +454,6 @@ configure_package_config_file(${PROJECT_NAME}Config.cmake.in
434454
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
435455
INSTALL_DESTINATION ${PROJECT_BINARY_DIR})
436456

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-
457457
# Configure 'xeus-cppConfig.cmake.in for an install tree
458458
set(XEUS_CPP_CONFIG_CODE "")
459459
configure_package_config_file(${PROJECT_NAME}Config.cmake.in

VERSION

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
0.5.0;dev

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,12 @@
1010
#define XEUS_CPP_CONFIG_HPP
1111

1212
// Project version
13-
#define XEUS_CPP_VERSION_MAJOR 0
14-
#define XEUS_CPP_VERSION_MINOR 4
15-
#define XEUS_CPP_VERSION_PATCH 0
13+
#define XEUS_CPP_VERSION_MAJOR @XEUS_CPP_VERSION_MAJOR@
14+
#define XEUS_CPP_VERSION_MINOR @XEUS_CPP_VERSION_MINOR@
15+
#define XEUS_CPP_VERSION_PATCH @XEUS_CPP_VERSION_PATCH@
16+
17+
#define XCPP_TAGFILES_DIR "@XCPP_TAGFILES_DIR@"
18+
#define XCPP_TAGCONFS_DIR "@XCPP_TAGCONFS_DIR@"
1619

1720
// Composing the version string from major, minor and patch
1821
#define XEUS_CPP_CONCATENATE(A, B) XEUS_CPP_CONCATENATE_IMPL(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)