]>
Commit | Line | Data |
---|---|---|
bbc27441 | 1 | /* |
5b74111a | 2 | * Copyright (C) 1996-2018 The Squid Software Foundation and contributors |
bbc27441 AJ |
3 | * |
4 | * Squid software is distributed under GPLv2+ license and includes | |
5 | * contributions from numerous individuals and organizations. | |
6 | * Please see the COPYING and CONTRIBUTORS files for details. | |
7 | */ | |
8 | ||
18538c13 FC |
9 | #include "squid.h" |
10 | #include "base/CharacterSet.h" | |
11 | #include "testCharacterSet.h" | |
7f861c77 AJ |
12 | #include "unitTestMain.h" |
13 | ||
18538c13 FC |
14 | #include <string> |
15 | ||
16 | CPPUNIT_TEST_SUITE_REGISTRATION( testCharacterSet ); | |
17 | ||
18 | void | |
19 | testCharacterSet::CharacterSetConstruction() | |
20 | { | |
21 | { | |
47efdfc6 | 22 | CharacterSet t(nullptr,""); |
18538c13 FC |
23 | CPPUNIT_ASSERT_EQUAL(std::string("anonymous"),std::string(t.name)); |
24 | } | |
25 | { | |
26 | CharacterSet t("test",""); | |
27 | CPPUNIT_ASSERT_EQUAL(std::string("test"),std::string(t.name)); | |
28 | } | |
29 | { | |
30 | CharacterSet t("test",""); | |
47efdfc6 | 31 | for (int j = 0; j < 256; ++j) |
18538c13 FC |
32 | CPPUNIT_ASSERT_EQUAL(false,t[j]); |
33 | } | |
34 | { | |
35 | CharacterSet t("test","0"); | |
36 | CPPUNIT_ASSERT_EQUAL(true,t['0']); | |
47efdfc6 FC |
37 | for (int j = 0; j < 256; ++j) { |
38 | if (j != '0') { | |
18538c13 | 39 | CPPUNIT_ASSERT_EQUAL(false,t[j]); |
47efdfc6 FC |
40 | } else { |
41 | CPPUNIT_ASSERT_EQUAL(true,t[j]); | |
42 | } | |
43 | } | |
18538c13 FC |
44 | } |
45 | } | |
46 | ||
47 | void | |
48 | testCharacterSet::CharacterSetAdd() | |
49 | { | |
50 | CharacterSet t("test","0"); | |
51 | t.add(0); | |
52 | CPPUNIT_ASSERT_EQUAL(true,t['\0']); | |
53 | CPPUNIT_ASSERT_EQUAL(true,t['0']); | |
54 | } | |
55 | ||
56 | void | |
57 | testCharacterSet::CharacterSetAddRange() | |
58 | { | |
59 | CharacterSet t("test",""); | |
decd2fc6 | 60 | t.addRange('0','9'); |
18538c13 FC |
61 | CPPUNIT_ASSERT_EQUAL(true,t['0']); |
62 | CPPUNIT_ASSERT_EQUAL(true,t['5']); | |
63 | CPPUNIT_ASSERT_EQUAL(true,t['9']); | |
64 | CPPUNIT_ASSERT_EQUAL(false,t['a']); | |
65 | } | |
8664ceb4 FC |
66 | |
67 | void | |
68 | testCharacterSet::CharacterSetConstants() | |
69 | { | |
70 | CPPUNIT_ASSERT_EQUAL(true,CharacterSet::ALPHA['a']); | |
71 | CPPUNIT_ASSERT_EQUAL(true,CharacterSet::ALPHA['z']); | |
72 | CPPUNIT_ASSERT_EQUAL(true,CharacterSet::ALPHA['A']); | |
73 | CPPUNIT_ASSERT_EQUAL(true,CharacterSet::ALPHA['Z']); | |
74 | CPPUNIT_ASSERT_EQUAL(false,CharacterSet::ALPHA['5']); | |
75 | } | |
7d1cd883 FC |
76 | |
77 | void | |
78 | testCharacterSet::CharacterSetUnion() | |
79 | { | |
80 | { | |
81 | CharacterSet hex("hex",""); | |
82 | hex += CharacterSet::DIGIT; | |
47efdfc6 FC |
83 | hex += CharacterSet(nullptr,"aAbBcCdDeEfF"); |
84 | CPPUNIT_ASSERT_EQUAL(CharacterSet::HEXDIG, hex); | |
85 | for (int j = 0; j < 256; ++j) | |
7d1cd883 FC |
86 | CPPUNIT_ASSERT_EQUAL(CharacterSet::HEXDIG[j],hex[j]); |
87 | } | |
88 | { | |
47efdfc6 FC |
89 | CharacterSet hex(nullptr,""); |
90 | hex = CharacterSet::DIGIT + CharacterSet(nullptr,"aAbBcCdDeEfF"); | |
91 | for (int j = 0; j < 256; ++j) | |
7d1cd883 FC |
92 | CPPUNIT_ASSERT_EQUAL(CharacterSet::HEXDIG[j],hex[j]); |
93 | } | |
94 | } | |
f53969cc | 95 | |
47efdfc6 FC |
96 | void |
97 | testCharacterSet::CharacterSetEqualityOp() | |
98 | { | |
99 | CPPUNIT_ASSERT_EQUAL(CharacterSet::ALPHA, CharacterSet::ALPHA); | |
100 | CPPUNIT_ASSERT_EQUAL(CharacterSet::BIT, CharacterSet(nullptr,"01")); | |
101 | CPPUNIT_ASSERT_EQUAL(CharacterSet(nullptr,"01"), CharacterSet(nullptr,"01")); | |
102 | CPPUNIT_ASSERT_EQUAL(CharacterSet(nullptr,"01"), CharacterSet("","01")); | |
103 | CPPUNIT_ASSERT_EQUAL(CharacterSet::BIT, CharacterSet("bit",'0','1')); | |
0049f30f SM |
104 | CPPUNIT_ASSERT_EQUAL(CharacterSet::BIT, CharacterSet("bit", {{'0','1'}})); |
105 | CPPUNIT_ASSERT_EQUAL(CharacterSet::BIT, CharacterSet("bit", {{'0','0'},{'1','1'}})); | |
47efdfc6 FC |
106 | } |
107 | ||
108 | void | |
109 | testCharacterSet::CharacterSetSubtract() | |
110 | { | |
111 | CharacterSet sample(nullptr, "0123456789aAbBcCdDeEfFz"); | |
112 | ||
113 | sample -= CharacterSet(nullptr, "z"); //character in set | |
114 | CPPUNIT_ASSERT_EQUAL(CharacterSet::HEXDIG, sample); | |
115 | ||
116 | sample -= CharacterSet(nullptr, "z"); // character not in set | |
117 | CPPUNIT_ASSERT_EQUAL(CharacterSet::HEXDIG, sample); | |
118 | ||
119 | sample += CharacterSet(nullptr, "z"); | |
120 | // one in set, one not; test operator- | |
121 | CPPUNIT_ASSERT_EQUAL(CharacterSet::HEXDIG, sample - CharacterSet(nullptr, "qz")); | |
122 | } | |
0049f30f | 123 |