add script runs unit test

This commit is contained in:
Artem Pavlenko 2019-11-04 10:47:35 +00:00
parent 8aae32ec4c
commit 05d488f98d
2 changed files with 37 additions and 0 deletions

View file

@ -20,13 +20,16 @@ else:
test_env.AppendUnique(LIBS='dl') test_env.AppendUnique(LIBS='dl')
test_env.AppendUnique(CXXFLAGS='-g') test_env.AppendUnique(CXXFLAGS='-g')
test_env['CXXFLAGS'] = copy(test_env['LIBMAPNIK_CXXFLAGS']) test_env['CXXFLAGS'] = copy(test_env['LIBMAPNIK_CXXFLAGS'])
test_env['CPPFLAGS'] = '-fsanitize=bounds'
test_env.Append(CPPDEFINES = env['LIBMAPNIK_DEFINES']) test_env.Append(CPPDEFINES = env['LIBMAPNIK_DEFINES'])
if test_env['HAS_CAIRO']: if test_env['HAS_CAIRO']:
test_env.PrependUnique(CPPPATH=test_env['CAIRO_CPPPATHS']) test_env.PrependUnique(CPPPATH=test_env['CAIRO_CPPPATHS'])
test_env.Append(CPPDEFINES = '-DHAVE_CAIRO') test_env.Append(CPPDEFINES = '-DHAVE_CAIRO')
test_env.PrependUnique(CPPPATH=['./']) test_env.PrependUnique(CPPPATH=['./'])
if test_env['PLATFORM'] == 'Linux': if test_env['PLATFORM'] == 'Linux':
test_env['LINKFLAGS'].append('-pthread') test_env['LINKFLAGS'].append('-pthread')
test_env['LINKFLAGS'].append('-fsanitize=bounds')
test_env.AppendUnique(LIBS='boost_program_options%s' % env['BOOST_APPEND']) test_env.AppendUnique(LIBS='boost_program_options%s' % env['BOOST_APPEND'])
test_env_local = test_env.Clone() test_env_local = test_env.Clone()
@ -34,6 +37,7 @@ else:
# unit tests # unit tests
sources = glob.glob('./unit/*/*.cpp') sources = glob.glob('./unit/*/*.cpp')
sources.extend(glob.glob('./unit/*.cpp')) sources.extend(glob.glob('./unit/*.cpp'))
sources.append('../src/text/scrptrun.cpp')
test_program = test_env_local.Program("./unit/run", source=sources) test_program = test_env_local.Program("./unit/run", source=sources)
Depends(test_program, env.subst('../src/%s' % env['MAPNIK_LIB_NAME'])) Depends(test_program, env.subst('../src/%s' % env['MAPNIK_LIB_NAME']))
Depends(test_program, env.subst('../src/json/libmapnik-json${LIBSUFFIX}')) Depends(test_program, env.subst('../src/json/libmapnik-json${LIBSUFFIX}'))

View file

@ -0,0 +1,33 @@
#include "catch.hpp"
#include <mapnik/unicode.hpp>
#include <mapnik/text/scrptrun.hpp>
#include <iostream>
TEST_CASE("nested script runs")
{
mapnik::value_unicode_string text("Nested text runs(первый(second(третий)))"); //mixed scripts
ScriptRun runs(text.getBuffer(), text.length());
std::size_t count = 0;
std::size_t size = 0;
while (runs.next())
{
if (count & 1) CHECK(runs.getScriptCode() == USCRIPT_CYRILLIC);
else CHECK(runs.getScriptCode() == USCRIPT_LATIN);
size += runs.getScriptEnd() - runs.getScriptStart();
++count;
}
REQUIRE(count == 7);
REQUIRE(size == text.length());
}
TEST_CASE("many punctuation chars")
{
mapnik::value_unicode_string text("(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((test"); // more than 128 "paired" chars
ScriptRun runs(text.getBuffer(), text.length());
while (runs.next())
{
CHECK(runs.getScriptCode() == 25);
CHECK(runs.getScriptStart() == 0);
CHECK(runs.getScriptEnd() == text.length());
}
}