mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-22 01:59:02 +00:00
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:
parent
02e59530b1
commit
b79c88034e
@ -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()) {
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
130
src/tests/check_Layout.cpp
Normal 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
13
src/tests/test_Layout
Executable 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
|
@ -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)
|
||||
|
@ -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 = \
|
||||
|
Loading…
Reference in New Issue
Block a user