Add test for Layout::write()

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.
This commit is contained in:
Georg Baum 2013-05-13 21:53:28 +02:00
parent 02e59530b1
commit b79c88034e
7 changed files with 187 additions and 2 deletions

View 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()) {

View 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

View 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;
}
}

130
src/tests/check_Layout.cpp Normal file
View File

@ -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;
}

13
src/tests/test_Layout Executable file
View File

@ -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

View 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)

View 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 = \