Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.
Common duplication problems, and corresponding solutions are:
1 | <?php |
||
7 | View Code Duplication | class ZendFrameworkPaginatorAdapterTest extends \PHPUnit_Framework_TestCase |
|
8 | { |
||
9 | public function testPaginationAdapter() |
||
10 | { |
||
11 | $items = [ |
||
12 | 'Item 1', 'Item 2', 'Item 3', 'Item 4', 'Item 5', 'Item 6', 'Item 7', 'Item 8', 'Item 9', 'Item 10', |
||
13 | 'Item 11', 'Item 12', 'Item 13', 'Item 14', 'Item 15', 'Item 16', 'Item 17', 'Item 18', 'Item 19', 'Item 20', |
||
14 | 'Item 21', 'Item 22', 'Item 23', 'Item 24', 'Item 25', 'Item 26', 'Item 27', 'Item 28', 'Item 29', 'Item 30', |
||
15 | 'Item 31', 'Item 32', 'Item 33', 'Item 34', 'Item 35', 'Item 36', 'Item 37', 'Item 38', 'Item 39', 'Item 40', |
||
16 | 'Item 41', 'Item 42', 'Item 43', 'Item 44', 'Item 45', 'Item 46', 'Item 47', 'Item 48', 'Item 49', 'Item 50', |
||
17 | ]; |
||
18 | |||
19 | $adapter = Mockery::mock('Zend\Paginator\Adapter\ArrayAdapter', [$items])->makePartial(); |
||
20 | |||
21 | $total = 50; |
||
22 | $count = 10; |
||
23 | $perPage = 10; |
||
24 | $currentPage = 2; |
||
25 | $lastPage = 5; |
||
26 | |||
27 | $paginator = Mockery::mock('Zend\Paginator\Paginator', [$adapter])->makePartial(); |
||
28 | |||
29 | $paginator->shouldReceive('getCurrentPageNumber')->andReturn($currentPage); |
||
30 | $paginator->shouldReceive('count')->andReturn($lastPage); |
||
31 | $paginator->shouldReceive('getItemCountPerPage')->andReturn($perPage); |
||
32 | |||
33 | $adapter = new ZendFrameworkPaginatorAdapter($paginator, function ($page) { |
||
34 | return 'http://example.com/foo?page='.$page; |
||
35 | }); |
||
36 | |||
37 | $this->assertInstanceOf('League\Fractal\Pagination\PaginatorInterface', $adapter); |
||
38 | |||
39 | $this->assertSame($currentPage, $adapter->getCurrentPage()); |
||
40 | $this->assertSame($lastPage, $adapter->getLastPage()); |
||
41 | $this->assertSame($count, $adapter->getCount()); |
||
42 | $this->assertSame($total, $adapter->getTotal()); |
||
43 | $this->assertSame($perPage, $adapter->getPerPage()); |
||
44 | $this->assertSame('http://example.com/foo?page=1', $adapter->getUrl(1)); |
||
45 | $this->assertSame('http://example.com/foo?page=3', $adapter->getUrl(3)); |
||
46 | } |
||
47 | |||
48 | public function tearDown() |
||
52 | } |
||
53 |