utf8rewind  1.5.0
System library for processing UTF-8 encoded text
helpers-casemapping.hpp
Go to the documentation of this file.
1 #pragma once
2 
10 #include "helpers-base.hpp"
11 
12 #include "helpers-strings.hpp"
13 
14 #define EXPECT_CASEMAPPING_CODEPOINT_NUL_EQ(_codepoint, _name, _locale) { \
15  ::helpers::CaseMappingEntry e; \
16  e.codepoint = _codepoint; \
17  e.lowercase = std::string(1, '\0'); \
18  e.uppercase = std::string(1, '\0'); \
19  e.titlecase = std::string(1, '\0'); \
20  e.name = _name; \
21  ::helpers::CaseMappingEntry a; \
22  std::string text = ::helpers::utf8(_codepoint); \
23  a.lowercase = ::helpers::lowercase(text, (_locale)); \
24  a.uppercase = ::helpers::uppercase(text, (_locale)); \
25  a.titlecase = ::helpers::titlecase(text, (_locale)); \
26  EXPECT_PRED_FORMAT2(::helpers::CompareCodepoint, e, a); \
27 }
28 
29 #define EXPECT_CASEMAPPING_CODEPOINT_EQ(_codepoint, _lowercase, _uppercase, _titlecase, _name, _locale) { \
30  ::helpers::CaseMappingEntry e; \
31  e.codepoint = _codepoint; \
32  e.lowercase = _lowercase; \
33  e.uppercase = _uppercase; \
34  e.titlecase = _titlecase; \
35  e.name = _name; \
36  ::helpers::CaseMappingEntry a; \
37  std::string text = ::helpers::utf8(_codepoint); \
38  a.lowercase = ::helpers::lowercase(text, (_locale)); \
39  a.uppercase = ::helpers::uppercase(text, (_locale)); \
40  a.titlecase = ::helpers::titlecase(text, (_locale)); \
41  EXPECT_PRED_FORMAT2(::helpers::CompareCodepoint, e, a); \
42 }
43 
44 #define EXPECT_CASEMAPPING_EQ(_input, _lowercase, _uppercase, _titlecase, _locale) { \
45  ::helpers::CaseMappingEntry e; \
46  e.lowercase = _lowercase; \
47  e.uppercase = _uppercase; \
48  e.titlecase = _titlecase; \
49  ::helpers::CaseMappingEntry a; \
50  a.input = _input; \
51  a.lowercase = ::helpers::lowercase((_input), (_locale)); \
52  a.uppercase = ::helpers::uppercase((_input), (_locale)); \
53  a.titlecase = ::helpers::titlecase((_input), (_locale)); \
54  EXPECT_PRED_FORMAT2(::helpers::CompareCaseMapping, e, a); \
55 }
56 
57 #if UTF8_VERSION_GUARD(1, 4, 0)
58  #define EXPECT_CASEFOLDING_EQ(_codepoint, _folded, _name, _locale) { \
59  ::helpers::CaseFoldingEntry e; \
60  e.codePoint = _codepoint; \
61  e.folded = _folded; \
62  e.name = _name; \
63  ::helpers::CaseFoldingEntry a; \
64  a.folded = ::helpers::casefold(::helpers::utf8(_codepoint), (_locale)); \
65  EXPECT_PRED_FORMAT2(::helpers::CompareCaseFolding, e, a); \
66  }
67 #endif
68 
69 #if UTF8_VERSION_GUARD(1, 5, 0)
70  #define CM_CALL(_function, _input, _inputSize, _output, _outputSize, _locale, _errors) \
71  _function ((_input), (_inputSize), (_output), (_outputSize), (_locale), (_errors))
72 #else
73  #define CM_CALL(_function, _input, _inputSize, _output, _outputSize, _locale, _errors) \
74  _function ((_input), (_inputSize), (_output), (_outputSize), (_errors))
75 #endif
76 
77 namespace helpers {
78 
79  std::string uppercase(const std::string& text, size_t locale);
80 
81  std::string lowercase(const std::string& text, size_t locale);
82 
83  std::string titlecase(const std::string& text, size_t locale);
84 
85 #if UTF8_VERSION_GUARD(1, 4, 0)
86  std::string casefold(const std::string& text, size_t locale);
87 #endif
88 
89  struct CaseMappingEntry
90  {
91  CaseMappingEntry()
92  : codepoint(0)
93  {
94  }
95 
96  unicode_t codepoint;
97  std::string name;
98  std::string input;
99  std::string lowercase;
100  std::string uppercase;
101  std::string titlecase;
102  };
103 
104  ::testing::AssertionResult CompareCodepoint(
105  const char* expressionExpected, const char* expressionActual,
106  const CaseMappingEntry& entryExpected, const CaseMappingEntry& entryActual);
107 
108  ::testing::AssertionResult CompareCaseMapping(
109  const char* expressionExpected, const char* expressionActual,
110  const CaseMappingEntry& entryExpected, const CaseMappingEntry& entryActual);
111 
112 #if UTF8_VERSION_GUARD(1, 4, 0)
113  struct CaseFoldingEntry
114  {
115  unicode_t codePoint;
116  std::string folded;
117  std::string name;
118  };
119 
120  ::testing::AssertionResult CompareCaseFolding(
121  const char* expressionExpected, const char* expressionActual,
122  const CaseFoldingEntry& entryExpected, const CaseFoldingEntry& entryActual);
123 #endif
124 
125 };
126 
Base includes for helper methods.
String helper functions.
uint32_t unicode_t
UTF-32 encoded code point.
Definition: utf8rewind.h:698