InputCharacterTest   A
last analyzed

Complexity

Total Complexity 9

Size/Duplication

Total Lines 101
Duplicated Lines 0 %

Importance

Changes 4
Bugs 0 Features 0
Metric Value
wmc 9
eloc 54
c 4
b 0
f 0
dl 0
loc 101
rs 10

9 Methods

Rating   Name   Duplication   Size   Complexity  
A testFromControlNameThrowsExceptionIfControlDoesNotExist() 0 6 1
A testIsControlOnNotExplicitlyHandledControls() 0 11 1
A testExceptionIsThrownIfGetControlCalledWhenNotAControl() 0 7 1
A testUnicodeCharacter() 0 9 1
A testGetControls() 0 19 1
A testWhenCharacterIsNotAControl() 0 9 1
A testWhenCharacterIsAControl() 0 10 1
A testFromControlName() 0 7 1
A testControlExists() 0 4 1
1
<?php
2
3
namespace PhpSchool\TerminalTest;
4
5
use PhpSchool\Terminal\InputCharacter;
6
use PHPUnit\Framework\TestCase;
7
8
/**
9
 * @author Aydin Hassan <[email protected]>
10
 */
11
class InputCharacterTest extends TestCase
12
{
13
    public function testWhenCharacterIsAControl() : void
14
    {
15
        $char = new InputCharacter("\n");
16
17
        self::assertTrue($char->isControl());
18
        self::assertTrue($char->isHandledControl());
19
        self::assertFalse($char->isNotControl());
20
        self::assertEquals('ENTER', $char->getControl());
21
        self::assertEquals("\n", $char->get());
22
        self::assertEquals("\n", $char->__toString());
23
    }
24
25
    public function testWhenCharacterIsNotAControl() : void
26
    {
27
        $char = new InputCharacter('p');
28
29
        self::assertFalse($char->isControl());
30
        self::assertFalse($char->isHandledControl());
31
        self::assertTrue($char->isNotControl());
32
        self::assertEquals('p', $char->get());
33
        self::assertEquals('p', $char->__toString());
34
    }
35
36
    public function testExceptionIsThrownIfGetControlCalledWhenNotAControl() : void
37
    {
38
        self::expectException(\RuntimeException::class);
0 ignored issues
show
Bug Best Practice introduced by
The method PHPUnit\Framework\TestCase::expectException() is not static, but was called statically. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

38
        self::/** @scrutinizer ignore-call */ 
39
              expectException(\RuntimeException::class);
Loading history...
39
        self::expectExceptionMessage('Character "p" is not a control');
0 ignored issues
show
Bug Best Practice introduced by
The method PHPUnit\Framework\TestCa...xpectExceptionMessage() is not static, but was called statically. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

39
        self::/** @scrutinizer ignore-call */ 
40
              expectExceptionMessage('Character "p" is not a control');
Loading history...
40
41
        $char = new InputCharacter('p');
42
        $char->getControl();
43
    }
44
45
    public function testGetControls() : void
46
    {
47
        self::assertEquals(
48
            [
49
                'UP',
50
                'DOWN',
51
                'RIGHT',
52
                'LEFT',
53
                'CTRLA',
54
                'CTRLB',
55
                'CTRLE',
56
                'CTRLF',
57
                'BACKSPACE',
58
                'CTRLW',
59
                'ENTER',
60
                'TAB',
61
                'ESC',
62
            ],
63
            InputCharacter::getControls()
64
        );
65
    }
66
67
    public function testFromControlNameThrowsExceptionIfControlDoesNotExist() : void
68
    {
69
        self::expectException(\InvalidArgumentException::class);
0 ignored issues
show
Bug Best Practice introduced by
The method PHPUnit\Framework\TestCase::expectException() is not static, but was called statically. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

69
        self::/** @scrutinizer ignore-call */ 
70
              expectException(\InvalidArgumentException::class);
Loading history...
70
        self::expectExceptionMessage('Control "w" does not exist');
0 ignored issues
show
Bug Best Practice introduced by
The method PHPUnit\Framework\TestCa...xpectExceptionMessage() is not static, but was called statically. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

70
        self::/** @scrutinizer ignore-call */ 
71
              expectExceptionMessage('Control "w" does not exist');
Loading history...
71
72
        InputCharacter::fromControlName('w');
73
    }
74
75
    public function testFromControlName() : void
76
    {
77
        $char = InputCharacter::fromControlName(InputCharacter::UP);
78
79
        self::assertTrue($char->isControl());
80
        self::assertEquals('UP', $char->getControl());
81
        self::assertEquals("\033[A", $char->get());
82
    }
83
84
    public function testControlExists() : void
85
    {
86
        self::assertTrue(InputCharacter::controlExists(InputCharacter::UP));
87
        self::assertFalse(InputCharacter::controlExists('w'));
88
    }
89
90
    public function testIsControlOnNotExplicitlyHandledControls() : void
91
    {
92
        $char = new InputCharacter("\016"); //ctrl + p (I think)
93
94
        self::assertTrue($char->isControl());
95
        self::assertFalse($char->isHandledControl());
96
97
        $char = new InputCharacter("\021"); //ctrl + u (I think)
98
99
        self::assertTrue($char->isControl());
100
        self::assertFalse($char->isHandledControl());
101
    }
102
103
    public function testUnicodeCharacter() : void
104
    {
105
        $char = new InputCharacter('ß');
106
107
        self::assertFalse($char->isControl());
108
        self::assertFalse($char->isHandledControl());
109
        self::assertTrue($char->isNotControl());
110
        self::assertEquals('ß', $char->get());
111
        self::assertEquals('ß', $char->__toString());
112
    }
113
}
114