123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309 |
- <?php
- /**
- * @group post
- * @group menu
- * @group taxonomy
- * @group walker
- */
- class Tests_Walker extends WP_UnitTestCase {
- function setUp() {
- parent::setUp();
- $this->walker = new Walker_Test();
- }
- function test_single_item() {
- $items = array(
- (object) array(
- 'id' => 1,
- 'parent' => 0,
- ),
- );
- $output = $this->walker->walk( $items, 0 );
- $this->assertSame( 1, $this->walker->get_number_of_root_elements( $items ) );
- $this->assertSame( '<li>1</li>', $output );
- }
- function test_single_item_flat() {
- $items = array(
- (object) array(
- 'id' => 1,
- 'parent' => 0,
- ),
- );
- $output = $this->walker->walk( $items, -1 );
- $this->assertSame( 1, $this->walker->get_number_of_root_elements( $items ) );
- $this->assertSame( '<li>1</li>', $output );
- }
- function test_single_item_depth_1() {
- $items = array(
- (object) array(
- 'id' => 1,
- 'parent' => 0,
- ),
- );
- $output = $this->walker->walk( $items, 1 );
- $this->assertSame( 1, $this->walker->get_number_of_root_elements( $items ) );
- $this->assertSame( '<li>1</li>', $output );
- }
- function test_multiple_items_single_level() {
- $items = array(
- (object) array(
- 'id' => 1,
- 'parent' => 0,
- ),
- (object) array(
- 'id' => 2,
- 'parent' => 0,
- ),
- );
- $output = $this->walker->walk( $items, 0 );
- $this->assertSame( 2, $this->walker->get_number_of_root_elements( $items ) );
- $this->assertSame( '<li>1</li><li>2</li>', $output );
- }
- function test_multiple_items_multiple_levels() {
- $items = array(
- (object) array(
- 'id' => 1,
- 'parent' => 0,
- ),
- (object) array(
- 'id' => 2,
- 'parent' => 1,
- ),
- );
- $output = $this->walker->walk( $items, 0 );
- $this->assertSame( 1, $this->walker->get_number_of_root_elements( $items ) );
- $this->assertSame( '<li>1<ul><li>2</li></ul></li>', $output );
- }
- function test_multiple_items_multiple_levels_flat() {
- $items = array(
- (object) array(
- 'id' => 1,
- 'parent' => 0,
- ),
- (object) array(
- 'id' => 2,
- 'parent' => 1,
- ),
- );
- $output = $this->walker->walk( $items, -1 );
- $this->assertSame( 1, $this->walker->get_number_of_root_elements( $items ) );
- $this->assertSame( '<li>1</li><li>2</li>', $output );
- }
- function test_multiple_items_multiple_levels_depth_1() {
- $items = array(
- (object) array(
- 'id' => 1,
- 'parent' => 0,
- ),
- (object) array(
- 'id' => 2,
- 'parent' => 1,
- ),
- );
- $output = $this->walker->walk( $items, 1 );
- $this->assertSame( 1, $this->walker->get_number_of_root_elements( $items ) );
- $this->assertSame( '<li>1</li>', $output );
- }
- function test_multiple_items_multiple_levels_depth_2() {
- $items = array(
- (object) array(
- 'id' => 1,
- 'parent' => 0,
- ),
- (object) array(
- 'id' => 2,
- 'parent' => 1,
- ),
- (object) array(
- 'id' => 3,
- 'parent' => 2,
- ),
- );
- $output = $this->walker->walk( $items, 2 );
- $this->assertSame( 1, $this->walker->get_number_of_root_elements( $items ) );
- $this->assertSame( '<li>1<ul><li>2</li></ul></li>', $output );
- }
- function test_multiple_items_recursive() {
- $items = array(
- (object) array(
- 'id' => 1,
- 'parent' => 2,
- ),
- (object) array(
- 'id' => 2,
- 'parent' => 1,
- ),
- );
- $output = $this->walker->walk( $items, 0 );
- $this->assertSame( 0, $this->walker->get_number_of_root_elements( $items ) );
- $this->assertSame( '<li>1<ul><li>2</li></ul></li>', $output );
- }
- function test_single_item_child() {
- $items = array(
- (object) array(
- 'id' => 1,
- 'parent' => 3,
- ),
- );
- $output = $this->walker->walk( $items, 0 );
- $this->assertSame( 0, $this->walker->get_number_of_root_elements( $items ) );
- $this->assertSame( '<li>1</li>', $output );
- }
- function test_single_item_missing_parent_depth_1() {
- $items = array(
- (object) array(
- 'id' => 1,
- 'parent' => 3,
- ),
- );
- $output = $this->walker->walk( $items, 1 );
- $this->assertSame( 0, $this->walker->get_number_of_root_elements( $items ) );
- // It's not clear what the output of this "should" be.
- // Currently the item is simply returned.
- $this->assertSame( '<li>1</li>', $output );
- // But as we've only asked for the first depth maybe nothing should be returned?
- // $this->assertSame( '', $output );
- }
- function test_multiple_items_missing_parents() {
- $items = array(
- (object) array(
- 'id' => 4,
- 'parent' => 1,
- ),
- (object) array(
- 'id' => 5,
- 'parent' => 2,
- ),
- (object) array(
- 'id' => 6,
- 'parent' => 3,
- ),
- );
- $output = $this->walker->walk( $items, 0 );
- $this->assertSame( 0, $this->walker->get_number_of_root_elements( $items ) );
- $this->assertSame( '<li>4</li><li>5</li><li>6</li>', $output );
- }
- function test_multiple_items_missing_parents_depth_1() {
- $items = array(
- (object) array(
- 'id' => 4,
- 'parent' => 1,
- ),
- (object) array(
- 'id' => 5,
- 'parent' => 2,
- ),
- (object) array(
- 'id' => 6,
- 'parent' => 3,
- ),
- );
- $output = $this->walker->walk( $items, 1 );
- $this->assertSame( 0, $this->walker->get_number_of_root_elements( $items ) );
- // It's not clear what the output of this "should" be.
- // Currently the first item is simply returned.
- $this->assertSame( '<li>4</li>', $output );
- // But as we've only asked for the first depth maybe nothing should be returned?
- // $this->assertSame( '', $output );
- // Or maybe all items which are missing parents should simply be treat top level?
- // $this->assertSame( '<li>4</li><li>5</li><li>6</li>', $output );
- }
- }
- class Walker_Test extends Walker {
- public $tree_type = 'test';
- public $db_fields = array(
- 'parent' => 'parent',
- 'id' => 'id',
- );
- function start_lvl( &$output, $depth = 0, $args = array() ) {
- $output .= '<ul>';
- }
- function end_lvl( &$output, $depth = 0, $args = array() ) {
- $output .= '</ul>';
- }
- function start_el( &$output, $item, $depth = 0, $args = array(), $current_page = 0 ) {
- $output .= '<li>' . $item->id;
- }
- function end_el( &$output, $page, $depth = 0, $args = array() ) {
- $output .= '</li>';
- }
- }
|