NodeTraversalTest::testLogicalNotNode()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 1 Features 0
Metric Value
cc 1
eloc 4
c 2
b 1
f 0
nc 1
nop 0
dl 0
loc 7
rs 10
1
<?php declare(strict_types = 1);
2
3
namespace Apicart\FQL\Tests\Value;
4
5
use Apicart\FQL\Token\Node\Group;
6
use Apicart\FQL\Token\Node\LogicalAnd;
7
use Apicart\FQL\Token\Node\LogicalNot;
8
use Apicart\FQL\Token\Node\LogicalOr;
9
use Apicart\FQL\Token\Node\Mandatory;
10
use Apicart\FQL\Token\Node\Prohibited;
11
use Apicart\FQL\Token\Node\Query;
12
use Apicart\FQL\Token\Node\Term;
13
use Apicart\FQL\Tokenizer\Tokenizer;
14
use Apicart\FQL\Value\AbstractNode;
15
use Apicart\FQL\Value\Token;
16
use PHPUnit\Framework\TestCase;
17
18
final class NodeTraversalTest extends TestCase
19
{
20
21
    public function testGroupNode(): void
22
    {
23
        /** @var AbstractNode $firstMember */
24
        $firstMember = $this->getMockForAbstractClass(AbstractNode::class);
25
        /** @var AbstractNode $secondMember */
26
        $secondMember = $this->getMockForAbstractClass(AbstractNode::class);
27
        $nodes = (new Group([$firstMember, $secondMember]))->getNodes();
28
29
        self::assertSame($firstMember, $nodes[0]);
30
        self::assertSame($secondMember, $nodes[1]);
31
    }
32
33
34
    public function testLogicalAndNode(): void
35
    {
36
        $leftOperand = $this->getMockForAbstractClass(AbstractNode::class);
37
        $rightOperand = $this->getMockForAbstractClass(AbstractNode::class);
38
        $token = new Token(Tokenizer::TOKEN_TERM, '', 0);
39
        $nodes = (new LogicalAnd($leftOperand, $rightOperand, $token))->getNodes();
40
41
        self::assertSame($leftOperand, $nodes[0]);
42
        self::assertSame($rightOperand, $nodes[1]);
43
    }
44
45
46
    public function testLogicalNotNode(): void
47
    {
48
        $operand = $this->getMockForAbstractClass(AbstractNode::class);
49
        $token = new Token(Tokenizer::TOKEN_TERM, '', 0);
50
        $nodes = (new LogicalNot($operand, $token))->getNodes();
51
52
        self::assertSame($operand, $nodes[0]);
53
    }
54
55
56
    public function testLogicalOrNode(): void
57
    {
58
        $leftOperand = $this->getMockForAbstractClass(AbstractNode::class);
59
        $rightOperand = $this->getMockForAbstractClass(AbstractNode::class);
60
        $token = new Token(Tokenizer::TOKEN_TERM, '', 0);
61
        $nodes = (new LogicalOr($leftOperand, $rightOperand, $token))->getNodes();
62
63
        self::assertSame($leftOperand, $nodes[0]);
64
        self::assertSame($rightOperand, $nodes[1]);
65
    }
66
67
68
    public function testMandatoryNode(): void
69
    {
70
        $operand = $this->getMockForAbstractClass(AbstractNode::class);
71
        $token = new Token(Tokenizer::TOKEN_TERM, '', 0);
72
        $nodes = (new Mandatory($operand, $token))->getNodes();
73
74
        self::assertSame($operand, $nodes[0]);
75
    }
76
77
78
    public function testProhibitedNode(): void
79
    {
80
        $operand = $this->getMockForAbstractClass(AbstractNode::class);
81
        $token = new Token(Tokenizer::TOKEN_TERM, '', 0);
82
        $nodes = (new Prohibited($operand, $token))->getNodes();
83
84
        self::assertSame($operand, $nodes[0]);
85
    }
86
87
88
    public function testQueryNode(): void
89
    {
90
        /** @var AbstractNode $firstMember */
91
        $firstMember = $this->getMockForAbstractClass(AbstractNode::class);
92
        /** @var AbstractNode $secondMember */
93
        $secondMember = $this->getMockForAbstractClass(AbstractNode::class);
94
        $nodes = (new Query([$firstMember, $secondMember]))->getNodes();
95
96
        self::assertSame($firstMember, $nodes[0]);
97
        self::assertSame($secondMember, $nodes[1]);
98
    }
99
100
101
    public function testTermNode(): void
102
    {
103
        /** @var Token $token */
104
        $token = $this->getMockBuilder(Token::class)->disableOriginalConstructor()->getMock();
105
        $nodes = (new Term($token))->getNodes();
106
107
        self::assertEmpty($nodes);
108
    }
109
110
}
111