diff --git a/.gitignore b/.gitignore index ab423c8..a938aaa 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ .project .settings/ .DS_Store +coverage/ diff --git a/test/widgets/GraphicalNavigationWidgetTest.php b/test/widgets/GraphicalNavigationWidgetTest.php index 4627459..c115725 100644 --- a/test/widgets/GraphicalNavigationWidgetTest.php +++ b/test/widgets/GraphicalNavigationWidgetTest.php @@ -10,9 +10,6 @@ class GraphicalNavigationWidgetTest extends PHPUnit_Framework_TestCase { $this->w = new GraphicalNavigationWidget(); } - /** - * @covers WidgetComicPressGraphicalStorylineNavigation::update - */ function testUpdateWidget() { $result = $this->w->update(array( "next" => "test", @@ -41,7 +38,6 @@ class GraphicalNavigationWidgetTest extends PHPUnit_Framework_TestCase { /** * @dataProvider providerTestIsNavLinkVisible - * @covers WidgetComicPressGraphicalStorylineNavigation::_will_display_nav_link */ function testIsNavLinkVisible($which, $current_id, $target_id, $expected_result) { $current = (object)array('ID' => $current_id); @@ -76,7 +72,6 @@ class GraphicalNavigationWidgetTest extends PHPUnit_Framework_TestCase { /** * @dataProvider providerTestGroupNavigationButtons - * @covers WidgetComicPressGraphicalStorylineNavigation::_group_navigation_buttons */ function testGroupNavigationButtons($buttons, $expected_grouping) { _set_filter_expectation('comicpress_navigation_grouping_details', array(array( @@ -88,6 +83,14 @@ class GraphicalNavigationWidgetTest extends PHPUnit_Framework_TestCase { $this->assertEquals($expected_grouping, $this->w->_group_navigation_buttons($buttons, array())); } + /** + * @expectedException PHPUnit_Framework_Error + */ + function testGroupNavigationButtonsNoDefaultGroup() { + _set_filter_expectation('comicpress_navigation_grouping_details', array(array())); + $this->w->_group_navigation_buttons(array(), array()); + } + function providerTestSetUpPostNavStoryPrev() { return array( array( @@ -230,6 +233,43 @@ class GraphicalNavigationWidgetTest extends PHPUnit_Framework_TestCase { $css->set_up_post_nav(array()); } + + function providerTestGetLinkNaviClassNames() { + return array( + array( + 'previous', (object)array('guid' => 'previous'), array(), array( + 'link' => 'previous', + 'navi_class_names' => array('navi-previous', 'navi-prev') + ) + ), + array( + 'last', (object)array('guid' => 'last'), array('lastgohome' => 'off'), array( + 'link' => 'last', + 'navi_class_names' => array('navi-last') + ) + ), + array( + 'last', (object)array('guid' => 'last'), array('lastgohome' => 'on'), array( + 'link' => 'home', + 'navi_class_names' => array('navi-last') + ) + ), + array( + 'next', 'next', array(), array( + 'link' => 'next', + 'navi_class_names' => array('navi-next') + ) + ), + ); + } + + /** + * @dataProvider providerTestGetLinkNaviClassNames + */ + function testGetLinkNaviClassNames($which, $target, $instance, $expected_results) { + _set_bloginfo('url', 'home'); + $this->assertEquals($expected_results, $this->w->_get_link_navi_class_names($which, null, $target, $instance)); + } } ?> diff --git a/widgets/GraphicalNavigationWidget.inc b/widgets/GraphicalNavigationWidget.inc index 177ff22..e68e60c 100644 --- a/widgets/GraphicalNavigationWidget.inc +++ b/widgets/GraphicalNavigationWidget.inc @@ -11,6 +11,7 @@ Author URI: http://frumph.net/ require_once(dirname(__FILE__) . '/../classes/ComicPressNavigation.inc'); class GraphicalNavigationWidget extends WP_Widget { + // @codeCoverageIgnoreStart function GraphicalNavigationWidget() { $widget_ops = array('classname' => 'WidgetComicPressGraphicalStorylineNavigation', 'description' => __('Displays Graphical Navigation Buttons. (used in comic sidebars)','comicpress') ); $this->WP_Widget('graphicalstorylinenavigation', __('Comic Navigation','comicpress'), $widget_ops); @@ -23,13 +24,13 @@ class GraphicalNavigationWidget extends WP_Widget { add_filter('comicpress_display_navigation_order', array(&$this, 'comicpress_display_navigation_order')); add_filter('comicpress_display_navigation_link', array(&$this, 'comicpress_display_navigation_link'), 10, 5); add_filter('comicpress_wrap_navigation_buttons', array(&$this, 'comicpress_wrap_navigation_buttons'), 10, 2); - add_filter('comicpress_navigation_grouping_details', array(&$this, 'comicpress_navigation_grouping_details')); + add_filter('comicpress_navigation_grouping_details', array(&$this, 'comicpress_navigation_grouping_details')); - foreach (get_class_methods($this) as $method) { - if (strpos($method, '_comicpress_set_up_post_nav') === 0) { - add_filter('comicpress_set_up_post_nav', array(&$this, $method), 10, 3); - } - } + foreach (get_class_methods($this) as $method) { + if (strpos($method, '_comicpress_set_up_post_nav') === 0) { + add_filter('comicpress_set_up_post_nav', array(&$this, $method), 10, 3); + } + } // these two need to be moved one level up add_filter('comicpress_get_random_link_url', array(&$this, 'comicpress_get_random_link_url')); @@ -58,26 +59,20 @@ class GraphicalNavigationWidget extends WP_Widget { function comicpress_display_navigation_link($which, $current, $target, $instance, $content = '') { global $id; - $css_name_mapping = array( - 'story_prev' => 'prevchap', - 'previous' => 'prev', - 'story_next' => 'nextchap' - ); - $ok = true; switch ($which) { - case 'first': - case 'last': + case 'first': + case 'last': $ok = $this->_will_display_nav_link($which, $current, $target); break; - case 'previous': - case 'next': - case 'story_prev': - case 'story_next': - case 'story_prev_in': - case 'story_next_in': + case 'previous': + case 'next': + case 'story_prev': + case 'story_next': + case 'story_prev_in': + case 'story_next_in': $ok = !empty($target); - break; + break; case 'archives': $ok = !empty($instance['archive_path']); break; @@ -85,57 +80,43 @@ class GraphicalNavigationWidget extends WP_Widget { ob_start(); switch ($which) { - case 'first': - case 'previous': - case 'next': - case 'last': - case 'story_prev': - case 'story_next': - case 'story_prev_in': - case 'story_next_in': - $obj_ok = false; - $navi_class_names = array("navi-${which}"); - $link = false; - if (is_object($target)) { - $obj_ok = true; - if (isset($css_name_mapping[$which])) { $navi_class_names[] = "navi-{$css_name_mapping[$which]}"; } + case 'first': + case 'previous': + case 'next': + case 'last': + case 'story_prev': + case 'story_next': + case 'story_prev_in': + case 'story_next_in': + extract($this->_get_link_navi_class_names($which, $current, $target, $instance)); - $link = get_permalink($target->ID); - if (($which == 'last') && ($instance['lastgohome'] == 'on')) { $link = get_bloginfo('url'); } - } - - if (($filter_link = array_shift(apply_filters('comicpress_display_navigation_link', $link, $which, $current, $target, $instance))) !== false) { - $link = $filter_link; - $obj_ok = true; - } - - if ($ok && $obj_ok) { - ?>" + if ($ok && $link) { + ?>" title="">"> ID; - ?> 'prevchap', + 'previous' => 'prev', + 'story_next' => 'nextchap' + ); + + $navi_class_names = array("navi-${which}"); + if (isset($css_name_mapping[$which])) { $navi_class_names[] = "navi-{$css_name_mapping[$which]}"; } + + $link = false; + if (is_object($target)) { + if (($which == 'last') && ($instance['lastgohome'] == 'on')) { + $link = get_bloginfo('url'); + } else { + $link = get_permalink($target); + } + } else { + if (is_string($target)) { + $link = $target; + } + } + + if (($filter_link = apply_filters('comicpress_display_navigation_link', $link, $which, $current, $target, $instance)) !== false) { + $link = $filter_link; + } + + return compact('link', 'navi_class_names'); + } /** * Returns true if the combination of target and current post will show or hide this nav link. @@ -177,52 +189,56 @@ class GraphicalNavigationWidget extends WP_Widget { return apply_filters('comicpress_graphical_navigation_will_display_nav_link', $return, $which, $current, $target); } + // @codeCoverageIgnoreStart /** * Get the order of the buttons to be displayed on-screen. */ function comicpress_display_navigation_order($order = array()) { - return array( + return array( 'first', 'previous', 'story_prev_in', 'story_prev', 'archives', 'random', 'comictitle', 'comments', 'buyprint', 'story_next', 'story_next_in', 'next', 'last' ); } - function comicpress_navigation_grouping_details($details = array()) { - return array( - 'comic_navi_left' => array('first', 'previous', 'story_prev_in', 'story_prev'), - 'comic_navi_center' => true, - 'comic_navi_right' => array('story_next', 'story_next_in', 'next', 'last') - ); - } + function comicpress_navigation_grouping_details($details = array()) { + return array( + 'comic_navi_left' => array('first', 'previous', 'story_prev_in', 'story_prev'), + 'comic_navi_center' => true, + 'comic_navi_right' => array('story_next', 'story_next_in', 'next', 'last') + ); + } + // @codeCoverageIgnoreEnd - function _group_navigation_buttons($buttons = array(), $grouped_buttons = array()) { - $grouping_hash = array(); + function _group_navigation_buttons($buttons = array(), $grouped_buttons = array()) { + $grouping_hash = array(); - $default_group = null; - foreach (apply_filters('comicpress_navigation_grouping_details', array()) as $group => $members) { - if ($members === true) { - $default_group = $group; - } else { - if (is_array($members)) { - foreach ($members as $member) { $grouping_hash[$member] = $group; } - } - } - } + $default_group = null; + foreach (apply_filters('comicpress_navigation_grouping_details', array()) as $group => $members) { + if ($members === true) { + $default_group = $group; + } else { + if (is_array($members)) { + foreach ($members as $member) { $grouping_hash[$member] = $group; } + } + } + } - if (is_null($default_group)) { - trigger_error('No default group defined for filter comicpress_navigation_grouping_details', E_USER_WARNING); - } + if (is_null($default_group)) { + trigger_error('No default group defined for filter comicpress_navigation_grouping_details', E_USER_WARNING); + // @codeCoverageIgnoreStart + } + // @codeCoverageIgnoreEnd - $groups = array(); - foreach ($buttons as $key => $button) { - $group = isset($grouping_hash[$key]) ? $grouping_hash[$key] : $default_group; - if (!empty($group)) { - if (!isset($groups[$group])) { $groups[$group] = array(); } - $groups[$group][$key] = $button; - } - } + $groups = array(); + foreach ($buttons as $key => $button) { + $group = isset($grouping_hash[$key]) ? $grouping_hash[$key] : $default_group; + if (!empty($group)) { + if (!isset($groups[$group])) { $groups[$group] = array(); } + $groups[$group][$key] = $button; + } + } - return $groups; - } + return $groups; + } /** * Wrap navigation buttons in a holder. @@ -231,14 +247,14 @@ class GraphicalNavigationWidget extends WP_Widget { */ function comicpress_wrap_navigation_buttons($buttons = '', $content = '') { $buttons_text = $buttons; - if (is_array($buttons)) { - $output = array(); - foreach ($this->_group_navigation_buttons($buttons) as $group => $grouped_buttons) { - $output[] = '' . implode('', array_values($grouped_buttons)) . ''; - } + if (is_array($buttons)) { + $output = array(); + foreach ($this->_group_navigation_buttons($buttons) as $group => $grouped_buttons) { + $output[] = '' . implode('', array_values($grouped_buttons)) . ''; + } - $buttons_text = implode('', $output); - } + $buttons_text = implode('', $output); + } ob_start(); ?>