Unit tests update

This commit is contained in:
Markus Gans 2018-03-28 00:03:57 +02:00
parent 67bc999513
commit 75e7fb05c2
10 changed files with 306 additions and 18 deletions

View File

@ -3,7 +3,7 @@
* *
* This file is part of the Final Cut widget toolkit *
* *
* Copyright 2015-2017 Markus Gans *
* Copyright 2015-2018 Markus Gans *
* *
* The Final Cut is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Lesser General Public License *
@ -27,6 +27,9 @@
#error "Only <final/final.h> can be included directly."
#endif
// Typecast to c-string
#define C_STR const_cast<char*>
// ASCII sequences
#define ESC "\033" // Escape
#define CSI ESC "[" // Control sequence introducer (7-bit)

View File

@ -121,6 +121,9 @@ class FOptiAttr
friend bool operator == (const char_data&, const char_data&);
friend bool operator != (const char_data&, const char_data&);
// Accessors
const char* getClassName() const;
// Mutators
void setMaxColor (const int&);
void setNoColorVideo (int);
@ -357,6 +360,10 @@ inline bool operator != ( const FOptiAttr::char_data& lhs,
const FOptiAttr::char_data& rhs )
{ return ! ( lhs == rhs ); }
//----------------------------------------------------------------------
inline const char* FOptiAttr::getClassName() const
{ return "FOptiAttr"; }
//----------------------------------------------------------------------
inline void FOptiAttr::setMaxColor (const int& c)
{ max_color = c; }

View File

@ -80,6 +80,9 @@ class FOptiMove
// Destructor
~FOptiMove();
// Accessors
const char* getClassName() const;
// Mutators
void setBaudRate (int);
void setTabStop (int);
@ -108,6 +111,7 @@ class FOptiMove
void set_eat_newline_glitch (const bool&);
// Methods
void check_boundaries (int&, int&, int&, int&);
char* moveCursor (int, int, int, int);
void printDurations();
@ -190,6 +194,10 @@ class FOptiMove
// FOptiMove inline functions
//----------------------------------------------------------------------
inline const char* FOptiMove::getClassName() const
{ return "FOptiMove"; }
//----------------------------------------------------------------------
inline void FOptiMove::set_auto_left_margin (const bool& bcap)
{ automatic_left_margin = bcap; }

View File

@ -51,9 +51,6 @@
#error "Only <final/final.h> can be included directly."
#endif
// Typecast to c-string
#define C_STR const_cast<char*>
#include "final/fconfig.h"
#if defined(__linux__)

View File

@ -22,6 +22,7 @@
#include <cstring>
#include "final/fc.h"
#include "final/foptimove.h"
@ -63,6 +64,11 @@ FOptiMove::FOptiMove (int baud)
assert ( baud >= 0 );
move_buf[0] = '\0';
calculateCharDuration();
// ANSI set cursor address preset for undefined terminals
set_cursor_address (C_STR(CSI "%i%p1%d;%p2%dH"));
// Set carriage return preset
set_carriage_return (C_STR("\r"));
}
//----------------------------------------------------------------------
@ -485,12 +491,37 @@ int FOptiMove::set_clr_eol (char cap[])
return F_clr_eol.length;
}
//----------------------------------------------------------------------
void FOptiMove::check_boundaries ( int& xold, int& yold
, int& xnew, int& ynew )
{
if ( xold < 0 || xold >= screen_width )
xold = -1;
if ( yold < 0 || yold >= screen_height )
yold = -1;
if ( xnew < 0 )
xnew = 0;
if ( ynew < 0 )
ynew = 0;
if ( xnew >= screen_width )
xnew = screen_width - 1;
if ( ynew >= screen_height )
ynew = screen_height - 1;
}
//----------------------------------------------------------------------
char* FOptiMove::moveCursor (int xold, int yold, int xnew, int ynew)
{
int method = 0;
int move_time = LONG_DURATION;
check_boundaries (xold, yold, xnew, ynew);
// Method 0: direct cursor addressing
if ( isMethod0Faster(move_time, xnew, ynew) )
{

View File

@ -9,18 +9,21 @@ AM_CPPFLAGS = -I$(top_srcdir)/include -Wall -Werror
noinst_PROGRAMS = \
fobject_test \
fmouse_test \
foptimove_test \
fstring_test \
fpoint_test \
frect_test
fobject_test_SOURCES = fobject-test.cpp
fmouse_test_SOURCES = fmouse-test.cpp
foptimove_test_SOURCES = foptimove-test.cpp
fstring_test_SOURCES = fstring-test.cpp
fpoint_test_SOURCES = fpoint-test.cpp
frect_test_SOURCES = frect-test.cpp
TESTS = fobject_test \
fmouse_test \
foptimove_test \
fstring_test \
fpoint_test \
frect_test

View File

@ -83,9 +83,12 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
@CPPUNIT_TEST_TRUE@noinst_PROGRAMS = fobject_test$(EXEEXT) \
@CPPUNIT_TEST_TRUE@ fmouse_test$(EXEEXT) fstring_test$(EXEEXT) \
@CPPUNIT_TEST_TRUE@ fpoint_test$(EXEEXT) frect_test$(EXEEXT)
@CPPUNIT_TEST_TRUE@ fmouse_test$(EXEEXT) \
@CPPUNIT_TEST_TRUE@ foptimove_test$(EXEEXT) \
@CPPUNIT_TEST_TRUE@ fstring_test$(EXEEXT) fpoint_test$(EXEEXT) \
@CPPUNIT_TEST_TRUE@ frect_test$(EXEEXT)
@CPPUNIT_TEST_TRUE@TESTS = fobject_test$(EXEEXT) fmouse_test$(EXEEXT) \
@CPPUNIT_TEST_TRUE@ foptimove_test$(EXEEXT) \
@CPPUNIT_TEST_TRUE@ fstring_test$(EXEEXT) fpoint_test$(EXEEXT) \
@CPPUNIT_TEST_TRUE@ frect_test$(EXEEXT)
@CPPUNIT_TEST_TRUE@check_PROGRAMS = $(am__EXEEXT_1)
@ -105,8 +108,10 @@ CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
@CPPUNIT_TEST_TRUE@am__EXEEXT_1 = fobject_test$(EXEEXT) \
@CPPUNIT_TEST_TRUE@ fmouse_test$(EXEEXT) fstring_test$(EXEEXT) \
@CPPUNIT_TEST_TRUE@ fpoint_test$(EXEEXT) frect_test$(EXEEXT)
@CPPUNIT_TEST_TRUE@ fmouse_test$(EXEEXT) \
@CPPUNIT_TEST_TRUE@ foptimove_test$(EXEEXT) \
@CPPUNIT_TEST_TRUE@ fstring_test$(EXEEXT) fpoint_test$(EXEEXT) \
@CPPUNIT_TEST_TRUE@ frect_test$(EXEEXT)
PROGRAMS = $(noinst_PROGRAMS)
am__fmouse_test_SOURCES_DIST = fmouse-test.cpp
@CPPUNIT_TEST_TRUE@am_fmouse_test_OBJECTS = fmouse-test.$(OBJEXT)
@ -120,6 +125,11 @@ am__fobject_test_SOURCES_DIST = fobject-test.cpp
@CPPUNIT_TEST_TRUE@am_fobject_test_OBJECTS = fobject-test.$(OBJEXT)
fobject_test_OBJECTS = $(am_fobject_test_OBJECTS)
fobject_test_LDADD = $(LDADD)
am__foptimove_test_SOURCES_DIST = foptimove-test.cpp
@CPPUNIT_TEST_TRUE@am_foptimove_test_OBJECTS = \
@CPPUNIT_TEST_TRUE@ foptimove-test.$(OBJEXT)
foptimove_test_OBJECTS = $(am_foptimove_test_OBJECTS)
foptimove_test_LDADD = $(LDADD)
am__fpoint_test_SOURCES_DIST = fpoint-test.cpp
@CPPUNIT_TEST_TRUE@am_fpoint_test_OBJECTS = fpoint-test.$(OBJEXT)
fpoint_test_OBJECTS = $(am_fpoint_test_OBJECTS)
@ -167,10 +177,11 @@ am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@)
am__v_CXXLD_0 = @echo " CXXLD " $@;
am__v_CXXLD_1 =
SOURCES = $(fmouse_test_SOURCES) $(fobject_test_SOURCES) \
$(fpoint_test_SOURCES) $(frect_test_SOURCES) \
$(fstring_test_SOURCES)
$(foptimove_test_SOURCES) $(fpoint_test_SOURCES) \
$(frect_test_SOURCES) $(fstring_test_SOURCES)
DIST_SOURCES = $(am__fmouse_test_SOURCES_DIST) \
$(am__fobject_test_SOURCES_DIST) \
$(am__foptimove_test_SOURCES_DIST) \
$(am__fpoint_test_SOURCES_DIST) $(am__frect_test_SOURCES_DIST) \
$(am__fstring_test_SOURCES_DIST)
am__can_run_installinfo = \
@ -532,6 +543,7 @@ top_srcdir = @top_srcdir@
@CPPUNIT_TEST_TRUE@AM_CPPFLAGS = -I$(top_srcdir)/include -Wall -Werror
@CPPUNIT_TEST_TRUE@fobject_test_SOURCES = fobject-test.cpp
@CPPUNIT_TEST_TRUE@fmouse_test_SOURCES = fmouse-test.cpp
@CPPUNIT_TEST_TRUE@foptimove_test_SOURCES = foptimove-test.cpp
@CPPUNIT_TEST_TRUE@fstring_test_SOURCES = fstring-test.cpp
@CPPUNIT_TEST_TRUE@fpoint_test_SOURCES = fpoint-test.cpp
@CPPUNIT_TEST_TRUE@frect_test_SOURCES = frect-test.cpp
@ -596,6 +608,10 @@ fobject_test$(EXEEXT): $(fobject_test_OBJECTS) $(fobject_test_DEPENDENCIES) $(EX
@rm -f fobject_test$(EXEEXT)
$(AM_V_CXXLD)$(CXXLINK) $(fobject_test_OBJECTS) $(fobject_test_LDADD) $(LIBS)
foptimove_test$(EXEEXT): $(foptimove_test_OBJECTS) $(foptimove_test_DEPENDENCIES) $(EXTRA_foptimove_test_DEPENDENCIES)
@rm -f foptimove_test$(EXEEXT)
$(AM_V_CXXLD)$(CXXLINK) $(foptimove_test_OBJECTS) $(foptimove_test_LDADD) $(LIBS)
fpoint_test$(EXEEXT): $(fpoint_test_OBJECTS) $(fpoint_test_DEPENDENCIES) $(EXTRA_fpoint_test_DEPENDENCIES)
@rm -f fpoint_test$(EXEEXT)
$(AM_V_CXXLD)$(CXXLINK) $(fpoint_test_OBJECTS) $(fpoint_test_LDADD) $(LIBS)
@ -616,6 +632,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fmouse-test.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fobject-test.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/foptimove-test.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fpoint-test.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/frect-test.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fstring-test.Po@am__quote@
@ -854,6 +871,13 @@ fmouse_test.log: fmouse_test$(EXEEXT)
--log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
"$$tst" $(AM_TESTS_FD_REDIRECT)
foptimove_test.log: foptimove_test$(EXEEXT)
@p='foptimove_test$(EXEEXT)'; \
b='foptimove_test'; \
$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
--log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
"$$tst" $(AM_TESTS_FD_REDIRECT)
fstring_test.log: fstring_test$(EXEEXT)
@p='fstring_test$(EXEEXT)'; \
b='fstring_test'; \

View File

@ -269,7 +269,7 @@ void FMouseTest::x11MouseTest()
x11_mouse.setRawData (rawdata1, sizeof(rawdata1));
CPPUNIT_ASSERT ( x11_mouse.hasData() );
CPPUNIT_ASSERT ( x11_mouse.isInputDataPending() );
CPPUNIT_ASSERT ( strcmp(rawdata1, "@@") == 0 );
CPPUNIT_ASSERT ( std::strcmp(rawdata1, "@@") == 0 );
timeval tv;
FObject::getCurrentTime(&tv);
@ -573,7 +573,7 @@ void FMouseTest::sgrMouseTest()
sgr_mouse.setRawData (rawdata1, sizeof(rawdata1));
CPPUNIT_ASSERT ( sgr_mouse.hasData() );
CPPUNIT_ASSERT ( sgr_mouse.isInputDataPending() );
CPPUNIT_ASSERT ( strcmp(rawdata1, "@@") == 0 );
CPPUNIT_ASSERT ( std::strcmp(rawdata1, "@@") == 0 );
timeval tv;
FObject::getCurrentTime(&tv);
@ -861,7 +861,7 @@ void FMouseTest::sgrMouseTest()
CPPUNIT_ASSERT ( ! sgr_mouse.hasEvent() );
CPPUNIT_ASSERT ( sgr_mouse.isInputDataPending() );
CPPUNIT_ASSERT ( strcmp(rawdata11, "@") == 0 );
CPPUNIT_ASSERT ( std::strcmp(rawdata11, "@") == 0 );
}
//----------------------------------------------------------------------
@ -876,7 +876,7 @@ void FMouseTest::urxvtMouseTest()
urxvt_mouse.setRawData (rawdata1, sizeof(rawdata1));
CPPUNIT_ASSERT ( urxvt_mouse.hasData() );
CPPUNIT_ASSERT ( urxvt_mouse.isInputDataPending() );
CPPUNIT_ASSERT ( strcmp(rawdata1, "@@") == 0 );
CPPUNIT_ASSERT ( std::strcmp(rawdata1, "@@") == 0 );
timeval tv;
FObject::getCurrentTime(&tv);
@ -1163,7 +1163,7 @@ void FMouseTest::urxvtMouseTest()
CPPUNIT_ASSERT ( ! urxvt_mouse.hasEvent() );
CPPUNIT_ASSERT ( urxvt_mouse.isInputDataPending() );
CPPUNIT_ASSERT ( strcmp(rawdata11, "@") == 0 );
CPPUNIT_ASSERT ( std::strcmp(rawdata11, "@") == 0 );
// Negative values
char rawdata12[] = { 0x1b, '[', '3', '2', ';', '-', '5', ';', '5', 'M'

215
src/test/foptimove-test.cpp Normal file
View File

@ -0,0 +1,215 @@
/***********************************************************************
* foptimove-test.cpp - FOptiMove unit tests *
* *
* This file is part of the Final Cut widget toolkit *
* *
* Copyright 2018 Markus Gans *
* *
* The Final Cut is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Lesser General Public License *
* as published by the Free Software Foundation; either version 3 of *
* the License, or (at your option) any later version. *
* *
* The Final Cut is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with this program. If not, see *
* <http://www.gnu.org/licenses/>. *
***********************************************************************/
#include <cppunit/BriefTestProgressListener.h>
#include <cppunit/CompilerOutputter.h>
#include <cppunit/extensions/HelperMacros.h>
#include <cppunit/TestFixture.h>
#include <cppunit/TestResult.h>
#include <cppunit/TestResultCollector.h>
#include <cppunit/TestRunner.h>
#include <cppunit/SourceLine.h>
#include <cppunit/TestAssert.h>
#include <iomanip>
#include <final/final.h>
#define CPPUNIT_ASSERT_CSTRING(expected, actual) \
check_c_string (expected, actual, CPPUNIT_SOURCELINE())
//----------------------------------------------------------------------
void check_c_string ( const char* s1
, const char* s2
, CppUnit::SourceLine sourceLine )
{
if ( std::strcmp (s1, s2) == 0 )
return;
::CppUnit::Asserter::fail ("Strings are not equal", sourceLine);
}
//----------------------------------------------------------------------
// class FOptiMoveTest
//----------------------------------------------------------------------
#pragma pack(push)
#pragma pack(1)
class FOptiMoveTest : public CPPUNIT_NS::TestFixture
{
public:
FOptiMoveTest()
{ }
protected:
void classNameTest();
void noArgumentTest();
void ansiTest();
private:
std::string printSequence (const std::string&);
// Adds code needed to register the test suite
CPPUNIT_TEST_SUITE (FOptiMoveTest);
// Add a methods to the test suite
CPPUNIT_TEST (classNameTest);
CPPUNIT_TEST (noArgumentTest);
CPPUNIT_TEST (ansiTest);
// End of test suite definition
CPPUNIT_TEST_SUITE_END();
};
#pragma pack(pop)
//----------------------------------------------------------------------
void FOptiMoveTest::classNameTest()
{
FOptiMove opti_move;
const char* const classname = opti_move.getClassName();
CPPUNIT_ASSERT_CSTRING ( classname, "FOptiMove");
}
//----------------------------------------------------------------------
void FOptiMoveTest::noArgumentTest()
{
FOptiMove om;
CPPUNIT_ASSERT_CSTRING (om.moveCursor (1, 1, 5, 5), C_STR(CSI "6;6H"));
CPPUNIT_ASSERT_CSTRING (om.moveCursor (5, 5, 9, 9), C_STR(CSI "10;10H"));
// No set cursor address preset
om.set_cursor_address (0);
CPPUNIT_ASSERT (om.moveCursor (1, 1, 5, 5) == 0);
}
//----------------------------------------------------------------------
void FOptiMoveTest::ansiTest()
{
FOptiMove om;
om.setTermSize (80, 25);
om.setBaudRate (19200);
om.setTabStop (8);
om.set_tabular (C_STR("\t"));
om.set_back_tab (C_STR(CSI "Z"));
om.set_cursor_home (C_STR(CSI "H"));
om.set_carriage_return (C_STR("\r"));
om.set_cursor_up (C_STR(CSI "A"));
om.set_cursor_down (C_STR(CSI "B"));
om.set_cursor_left (C_STR(CSI "D"));
om.set_cursor_right (C_STR(CSI "C"));
om.set_cursor_address (C_STR(CSI "%i%p1%d;%p2%dH"));
om.set_column_address (C_STR(CSI "%i%p1%dG"));
om.set_row_address (C_STR(CSI "%i%p1%dd"));
om.set_parm_up_cursor (C_STR(CSI "%p1%dA"));
om.set_parm_down_cursor (C_STR(CSI "%p1%dB"));
om.set_parm_left_cursor (C_STR(CSI "%p1%dD"));
om.set_parm_right_cursor (C_STR(CSI "%p1%dC"));
CPPUNIT_ASSERT_CSTRING (om.moveCursor (0, 0, 5, 5), C_STR(CSI "6;6H"));
CPPUNIT_ASSERT_CSTRING (om.moveCursor (5, 5, 0, 0), C_STR(CSI "H"));
CPPUNIT_ASSERT_CSTRING (om.moveCursor (79, 1, 0, 1), C_STR("\r"));
CPPUNIT_ASSERT_CSTRING (om.moveCursor (79, 1, 0, 2), C_STR("\r" CSI "B"));
CPPUNIT_ASSERT_CSTRING (om.moveCursor (9, 4, 10, 4), C_STR(CSI "C"));
CPPUNIT_ASSERT_CSTRING (om.moveCursor (10, 4, 9, 4), C_STR(CSI "D"));
CPPUNIT_ASSERT_CSTRING (om.moveCursor (9, 4, 11, 4), C_STR(CSI "12G"));
CPPUNIT_ASSERT_CSTRING (om.moveCursor (11, 4, 9, 4), C_STR(CSI "10G"));
CPPUNIT_ASSERT_CSTRING (om.moveCursor (1, 0, 8, 0), C_STR("\t"));
CPPUNIT_ASSERT_CSTRING (om.moveCursor (16, 0, 16, 1), C_STR(CSI "B"));
CPPUNIT_ASSERT_CSTRING (om.moveCursor (16, 1, 16, 0), C_STR(CSI "A"));
CPPUNIT_ASSERT_CSTRING (om.moveCursor (16, 0, 16, 2), C_STR(CSI "3d"));
CPPUNIT_ASSERT_CSTRING (om.moveCursor (16, 2, 16, 0), C_STR(CSI "1d"));
CPPUNIT_ASSERT_CSTRING (om.moveCursor (3, 2, 79, 2), C_STR(CSI "80G"));
CPPUNIT_ASSERT_CSTRING (om.moveCursor (5, 5, 75, 20), C_STR(CSI "21;76H"));
CPPUNIT_ASSERT_CSTRING (om.moveCursor (39, 0, 32, 0), C_STR(CSI "Z"));
CPPUNIT_ASSERT_CSTRING (om.moveCursor (10, 0, 8, 0), C_STR("\r\t"));
// xold is outside screen
CPPUNIT_ASSERT_CSTRING (om.moveCursor (99, 10, 79, 10), C_STR(CSI "11;80H"));
CPPUNIT_ASSERT_CSTRING (om.moveCursor (-3, 33, 50, 10), C_STR(CSI "11;51H"));
// ynew is outside screen
CPPUNIT_ASSERT_CSTRING (om.moveCursor (23, 33, 23, 10), C_STR(CSI "11;24H"));
CPPUNIT_ASSERT_CSTRING (om.moveCursor (23, -3, 12, 10), C_STR(CSI "11;13H"));
// xnew is outside screen
CPPUNIT_ASSERT_CSTRING (om.moveCursor (53, 22, 100, 22), C_STR(CSI "80G"));
CPPUNIT_ASSERT_CSTRING (om.moveCursor (3, 22, -5, 22), C_STR("\r"));
// ynew is outside screen
CPPUNIT_ASSERT_CSTRING (om.moveCursor (53, 22, 53, 40), C_STR(CSI "25d"));
CPPUNIT_ASSERT_CSTRING (om.moveCursor (53, 2, 53, -3), C_STR(CSI "1d"));
//om.printDurations();S
/*
om.set_cursor_to_ll (TCAP(fc::t_cursor_to_ll));
om.set_auto_left_margin (FTermcap::automatic_left_margin);
om.set_eat_newline_glitch (FTermcap::eat_nl_glitch);
*/
}
//----------------------------------------------------------------------
std::string FOptiMoveTest::printSequence (const std::string& s)
{
std::ostringstream sequence;
for (std::string::size_type i = 0; i < s.length(); ++i)
{
switch ( int(s[i]) )
{
case 0x08:
sequence << "BS ";
break;
case 0x09:
sequence << "TAB ";
break;
case 0x0a:
sequence << "LF ";
break;
case 0x0d:
sequence << "CR ";
break;
case 0x1b:
sequence << "Esc ";
break;
default:
sequence << s[i];
sequence << ' ';
}
}
return sequence.str();
}
// Put the test suite in the registry
CPPUNIT_TEST_SUITE_REGISTRATION (FOptiMoveTest);
// The general unit test main part
#include <main-test.inc>