diff --git a/tests/phpunit/tests/walker.php b/tests/phpunit/tests/walker.php new file mode 100644 index 0000000000..98b1658dd2 --- /dev/null +++ b/tests/phpunit/tests/walker.php @@ -0,0 +1,199 @@ +walker = new Walker_Test(); + + parent::setUp(); + + } + + function test_single_item() { + + $items = array( (object) array( 'id' => 1, 'parent' => 0 ) ); + $output = $this->walker->walk( $items, 0 ); + + $this->assertEquals( 1, $this->walker->get_number_of_root_elements( $items ) ); + $this->assertEquals( '
  • 1
  • ', $output ); + + } + + function test_single_item_flat() { + + $items = array( (object) array( 'id' => 1, 'parent' => 0 ) ); + $output = $this->walker->walk( $items, -1 ); + + $this->assertEquals( 1, $this->walker->get_number_of_root_elements( $items ) ); + $this->assertEquals( '
  • 1
  • ', $output ); + + } + + function test_single_item_depth_1() { + + $items = array( (object) array( 'id' => 1, 'parent' => 0 ) ); + $output = $this->walker->walk( $items, 1 ); + + $this->assertEquals( 1, $this->walker->get_number_of_root_elements( $items ) ); + $this->assertEquals( '
  • 1
  • ', $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->assertEquals( 2, $this->walker->get_number_of_root_elements( $items ) ); + $this->assertEquals( '
  • 1
  • 2
  • ', $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->assertEquals( 1, $this->walker->get_number_of_root_elements( $items ) ); + $this->assertEquals( '
  • 1
  • ', $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->assertEquals( 1, $this->walker->get_number_of_root_elements( $items ) ); + $this->assertEquals( '
  • 1
  • 2
  • ', $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->assertEquals( 1, $this->walker->get_number_of_root_elements( $items ) ); + $this->assertEquals( '
  • 1
  • ', $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->assertEquals( 1, $this->walker->get_number_of_root_elements( $items ) ); + $this->assertEquals( '
  • 1
  • ', $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->assertEquals( 0, $this->walker->get_number_of_root_elements( $items ) ); + $this->assertEquals( '
  • 1
  • ', $output ); + + } + + function test_single_item_child() { + + $items = array( (object) array( 'id' => 1, 'parent' => 3 ) ); + + $output = $this->walker->walk( $items, 0 ); + + $this->assertEquals( 0, $this->walker->get_number_of_root_elements( $items ) ); + $this->assertEquals( '
  • 1
  • ', $output ); + + } + + function test_single_item_missing_parent_depth_1() { + + $items = array( (object) array( 'id' => 1, 'parent' => 3 ) ); + + $output = $this->walker->walk( $items, 1 ); + + $this->assertEquals( 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->assertEquals( '
  • 1
  • ', $output ); + + // But as we've only asked for the first depth maybe nothing should be returned? + //$this->assertEquals( '', $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->assertEquals( 0, $this->walker->get_number_of_root_elements( $items ) ); + $this->assertEquals( '
  • 4
  • 5
  • 6
  • ', $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->assertEquals( 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->assertEquals( '
  • 4
  • ', $output ); + + // But as we've only asked for the first depth maybe nothing should be returned? + //$this->assertEquals( '', $output ); + + // Or maybe all items which are missing parents should simply be treat top level? + //$this->assertEquals( '
  • 4
  • 5
  • 6
  • ', $output ); + + } + +} + +class Walker_Test extends Walker { + + var $tree_type = 'test'; + var $db_fields = array ( 'parent' => 'parent', 'id' => 'id' ); + + function start_lvl( &$output, $depth = 0, $args = array() ) { + $output .= ''; + } + + function start_el( &$output, $item, $depth = 0, $args = array(), $current_page = 0 ) { + $output .= '
  • ' . $item->id; + } + + function end_el( &$output, $page, $depth = 0, $args = array() ) { + $output .= '
  • '; + } + +}