HeaderBaseTest.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "Qt.h"
00024 #include "../HeaderBase.h"
00025 #include "Imports.cpp"
00026
00027 namespace Protocols {
00028 namespace Http {
00029 namespace Testing {
00030
00032
00034 class HeaderBaseTest : public CppUnit::TestFixture
00035 {
00036 CPPUNIT_TEST_SUITE (HeaderBaseTest);
00037 CPPUNIT_TEST (testParseInvalidOneLineHeader);
00038 CPPUNIT_TEST (testParseInvalidOneLineHeader);
00039 CPPUNIT_TEST (testParseWriteEmptyHeader);
00040 CPPUNIT_TEST (testParseWriteOneHeaderFieldNoValue);
00041 CPPUNIT_TEST (testParseWriteOneHeaderFieldOneValue);
00042 CPPUNIT_TEST (testParseWriteOneHeaderFieldTwoValues);
00043 CPPUNIT_TEST (testParseTwoHeaderFieldsWithSameName);
00044 CPPUNIT_TEST (testParseOneHeaderFieldBrokenOnMultipleLines);
00045 CPPUNIT_TEST (testParseOneHeaderFieldLfTerminated);
00046 CPPUNIT_TEST (testParseHeaderNotCrLfTerminated);
00047 CPPUNIT_TEST (testParseWriteTwoHeaderFields);
00048 CPPUNIT_TEST (testSetFieldValueClearsOldFieldValues);
00049 CPPUNIT_TEST (testRemoveHeaderField);
00050 CPPUNIT_TEST (testFieldValueGetters);
00051 CPPUNIT_TEST (testFieldNameGetters);
00052 CPPUNIT_TEST (testVirtualCtor);
00053 CPPUNIT_TEST_SUITE_END();
00054
00055 HeaderBase header;
00056 HeaderBase header2;
00057
00058 public:
00059 HeaderBaseTest() : header()
00060 {}
00061
00062 void setUp()
00063 {
00064 header = HeaderBase();
00065 header2 = HeaderBase();
00066 }
00067
00068 void testParseInvalidOneLineHeader()
00069 {
00070 bool parsed = header.parse ("non header line\r\n");
00071 CPPUNIT_ASSERT (parsed == false);
00072 }
00073
00074 void testParseInvalidTwoLineHeader()
00075 {
00076 bool parsed = header.parse ("header-field: value\r\n"
00077 "non header line\r\n");
00078 CPPUNIT_ASSERT (parsed == false);
00079 }
00080
00081 void scenarioWriteHeader (const QByteArray &rawHeader,
00082 const HeaderBase &header)
00083 {
00084 QByteArray writtenRawHeader = header.toRawBytes();
00085 CPPUNIT_ASSERT (writtenRawHeader == rawHeader);
00086 }
00087
00088 void scenarioParseHeader (const QByteArray &rawHeader,
00089 const HeaderBase &header,
00090 bool parses = true)
00091 {
00092 HeaderBase parsedHeader;
00093 bool parsed = parsedHeader.parse (rawHeader);
00094 CPPUNIT_ASSERT (parsed == parses);
00095 CPPUNIT_ASSERT (header == parsedHeader);
00096 }
00097
00098 void scenarioParseAndWriteHeader (const QByteArray &rawHeader,
00099 const HeaderBase &header)
00100 {
00101 scenarioWriteHeader (rawHeader, header);
00102 scenarioParseHeader (rawHeader, header);
00103 }
00104
00105 void testParseWriteEmptyHeader()
00106 {
00107 scenarioParseAndWriteHeader ("\r\n", header);
00108 }
00109
00110 void testParseWriteOneHeaderFieldNoValue()
00111 {
00112 header.setFieldValue ("Header-Field", "");
00113 scenarioParseAndWriteHeader ("Header-Field:\r\n\r\n", header);
00114 }
00115
00116 void testParseWriteOneHeaderFieldOneValue()
00117 {
00118 header.setFieldValue ("Header-Field", "value");
00119 scenarioParseAndWriteHeader ("Header-Field: value\r\n\r\n", header);
00120 }
00121
00122 void testParseWriteOneHeaderFieldTwoValues()
00123 {
00124 header.setFieldValue ("Header-Field", "value1, value2");
00125 scenarioParseAndWriteHeader ("Header-Field: value1, value2\r\n\r\n",
00126 header);
00127 }
00128
00129 void testParseTwoHeaderFieldsWithSameName()
00130 {
00131 header.setFieldValue ("Header-Field", "value1, value2");
00132 scenarioParseHeader ("Header-Field: value1\r\n"
00133 "Header-Field: value2\r\n",
00134 header);
00135 }
00136
00137 void testParseOneHeaderFieldBrokenOnMultipleLines()
00138 {
00139 header.setFieldValue ("Header-Field", "value1, value2");
00140 scenarioParseHeader ("Header-Field: value1,\r\n\tvalue2\r\n", header);
00141 }
00142
00143 void testParseOneHeaderFieldLfTerminated()
00144 {
00145 header.setFieldValue ("Header-Field", "value");
00146 scenarioParseHeader ("Header-Field: value\n", header);
00147 }
00148
00149 void testParseHeaderNotCrLfTerminated()
00150 {
00151 header.setFieldValue ("Header-Field", "value");
00152 scenarioParseHeader ("Header-Field: value", header);
00153 }
00154
00155 void testParseWriteTwoHeaderFields()
00156 {
00157 header.setFieldValue ("Header-Field1", "value1");
00158 header.setFieldValue ("Header-Field2", "value2");
00159 scenarioParseAndWriteHeader ("Header-Field1: value1\r\n"
00160 "Header-Field2: value2\r\n"
00161 "\r\n",
00162 header);
00163 }
00164
00165 void testSetFieldValueClearsOldFieldValues()
00166 {
00167 header.setFieldValue ("Header-Field", "value1");
00168 header.setFieldValue ("Header-Field", "value2");
00169 header2.setFieldValue ("Header-Field", "value2");
00170 CPPUNIT_ASSERT (header == header2);
00171 }
00172
00173 void testAddFieldValueAppendsValues()
00174 {
00175 header.addFieldValue ("Header-Field", "value1");
00176 header.addFieldValue ("Header-Field", "value2");
00177 header2.setFieldValue ("Header-Field", "value1, value2");
00178 CPPUNIT_ASSERT (header == header2);
00179 }
00180
00181 void testRemoveHeaderField()
00182 {
00183 header.setFieldValue ("Header-Field", "value");
00184 header.removeField ("Header-Field");
00185 CPPUNIT_ASSERT (header == HeaderBase());
00186 }
00187
00188 void testFieldValueGetters()
00189 {
00190 header.setFieldValue ("Header-Field", "value1, value2");
00191 CPPUNIT_ASSERT (header.fieldValue ("Header-Field") == "value1, value2");
00192 QList <QByteArray> values;
00193 values.append ("value1");
00194 values.append ("value2");
00195 CPPUNIT_ASSERT (header.fieldValues ("Header-Field") == values);
00196 }
00197
00198 void testFieldNameGetters()
00199 {
00200 header.setFieldValue ("Header-Field1", "");
00201 header.setFieldValue ("Header-Field2", "value2");
00202 CPPUNIT_ASSERT (header.hasField ("Header-Field1"));
00203 CPPUNIT_ASSERT (header.hasField ("Header-Field2"));
00204 CPPUNIT_ASSERT (!header.hasField ("Not-Set-Field"));
00205 QList <QByteArray> names;
00206
00207 names.append ("header-field1");
00208 names.append ("header-field2");
00209 CPPUNIT_ASSERT (header.fields() == names);
00210 }
00211
00212 void testVirtualCtor()
00213 {
00214 header.setFieldValue ("Header-Field1", "");
00215 auto_ptr <DataBase> copy = header.copy();
00216 CPPUNIT_ASSERT (typeid (*copy) == typeid (header));
00217 CPPUNIT_ASSERT (dynamic_cast <HeaderBase &> (*copy) == header);
00218 }
00219 };
00220
00221 CPPUNIT_TEST_SUITE_REGISTRATION(HeaderBaseTest);
00222
00223 }
00224 }
00225 }