You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
3.2 KiB
90 lines
3.2 KiB
// License: Apache 2.0. See LICENSE file in root directory.
|
|
// Copyright(c) 2020 Intel Corporation. All Rights Reserved.
|
|
|
|
//#cmake:dependencies rsutils
|
|
//#cmake:add-file ../../../common/utilities/imgui/wrap.cpp
|
|
|
|
#include "common.h"
|
|
#include <common/utilities/imgui/wrap.h>
|
|
#include <third-party/imgui/imgui.h>
|
|
|
|
namespace ImGui {
|
|
// Mock ImGui function for test
|
|
// all characters are at length of 10 pixels except 'i' and 'j' which is 5 pixels
|
|
ImVec2 CalcTextSize( const char * text,
|
|
const char * text_end,
|
|
bool hide_text_after_double_hash,
|
|
float wrap_width )
|
|
{
|
|
if (!text) return ImVec2(0.0f, 0.0f);
|
|
|
|
float total_size = 0.0f;
|
|
while( *text )
|
|
{
|
|
if( *text == 'i' || *text == 'j' )
|
|
total_size += 5.0f;
|
|
else
|
|
total_size += 10.0f;
|
|
text++;
|
|
}
|
|
return ImVec2( total_size, 0.0f );
|
|
}
|
|
} // namespace ImGui
|
|
|
|
using namespace utilities::imgui;
|
|
|
|
TEST_CASE( "wrap-text", "[string]" )
|
|
{
|
|
// Verify illegal inputs return empty string
|
|
CHECK( wrap( "", 0 ) == "" );
|
|
CHECK( wrap( "", 10 ) == "" );
|
|
CHECK( wrap( "abc", 0 ) == "abc" );
|
|
CHECK( wrap( "abc", 10 ) == "abc" );
|
|
CHECK( wrap( "abc\nabc", 0 ) == "abc\nabc" );
|
|
CHECK( wrap( "abc abc", 5 ) == "abc abc" );
|
|
CHECK( wrap( "", 10 ) == "" );
|
|
|
|
// Verify no wrap if not needed
|
|
CHECK( wrap( "abc", 100 ) == "abc" );
|
|
CHECK( wrap( "abc\nabc", 100 ) == "abc\nabc" );
|
|
CHECK( wrap( "abc abc a", 100 ) == "abc abc a" );
|
|
|
|
// No wrapping possible, copy line until first space and continue wrapping
|
|
CHECK( wrap( "abcdefgh", 40 ) == "abcdefgh" );
|
|
CHECK( wrap( "aabbccddff das ds fr", 50 ) == "aabbccddff\ndas\nds fr" );
|
|
CHECK( wrap( "das aabbccddff ds fr", 50 ) == "das\naabbccddff\nds fr" );
|
|
|
|
// Exact wrap position test
|
|
CHECK( wrap( "abcde abcde", 50 ) == "abcde\nabcde" );
|
|
|
|
// Short letters test
|
|
CHECK(wrap("aaaa bbbb cc", 100) == "aaaa bbbb\ncc");
|
|
// i and j are only 5 pixels so we get more characters inside the wrap
|
|
CHECK(wrap("aaaa iijj cc", 100) == "aaaa iijj cc");
|
|
|
|
|
|
// Check wrapping of 3 paragraphs
|
|
CHECK( wrap( "this is the first line\nthis is the second line\nthis is the last line", 150 )
|
|
== "this is the\nfirst line\nthis is the\nsecond line\nthis is the last\nline" );
|
|
|
|
CHECK( wrap( "this is the first line\nthis is the second line\nthis is the last line", 60 )
|
|
== "this is\nthe\nfirst\nline\nthis is\nthe\nsecond\nline\nthis is\nthe\nlast\nline" );
|
|
|
|
// Spaces checks
|
|
CHECK(wrap("ab cd ", 32) == "ab\ncd"); // Ending spaces
|
|
CHECK(wrap("ab cd", 32) == "ab\ncd"); // Middle spaces
|
|
CHECK(wrap(" ab cd ", 32) == "ab\ncd"); // Mixed multiple spaces
|
|
CHECK(wrap(" ab cd ", 32) == "ab\ncd"); // Mixed multiple spaces
|
|
CHECK(wrap(" ab ", 33) == "ab"); // Mixed multiple spaces
|
|
CHECK(wrap("ab ", 33) == "ab"); // Ending multiple spaces
|
|
CHECK(wrap(" ab", 33) == "ab");
|
|
|
|
// Only spaces
|
|
CHECK(wrap(" ", 33) == "");
|
|
CHECK(wrap(" ", 33) == "");
|
|
|
|
CHECK(wrap("ab cd ", 100) == "ab cd");
|
|
CHECK(wrap("ab cd", 100) == "ab cd"); // Known corner case - we trim multiple spaces
|
|
|
|
}
|