StackTest   A
last analyzed

Complexity

Total Complexity 16

Size/Duplication

Total Lines 123
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 16
dl 0
loc 123
rs 10
c 0
b 0
f 0

16 Methods

Rating   Name   Duplication   Size   Complexity  
A push_and_pop_can_chain() 0 5 1
A it_throws_invalid_argument_exception() 0 4 1
A peek_on_empty_stack_returns_null() 0 4 1
A it_can_create_stack() 0 4 1
A count_is_overridden_correctly() 0 5 1
A it_throws_unexpected_type_exception() 0 4 1
A is_empty_test_on_non_empty_stack() 0 4 1
A it_can_pop() 0 7 1
A push_on_full_stack_throws_stack_overflow_exception() 0 5 1
A size_test_on_non_empty_stack() 0 4 1
A peek_on_non_empty_stack_returns_item() 0 5 1
A pop_on_empty_stack_throws_stack_underflow_exception() 0 5 1
A is_empty_test_on_empty_stack() 0 4 1
A to_string_is_overridden_correctly() 0 6 1
A it_can_push() 0 5 1
A size_test_on_empty_stack() 0 4 1
1
<?php
2
3
namespace Ptypes\Test;
4
5
use Ptypes\Stack;
6
use Ptypes\Exceptions\UnexpectedType;
7
use Ptypes\Exceptions\InvalidArgument;
8
use Ptypes\Exceptions\StackOverflow;
9
use Ptypes\Exceptions\StackUnderflow;
10
11
class StackTest extends \PHPUnit_Framework_TestCase
12
{
13
	/** @test */
14
	public function it_throws_unexpected_type_exception()
15
	{
16
		$this->expectException(UnexpectedType::class);
17
		$stack = new Stack('10');
18
	}
19
	
20
	/** @test */
21
	public function it_throws_invalid_argument_exception()
22
	{
23
		$this->expectException(InvalidArgument::class);
24
		$stack = new Stack(-1);
25
	}
26
	
27
	/** @test */
28
	public function it_can_create_stack()
29
	{
30
		$stack = new Stack(2);
31
		$this->assertNotEquals($stack, null);
32
	}
33
	
34
	/** @test */
35
	public function it_can_push()
36
	{
37
		$stack = new Stack(2);
38
		$stack->push('foo');
39
		$this->assertEquals($stack->peek(), 'foo');
40
	}
41
	
42
	/** @test */
43
	public function push_on_full_stack_throws_stack_overflow_exception()
44
	{
45
		$this->expectException(StackOverflow::class);
46
		$stack = new Stack(2);
47
		$stack->push('foo')->push('bar')->push('baz');
48
	}
49
	
50
	/** @test */
51
	public function it_can_pop()
52
	{
53
		$stack = new Stack(2);
54
		$stack->push('foo');
55
		$stack->push('bar');
56
		$stack->pop();
57
		$this->assertEquals($stack->peek(), 'foo');
58
	}
59
	
60
	/** @test */
61
	public function pop_on_empty_stack_throws_stack_underflow_exception()
62
	{
63
		$this->expectException(StackUnderflow::class);
64
		$stack = new Stack(3);
65
		$stack->pop();
66
	}
67
	
68
	/** @test */
69
	public function is_empty_test_on_empty_stack()
70
	{
71
		$stack = new Stack(2);
72
		$this->assertEquals($stack->is_empty(), true);
73
	}
74
	
75
	/** @test */
76
	public function is_empty_test_on_non_empty_stack()
77
	{
78
		$stack = new Stack(2);
79
		$this->assertEquals($stack->push('foo')->push('bar')->is_empty(), false);
80
	}
81
	
82
	/** @test */
83
	public function size_test_on_empty_stack()
84
	{
85
		$stack = new Stack(2);
86
		$this->assertEquals($stack->size(), 0);
87
	}
88
	
89
	/** @test */
90
	public function size_test_on_non_empty_stack()
91
	{
92
		$stack = new Stack(2);
93
		$this->assertEquals($stack->push('foo')->push('bar')->size(), 2);
94
	}
95
	
96
	/** @test */
97
	public function peek_on_empty_stack_returns_null()
98
	{
99
		$stack = new Stack(5);
100
		$this->assertEquals($stack->peek(), null);
101
	}
102
	
103
	/** @test */
104
	public function peek_on_non_empty_stack_returns_item()
105
	{
106
		$stack = new Stack(5);
107
		$stack->push(1)->push(3)->push(2);
108
		$this->assertEquals($stack->peek(), 2);
109
	}
110
	
111
	/** @test */
112
	public function count_is_overridden_correctly()
113
	{
114
		$stack = new Stack(5);
115
		$stack->push(1)->push(1)->push(1);
116
		$this->assertEquals(count($stack), 3);
117
	}
118
	
119
	/** @test */
120
	public function to_string_is_overridden_correctly()
121
	{
122
		$this->expectOutputString("Stack:\n3   <-- top\n2\n1\n");
123
		$stack = new Stack(5);
124
		$stack->push(1)->push(2)->push(3);
125
		echo $stack;
126
	}
127
	
128
	/** @test */
129
	public function push_and_pop_can_chain()
130
	{
131
		$stack = new Stack(3);
132
		$stack->push('foo')->push('bar')->push('bar')->pop()->push('baz');
133
		$this->assertEquals($stack->peek(), 'baz');
134
	}
135
}