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 "../Header.h"
00025 #include "cppunit/extensions/HelperMacros.h"
00026 #include <iostream>
00027 #include <memory>
00028
00029 namespace Http {
00030 namespace Testing {
00031
00032 class HeaderTest : public CppUnit::TestFixture
00033 {
00034 CPPUNIT_TEST_SUITE(HeaderTest);
00035 CPPUNIT_TEST(testDefaultCtor);
00036 CPPUNIT_TEST(testCtorQString);
00037 CPPUNIT_TEST(testCompareTwoEqualNonEmptyHeaders);
00038 CPPUNIT_TEST(testCompareTwoEqualEmptyHeaders);
00039 CPPUNIT_TEST(testCompareTwoDifferentNonEmptyHeaders);
00040 CPPUNIT_TEST(testCompareEmptyAndNonEmptyHeaders);
00041 CPPUNIT_TEST(testValidParse);
00042 CPPUNIT_TEST(testCaseInsensitiveParse);
00043 CPPUNIT_TEST(testInvalidElemsParse);
00044 CPPUNIT_TEST(testLeadTrailingLWS);
00045 CPPUNIT_TEST(testDuplicateFields);
00046 CPPUNIT_TEST(testQuotedStringInValue);
00047 CPPUNIT_TEST(testHeaderFieldOnMultipleLines);
00048 CPPUNIT_TEST(testCTLsInValue);
00049
00050
00051
00052
00053 CPPUNIT_TEST(testToString);
00054 CPPUNIT_TEST_SUITE_END();
00055 std::auto_ptr<Header> m_p;
00056
00057 std::auto_ptr<Header> makeNewHeader (const char* msg) const
00058 {
00059 std::auto_ptr<Header> p (new Header (msg));
00060 return p;
00061 }
00062
00063 QString getFieldValues(const char* field) const
00064 {
00065 QStringList fieldValues = m_p->fieldValues (field);
00066 QString fieldValuesString = fieldValues.join(":");
00067 return fieldValuesString;
00068 }
00069
00070 QString getFields() const
00071 {
00072 QStringList fields = m_p->fields();
00073 QString fieldsString = fields.join (":");
00074 return fieldsString;
00075 }
00076
00077 public:
00078 HeaderTest() : m_p()
00079 {
00080 }
00081
00082 void setUp()
00083 {
00084 m_p.reset (new Header);
00085 }
00086
00087 void tearDown()
00088 {
00089 }
00090
00091 void testDefaultCtor()
00092 {
00093 CPPUNIT_ASSERT (m_p->isValid());
00094 }
00095
00096 void testCtorQString()
00097 {
00098 m_p = makeNewHeader ("http://this\nthat");
00099 CPPUNIT_ASSERT( m_p->isValid() == false );
00100 }
00101
00102 void testCompareTwoEqualNonEmptyHeaders()
00103 {
00104 std::auto_ptr<Header> header1 = makeNewHeader ("http://this\nthat:1,2,3,4,5");
00105 std::auto_ptr<Header> header2 = makeNewHeader ("http://this\nthat:1,2,3,4,5");
00106
00107 CPPUNIT_ASSERT (*header1 == *header2);
00108 CPPUNIT_ASSERT (!(*header1 != *header2));
00109 }
00110
00111 void testCompareTwoEqualEmptyHeaders()
00112 {
00113 std::auto_ptr<Header> header1 = makeNewHeader ("");
00114 std::auto_ptr<Header> header2 = makeNewHeader ("");
00115
00116 CPPUNIT_ASSERT (*header1 == *header2);
00117 CPPUNIT_ASSERT (!(*header1 != *header2));
00118 }
00119
00120 void testCompareTwoDifferentNonEmptyHeaders()
00121 {
00122 std::auto_ptr<Header> header1 = makeNewHeader ("http://this\nthat:1,2,3,4,5");
00123 std::auto_ptr<Header> header2 = makeNewHeader ("http://five\nsix:7,8");
00124
00125 CPPUNIT_ASSERT (*header1 != *header2);
00126 CPPUNIT_ASSERT (!(*header1 == *header2));
00127 }
00128
00129 void testCompareEmptyAndNonEmptyHeaders()
00130 {
00131 std::auto_ptr<Header> header1 = makeNewHeader ("");
00132 std::auto_ptr<Header> header2 = makeNewHeader ("http://five\nsix:7,8");
00133
00134 CPPUNIT_ASSERT (*header1 != *header2);
00135 CPPUNIT_ASSERT (!(*header1 == *header2));
00136 }
00137
00138 void testValidParse()
00139 {
00140 m_p = makeNewHeader ("http://this\nthat:1,2,3,4,5");
00141 CPPUNIT_ASSERT (m_p->isValid() == true);
00142 CPPUNIT_ASSERT (getFields() == "http:that");
00143 CPPUNIT_ASSERT (getFieldValues("http") == "//this");
00144 CPPUNIT_ASSERT (getFieldValues("that") == "1:2:3:4:5");
00145 }
00146
00147 void testInvalidElemsParse()
00148 {
00149 m_p = makeNewHeader ("http:1,2,3,4,5\nInvalid");
00150 CPPUNIT_ASSERT (m_p->isValid() == false);
00151 CPPUNIT_ASSERT (getFields() == "http");
00152 CPPUNIT_ASSERT (getFieldValues("http") == "1:2:3:4:5");
00153 }
00154
00155 void testCaseInsensitiveParse()
00156 {
00157 m_p = makeNewHeader ("http:1,2,3,4,5");
00158 CPPUNIT_ASSERT (getFieldValues("HTtP") == "1:2:3:4:5");
00159 }
00160
00161 void testCTLsInValue()
00162 {
00163 m_p = makeNewHeader ("http:1,2,3,4,),@,=");
00164 CPPUNIT_ASSERT (m_p->isValid() == true);
00165 CPPUNIT_ASSERT (getFieldValues("http") == "1:2:3:4:):@:=");
00166 }
00167
00168 void testLeadTrailingLWS()
00169 {
00170 m_p = makeNewHeader("http: p,q, r, s ");
00171 CPPUNIT_ASSERT (m_p->isValid() == true);
00172 CPPUNIT_ASSERT (getFieldValues("http") == "p:q:r:s");
00173 }
00174
00175 void testDuplicateFields()
00176 {
00177 m_p = makeNewHeader("http:1,2,3\nhttp:4,5,6");
00178 CPPUNIT_ASSERT (m_p->isValid() == true);
00179 CPPUNIT_ASSERT (getFieldValues("http") == "1:2:3:4:5:6");
00180 }
00181
00182 void testQuotedStringInValue()
00183 {
00184 m_p = makeNewHeader("http:1,2, \"three and four\", 5");
00185 CPPUNIT_ASSERT (m_p->isValid() == true);
00186 CPPUNIT_ASSERT (getFieldValues("http") == "1:2:\"three and four\":5");
00187 }
00188
00189
00190
00191
00192 void testHeaderFieldOnMultipleLines()
00193 {
00194 m_p = makeNewHeader("http:1,2\n ppp:3,4\n qqq:5,6");
00195 CPPUNIT_ASSERT (m_p->isValid() == true);
00196 CPPUNIT_ASSERT (getFieldValues("http") == "1:2 ppp:3:4 qqq:5:6");
00197 }
00198
00199
00200 void testContentLength()
00201 {
00202 m_p = makeNewHeader("Content-Length : 3455");
00203 CPPUNIT_ASSERT (m_p->isValid());
00204 CPPUNIT_ASSERT (getFieldValues("Content-Length") == "3455");
00205 m_p = makeNewHeader("Content-Length : 0");
00206 CPPUNIT_ASSERT (m_p->isValid());
00207 CPPUNIT_ASSERT (getFieldValues("Content-Length") == "0");
00208 m_p = makeNewHeader("Content-Length : -44");
00209 CPPUNIT_ASSERT (m_p->isValid() == false );
00210
00211 }
00212
00213
00214 void testContentLocation()
00215 {
00216 m_p = makeNewHeader("Content-Location : absoluteURI");
00217 CPPUNIT_ASSERT (m_p->isValid());
00218 CPPUNIT_ASSERT (getFieldValues("Content-Location") == "absoluteURI");
00219 m_p = makeNewHeader("Content-Location : relativeURI");
00220 CPPUNIT_ASSERT (m_p->isValid());
00221 CPPUNIT_ASSERT (getFieldValues("Content-Location") == "relativeURI");
00222 m_p = makeNewHeader("Content-Location : InvalidURI");
00223 CPPUNIT_ASSERT (m_p->isValid() == false);
00224
00225 }
00226
00227
00228 void testLanguageTags()
00229 {
00230 m_p = makeNewHeader("Content-Language : da");
00231 CPPUNIT_ASSERT (m_p->isValid());
00232 CPPUNIT_ASSERT (getFieldValues("Content-Language") == "da");
00233 m_p = makeNewHeader("Content-Language : xxxxxxxxxxxx");
00234 CPPUNIT_ASSERT (m_p->isValid() == false);
00235 }
00236
00237
00238 void testLastModified()
00239 {
00240 m_p = makeNewHeader("Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT");
00241 CPPUNIT_ASSERT (m_p->isValid());
00242 CPPUNIT_ASSERT (getFieldValues("Last-Modified") == "Tue, 15 Nov 1994 12:45:26 GMT");
00243 m_p = makeNewHeader("Last-Modified: XYZ");
00244 CPPUNIT_ASSERT (m_p->isValid() == false);
00245 }
00246
00247 void testToString()
00248 {
00249 m_p = makeNewHeader ("Last-Modified: XYZ");
00250 CPPUNIT_ASSERT (m_p->isValid());
00251 CPPUNIT_ASSERT (m_p->toString() == "Last-Modified: XYZ\r\n");
00252 m_p = makeNewHeader ("http://this\nthat:1,2,3,4,5");
00253 CPPUNIT_ASSERT (m_p->isValid());
00254 QString expected = "http: //this\r\nthat: 1, 2, 3, 4, 5\r\n";
00255 CPPUNIT_ASSERT (m_p->toString() == expected);
00256 char given[] = "http:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
00257 m_p = makeNewHeader(given);
00258 QString got = m_p->toString();
00259 expected = "http:\r\n\txxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\r\n";
00260 CPPUNIT_ASSERT (m_p->isValid() == true);
00261 CPPUNIT_ASSERT (expected == got);
00262 }
00263 };
00264 CPPUNIT_TEST_SUITE_REGISTRATION(HeaderTest);
00265
00266 }
00267 }