testProviderFactoryInvalidProvider()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 9
rs 9.6666
cc 1
eloc 6
nc 1
nop 0
1
<?php
2
3
/*
4
 * This file is part of the Holiday Library.
5
 *
6
 * (c) Michał Mańko <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the LICENSE.md
9
 * file that was distributed with this source code.
10
 */
11
12
namespace Michalmanko\Holiday\Test;
13
14
use Michalmanko\Holiday\HolidayFactory;
15
use PHPUnit_Framework_TestCase;
16
17
/**
18
 * @author Michał Mańko <[email protected]>
19
 */
20
class HolidayFactoryTest extends PHPUnit_Framework_TestCase
21
{
22
    public function testCreateProvider()
23
    {
24
        $provider = HolidayFactory::createProvider(
25
            '\\Michalmanko\\Holiday\\Test\\Provider\\Provider'
26
        );
27
28
        $this->assertInstanceOf(
29
            '\\Michalmanko\\Holiday\\Provider\\AbstractProvider',
30
            $provider
31
        );
32
        $this->assertInstanceOf(
33
            '\\Michalmanko\\Holiday\\Test\\Provider\\Provider',
34
            $provider
35
        );
36
37
        HolidayFactory::registerProvider(
38
            'Country',
39
            '\\Michalmanko\\Holiday\\Test\\Provider\\Provider'
40
        );
41
42
        $provider2 = HolidayFactory::createProvider('Country');
43
44
        $this->assertInstanceOf('\\Michalmanko\\Holiday\\Provider\\AbstractProvider', $provider2);
45
        $this->assertInstanceOf('\\Michalmanko\\Holiday\\Test\\Provider\\Provider', $provider2);
46
47
        $provider3 = HolidayFactory::createProvider('Poland');
48
49
        $this->assertInstanceOf('\\Michalmanko\\Holiday\\Provider\\AbstractProvider', $provider3);
50
        $this->assertInstanceOf('\\Michalmanko\\Holiday\\Provider\\Poland', $provider3);
51
    }
52
53
    public function testProviderFactoryNotFound()
54
    {
55
        $this->setExpectedException(
56
            '\\Michalmanko\\Holiday\\Exception\\InvalidArgumentException',
57
            'Cannot find Holiday provider class "\\Michalmanko\\Holiday\\FakeProvider\\Provider"'
58
        );
59
        HolidayFactory::createProvider('\\Michalmanko\\Holiday\\FakeProvider\\Provider');
60
    }
61
62
    public function testProviderFactoryNotFound2()
63
    {
64
        $this->setExpectedException(
65
            '\\Michalmanko\\Holiday\\Exception\\InvalidArgumentException',
66
            'Cannot find Holiday provider class "\\Michalmanko\\Holiday\\Provider\\FakeProvider"'
67
        );
68
        HolidayFactory::createProvider('FakeProvider');
69
    }
70
71
    public function testProviderFactoryInvalidProvider()
72
    {
73
        $this->setExpectedException(
74
            '\\Michalmanko\\Holiday\\Exception\\InvalidArgumentException',
75
            'Class "\\Michalmanko\\Holiday\\Test\\Provider\\NotProvider"'
76
            . ' must be an instance of \\Michalmanko\\Holiday\\Provider\\AbstractProvider'
77
        );
78
        HolidayFactory::createProvider('\\Michalmanko\\Holiday\\Test\\Provider\\NotProvider');
79
    }
80
81
    public function testProviderFactoryRegistry()
82
    {
83
        $this->assertInternalType('array', HolidayFactory::getProviders());
84
    }
85
86
    public function testProviderFactoryRegistryRegister()
87
    {
88
        HolidayFactory::registerProvider('Test', 'TestProvider');
89
        $this->assertArrayHasKey('TEST', HolidayFactory::getProviders());
90
    }
91
92
    public function testProviderFactoryRegistryUnregister()
93
    {
94
        HolidayFactory::registerProvider('Test', 'TestProvider');
95
        HolidayFactory::unregisterProvider('TEST');
96
97
        $this->setExpectedException(
98
            '\\Michalmanko\\Holiday\\Exception\\InvalidArgumentException',
99
            'Cannot find Holiday provider class "\\Michalmanko\\Holiday\\Provider\\TEST"'
100
        );
101
        HolidayFactory::createProvider('TEST');
102
    }
103
104
    public function testProviderFactoryRegistryUnregisterByName()
105
    {
106
        HolidayFactory::registerProvider('Test', 'TestProvider');
107
        $this->assertTrue(HolidayFactory::unregisterProvider('Test'));
108
    }
109
110
    public function testProviderFactoryRegistryUnregisterByClassName()
111
    {
112
        HolidayFactory::registerProvider('Test', 'TestProvider');
113
        $this->assertTrue(HolidayFactory::unregisterProvider('TestProvider'));
114
    }
115
116
    public function testProviderFactoryRegistryUnregisterByNameUnknown()
117
    {
118
        $this->assertFalse(HolidayFactory::unregisterProvider('Foo'));
119
    }
120
121
    public function testProviderFactoryRegistryRegisterByNamespace()
122
    {
123
        HolidayFactory::registerProvider(
124
            'Provider',
125
            '\\Michalmanko\\Holiday\\Test\\Provider\\Provider'
126
        );
127
        $provider = HolidayFactory::createProvider('Provider');
128
        $this->assertInstanceOf('\\Michalmanko\\Holiday\\Provider\\AbstractProvider', $provider);
129
    }
130
131
    public function testProviderFactoryRegistryRegisterByNotInstanceOfAbstract()
132
    {
133
        $this->setExpectedException('\\Michalmanko\\Holiday\\Exception\\InvalidArgumentException');
134
        HolidayFactory::registerProvider('NotProvider', '\\Michalmanko\\Holiday\\Test\\Provider\\');
135
        HolidayFactory::createProvider('NotProvider');
136
    }
137
}
138