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 121 122 123 124 125
|
/*
* Copyright 2009 CrossWire Bible Society (http://www.crosswire.org)
* CrossWire Bible Society
* P. O. Box 2528
* Tempe, AZ 85280-2528
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation version 2.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
*/
#include <cppunit/extensions/HelperMacros.h>
#include <iostream>
#include "url.h"
using namespace sword;
using namespace std;
class URLTest : public CppUnit::TestFixture {
CPPUNIT_TEST_SUITE( URLTest );
CPPUNIT_TEST( testProtocol );
CPPUNIT_TEST( testHostName );
CPPUNIT_TEST( testPath );
CPPUNIT_TEST( testParametersMap );
CPPUNIT_TEST( testParameterValue );
CPPUNIT_TEST( testEncode );
CPPUNIT_TEST( testDecode );
CPPUNIT_TEST_SUITE_END();
private:
sword::URL* m_url1;
sword::URL* m_url2;
sword::URL* m_url3;
public:
void setUp() {
m_url1 = new sword::URL("http://www.crosswire.org/index.jsp?page=help&user=foo&name=bar");
m_url2 = new sword::URL("ftp://ftp.crosswire.org/sword/wiki/index.jsp?page=help&user=foo&name=foo%20bar");
m_url3 = new sword::URL("crosswire.org/index.jsp");
}
void tearDown() {
delete m_url1;
delete m_url2;
delete m_url3;
}
void testProtocol()
{
CPPUNIT_ASSERT( !strcmp(m_url1->getProtocol(), "http") );
CPPUNIT_ASSERT( !strcmp(m_url2->getProtocol(), "ftp") );
CPPUNIT_ASSERT( m_url3->getProtocol() && strlen( m_url3->getProtocol() ) == 0 );
}
void testHostName()
{
CPPUNIT_ASSERT( !strcmp(m_url1->getHostName(), "www.crosswire.org") );
CPPUNIT_ASSERT( !strcmp(m_url2->getHostName(), "ftp.crosswire.org") );
CPPUNIT_ASSERT( !strcmp(m_url3->getHostName(), "crosswire.org") );
}
void testPath()
{
CPPUNIT_ASSERT( !strcmp(m_url1->getPath(), "/index.jsp") );
CPPUNIT_ASSERT( !strcmp(m_url2->getPath(), "/sword/wiki/index.jsp") );
CPPUNIT_ASSERT( !strcmp(m_url3->getPath(), "/index.jsp") );
}
void testParametersMap()
{
std::map< sword::SWBuf, sword::SWBuf > params = m_url1->getParameters();
CPPUNIT_ASSERT( !strcmp(params[sword::SWBuf("page")].c_str(), "help") );
CPPUNIT_ASSERT( !strcmp(params[sword::SWBuf("user")].c_str(), "foo") );
CPPUNIT_ASSERT( !strcmp(params[sword::SWBuf("name")].c_str(), "bar") );
params = m_url2->getParameters(); //test url2 params
CPPUNIT_ASSERT( !strcmp(params[sword::SWBuf("page")].c_str(), "help") );
CPPUNIT_ASSERT( !strcmp(params[sword::SWBuf("user")].c_str(), "foo") );
CPPUNIT_ASSERT( !strcmp(params[sword::SWBuf("name")].c_str(), "foo bar") );
params = m_url3->getParameters(); //test url3 params
CPPUNIT_ASSERT( params.size() == 0 );
}
void testParameterValue()
{
CPPUNIT_ASSERT( !strcmp(m_url1->getParameterValue("page"), "help") );
CPPUNIT_ASSERT( !strcmp(m_url1->getParameterValue("user"), "foo") );
CPPUNIT_ASSERT( !strcmp(m_url1->getParameterValue("name"), "bar") );
CPPUNIT_ASSERT( !strcmp(m_url2->getParameterValue("page"), "help") );
CPPUNIT_ASSERT( !strcmp(m_url2->getParameterValue("user"), "foo") );
CPPUNIT_ASSERT( !strcmp(m_url2->getParameterValue("name"), "foo bar") );
CPPUNIT_ASSERT( m_url3->getParameterValue("page") && strlen(m_url3->getParameterValue("page")) == 0 );
}
void testEncode() {
cout << URL::encode("this is a test") << endl;
SWBuf encoded = URL::encode("this is a test");
CPPUNIT_ASSERT( !strcmp(encoded.c_str(), "this%20is%20a%20test") || !strcmp(encoded.c_str(), "this+is+a+test") );
CPPUNIT_ASSERT( !strcmp(URL::encode("this-is-a-test").c_str(), "this-is-a-test") );
CPPUNIT_ASSERT( !strcmp(URL::encode("").c_str(), "") );
}
void testDecode() {
CPPUNIT_ASSERT( !strcmp(URL::decode("this%3Eis%3Ea%3Etest").c_str(), "this>is>a>test") );
CPPUNIT_ASSERT( !strcmp(URL::decode("this%3Eis%3Ea%3Etest%3E").c_str(), "this>is>a>test>") );
CPPUNIT_ASSERT( !strcmp(URL::decode("%3E%3E%3E%3E%3E%3E%3E%3E%3E%3E%20%20%20%20%20").c_str(), ">>>>>>>>>> ") );
CPPUNIT_ASSERT( !strcmp(URL::decode("nothing%20").c_str(), "nothing ") );
CPPUNIT_ASSERT( !strcmp(URL::decode("nothing").c_str(), "nothing") );
CPPUNIT_ASSERT( !strcmp(URL::decode("").c_str(), "") );
}
};
CPPUNIT_TEST_SUITE_REGISTRATION(URLTest);
|