File: string_segment_test.cpp

package info (click to toggle)
icu 78.2-1
  • links: PTS
  • area: main
  • in suites: experimental
  • size: 123,992 kB
  • sloc: cpp: 527,891; ansic: 112,789; sh: 4,983; makefile: 4,657; perl: 3,199; python: 2,933; xml: 749; sed: 36; lisp: 12
file content (120 lines) | stat: -rw-r--r-- 4,832 bytes parent folder | download | duplicates (10)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
// © 2018 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html

#include "unicode/utypes.h"

#if !UCONFIG_NO_FORMATTING

#include "string_segment.h"
#include "intltest.h"

class StringSegmentTest : public IntlTest {
  public:
    void testOffset();
    void testLength();
    void testCharAt();
    void testGetCodePoint();
    void testCommonPrefixLength();

    void runIndexedTest(int32_t index, UBool exec, const char*& name, char* par = nullptr) override;
};

static const char16_t* SAMPLE_STRING = u"📻 radio 📻";

void StringSegmentTest::runIndexedTest(int32_t index, UBool exec, const char*&name, char*) {
    if (exec) {
        logln("TestSuite StringSegmentTest: ");
    }
    TESTCASE_AUTO_BEGIN;
        TESTCASE_AUTO(testOffset);
        TESTCASE_AUTO(testLength);
        TESTCASE_AUTO(testCharAt);
        TESTCASE_AUTO(testGetCodePoint);
        TESTCASE_AUTO(testCommonPrefixLength);
    TESTCASE_AUTO_END;
}

void StringSegmentTest::testOffset() {
    // Note: sampleString needs function scope so it is valid while the StringSegment is valid
    UnicodeString sampleString(SAMPLE_STRING);
    StringSegment segment(sampleString, false);
    assertEquals("Initial Offset", 0, segment.getOffset());
    segment.adjustOffset(3);
    assertEquals("Adjust A", 3, segment.getOffset());
    segment.adjustOffset(2);
    assertEquals("Adjust B", 5, segment.getOffset());
    segment.setOffset(4);
    assertEquals("Set Offset", 4, segment.getOffset());
}

void StringSegmentTest::testLength() {
    // Note: sampleString needs function scope so it is valid while the StringSegment is valid
    UnicodeString sampleString(SAMPLE_STRING);
    StringSegment segment(sampleString, false);
    assertEquals("Initial length", 11, segment.length());
    segment.adjustOffset(3);
    assertEquals("Adjust", 8, segment.length());
    segment.setLength(4);
    assertEquals("Set Length", 4, segment.length());
    segment.setOffset(5);
    assertEquals("After adjust offset", 2, segment.length());
    segment.resetLength();
    assertEquals("After reset length", 6, segment.length());
}

void StringSegmentTest::testCharAt() {
    // Note: sampleString needs function scope so it is valid while the StringSegment is valid
    UnicodeString sampleString(SAMPLE_STRING);
    StringSegment segment(sampleString, false);
    assertEquals("Initial", SAMPLE_STRING, segment.toUnicodeString());
    assertEquals("Initial", SAMPLE_STRING, segment.toTempUnicodeString());
    segment.adjustOffset(3);
    assertEquals("After adjust-offset", UnicodeString(u"radio 📻"), segment.toUnicodeString());
    assertEquals("After adjust-offset", UnicodeString(u"radio 📻"), segment.toTempUnicodeString());
    segment.setLength(5);
    assertEquals("After adjust-length", UnicodeString(u"radio"), segment.toUnicodeString());
    assertEquals("After adjust-length", UnicodeString(u"radio"), segment.toTempUnicodeString());
}

void StringSegmentTest::testGetCodePoint() {
    // Note: sampleString needs function scope so it is valid while the StringSegment is valid
    UnicodeString sampleString(SAMPLE_STRING);
    StringSegment segment(sampleString, false);
    assertEquals("Double-width code point", 0x1F4FB, segment.getCodePoint());
    segment.setLength(1);
    assertEquals("Invalid A", -1, segment.getCodePoint());
    segment.resetLength();
    segment.adjustOffset(1);
    assertEquals("Invalid B", -1, segment.getCodePoint());
    segment.adjustOffset(1);
    assertEquals("Valid again", 0x20, segment.getCodePoint());
}

void StringSegmentTest::testCommonPrefixLength() {
    // Note: sampleString needs function scope so it is valid while the StringSegment is valid
    UnicodeString sampleString(SAMPLE_STRING);
    StringSegment segment(sampleString, false);
    assertEquals("", 11, segment.getCommonPrefixLength(SAMPLE_STRING));
    assertEquals("", 4, segment.getCommonPrefixLength(u"📻 r"));
    assertEquals("", 3, segment.getCommonPrefixLength(u"📻 x"));
    assertEquals("", 0, segment.getCommonPrefixLength(u"x"));
    segment.adjustOffset(3);
    assertEquals("", 0, segment.getCommonPrefixLength(u"RADiO"));
    assertEquals("", 5, segment.getCommonPrefixLength(u"radio"));
    assertEquals("", 2, segment.getCommonPrefixLength(u"rafio"));
    assertEquals("", 0, segment.getCommonPrefixLength(u"fadio"));
    segment.setLength(3);
    assertEquals("", 3, segment.getCommonPrefixLength(u"radio"));
    assertEquals("", 2, segment.getCommonPrefixLength(u"rafio"));
    assertEquals("", 0, segment.getCommonPrefixLength(u"fadio"));
    segment.resetLength();
    segment.setOffset(11); // end of string
    assertEquals("", 0, segment.getCommonPrefixLength(u"foo"));
}


extern IntlTest *createStringSegmentTest() {
    return new StringSegmentTest();
}

#endif