mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-22 10:00:33 +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
|
// tex2lyx does not see output_xhtml.cpp
|
||||||
#ifndef TEX2LYX
|
#ifndef NO_LAYOUT_CSS
|
||||||
// alignment
|
// alignment
|
||||||
string where = alignmentToCSS(align);
|
string where = alignmentToCSS(align);
|
||||||
if (!where.empty()) {
|
if (!where.empty()) {
|
||||||
|
@ -666,3 +666,38 @@ else
|
|||||||
liblyxinsets_a_SOURCES = $(SOURCEFILESINSETS) $(HEADERFILESINSETS)
|
liblyxinsets_a_SOURCES = $(SOURCEFILESINSETS) $(HEADERFILESINSETS)
|
||||||
|
|
||||||
endif
|
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;
|
static Messages lyx_messages;
|
||||||
|
|
||||||
|
return lyx_messages;
|
||||||
|
}
|
||||||
|
Messages const & getMessages(string const &)
|
||||||
|
{
|
||||||
|
static Messages lyx_messages;
|
||||||
|
|
||||||
return 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})
|
${ZLIB_INCLUDE_DIR})
|
||||||
|
|
||||||
add_definitions(-DTEX2LYX)
|
add_definitions(-DTEX2LYX)
|
||||||
|
add_definitions(-DNO_LAYOUT_CSS)
|
||||||
|
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
set(FILE_RC ${TOP_CMAKE_PATH}/lyx.rc)
|
set(FILE_RC ${TOP_CMAKE_PATH}/lyx.rc)
|
||||||
|
@ -16,7 +16,7 @@ bin_PROGRAMS = tex2lyx
|
|||||||
|
|
||||||
DEFAULT_INCLUDES =
|
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)
|
-I$(top_srcdir)/src -I$(top_builddir) $(BOOST_INCLUDES)
|
||||||
|
|
||||||
TEST_FILES = \
|
TEST_FILES = \
|
||||||
|
Loading…
Reference in New Issue
Block a user