Completed
Branch feature/0.7.0 (0808a6)
by Ryuichi
158:51 queued 113:46
created

InputStreamReaderTest::okReset()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 5

Duplication

Lines 7
Ratio 100 %

Importance

Changes 0
Metric Value
cc 1
eloc 5
nc 1
nop 3
dl 7
loc 7
rs 9.4285
c 0
b 0
f 0
1
<?php
2
namespace WebStream\IO\Test;
3
4
require_once dirname(__FILE__) . '/../InputStream.php';
5
require_once dirname(__FILE__) . '/../FileInputStream.php';
6
require_once dirname(__FILE__) . '/../StringInputStream.php';
7
require_once dirname(__FILE__) . '/../Reader/InputStreamReader.php';
8
require_once dirname(__FILE__) . '/../Test/Providers/InputStreamReaderProvider.php';
9
require_once dirname(__FILE__) . '/../Test/Modules/IOException.php';
10
require_once dirname(__FILE__) . '/../Test/Modules/InvalidArgumentException.php';
11
12
use WebStream\IO\Reader\InputStreamReader;
13
use WebStream\IO\Test\Providers\InputStreamReaderProvider;
14
15
/**
16
 * InputStreamReaderTest
17
 * @author Ryuichi TANAKA.
18
 * @since 2016/08/18
19
 * @version 0.7
20
 */
21
class InputStreamReaderTest extends \PHPUnit_Framework_TestCase
22
{
23
    use InputStreamReaderProvider;
24
25
    /**
26
     * 正常系
27
     * バイト単位で読み込みできること
28
     * EOFを超えるサイズの読み込み時は、ファイルの場合改行が含まれる
29
     * @test
30
     * @dataProvider readCharProvider
31
     */
32
    public function okReadChar($stream, $result, $byteLength)
33
    {
34
        $reader = new InputStreamReader($stream);
35
        $this->assertEquals($reader->read($byteLength), $result);
36
    }
37
38
    /**
39
     * 正常系
40
     * 行単位でデータが読み込めること
41
     * @test
42
     * @dataProvider readLineProvider
43
     */
44
    public function okReadLine($stream, $result1, $result2)
45
    {
46
        $reader = new InputStreamReader($stream);
47
        $this->assertEquals($reader->readLine(), $result1);
48
        $this->assertEquals($reader->readLine(), $result2);
49
        $this->assertEquals($reader->readLine(), null);
50
    }
51
52
    /**
53
     * 正常系
54
     * 入力ストリームをクローズできること
55
     * @test
56
     * @dataProvider closeProvider
57
     */
58
    public function okClose($stream)
59
    {
60
        $reader = new InputStreamReader($stream);
61
        $reader->close();
62
        $this->assertNull($reader->read());
63
    }
64
65
    /**
66
     * 正常系
67
     * 指定バイト数だけスキップできること
68
     * EOFを超えるサイズの読み込み時は、ファイルの場合改行が含まれる
69
     * @test
70
     * @dataProvider skipProvider
71
     */
72
    public function okSkip($stream, $result, $pos)
73
    {
74
        $reader = new InputStreamReader($stream);
75
        $this->assertEquals($reader->skip($pos), $pos);
76
        $this->assertEquals($reader->read(), $result);
77
    }
78
79
    /**
80
     * 正常系
81
     * 終端を越えたスキップをしたとき
82
     * 1回目のreadは空文字を返し、2回目のreadはnullを返すこと
83
     * @test
84
     * @dataProvider overSkipAndReadProvider
85
     */
86
    public function okOverSkipAndRead($stream, $skipNum)
87
    {
88
        $reader = new InputStreamReader($stream);
89
        $this->assertEquals($reader->skip($skipNum), $skipNum);
90
        $this->assertEmpty($reader->read());
91
        $this->assertNull($reader->read());
92
    }
93
94
    /**
95
     * 正常系
96
     * ポインタを後方に移動できること
97
     * @test
98
     * @dataProvider frontSkipProvider
99
     */
100
    public function okFrontSkip($stream, $skipNum1, $skipNum2, $result)
101
    {
102
        $reader = new InputStreamReader($stream);
103
        $reader->skip($skipNum1);
104
        $reader->skip($skipNum2);
105
        $this->assertEquals($reader->read(), $result);
106
    }
107
108
    /**
109
     * 正常系
110
     * ポインタ位置が負になった場合、移動量は常に-1になること
111
     * @test
112
     * @dataProvider overFrontSkipProvider
113
     */
114
    public function okOverFrontSkip($stream, $pos)
115
    {
116
        $reader = new InputStreamReader($stream);
117
        $this->assertEquals($reader->skip($pos), -1);
118
    }
119
120
    /**
121
     * 正常系
122
     * リセットすると初期位置にポインタが移動すること
123
     * @test
124
     * @dataProvider resetProvider
125
     */
126
    public function okReset($stream, $skipNum, $result)
127
    {
128
        $reader = new InputStreamReader($stream);
129
        $reader->skip($skipNum);
130
        $reader->reset();
131
        $this->assertEquals($reader->read(), $result);
132
    }
133
134
    /**
135
     * 正常系
136
     * リセットするとマーク位置にポインタが移動すること
137
     * @test
138
     * @dataProvider markAndResetProvider
139
     */
140
    public function okMarkAndReset($stream, $skipNum, $result)
141
    {
142
        $reader = new InputStreamReader($stream);
143
        $reader->skip($skipNum);
144
        $reader->mark();
145
        $reader->reset();
146
        $this->assertEquals($reader->read(), $result);
147
    }
148
149
    /**
150
     * 異常系
151
     * 読み込みサイズに不正値を渡した時、例外が発生すること
152
     * @test
153
     * @dataProvider invalidLengthProvider
154
     * @expectedException WebStream\Exception\Extend\InvalidArgumentException
155
     */
156
    public function ngInvalidLength($stream)
157
    {
158
        $reader = new InputStreamReader($stream);
159
        $reader->read("dummy");
160
        $this->assertTrue(false);
161
    }
162
}
163