]> git.ipfire.org Git - thirdparty/squid.git/blame - src/tests/testCharacterSet.cc
SourceFormat Enforcement
[thirdparty/squid.git] / src / tests / testCharacterSet.cc
CommitLineData
bbc27441 1/*
4ac4a490 2 * Copyright (C) 1996-2017 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
16CPPUNIT_TEST_SUITE_REGISTRATION( testCharacterSet );
17
18void
19testCharacterSet::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
47void
48testCharacterSet::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
56void
57testCharacterSet::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
67void
68testCharacterSet::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
77void
78testCharacterSet::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
96void
97testCharacterSet::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
108void
109testCharacterSet::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