[ Index ]

PHP Cross Reference of Limb3

title

Body

[close]

/net/tests/cases/ -> lmbUriTest.class.php (source)

   1  <?php
   2  /*
   3   * Limb PHP Framework
   4   *
   5   * @link http://limb-project.com 
   6   * @copyright  Copyright &copy; 2004-2007 BIT(http://bit-creative.com)
   7   * @license    LGPL http://www.gnu.org/copyleft/lesser.html 
   8   */
   9  lmb_require('limb/net/src/lmbUri.class.php');
  10  
  11  class lmbUriTest extends UnitTestCase
  12  {
  13    function testCreate()
  14    {
  15      $str = 'http://admin:test@localhost:81/test.php/test?foo=bar#23';
  16  
  17      $uri = new lmbUri($str);
  18  
  19      $this->assertEqual($uri->getProtocol(), 'http');
  20      $this->assertEqual($uri->getHost(), 'localhost');
  21      $this->assertEqual($uri->getUser(), 'admin');
  22      $this->assertEqual($uri->getPassword(), 'test');
  23      $this->assertEqual($uri->getPort(), '81');
  24      $this->assertEqual($uri->getAnchor(), '23');
  25  
  26      $this->assertEqual($uri->getQueryItem('foo'), 'bar');
  27      $this->assertEqual($uri->countQueryItems(), 1);
  28  
  29      $this->assertEqual($uri->getPath(), '/test.php/test');
  30      $this->assertEqual($uri->countPath(), 3);
  31      $this->assertEqual($uri->getPathElements(), array('', 'test.php', 'test'));
  32      $this->assertEqual($uri->getPathElement(0), '');
  33      $this->assertEqual($uri->getPathElement(1), 'test.php');
  34      $this->assertEqual($uri->getPathElement(2), 'test');
  35    }
  36  
  37    function testInvalidUriThrowsException()
  38    {
  39      try
  40      {
  41        $uri = new lmbUri('http:///');
  42        $this->assertTrue(false);
  43      }
  44      catch(lmbException $e){}
  45    }
  46  
  47    function testToStringDefault()
  48    {
  49      $str = 'http://admin:test@localhost:81/test.php?foo=bar#23';
  50  
  51      $uri = new lmbUri($str);
  52  
  53      $this->assertEqual($uri->toString(), $str);
  54    }
  55  
  56    function testToStringQueryItemsSort()
  57    {
  58      $str = 'http://localhost/test.php?b=1&a=2&c[1]=456';
  59      $expected_url = 'http://localhost/test.php?a=2&b=1&c[1]=456';
  60  
  61      $uri = new lmbUri($str);
  62  
  63      $this->assertEqual($uri->toString(), $expected_url);
  64    }
  65  
  66    function testToStringNoProtocol()
  67    {
  68      $str = 'http://admin:test@localhost:81/test.php?foo=bar#23';
  69  
  70      $uri = new lmbUri($str);
  71  
  72      $this->assertEqual(
  73        $uri->toString(array('user', 'password', 'host', 'port', 'path', 'query', 'anchor')),
  74        'admin:test@localhost:81/test.php?foo=bar#23'
  75      );
  76    }
  77  
  78    function testToStringNoUser()
  79    {
  80      $str = 'http://admin:test@localhost:81/test.php?foo=bar#23';
  81  
  82      $uri = new lmbUri($str);
  83  
  84      $this->assertEqual(
  85        $uri->toString(array('protocol', 'password', 'host', 'port', 'path', 'query', 'anchor')),
  86        'http://localhost:81/test.php?foo=bar#23'
  87      );
  88    }
  89  
  90    function testToStringNoPassword()
  91    {
  92      $str = 'http://admin:test@localhost:81/test.php?foo=bar#23';
  93  
  94      $uri = new lmbUri($str);
  95  
  96      $this->assertEqual(
  97        $uri->toString(array('protocol', 'user', 'host', 'port', 'path', 'query', 'anchor')),
  98        'http://admin@localhost:81/test.php?foo=bar#23'
  99      );
 100    }
 101  
 102    function testToStringNoHost()
 103    {
 104      $str = 'http://admin:test@localhost:81/test.php?foo=bar#23';
 105  
 106      $uri = new lmbUri($str);
 107  
 108      $this->assertEqual(
 109        $uri->toString(array('protocol', 'user', 'password', 'port', 'path', 'query', 'anchor')),
 110        '/test.php?foo=bar#23'
 111      );
 112    }
 113  
 114    function testToStringNoPath()
 115    {
 116      $str = 'http://admin:test@localhost:81/test.php?foo=bar#23';
 117  
 118      $uri = new lmbUri($str);
 119  
 120      $this->assertEqual(
 121        $uri->toString(array('protocol', 'user', 'password', 'host', 'port', 'query', 'anchor')),
 122        'http://admin:test@localhost:81?foo=bar#23'
 123      );
 124    }
 125  
 126    function testToStringNoQuery()
 127    {
 128      $str = 'http://admin:test@localhost:81/test.php?foo=bar#23';
 129  
 130      $uri = new lmbUri($str);
 131  
 132      $this->assertEqual(
 133        $uri->toString(array('protocol', 'user', 'password', 'host', 'port', 'path', 'anchor')),
 134        'http://admin:test@localhost:81/test.php#23'
 135      );
 136    }
 137  
 138    function testToStringNoAnchor()
 139    {
 140      $str = 'http://admin:test@localhost:81/test.php?foo=bar#23';
 141  
 142      $uri = new lmbUri($str);
 143  
 144      $this->assertEqual(
 145        $uri->toString(array('protocol', 'user', 'password', 'host', 'port', 'path')),
 146        'http://admin:test@localhost:81/test.php'
 147      );
 148    }
 149  
 150    function testSetQueryString()
 151    {
 152      $str = 'http://localhost';
 153  
 154      $uri = new lmbUri($str);
 155  
 156      $uri->setQueryString('foo=bar&bar=foo');
 157  
 158      $this->assertEqual($uri->countQueryItems(), 2);
 159      $this->assertEqual($uri->getQueryItem('foo'), 'bar');
 160      $this->assertEqual($uri->getQueryItem('bar'), 'foo');
 161    }
 162  
 163    function testSetQueryString2()
 164    {
 165      $str = 'http://localhost';
 166  
 167      $uri = new lmbUri($str);
 168      $uri->setQueryString('foo[i1]=1&foo[i2]=2');
 169  
 170      $this->assertEqual($uri->countQueryItems(), 1);
 171      $this->assertEqual($uri->getQueryItem('foo'), array('i1' => '1', 'i2' => '2'));
 172    }
 173  
 174    function testNormalizePath()
 175    {
 176      $uri = new lmbUri('/foo/bar/../boo.php');
 177      $uri->normalizePath();
 178      $this->assertEqual($uri, new lmbUri('/foo/boo.php'));
 179  
 180      $uri->reset('/foo/bar/../../boo.php');
 181      $uri->normalizePath();
 182      $this->assertEqual($uri, new lmbUri('/boo.php'));
 183  
 184      $uri->reset('/foo/bar/../boo.php');
 185      $uri->normalizePath();
 186      $this->assertEqual($uri, new lmbUri('/foo/boo.php'));
 187  
 188      $uri->reset('/foo//bar//boo.php');
 189      $uri->normalizePath();
 190      $this->assertEqual($uri, new lmbUri('/foo/bar/boo.php'));
 191  
 192      $uri->reset('/foo//bar///boo.php');
 193      $uri->normalizePath();
 194      $this->assertEqual($uri, $uri = new lmbUri('/foo/bar/boo.php'));
 195      $this->assertEqual($uri->getPath(), $uri->getPath());
 196    }
 197  
 198    function testAddQueryItem()
 199    {
 200      $str = 'http://admin:test@localhost:81/test.php?foo=bar#23';
 201  
 202      $uri = new lmbUri($str);
 203  
 204      $uri->addQueryItem('bar', 'foo');
 205      $this->assertEqual($uri->getQueryString(), 'bar=foo&foo=bar');
 206    }
 207  
 208    function testAddQueryItem2()
 209    {
 210      $str = 'http://admin:test@localhost:81/test.php?foo=bar#23';
 211  
 212      $uri = new lmbUri($str);
 213  
 214      $uri->addQueryItem('foo', 'foo');
 215      $this->assertEqual($uri->getQueryString(), 'foo=foo');
 216    }
 217  
 218    function testAddQueryItem3()
 219    {
 220      $str = 'http://admin:test@localhost:81/test.php?foo=bar#23';
 221  
 222      $uri = new lmbUri($str);
 223  
 224      $uri->addQueryItem('foo', array('i1' => 'bar'));
 225      $uri->addQueryItem('bar', 1);
 226      $this->assertEqual($uri->getQueryString(), 'bar=1&foo[i1]=bar');
 227    }
 228  
 229    function testAddQueryItem4()
 230    {
 231      $str = 'http://admin:test@localhost:81/test.php?foo=bar#23';
 232  
 233      $uri = new lmbUri($str);
 234  
 235      $uri->addQueryItem('foo', array('i1' => array('i2' => 'bar')));
 236      $uri->addQueryItem('bar', 1);
 237      $this->assertEqual($uri->getQueryString(), 'bar=1&foo[i1][i2]=bar');
 238    }
 239  
 240    function testAddQueryItemUrlencode()
 241    {
 242      $str = 'http://admin:test@localhost:81/test.php?foo=bar#23';
 243  
 244      $uri = new lmbUri($str);
 245  
 246      $uri->addQueryItem('foo', ' foo ');
 247      $this->assertEqual($uri->getQueryString(), 'foo=+foo+');
 248    }
 249  
 250    function testAddQueryItemUrlencode2()
 251    {
 252      $str = 'http://admin:test@localhost:81/test.php?foo=bar#23';
 253  
 254      $uri = new lmbUri($str);
 255  
 256      $uri->addQueryItem('foo', array('i1' => ' bar '));
 257      $this->assertEqual($uri->getQueryString(), 'foo[i1]=+bar+');
 258    }
 259  
 260    function testCompareQueryEqual()
 261    {
 262      $str = 'http://admin:test@localhost2:81/test.php?bar=foo&foo=bar#23';
 263  
 264      $uri = new lmbUri($str);
 265  
 266      $this->assertTrue($uri->compareQuery(
 267        new lmbUri('http://admin:test@localhost:81/test.php?bar=foo&foo=bar#23')
 268       ));
 269    }
 270  
 271    function testCompareQueryNotEqual()
 272    {
 273      $str = 'http://admin:test@localhost:81/test.php?bar=foo&foo=bar#23';
 274  
 275      $uri = new lmbUri($str);
 276  
 277      $this->assertFalse($uri->compareQuery(
 278        new lmbUri('http://admin:test@localhost:81/test.php?bar=foo&foo=bar2#23')
 279       ));
 280    }
 281  
 282    function testCompareQueryNotEqual2()
 283    {
 284      $str = 'http://admin:test@localhost:81/test.php?bar=foo&foo=bar#23';
 285  
 286      $uri = new lmbUri($str);
 287  
 288      $this->assertFalse($uri->compareQuery(
 289        new lmbUri('http://admin:test@localhost:81/test.php?bar=foo#23')
 290       ));
 291    }
 292  
 293    function testCompareIdentical()
 294    {
 295      $str = 'http://admin:test@localhost:81/test.php?foo=bar#23';
 296  
 297      $uri = new lmbUri($str);
 298  
 299      $this->assertTrue($uri->compare(
 300        new lmbUri('http://admin:test@localhost:81/test.php?foo=bar#23')));
 301    }
 302  
 303    function testCompareEqual()
 304    {
 305      $str = 'http://admin:test@localhost:81/test.php?bar=foo&foo=bar#23';
 306  
 307      $uri = new lmbUri($str);
 308  
 309      $this->assertTrue($uri->compare(
 310        new lmbUri('http://admin:test@localhost:81/test.php?foo=bar&bar=foo#23')));
 311    }
 312  
 313    function testCompareEqual2()
 314    {
 315      $str = 'http://admin:test@localhost:81?';
 316  
 317      $uri = new lmbUri($str);
 318  
 319      $this->assertTrue($uri->compare(
 320        new lmbUri('http://admin:test@localhost:81')
 321       ));
 322    }
 323  
 324    function testCompareNotEqualSchema()
 325    {
 326      $str = 'http://admin:test@localhost:81/test.php?bar=foo&foo=bar#23';
 327  
 328      $uri = new lmbUri($str);
 329  
 330      $this->assertFalse($uri->compare(
 331        new lmbUri('https://admin:test@localhost:81/test.php?bar=foo&foo=bar#23')
 332       ));
 333    }
 334  
 335    function testCompareNotEqualUser()
 336    {
 337      $str = 'http://admin:test@localhost:81/test.php?bar=foo&foo=bar#23';
 338  
 339      $uri = new lmbUri($str);
 340  
 341      $this->assertFalse($uri->compare(
 342        new lmbUri('http://admin1:test@localhost:81/test.php?bar=foo&foo=bar#23')
 343       ));
 344    }
 345  
 346    function testCompareNotEqualPassword()
 347    {
 348      $str = 'http://admin:test@localhost:81/test.php?bar=foo&foo=bar#23';
 349  
 350      $uri = new lmbUri($str);
 351  
 352      $this->assertFalse($uri->compare(
 353        new lmbUri('http://admin:test1@localhost:81/test.php?bar=foo&foo=bar#23')
 354       ));
 355    }
 356  
 357    function testCompareNotEqualHost()
 358    {
 359      $str = 'http://admin:test@localhost:81/test.php?bar=foo&foo=bar#23';
 360  
 361      $uri = new lmbUri($str);
 362  
 363      $this->assertFalse($uri->compare(
 364        new lmbUri('http://admin:test@localhost1:81/test.php?bar=foo&foo=bar#23')
 365       ));
 366    }
 367  
 368    function testCompareNotEqualPort()
 369    {
 370      $str = 'http://admin:test@localhost:81/test.php?bar=foo&foo=bar#23';
 371  
 372      $uri = new lmbUri($str);
 373  
 374      $this->assertFalse($uri->compare(
 375        new lmbUri('http://admin:test@localhost/test.php?bar=foo&foo=bar#23')
 376       ));
 377    }
 378  
 379    function testCompareNotEqualPath()
 380    {
 381      $str = 'http://admin:test@localhost:81/test.php?bar=foo&foo=bar#23';
 382  
 383      $uri = new lmbUri($str);
 384  
 385      $this->assertFalse($uri->compare(
 386        new lmbUri('http://admin:test@localhost:81/test.php/test?bar=foo&foo=bar#23')
 387       ));
 388    }
 389  
 390    function testCompareNotEqualPath2()
 391    {
 392      $str = 'http://admin:test@localhost:81/test.php/test?bar=foo&foo=bar#23';
 393  
 394      $uri = new lmbUri($str);
 395  
 396      $this->assertFalse($uri->compare(
 397        new lmbUri('http://admin:test@localhost:81/test.php/test1?bar=foo&foo=bar#23')
 398       ));
 399    }
 400  
 401    function testCompareAnchorDoesntMatter()
 402    {
 403      $str = 'http://admin:test@localhost:81/test.php?bar=foo&foo=bar#23';
 404  
 405      $uri = new lmbUri($str);
 406  
 407      $this->assertTrue($uri->compare(
 408        new lmbUri('http://admin:test@localhost:81/test.php?bar=foo&foo=bar#32')
 409       ));
 410    }
 411  
 412    function testComparePathEqual()
 413    {
 414      $str = 'http://localhost/test.php/test';
 415  
 416      $uri = new lmbUri($str);
 417  
 418      $this->assertEqual(0,
 419        $uri->comparePath(
 420          new lmbUri('http://localhost2/test.php/test')
 421        )
 422      );
 423    }
 424  
 425    function testComparePathContains()
 426    {
 427      $str = 'http://localhost/test.php/test';
 428  
 429      $uri = new lmbUri($str);
 430  
 431      $this->assertEqual(1,
 432        $uri->comparePath(
 433          new lmbUri('http://localhost2/test.php')
 434        )
 435      );
 436    }
 437  
 438    function testComparePathIsContained()
 439    {
 440      $str = 'http://localhost/test.php/test';
 441  
 442      $uri = new lmbUri($str);
 443  
 444      $this->assertEqual(-1,
 445        $uri->comparePath(
 446          new lmbUri('http://localhost2/test.php/test/test2')
 447        )
 448      );
 449    }
 450  
 451    function testComparePathNotEqual()
 452    {
 453      $str = 'http://localhost/test.php/test/test1';
 454  
 455      $uri = new lmbUri($str);
 456  
 457      $this->assertIdentical(false,
 458        $uri->comparePath(
 459          new lmbUri('http://localhost2/test.php/test/test2')
 460        )
 461      );
 462    }
 463  
 464    function testRemoveQueryItem()
 465    {
 466      $str = 'http://localhost/test.php?foo=bar&bar=foo';
 467  
 468      $uri = new lmbUri($str);
 469  
 470      $uri->removeQueryItem('bar');
 471  
 472      $this->assertEqual('foo=bar', $uri->getQueryString());
 473      $this->assertEqual('http://localhost/test.php?foo=bar', $uri->toString());
 474    }
 475  
 476    function testRemoveQueryItems()
 477    {
 478      $str = 'http://localhost/test.php?foo=bar&bar=foo';
 479  
 480      $uri = new lmbUri($str);
 481  
 482      $uri->removeQueryItems();
 483  
 484      $this->assertEqual('', $uri->getQueryString());
 485      $this->assertEqual('http://localhost/test.php', $uri->toString());
 486    }
 487  
 488    function testIsAbsolute()
 489    {
 490      $str = '/test.php';
 491  
 492      $uri = new lmbUri($str);
 493  
 494      $this->assertTrue($uri->isAbsolute());
 495    }
 496  
 497    function testIsAbsoluteNoPath()
 498    {
 499      $str = 'http://somedomain.com';
 500  
 501      $uri = new lmbUri($str);
 502  
 503      $this->assertTrue($uri->isAbsolute());
 504    }
 505  
 506    function testIsRelative()
 507    {
 508      $str = '../../test.php';
 509  
 510      $uri = new lmbUri($str);
 511  
 512      $this->assertTrue($uri->isRelative());
 513    }
 514  
 515    function testSetPath()
 516    {
 517      $uri1 = new lmbUri('/index.html');
 518      $uri2 = new lmbUri('http://dot.com/index.html');
 519  
 520      $this->assertEqual($uri1->getPathElements(), $uri2->getPathElements());
 521    }
 522  
 523    function testGetPathToLevel()
 524    {
 525      $uri = new lmbUri('/path/to/level');
 526  
 527      $this->assertEqual($uri->getPathToLevel(1), '/path');
 528      $this->assertEqual($uri->getPathToLevel(2), '/path/to');
 529      $this->assertEqual($uri->getPathToLevel(3), '/path/to/level');
 530      $this->assertEqual(