commit 3b842d5a62fdf1938edfd6acdef527bb3bb9a628
Author: Georg Baum <[email protected]>
Date:   Sun Nov 22 17:34:46 2015 +0100

    Add unit test for InsetListings::getCaption()
    
    The regex in InsetListings::getCaption() does not work with C++11 and
    std::regex. This can now be checked easily by this new unit test.

diff --git a/src/Makefile.am b/src/Makefile.am
index c10b8e5..9446d17 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -698,12 +698,14 @@ endif
 
 EXTRA_DIST += \
        tests/test_ExternalTransforms \
+       tests/test_ListingsCaption \
        tests/regfiles/ExternalTransforms \
        tests/regfiles/Length \
+       tests/regfiles/ListingsCaption \
        tests/test_layout \
        tests/test_Length
 
-TESTS = tests/test_ExternalTransforms tests/test_Length
+TESTS = tests/test_ExternalTransforms tests/test_Length 
tests/test_ListingsCaption
 
 alltests: check alltests-recursive
 
@@ -722,6 +724,7 @@ updatetests:
 check_PROGRAMS = \
        check_ExternalTransforms \
        check_Length \
+       check_ListingsCaption \
        check_layout
 
 if INSTALL_MACOSX
@@ -770,4 +773,12 @@ check_Length_SOURCES = \
        tests/boost.cpp \
        tests/dummy_functions.cpp
 
+check_ListingsCaption_CPPFLAGS = $(AM_CPPFLAGS)
+check_ListingsCaption_LDADD = support/liblyxsupport.a $(LIBICONV) 
$(BOOST_LIBS) @LIBS@ $(QT_LIB) $(LIBSHLWAPI)
+check_ListingsCaption_LDFLAGS = $(QT_LDFLAGS) $(ADD_FRAMEWORKS)
+check_ListingsCaption_SOURCES = \
+       tests/check_ListingsCaption.cpp \
+       tests/boost.cpp \
+       tests/dummy_functions.cpp
+
 .PHONY: alltests alltests-recursive updatetests
diff --git a/src/insets/InsetListings.cpp b/src/insets/InsetListings.cpp
index ac31d28..9c7daf2 100644
--- a/src/insets/InsetListings.cpp
+++ b/src/insets/InsetListings.cpp
@@ -400,6 +400,10 @@ docstring InsetListings::getCaption(OutputParams const & 
runparams) const
        otexstream os(ods, texrow);
        ins->getArgs(os, runparams);
        ins->getArgument(os, runparams);
+
+       // TODO: The code below should be moved to support, and then the test
+       //       in ../tests should be moved there as well.
+
        // the caption may contain \label{} but the listings
        // package prefer caption={}, label={}
        docstring cap = ods.str();
diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt
index afcceb5..daf4a06 100644
--- a/src/tests/CMakeLists.txt
+++ b/src/tests/CMakeLists.txt
@@ -104,3 +104,25 @@ add_test(NAME "check_Length"
        -P "${TOP_SRC_DIR}/src/support/tests/supporttest.cmake")
 add_dependencies(lyx_run_tests check_Length)
 
+include_directories(${TOP_SRC_DIR}/src/tests)
+set(check_ListingsCaption_SOURCES)
+foreach(_f tests/check_ListingsCaption.cpp tests/boost.cpp 
tests/dummy_functions.cpp)
+  list(APPEND check_ListingsCaption_SOURCES ${TOP_SRC_DIR}/src/${_f})
+endforeach()
+add_executable(check_ListingsCaption ${check_ListingsCaption_SOURCES})
+
+target_link_libraries(check_ListingsCaption support
+       ${Lyx_Boost_Libraries} ${QT_QTGUI_LIBRARY} ${QT_QTCORE_LIBRARY})
+lyx_target_link_libraries(check_ListingsCaption Magic)
+
+add_dependencies(lyx_run_tests check_ListingsCaption)
+set_target_properties(check_ListingsCaption PROPERTIES FOLDER "tests/src")
+target_link_libraries(check_ListingsCaption ${ICONV_LIBRARY})
+
+add_test(NAME "check_ListingsCaption"
+  COMMAND ${CMAKE_COMMAND} -DCommand=$<TARGET_FILE:check_ListingsCaption>
+       "-DInput=${TOP_SRC_DIR}/src/tests/regfiles/ListingsCaption"
+       "-DOutput=${CMAKE_CURRENT_BINARY_DIR}/ListingsCaption_data"
+       -P "${TOP_SRC_DIR}/src/support/tests/supporttest.cmake")
+add_dependencies(lyx_run_tests check_ListingsCaption)
+
diff --git a/src/tests/check_ListingsCaption.cpp 
b/src/tests/check_ListingsCaption.cpp
new file mode 100644
index 0000000..2df43e8
--- /dev/null
+++ b/src/tests/check_ListingsCaption.cpp
@@ -0,0 +1,48 @@
+#include <config.h>
+
+#include "../support/debug.h"
+#include "../support/regex.h"
+
+#include <iostream>
+
+
+using namespace lyx;
+using namespace std;
+
+
+// This function is unfortunately copied from ../insets/InsetListing.cpp, so we
+// should try to make sure to keep the two in sync.
+string test_ListingsCaption(string const & cap)
+{
+       // convert from
+       //     blah1\label{blah2} blah3
+       // to
+       //     blah1 blah3},label={blah2
+       // to form options
+       //     caption={blah1 blah3},label={blah2}
+       //
+       // NOTE that } is not allowed in blah2.
+       regex const reg("(.*)\\\\label\\{(.*?)\\}(.*)");
+       string const new_cap("\\1\\3},label={\\2");
+       return regex_replace(cap, reg, new_cap);
+}
+
+void test_test_ListingsCaptions()
+{
+       cout << test_ListingsCaption("\\label{}") << endl;
+       cout << test_ListingsCaption("\\label{blah2}") << endl;
+       cout << test_ListingsCaption("\\label{blah2} blah3") << endl;
+       cout << test_ListingsCaption("\\label{} blah3") << endl;
+       cout << test_ListingsCaption("blah1\\label{}") << endl;
+       cout << test_ListingsCaption("blah1\\label{} blah3") << endl;
+       cout << test_ListingsCaption("blah1\\label{blah2}") << endl;
+       cout << test_ListingsCaption("blah1\\label{blah2} blah3") << endl;
+}
+
+
+int main(int, char **)
+{
+       // Connect lyxerr with cout instead of cerr to catch error output
+       lyx::lyxerr.setStream(cout);
+       test_test_ListingsCaptions();
+}
diff --git a/src/tests/regfiles/ListingsCaption 
b/src/tests/regfiles/ListingsCaption
new file mode 100644
index 0000000..f9fea93
--- /dev/null
+++ b/src/tests/regfiles/ListingsCaption
@@ -0,0 +1,8 @@
+},label={
+},label={blah2
+ blah3},label={blah2
+ blah3},label={
+blah1},label={
+blah1 blah3},label={
+blah1},label={blah2
+blah1 blah3},label={blah2
diff --git a/src/tests/test_ListingsCaption b/src/tests/test_ListingsCaption
new file mode 100755
index 0000000..cbfcf87
--- /dev/null
+++ b/src/tests/test_ListingsCaption
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+regfile=`cat ${srcdir}/tests/regfiles/ListingsCaption`
+output=`./check_ListingsCaption`
+
+test "$regfile" = "$output"
+exit $?

Reply via email to