]> git.lyx.org Git - lyx.git/commitdiff
Add test for Layout::write()
authorGeorg Baum <baum@lyx.org>
Mon, 13 May 2013 19:53:28 +0000 (21:53 +0200)
committerGeorg Baum <baum@lyx.org>
Mon, 13 May 2013 19:53:28 +0000 (21:53 +0200)
When running the test, you'll get the following messages:

Testing ../../src/../lib/layouts/siamltex.layout...
Layout.cpp (268): Cannot copy unknown style `Enumerate'
Testing ../../src/../lib/layouts/svglobal.layout...
Cannot delete style `Dedication'
Testing ../../src/../lib/layouts/svjog.layout...
Cannot delete style `Dedication'
Testing ../../src/../lib/layouts/svprobth.layout...
Cannot delete style `Dedication'

These are no errors of Layout::write(), but they indicate problems in the
definition of the layout files.

Kornel, it would be nice if you could do the cmake part.

src/Layout.cpp
src/Makefile.am
src/support/tests/dummy_functions.cpp
src/tests/check_Layout.cpp [new file with mode: 0644]
src/tests/test_Layout [new file with mode: 0755]
src/tex2lyx/CMakeLists.txt
src/tex2lyx/Makefile.am

index b48b764904f2fcc350cd577d963818dd08c41570..5ac163a532fd1d9e51611645bba72787bd62b32f 100644 (file)
@@ -1478,7 +1478,7 @@ void Layout::makeDefaultCSS() const
        }
 
 // tex2lyx does not see output_xhtml.cpp
-#ifndef TEX2LYX
+#ifndef NO_LAYOUT_CSS
        // alignment
        string where = alignmentToCSS(align);
        if (!where.empty()) {
index bdf0c7bbfec6464796218af17b90399b94f60ed0..780b7102ff021bee77f33d4cfecf2a11cb797fae 100644 (file)
@@ -666,3 +666,38 @@ else
 liblyxinsets_a_SOURCES = $(SOURCEFILESINSETS) $(HEADERFILESINSETS)
 
 endif
+
+
+############################## Tests ##################################
+
+EXTRA_DIST += \
+       tests/test_Layout
+
+
+TESTS = \
+       tests/test_Layout
+
+check_PROGRAMS = \
+       check_Layout
+
+check_Layout_CPPFLAGS = $(AM_CPPFLAGS) -DNO_LAYOUT_CSS
+check_Layout_LDADD = support/liblyxsupport.a $(INTLLIBS) $(LIBICONV) $(BOOST_LIBS) @LIBS@ $(QT4_CORE_LIBS) $(LIBSHLWAPI)
+# need to allow multiple definitions of _() (see dummy_functions.cpp)
+check_Layout_LDFLAGS = $(QT4_CORE_LDFLAGS) -Wl,--allow-multiple-definition
+check_Layout_SOURCES = \
+       insets/InsetLayout.cpp \
+       Color.cpp \
+       Counters.cpp \
+       Floating.cpp \
+       FloatList.cpp \
+       FontInfo.cpp \
+       Layout.cpp \
+       LayoutFile.cpp \
+       Lexer.cpp \
+       ModuleList.cpp \
+       Spacing.cpp \
+       TextClass.cpp \
+       tests/check_Layout.cpp \
+       support/tests/boost.cpp \
+       support/tests/dummy_functions.cpp
+
index bfec86f333c82f3ef9da7491719d1e1701743756..63f16db092a82414f7afbcdb5b6fcda02c4e60bd 100644 (file)
@@ -18,6 +18,12 @@ namespace lyx {
        {
                static Messages lyx_messages;
 
+               return lyx_messages;
+       }
+       Messages const & getMessages(string const &)
+       {
+               static Messages lyx_messages;
+
                return lyx_messages;
        }
 }
diff --git a/src/tests/check_Layout.cpp b/src/tests/check_Layout.cpp
new file mode 100644 (file)
index 0000000..b4ecad9
--- /dev/null
@@ -0,0 +1,130 @@
+#include <config.h>
+
+#include "../support/FileName.h"
+#include "../support/filetools.h"
+#include "../Format.h"
+#include "../LayoutFile.h"
+#include "../LaTeXFeatures.h"
+#include "../Lexer.h"
+#include "../support/Messages.h"
+#include "../support/os.h"
+#include "../support/Package.h"
+
+#include <cstdlib>
+#include <iostream>
+
+
+namespace lyx {
+namespace frontend {
+namespace Alert {
+void warning(docstring const & title, docstring const & message, bool const &)
+{
+       LYXERR0(title);
+       LYXERR0(message);
+}
+}
+}
+
+bool LaTeXFeatures::isAvailable(std::string const &)
+{
+       return false;
+}
+
+Formats formats;
+bool Formats::isZippedFile(support::FileName const &) const
+{
+       return false;
+}
+}
+
+
+using namespace lyx::support;
+using namespace lyx;
+
+using namespace std;
+
+
+bool test_Layout(string const & input, string const & output)
+{
+       FileName const ifn(makeAbsPath(input));
+       LayoutFileList l;
+       LayoutFileIndex i = l.addLocalLayout(ifn.onlyFileName(), ifn.onlyPath().absFileName());
+       if (i.empty()) {
+               cerr << "Could not read layout file " << input << ".layout.\n";
+               return false;
+       }
+       LayoutFile const & f = l[i];
+       ostream * os = NULL;
+       if (output == "-")
+               os = &cout;
+       else if (!output.empty())
+               os = new ofstream(output.c_str());
+       bool success = true;
+       for (TextClass::const_iterator it = f.begin(); it != f.end(); ++it) {
+               if (os)
+                       it->write(*os);
+               ostringstream oss;
+               it->write(oss);
+               istringstream iss(oss.str());
+               // swallow "Style Standard" line
+               string line;
+               if (getline(iss, line)) {
+                       Lexer lex;
+                       lex.setStream(iss);
+                       Layout test;
+                       test.setName(it->name());
+                       if (test.read(lex, f)) {
+                               // Caution: operator==() is incomplete!
+                               // Testing test == *it does not make much sense
+                               // therefore.
+                               // It does not work either for styles with
+                               // non-empty obsoletedby if the obsoletedby
+                               // style was modified after the obsolete style
+                               // was defined: Layout::write() writes only the
+                               // final version, but the obsolete style was
+                               // set to the version at the time it was
+                               // defined, and therefore they differ. See e.g.
+                               // the obsolete style AMS which is replaced by
+                               // Subjectclass in amsdefs.inc, and
+                               // Subjectclass is modified later in siamltex.layout.
+                               ostringstream osstest;
+                               test.write(osstest);
+                               if (osstest.str() != oss.str()) {
+                                       cerr << "Round trip for style "
+                                            << to_utf8(it->name())
+                                            << " failed:\n"
+                                            << osstest.str() << oss.str();
+                                       success = false;
+                               }
+                       } else {
+                               cerr << "Could not read style "
+                                    << to_utf8(it->name()) << ".\n";
+                               success = false;
+                       }
+               } else {
+                       cerr << "Could not read first line for style "
+                            << to_utf8(it->name()) << ".\n";
+                       success = false;
+               }
+       }
+       if (output != "-")
+               delete os;
+       return success;
+}
+
+
+int main(int argc, char * argv[])
+{
+       os::init(argc, argv);
+       lyxerr.setStream(cerr);
+       if (argc < 2 || argc > 3) {
+               cerr << "Usage: " << argv[0] << " <input layout file> [<output layout file>]\n";
+               return EXIT_FAILURE;
+       }
+       FileName const exe(makeAbsPath(os::internal_path(os::utf8_argv(0))));
+       string const lyxexe = addName(exe.onlyPath().absFileName(), "lyx");
+       init_package(lyxexe, string(), string());
+       if (test_Layout(argv[1], argc > 2 ? argv[2] : ""))
+               return EXIT_SUCCESS;
+       return EXIT_FAILURE;
+}
diff --git a/src/tests/test_Layout b/src/tests/test_Layout
new file mode 100755 (executable)
index 0000000..02431ea
--- /dev/null
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+retval=0
+for i in ${srcdir}/../lib/layouts/*.layout
+do
+       echo Testing $i...
+       dn=`dirname $i`
+       bn=`basename $i .layout`
+       if ! ./check_Layout ${dn}/${bn}; then
+               retval=1
+       fi
+done
+exit $retval
index ee36c5fda1daa941ec584d0f8c3220f11db91abe..751926e301651a57c9bf92602a7160bf93eca239 100644 (file)
@@ -30,6 +30,7 @@ include_directories(BEFORE
        ${ZLIB_INCLUDE_DIR})
 
 add_definitions(-DTEX2LYX)
+add_definitions(-DNO_LAYOUT_CSS)
 
 if(WIN32)
        set(FILE_RC ${TOP_CMAKE_PATH}/lyx.rc)
index 0da4b02e28b9076f3693ad02cd9e1f052c94afe7..5be47e7556d1469ff06c9532bd1e96abb6a1d6f3 100644 (file)
@@ -16,7 +16,7 @@ bin_PROGRAMS = tex2lyx
 
 DEFAULT_INCLUDES = 
 
-AM_CPPFLAGS += -DTEX2LYX $(PCH_FLAGS) -I$(top_srcdir)/src/tex2lyx \
+AM_CPPFLAGS += -DTEX2LYX -DNO_LAYOUT_CSS $(PCH_FLAGS) -I$(top_srcdir)/src/tex2lyx \
        -I$(top_srcdir)/src -I$(top_builddir) $(BOOST_INCLUDES)
 
 TEST_FILES = \