SimpleWalkerTest   A
last analyzed

Complexity

Total Complexity 8

Size/Duplication

Total Lines 125
Duplicated Lines 16 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

Changes 1
Bugs 0 Features 1
Metric Value
wmc 8
c 1
b 0
f 1
lcom 1
cbo 2
dl 20
loc 125
rs 10

7 Methods

Rating   Name   Duplication   Size   Complexity  
A testGoToLine() 0 15 2
A testGoToLineTooHigh() 0 10 1
A testGoToLineTooLow() 0 10 1
A testCountLines() 0 16 1
A testGoBeforeCharacter() 0 20 1
A testGoBeforeCharacterTooLow() 10 10 1
A testGoBeforeCharacterTooHigh() 10 10 1

How to fix   Duplicated Code   

Duplicated Code

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
2
3
namespace TextFile\Tests\Walker;
4
5
use TextFile\Tests\TextFileTestCase;
6
use TextFile\Walker\SimpleWalker;
7
8
/**
9
 * Class SimpleWalkerTest
10
 *
11
 * @package TextFile\Tests\Walker
12
 */
13
class SimpleWalkerTest extends TextFileTestCase
14
{
15
    /**
16
     * @covers TextFile\Walker\SimpleWalker::goToLine
17
     */
18
    public function testGoToLine()
19
    {
20
        $filePath = $this->createTestFileFromFixtures('simple_multiline_file.txt');
21
        $lineNumber = 21;
22
23
        for ($i = 0; $i <= $lineNumber; $i++) {
24
            $file = new \SplFileObject($filePath, 'r+');
25
26
            $walker = new SimpleWalker();
27
28
            $walker->goToLine($file, $i);
29
30
            $this->assertEquals($i, $file->key());
31
        }
32
    }
33
34
    /**
35
     * @covers TextFile\Walker\SimpleWalker::goToLine
36
     * @expectedException \TextFile\Exception\OutOfBoundsException
37
     */
38
    public function testGoToLineTooHigh()
39
    {
40
        $filePath = $this->createTestFileFromFixtures('simple_multiline_file.txt');
41
42
        $file = new \SplFileObject($filePath, 'r+');
43
44
        $walker = new SimpleWalker();
45
46
        $walker->goToLine($file, 40);
47
    }
48
49
    /**
50
     * @covers TextFile\Walker\SimpleWalker::goToLine
51
     * @expectedException \TextFile\Exception\OutOfBoundsException
52
     */
53
    public function testGoToLineTooLow()
54
    {
55
        $filePath = $this->createTestFileFromFixtures('simple_multiline_file.txt');
56
57
        $file = new \SplFileObject($filePath, 'r+');
58
59
        $walker = new SimpleWalker();
60
61
        $walker->goToLine($file, -1);
62
    }
63
64
    /**
65
     * @covers TextFile\Walker\SimpleWalker::countLines
66
     */
67
    public function testCountLines()
68
    {
69
        $filePath = $this->createTestFileFromFixtures('simple_multiline_file.txt');
70
71
        $file = new \SplFileObject($filePath, 'r+');
72
73
        $walker = new SimpleWalker();
74
75
        $this->assertEquals(21, $walker->countLines($file));
76
77
        $file->seek(21);
78
        $file->fwrite('test' . PHP_EOL);
79
80
        // Evaluate if correctly refreshed after modification
81
        $this->assertEquals(22, $walker->countLines($file));
82
    }
83
84
    /**
85
     * @covers TextFile\Walker\SimpleWalker::goBeforeCharacter
86
     */
87
    public function testGoBeforeCharacter()
88
    {
89
        $filePath = $this->createTestFileFromFixtures('simple_multiline_file.txt');
90
91
        $file = new \SplFileObject($filePath, 'r+');
92
93
        $walker = new SimpleWalker();
94
95
        $walker->goBeforeCharacter($file, 0);
96
97
        $this->assertEquals(0, $file->fgetc());
98
99
        $walker->goBeforeCharacter($file, 1);
100
101
        $this->assertEquals(PHP_EOL, $file->fgetc());
102
103
        $walker->goBeforeCharacter($file, 2);
104
105
        $this->assertEquals(1, $file->fgetc());
106
    }
107
108
    /**
109
     * @covers TextFile\Walker\SimpleWalker::goBeforeCharacter
110
     * @expectedException \TextFile\Exception\OutOfBoundsException
111
     */
112 View Code Duplication
    public function testGoBeforeCharacterTooLow()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
113
    {
114
        $filePath = $this->createTestFileFromFixtures('simple_multiline_file.txt');
115
116
        $file = new \SplFileObject($filePath, 'r+');
117
118
        $walker = new SimpleWalker();
119
120
        $walker->goBeforeCharacter($file, -1);
121
    }
122
123
    /**
124
     * @covers TextFile\Walker\SimpleWalker::goBeforeCharacter
125
     * @expectedException \TextFile\Exception\OutOfBoundsException
126
     */
127 View Code Duplication
    public function testGoBeforeCharacterTooHigh()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
128
    {
129
        $filePath = $this->createTestFileFromFixtures('simple_multiline_file.txt');
130
131
        $file = new \SplFileObject($filePath, 'r+');
132
133
        $walker = new SimpleWalker();
134
135
        $walker->goBeforeCharacter($file, $file->getSize() + 1);
136
    }
137
}
138