Blender V4.3
BLI_string_test.cc File Reference
#include "testing/testing.h"
#include <array>
#include <initializer_list>
#include <ostream>
#include <string>
#include <utility>
#include <vector>
#include "MEM_guardedalloc.h"
#include "BLI_string.h"
#include "BLI_string_utf8.h"
#include "BLI_string_utils.hh"
#include "BLI_utildefines.h"

Go to the source code of this file.

Classes

struct  WordInfo
 
class  StringFindSplitWords
 
class  StringCasecmpNatural
 
class  StringEscape
 

Macros

#define STRNCPY_UTF8_ASCII(...)
 
#define STRNCPY_UTF8_ASCII_TRUNCATE(maxncpy, ...)
 
#define STRNCPY_UTF8_TRUNCATE(byte_size, ...)
 
#define STRNCPY_UTF8_TERMINATE_EARLY(byte_size, ...)
 
#define STR_N_CAT(dst_init, dst_size, src, result_expect)
 
#define STR_REPLACE_RANGE(src, size, beg, end, dst, result_expect)
 

Functions

 TEST (BLI_string, bounded_strcpy)
 
String Copy (UTF8)
 TEST (string, StrCopyUTF8_ASCII)
 
 TEST (string, StrCopyUTF8_ASCII_Truncate)
 
 TEST (string, StrCopyUTF8_TruncateEncoding)
 
 TEST (string, StrCopyUTF8_TerminateEncodingEarly)
 
String Concatenate
 TEST (string, StrCat)
 
String Replace
 TEST (string, StrReplaceRange)
 
String Partition
 TEST (string, StrPartition)
 
 TEST (string, StrRPartition)
 
 TEST (string, StrPartitionEx)
 
 TEST (string, StrPartitionUtf8)
 
 TEST (string, StrRPartitionUtf8)
 
 TEST (string, StrPartitionExUtf8)
 
String Format Integer (Grouped)
 TEST (string, StrFormatIntGrouped)
 
 TEST (string, StrFormatUint64Grouped)
 
String Format Byte Units
 TEST (string, StrFormatByteUnits)
 
String Format Decimal Units
 TEST (string, StrFormatDecimalUnits)
 
 TEST (string, StrFormatIntegerUnits)
 
String Length (Clamped)
 TEST (string, StringNLen)
 
String Find Split Words
static std::ostream & operator<< (std::ostream &os, const WordInfo &word_info)
 
 TEST_F (StringFindSplitWords, Simple)
 
 TEST_F (StringFindSplitWords, Triple)
 
 TEST_F (StringFindSplitWords, Spacing)
 
 TEST_F (StringFindSplitWords, Trailing_Left)
 
 TEST_F (StringFindSplitWords, Trailing_Right)
 
 TEST_F (StringFindSplitWords, Trailing_LeftRight)
 
 TEST_F (StringFindSplitWords, Blank)
 
 TEST_F (StringFindSplitWords, Whitespace)
 
 TEST_F (StringFindSplitWords, LimitWords)
 
 TEST_F (StringFindSplitWords, LimitChars)
 
String Element
 TEST (string, StringElemEmpty)
 
 TEST (string, StringElemSingle)
 
 TEST (string, StringElemComplex)
 
String Search (Case Insensitive)
 TEST (string, StringStrncasestr)
 
String Maximum Word Count
 TEST (string, StringMaxPossibleWordCount)
 
String is Decimal
 TEST (string, StrIsDecimal)
 
String Case Insensitive Comparison
 TEST_F (StringCasecmpNatural, Empty)
 
 TEST_F (StringCasecmpNatural, Whitespace)
 
 TEST_F (StringCasecmpNatural, TextOnlyLowerCase)
 
 TEST_F (StringCasecmpNatural, TextMixedCase)
 
 TEST_F (StringCasecmpNatural, Period)
 
 TEST_F (StringCasecmpNatural, OnlyNumbers)
 
 TEST_F (StringCasecmpNatural, TextAndNumbers)
 
String Escape/Un-Escape
 TEST_F (StringEscape, Simple)
 
 TEST_F (StringEscape, Control)
 

String Join

#define BUFFER_SIZE   128
 
static void string_join_array_test_truncate (const char *strings[], int strings_num, char buffer[BUFFER_SIZE])
 
static void string_join_array_with_sep_char_test_truncate (const char *strings[], int strings_num, char buffer[BUFFER_SIZE])
 
 TEST (string, StrJoin_Truncate)
 

Macro Definition Documentation

◆ BUFFER_SIZE

#define BUFFER_SIZE   128

◆ STR_N_CAT

#define STR_N_CAT ( dst_init,
dst_size,
src,
result_expect )
Value:
{ \
char dst[dst_size + 1] = dst_init; \
dst[dst_size] = 0xff; \
BLI_strncat(dst, src, dst_size); \
EXPECT_STREQ(dst, result_expect); \
EXPECT_EQ(dst[dst_size], 0xff); \
}

Referenced by TEST().

◆ STR_REPLACE_RANGE

#define STR_REPLACE_RANGE ( src,
size,
beg,
end,
dst,
result_expect )
Value:
{ \
char string[size] = src; \
BLI_string_replace_range(string, sizeof(string), beg, end, dst); \
EXPECT_STREQ(string, result_expect); \
}
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
Definition btDbvt.cpp:52

Referenced by TEST().

◆ STRNCPY_UTF8_ASCII

#define STRNCPY_UTF8_ASCII ( ...)
Value:
{ \
const char src[] = {__VA_ARGS__, 0}; \
char dst[sizeof(src)]; \
memset(dst, 0xff, sizeof(dst)); \
STRNCPY_UTF8(dst, src); \
EXPECT_EQ(strlen(dst), sizeof(dst) - 1); \
EXPECT_STREQ(dst, src); \
}

Referenced by TEST().

◆ STRNCPY_UTF8_ASCII_TRUNCATE

#define STRNCPY_UTF8_ASCII_TRUNCATE ( maxncpy,
... )
Value:
{ \
char src[] = {__VA_ARGS__}; \
char dst[sizeof(src)]; \
memset(dst, 0xff, sizeof(dst)); \
BLI_strncpy_utf8(dst, src, maxncpy); \
int len_expect = std::min<int>(sizeof(src), maxncpy) - 1; \
src[len_expect] = '\0'; /* To be able to use `EXPECT_STREQ`. */ \
EXPECT_EQ(strlen(dst), len_expect); \
EXPECT_STREQ(dst, src); \
}

Referenced by TEST().

◆ STRNCPY_UTF8_TERMINATE_EARLY

#define STRNCPY_UTF8_TERMINATE_EARLY ( byte_size,
... )
Value:
{ \
char src[] = {__VA_ARGS__, 0}; \
EXPECT_EQ(BLI_str_utf8_size_or_error(src), byte_size); \
char dst[sizeof(src)]; \
memset(dst, 0xff, sizeof(dst)); \
STRNCPY_UTF8(dst, src); \
EXPECT_EQ(strlen(dst), sizeof(dst) - 1); \
EXPECT_STREQ(dst, src); \
for (int i = sizeof(dst) - 1; i > 1; i--) { \
src[i] = '\0'; \
memset(dst, 0xff, sizeof(dst)); \
const int dst_copied = STRNCPY_UTF8_RLEN(dst, src); \
EXPECT_STREQ(dst, src); \
EXPECT_EQ(strlen(dst), i); \
EXPECT_EQ(dst_copied, i); \
} \
}
#define STRNCPY_UTF8_RLEN(dst, src)
int BLI_str_utf8_size_or_error(const char *p) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)

Referenced by TEST().

◆ STRNCPY_UTF8_TRUNCATE

#define STRNCPY_UTF8_TRUNCATE ( byte_size,
... )
Value:
{ \
const char src[] = {__VA_ARGS__, 0}; \
EXPECT_EQ(BLI_str_utf8_size_or_error(src), byte_size); \
char dst[sizeof(src)]; \
memset(dst, 0xff, sizeof(dst)); \
STRNCPY_UTF8(dst, src); \
EXPECT_EQ(strlen(dst), sizeof(dst) - 1); \
EXPECT_STREQ(dst, src); \
BLI_strncpy_utf8(dst, src, sizeof(dst) - 1); \
EXPECT_STREQ(dst, ""); \
}

Referenced by TEST().

Function Documentation

◆ operator<<()

static std::ostream & operator<< ( std::ostream & os,
const WordInfo & word_info )
static

Definition at line 976 of file BLI_string_test.cc.

References WordInfo::end, and WordInfo::start.

◆ string_join_array_test_truncate()

static void string_join_array_test_truncate ( const char * strings[],
int strings_num,
char buffer[BUFFER_SIZE] )
static

◆ string_join_array_with_sep_char_test_truncate()

static void string_join_array_with_sep_char_test_truncate ( const char * strings[],
int strings_num,
char buffer[BUFFER_SIZE] )
static

◆ TEST() [1/26]

TEST ( BLI_string ,
bounded_strcpy  )

Definition at line 1516 of file BLI_string_test.cc.

References str, and STRNCPY.

◆ TEST() [2/26]

TEST ( string ,
StrCat  )

Definition at line 133 of file BLI_string_test.cc.

References STR_N_CAT.

◆ TEST() [3/26]

TEST ( string ,
StrCopyUTF8_ASCII  )

Definition at line 30 of file BLI_string_test.cc.

References STRNCPY_UTF8_ASCII.

◆ TEST() [4/26]

TEST ( string ,
StrCopyUTF8_ASCII_Truncate  )

Definition at line 48 of file BLI_string_test.cc.

References STRNCPY_UTF8_ASCII_TRUNCATE.

◆ TEST() [5/26]

TEST ( string ,
StrCopyUTF8_TerminateEncodingEarly  )

Definition at line 94 of file BLI_string_test.cc.

References STRNCPY_UTF8_TERMINATE_EARLY.

◆ TEST() [6/26]

TEST ( string ,
StrCopyUTF8_TruncateEncoding  )

Definition at line 68 of file BLI_string_test.cc.

References STRNCPY_UTF8_TRUNCATE.

◆ TEST() [7/26]

TEST ( string ,
StrFormatByteUnits  )

◆ TEST() [8/26]

TEST ( string ,
StrFormatDecimalUnits  )

◆ TEST() [9/26]

TEST ( string ,
StrFormatIntegerUnits  )

◆ TEST() [10/26]

TEST ( string ,
StrFormatIntGrouped  )

◆ TEST() [11/26]

TEST ( string ,
StrFormatUint64Grouped  )

◆ TEST() [12/26]

TEST ( string ,
StringElemComplex  )

Definition at line 1114 of file BLI_string_test.cc.

References BLI_string_elem_split_by_delim().

◆ TEST() [13/26]

TEST ( string ,
StringElemEmpty  )

Definition at line 1094 of file BLI_string_test.cc.

References BLI_string_elem_split_by_delim().

◆ TEST() [14/26]

TEST ( string ,
StringElemSingle  )

Definition at line 1105 of file BLI_string_test.cc.

References BLI_string_elem_split_by_delim().

◆ TEST() [15/26]

TEST ( string ,
StringMaxPossibleWordCount  )

Definition at line 1174 of file BLI_string_test.cc.

References BLI_string_max_possible_word_count(), and EXPECT_EQ().

◆ TEST() [16/26]

TEST ( string ,
StringNLen  )

Definition at line 843 of file BLI_string_test.cc.

References BLI_strnlen(), and EXPECT_EQ().

◆ TEST() [17/26]

TEST ( string ,
StringStrncasestr  )

Definition at line 1143 of file BLI_string_test.cc.

References BLI_strncasestr(), and EXPECT_EQ().

◆ TEST() [18/26]

TEST ( string ,
StrIsDecimal  )

Definition at line 1190 of file BLI_string_test.cc.

References BLI_string_is_decimal().

◆ TEST() [19/26]

TEST ( string ,
StrJoin_Truncate  )

◆ TEST() [20/26]

TEST ( string ,
StrPartition  )

Definition at line 202 of file BLI_string_test.cc.

References BLI_str_partition(), EXPECT_EQ(), and str.

◆ TEST() [21/26]

TEST ( string ,
StrPartitionEx  )

Definition at line 320 of file BLI_string_test.cc.

References BLI_str_partition_ex(), EXPECT_EQ(), and str.

◆ TEST() [22/26]

TEST ( string ,
StrPartitionExUtf8  )

Definition at line 469 of file BLI_string_test.cc.

References BLI_str_partition_ex_utf8(), EXPECT_EQ(), and str.

◆ TEST() [23/26]

TEST ( string ,
StrPartitionUtf8  )

Definition at line 351 of file BLI_string_test.cc.

References BLI_str_partition_utf8(), EXPECT_EQ(), and str.

◆ TEST() [24/26]

TEST ( string ,
StrReplaceRange  )

Definition at line 160 of file BLI_string_test.cc.

References STR_REPLACE_RANGE.

◆ TEST() [25/26]

TEST ( string ,
StrRPartition  )

Definition at line 261 of file BLI_string_test.cc.

References BLI_str_rpartition(), EXPECT_EQ(), and str.

◆ TEST() [26/26]

TEST ( string ,
StrRPartitionUtf8  )

Definition at line 410 of file BLI_string_test.cc.

References BLI_str_rpartition_utf8(), EXPECT_EQ(), and str.

◆ TEST_F() [1/19]

TEST_F ( StringCasecmpNatural ,
Empty  )

Definition at line 1264 of file BLI_string_test.cc.

◆ TEST_F() [2/19]

TEST_F ( StringCasecmpNatural ,
OnlyNumbers  )

Definition at line 1379 of file BLI_string_test.cc.

◆ TEST_F() [3/19]

TEST_F ( StringCasecmpNatural ,
Period  )

Definition at line 1359 of file BLI_string_test.cc.

◆ TEST_F() [4/19]

TEST_F ( StringCasecmpNatural ,
TextAndNumbers  )

Definition at line 1401 of file BLI_string_test.cc.

◆ TEST_F() [5/19]

TEST_F ( StringCasecmpNatural ,
TextMixedCase  )

Definition at line 1323 of file BLI_string_test.cc.

◆ TEST_F() [6/19]

TEST_F ( StringCasecmpNatural ,
TextOnlyLowerCase  )

Definition at line 1300 of file BLI_string_test.cc.

◆ TEST_F() [7/19]

TEST_F ( StringCasecmpNatural ,
Whitespace  )

Definition at line 1280 of file BLI_string_test.cc.

◆ TEST_F() [8/19]

TEST_F ( StringEscape ,
Control  )

Definition at line 1492 of file BLI_string_test.cc.

◆ TEST_F() [9/19]

TEST_F ( StringEscape ,
Simple  )

Definition at line 1457 of file BLI_string_test.cc.

◆ TEST_F() [10/19]

TEST_F ( StringFindSplitWords ,
Blank  )

Definition at line 1057 of file BLI_string_test.cc.

◆ TEST_F() [11/19]

TEST_F ( StringFindSplitWords ,
LimitChars  )

Definition at line 1075 of file BLI_string_test.cc.

◆ TEST_F() [12/19]

TEST_F ( StringFindSplitWords ,
LimitWords  )

Definition at line 1066 of file BLI_string_test.cc.

◆ TEST_F() [13/19]

TEST_F ( StringFindSplitWords ,
Simple  )

Definition at line 1027 of file BLI_string_test.cc.

◆ TEST_F() [14/19]

TEST_F ( StringFindSplitWords ,
Spacing  )

Definition at line 1037 of file BLI_string_test.cc.

◆ TEST_F() [15/19]

TEST_F ( StringFindSplitWords ,
Trailing_Left  )

Definition at line 1042 of file BLI_string_test.cc.

◆ TEST_F() [16/19]

TEST_F ( StringFindSplitWords ,
Trailing_LeftRight  )

Definition at line 1052 of file BLI_string_test.cc.

◆ TEST_F() [17/19]

TEST_F ( StringFindSplitWords ,
Trailing_Right  )

Definition at line 1047 of file BLI_string_test.cc.

◆ TEST_F() [18/19]

TEST_F ( StringFindSplitWords ,
Triple  )

Definition at line 1032 of file BLI_string_test.cc.

◆ TEST_F() [19/19]

TEST_F ( StringFindSplitWords ,
Whitespace  )

Definition at line 1061 of file BLI_string_test.cc.