Completed
Push — master ( d6446f...d11253 )
by Nelson
05:36
created

HasUnaccesibleProperties   A

Complexity

Total Complexity 2

Size/Duplication

Total Lines 28
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 0

Importance

Changes 0
Metric Value
dl 0
loc 28
rs 10
c 0
b 0
f 0
wmc 2
lcom 0
cbo 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
testImplementsIStrictPropertiesContainerInterface() 0 1 ?
unaccesiblePropertiesProvider() 0 1 ?
A testUnaccessiblePropertiesThrowsCatchableError() 0 14 2
1
<?php
2
/**
3
 * PHP: Nelson Martell Library file
4
 *
5
 * Content:
6
 * - Trait definition
7
 *
8
 * Copyright © 2016-2017 Nelson Martell (http://nelson6e65.github.io)
9
 *
10
 * Licensed under The MIT License (MIT)
11
 * For full copyright and license information, please see the LICENSE
12
 * Redistributions of files must retain the above copyright notice.
13
 *
14
 * @copyright 2016-2017 Nelson Martell
15
 * @link      http://nelson6e65.github.io/php_nml/
16
 * @since     v0.7.0
17
 * @license   http://www.opensource.org/licenses/mit-license.php The MIT License (MIT)
18
 * */
19
20
namespace NelsonMartell\Test\Helpers;
21
22
use Cake\Utility\Inflector;
23
use NelsonMartell\Extensions\Text;
24
use NelsonMartell\IStrictPropertiesContainer;
25
use SebastianBergmann\Exporter\Exporter;
26
27
/**
28
 * Split of ImplementsIStrictPropertiesContainer, for classes implementing any read-only property
29
 *
30
 * @author Nelson Martell <[email protected]>
31
 * */
32
trait HasUnaccesibleProperties
33
{
34
    /**
35
     * @returns IStrictPropertiesContainer
36
     */
37
    public abstract function testImplementsIStrictPropertiesContainerInterface($obj);
0 ignored issues
show
Documentation introduced by
For interfaces and abstract methods it is generally a good practice to add a @return annotation even if it is just @return void or @return null, so that implementors know what to do in the overridden method.

For interface and abstract methods, it is impossible to infer the return type from the immediate code. In these cases, it is generally advisible to explicitly annotate these methods with a @return doc comment to communicate to implementors of these methods what they are expected to return.

Loading history...
38
39
    public abstract function unaccesiblePropertiesProvider();
0 ignored issues
show
Documentation introduced by
For interfaces and abstract methods it is generally a good practice to add a @return annotation even if it is just @return void or @return null, so that implementors know what to do in the overridden method.

For interface and abstract methods, it is impossible to infer the return type from the immediate code. In these cases, it is generally advisible to explicitly annotate these methods with a @return doc comment to communicate to implementors of these methods what they are expected to return.

Loading history...
40
41
    /**
42
     * @dataProvider unaccesiblePropertiesProvider
43
     * @expectedException \BadMethodCallException
44
     */
45
    public function testUnaccessiblePropertiesThrowsCatchableError(
46
        IStrictPropertiesContainer $obj,
47
        $property,
48
        $value = null
49
    ) {
50
51
        if ($value === null) {
52
            // Getter exception
53
            $actual = $obj->$property;
0 ignored issues
show
Unused Code introduced by
$actual is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
54
        } else {
55
            // Setter exception
56
            $obj->$property = $value;
57
        }
58
    }
59
}
60