Rev 1087 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php// $Id$require_once 'simple_include.php';require_once 'pager_include.php';class TestOfPager extends UnitTestCase {var $pager;var $baseurl;function TestOfPager($name='Test of Pager') {$this->UnitTestCase($name);}function setUp() {$options = array('itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),'perPage' => 5,);$this->pager = Pager::factory($options);$this->baseurl = substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], '/'));}function tearDown() {unset($this->pager);}function testCurrentPageID () {$this->assertEqual(1, $this->pager->getCurrentPageID());}function testNextPageID () {$this->assertEqual(2, $this->pager->getNextPageID());}function testPrevPageID () {$this->assertEqual(false, $this->pager->getPreviousPageID());}function testNumItems () {$this->assertEqual(10, $this->pager->numItems());}function testNumPages () {$this->assertEqual(2, $this->pager->numPages());}function testFirstPage () {$this->assertEqual(true, $this->pager->isFirstPage());}function testLastPage () {$this->assertEqual(false, $this->pager->isLastPage());}function testLastPageComplete () {$this->assertEqual(true, $this->pager->isLastPageComplete());}function testOffsetByPageId() {$this->assertEqual(array(1, 5), $this->pager->getOffsetByPageId(1));$this->assertEqual(array(6, 10), $this->pager->getOffsetByPageId(2));}function testOffsetByPageId_outOfRange() {$this->assertEqual(array(0, 0), $this->pager->getOffsetByPageId(20));}function testGetPageData() {$this->assertEqual(array(0=>1, 1=>2, 2=>3, 3=>4, 4=>5), $this->pager->getPageData());$this->assertEqual(array(5=>6, 6=>7, 7=>8, 8=>9, 9=>10), $this->pager->getPageData(2));}function testGetPageData_OutOfRange() {$this->assertEqual(array(), $this->pager->getPageData(3));}function testSelectBox() {$selectBox = '<select name="'.$this->pager->_sessionVar.'">';$selectBox .= '<option value="5" selected="selected">5</option>';$selectBox .= '<option value="10">10</option>';$selectBox .= '<option value="15">15</option>';$selectBox .= '</select>';$this->assertEqual($selectBox, $this->pager->getPerPageSelectBox(5, 15, 5));}function testSelectBoxWithString() {$selectBox = '<select name="'.$this->pager->_sessionVar.'">';$selectBox .= '<option value="5" selected="selected">5 bugs</option>';$selectBox .= '<option value="10">10 bugs</option>';$selectBox .= '<option value="15">15 bugs</option>';$selectBox .= '</select>';$this->assertEqual($selectBox, $this->pager->getPerPageSelectBox(5, 15, 5, false, '%d bugs'));}function testSelectBoxWithShowAll() {$selectBox = '<select name="'.$this->pager->_sessionVar.'">';$selectBox .= '<option value="3">3</option>';$selectBox .= '<option value="4">4</option>';$selectBox .= '<option value="5" selected="selected">5</option>';$selectBox .= '<option value="6">6</option>';$selectBox .= '<option value="10">10</option>';$selectBox .= '</select>';$this->assertEqual($selectBox, $this->pager->getPerPageSelectBox(3, 6, 1, true));}function testSelectBoxWithShowAllAndText() {$this->pager->_showAllText = 'Show All';$selectBox = '<select name="'.$this->pager->_sessionVar.'">';$selectBox .= '<option value="3">3 bugs</option>';$selectBox .= '<option value="4">4 bugs</option>';$selectBox .= '<option value="5" selected="selected">5 bugs</option>';$selectBox .= '<option value="6">6 bugs</option>';$selectBox .= '<option value="10">Show All</option>';$selectBox .= '</select>';$this->assertEqual($selectBox, $this->pager->getPerPageSelectBox(3, 6, 1, true, '%d bugs'));}function testSelectBoxWithShowAllWithExtraAttribs() {$this->pager->_showAllText = 'Show All';$selectBox = '<select name="'.$this->pager->_sessionVar.'" onmouseover="doSth">';$selectBox .= '<option value="3">3 bugs</option>';$selectBox .= '<option value="4">4 bugs</option>';$selectBox .= '<option value="5" selected="selected">5 bugs</option>';$selectBox .= '<option value="6">6 bugs</option>';$selectBox .= '<option value="10">Show All</option>';$selectBox .= '</select>';$params = array('optionText' => '%d bugs', 'attributes' => 'onmouseover="doSth"');$this->assertEqual($selectBox, $this->pager->getPerPageSelectBox(3, 6, 1, true, $params));}function testSelectBoxInvalid() {$err = $this->pager->getPerPageSelectBox(5, 15, 5, false, '%s bugs');$this->assertEqual(ERROR_PAGER_INVALID_PLACEHOLDER, $err->getCode());}function testAppendInvalid() {$options = array('totalItems' => 10,'append' => false,'fileName' => 'invalidFileName');$err =& Pager::factory($options); //ERROR_PAGER_INVALID_USAGE$this->assertError();}function testAppendValid() {$options = array('totalItems' => 10,'append' => false,'fileName' => 'valid_%d_FileName');$err =& Pager::factory($options);$this->assertNoErrors();}function testEscapeEntities() {//encode special chars$options = array('extraVars' => array('request' => array('aRequest'),'escape' => 'äö%<>+',),'perPage' => 5,);$this->pager =& Pager::factory($options);//$expected = '?request[]=aRequest&escape=äö%<>+&pageID=';//$this->assertEqual($expected, $this->pager->_getLinksUrl());$expected = 'request%5B0%5D=aRequest&escape=%E4%F6%25%3C%3E%2B';$rendered = $this->pager->_renderLink('', '');preg_match('/href="(.*)"/U', $rendered, $matches);$actual = str_replace($_SERVER['PHP_SELF'].'?', '', $matches[1]);$this->assertEqual($expected, $actual);//don't encode slashes$options = array('extraVars' => array('request' => 'cat/subcat',),'perPage' => 5,);$this->pager =& Pager::factory($options);//$expected = '?request=cat/subcat&pageID=';//$this->assertEqual($expected, $this->pager->_getLinksUrl());$expected = '<a href="'.$_SERVER['PHP_SELF'].'?request=cat/subcat" title=""></a>';$actual = $this->pager->_renderLink('', '');$this->assertEqual($expected, $actual);}function testMultibyteStrings() {$options = array('extraVars' => array('test' => '测试',),'perPage' => 5,);$this->pager =& Pager::factory($options);//$expected = '<a href="'.$_SERVER['PHP_SELF'].'?test=测试" title=""></a>';$rendered = $this->pager->_renderLink('', '');preg_match('/href="(.*)"/U', $rendered, $matches);$actual = str_replace($_SERVER['PHP_SELF'].'?test=', '', $matches[1]);$this->assertEqual(urlencode($options['extraVars']['test']), $actual);}function testCurrentPage() {$options = array('itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),'perPage' => 2,'currentPage' => 2,);$this->pager =& Pager::factory($options);$this->assertEqual(3, $this->pager->getNextPageID());$this->assertEqual(1, $this->pager->getPreviousPageID());$this->assertEqual(2, $this->pager->_currentPage);}function testArrayExtraVars() {$arr = array('apple','orange',);$options = array('itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),'perPage' => 5,'extraVars' => array('arr' => $arr, 'no' => 'test'),);$this->pager =& Pager::factory($options);/*//old$expected = '?arr[0]=apple&arr[1]=orange&pageID=';$this->assertEqual($expected, $this->pager->_getLinksUrl());*/$expected = $options['extraVars'];$this->assertEqual($expected, $this->pager->_getLinksData());$expected = '<a href="'.$_SERVER['PHP_SELF'].'?arr%5B0%5D=apple&arr%5B1%5D=orange&no=test&pageID=2" title=""></a>';$actual = $this->pager->_renderLink('', '');$this->assertEqual($expected, $actual);}function testExcludeVars() {$arr = array('apple','orange',);$options = array('itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),'perPage' => 5,'extraVars' => array('arr' => $arr, 'no' => 'test'),'excludeVars' => array('no'),);$this->pager =& Pager::factory($options);$expected = array('arr' => array(0 => 'apple',1 => 'orange'),);$actual = $this->pager->_getLinksData();$this->assertEqual($expected, $this->pager->_getLinksData());$expected = '<a href="'.$_SERVER['PHP_SELF'].'?arr%5B0%5D=apple&arr%5B1%5D=orange&pageID=2" title=""></a>';$actual = $this->pager->_renderLink('', '');$this->assertEqual($expected, $actual);}function testArgSeparator() {$bkp_arg_separator = ini_get('arg_separator.output');ini_set('arg_separator.output', '&');$options = array('itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),'perPage' => 5,'extraVars' => array('apple' => 1),);$this->pager =& Pager::factory($options);$expected = '<a href="'.$_SERVER['PHP_SELF'].'?apple=1&pageID=2" title=""></a>';$actual = $this->pager->_renderLink('', '');$this->assertEqual($expected, $actual);ini_set('arg_separator.output', $bkp_arg_separator);}function testAttributes() {$options = array('itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),'perPage' => 5,'linkClass' => 'testclass','attributes' => 'target="_blank"',);$this->pager =& Pager::factory($options);$expected = '<a href="'.$_SERVER['PHP_SELF'].'?pageID=2" class="testclass" target="_blank" title=""></a>';$actual = $this->pager->_renderLink('', '');$this->assertEqual($expected, $actual);}function testImportQuery() {//add some fake url vars$_GET['arr'] = array('apple','orange',);$options = array('itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),'perPage' => 5,'importQuery' => false,);$this->pager =& Pager::factory($options);$expected = array();$actual = $this->pager->_getLinksData();$this->assertEqual($expected, $this->pager->_getLinksData());$expected = '<a href="'.$_SERVER['PHP_SELF'].'?pageID=2" title=""></a>';$actual = $this->pager->_renderLink('', '');$this->assertEqual($expected, $actual);//remove fake url varsunset($_GET['arr']);}function testGetNextLinkTag() {//append = true$expected = '<link rel="next" href="'.$_SERVER['PHP_SELF'].'?pageID=2" title="next page" />'."\n";$this->assertEqual($expected, $this->pager->_getNextLinkTag());//append = false$options = array('itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),'perPage' => 5,'currentPage' => 1,'append' => false,'fileName' => 'myfile.%d.php',);$this->pager = Pager::factory($options);$expected = '<link rel="next" href="'.$this->baseurl.'/myfile.2.php" title="next page" />'."\n";$this->assertEqual($expected, $this->pager->_getNextLinkTag());//test empty tag$options['currentPage'] = 2;$this->pager = Pager::factory($options);$this->assertEqual('', $this->pager->_getNextLinkTag());}function testGetLastLinkTag() {//append = true$expected = '<link rel="last" href="'.$_SERVER['PHP_SELF'].'?pageID=2" title="last page" />'."\n";$this->assertEqual($expected, $this->pager->_getLastLinkTag());//append = false$options = array('itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),'perPage' => 5,'currentPage' => 1,'append' => false,'fileName' => 'myfile.%d.php',);$this->pager = Pager::factory($options);$expected = '<link rel="last" href="'.$this->baseurl.'/myfile.2.php" title="last page" />'."\n";$this->assertEqual($expected, $this->pager->_getLastLinkTag());//test empty tag$options['currentPage'] = 2;$this->pager = Pager::factory($options);$this->assertEqual('', $this->pager->_getLastLinkTag());}function testGetFirstLinkTag() {//append = true$options = array('itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),'perPage' => 5,'currentPage' => 2,);$this->pager = Pager::factory($options);$expected = '<link rel="first" href="'.$_SERVER['PHP_SELF'].'?pageID=1" title="first page" />'."\n";$this->assertEqual($expected, $this->pager->_getFirstLinkTag());//append = false$options = array('itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),'perPage' => 5,'currentPage' => 2,'append' => false,'fileName' => 'myfile.%d.php',);$this->pager = Pager::factory($options);$expected = '<link rel="first" href="'.$this->baseurl.'/myfile.1.php" title="first page" />'."\n";$this->assertEqual($expected, $this->pager->_getFirstLinkTag());//test empty tag$options['currentPage'] = 1;$this->pager = Pager::factory($options);$this->assertEqual('', $this->pager->_getFirstLinkTag());}function testGetPrevLinkTag() {//append = true$options = array('itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),'perPage' => 5,'currentPage' => 2,);$this->pager = Pager::factory($options);$expected = '<link rel="previous" href="'.$_SERVER['PHP_SELF'].'?pageID=1" title="previous page" />'."\n";$this->assertEqual($expected, $this->pager->_getPrevLinkTag());//append = false$options = array('itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),'perPage' => 5,'currentPage' => 2,'append' => false,'fileName' => 'myfile.%d.php',);$this->pager = Pager::factory($options);$expected = '<link rel="previous" href="'.$this->baseurl.'/myfile.1.php" title="previous page" />'."\n";$this->assertEqual($expected, $this->pager->_getPrevLinkTag());//test empty tag$options['currentPage'] = 1;$this->pager = Pager::factory($options);$this->assertEqual('', $this->pager->_getPrevLinkTag());}function testPrintFirstPage() {$options = array('itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),'perPage' => 5,'currentPage' => 2,);$this->pager = Pager::factory($options);$expected = '<a href="' . $_SERVER['PHP_SELF'] . '?pageID=1" title="first page">[1]</a> ';$this->assertEqual($expected, $this->pager->_printFirstPage());$this->pager->_firstPageText = 'FIRST';$expected = '<a href="' . $_SERVER['PHP_SELF'] . '?pageID=1" title="first page">[FIRST]</a> ';$this->assertEqual($expected, $this->pager->_printFirstPage());$options = array('itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),'perPage' => 5,'currentPage' => 2,'altFirst' => 'page %d',);$this->pager = Pager::factory($options);$expected = '<a href="' . $_SERVER['PHP_SELF'] . '?pageID=1" title="page 1">[1]</a> ';$this->assertEqual($expected, $this->pager->_printFirstPage());}function testPrintLastPage() {$expected = '<a href="' . $_SERVER['PHP_SELF'] . '?pageID=2" title="last page">[2]</a>';$this->assertEqual($expected, $this->pager->_printLastPage());$this->pager->_lastPageText = 'LAST';$expected = '<a href="' . $_SERVER['PHP_SELF'] . '?pageID=2" title="last page">[LAST]</a>';$this->assertEqual($expected, $this->pager->_printLastPage());$this->pager->_altLast = 'page %d';$expected = '<a href="' . $_SERVER['PHP_SELF'] . '?pageID=2" title="page 2">[LAST]</a>';$this->assertEqual($expected, $this->pager->_printLastPage());}function testGetBackLink() {$img = '«';$options = array('itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),'perPage' => 5,'currentPage' => 2,'prevImg' => $img,);$this->pager = Pager::factory($options);$expected = '<a href="' . $_SERVER['PHP_SELF'] . '?pageID=1" title="previous page">'.$img.'</a> ';$this->assertEqual($expected, $this->pager->_getBackLink());}function testGetNexLink() {$img = '»';$options = array('itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),'perPage' => 5,'currentPage' => 1,'nextImg' => $img,);$this->pager = Pager::factory($options);$expected = ' <a href="' . $_SERVER['PHP_SELF'] . '?pageID=2" title="next page">'.$img.'</a> ';$this->assertEqual($expected, $this->pager->_getNextLink());}function testHttpMethodAutoDetect() {$_POST['pageID'] = 3;$options = array('itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),'perPage' => 5,);$this->pager = Pager::factory($options);$this->assertEqual('POST', $this->pager->_httpMethod);$options = array('itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),'perPage' => 5,'httpMethod' => 'GET',);$this->pager = Pager::factory($options);$this->assertEqual('GET', $this->pager->_httpMethod);unset($_POST['pageID']);$options = array('itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),'perPage' => 5,'httpMethod' => 'POST',);$this->pager = Pager::factory($options);$this->assertEqual('POST', $this->pager->_httpMethod);$options = array('itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),'perPage' => 5,);$this->pager = Pager::factory($options);$this->assertEqual('GET', $this->pager->_httpMethod);}function testAccesskey() {$options = array('itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),'perPage' => 5,'accesskey' => true,);$this->pager = Pager::factory($options);$this->assertWantedPattern('/accesskey="\d"/i', $this->pager->links);//var_dump($this->pager->links);}function testIsEncoded() {//var_dump(urlencode('안녕'));$test_strings_encoded = array('encoded0' => '试','encoded1' => '测试','encoded2' => '안녕','encoded3' => '안 녕','encoded4' => '안녕',);$test_strings_plain = array('plain1' => '안녕','plain2' => '더보기',// 'plain3' => '이젠 전화도//로 걸면 무료','plain4' => 'abcde', //not multibyte'plain5' => '&#abcfg;', //invalid hex-encoded char'plain5' => '안 nasty 녕', //mixed plain/encoded text);foreach ($test_strings_encoded as $string) {//echo '<hr />'.str_replace('&', '&', $string);$this->assertTrue($this->pager->_isEncoded($string));}foreach ($test_strings_plain as $string) {$this->assertFalse($this->pager->_isEncoded($string));}}function testGetOption() {$this->assertEqual(5, $this->pager->getOption('perPage'));$err = $this->pager->getOption('non_existent_option');$this->assertEqual(ERROR_PAGER_INVALID, $err->getCode());}function testGetOptions() {$options = $this->pager->getOptions();$this->assertTrue(is_array($options));$this->assertEqual(5, $options['perPage']);}function testSetOptionsAndBuild() {$options = array('perPage' => 2,);$this->pager->setOptions($options);$this->pager->build();$this->assertEqual(2, $this->pager->getOption('perPage'));$this->assertEqual(array(0=>1, 1=>2), $this->pager->getPageData());$this->assertEqual(array(2=>3, 3=>4), $this->pager->getPageData(2));$options = array('currentPage' => 2,'append' => false,'fileName' => 'myfile.%d.php',);$this->pager->setOptions($options);$this->pager->build();$expected = '<link rel="previous" href="'.$this->baseurl.'/myfile.1.php" title="previous page" />'."\n";$this->assertEqual($expected, $this->pager->_getPrevLinkTag());}}?>