PhpXmlRpc_ServerAwareTestCase::_run()   A
last analyzed

Complexity

Conditions 3
Paths 4

Size

Total Lines 26
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 3
eloc 12
c 1
b 0
f 0
nc 4
nop 1
dl 0
loc 26
rs 9.8666
1
<?php
2
3
include_once __DIR__ . '/LoggerAwareTestCase.php';
4
5
use PHPUnit\Extensions\SeleniumCommon\RemoteCoverage;
6
use PHPUnit\Framework\TestResult;
7
use PhpXmlRpc\Client;
8
9
abstract class PhpXmlRpc_ServerAwareTestCase extends PhpXmlRpc_LoggerAwareTestCase
10
{
11
    /** @var string */
12
    protected $baseUrl;
13
    /** @var string */
14
    protected $testId;
15
    /** @var boolean */
16
    protected $collectCodeCoverageInformation;
17
    /** @var string */
18
    protected $coverageScriptUrl;
19
20
    protected static $randId;
21
22
    /**
23
     * Reimplemented to allow us to collect code coverage info from the target server.
24
     * Code taken from PHPUnit_Extensions_Selenium2TestCase
25
     *
26
     * @param TestResult $result
27
     * @return TestResult
28
     * @throws Exception
29
     *
30
     * @todo instead of overriding run via _run, try to achieve this by implementing Yoast\PHPUnitPolyfills\TestListeners\TestListenerDefaultImplementation
31
     */
32
    public function _run($result = NULL)
33
    {
34
        $this->testId = get_class($this) . '__' . $this->getName();
35
36
        if ($result === NULL) {
37
            $result = $this->createResult();
38
        }
39
40
        $this->collectCodeCoverageInformation = $result->getCollectCodeCoverageInformation();
41
42
        parent::_run($result);
43
44
        if ($this->collectCodeCoverageInformation) {
45
            $coverage = new RemoteCoverage(
46
                $this->coverageScriptUrl,
47
                $this->testId
48
            );
49
            $result->getCodeCoverage()->append(
50
                $coverage->get(), $this
51
            );
52
        }
53
54
        // do not call this before to give the time to the Listeners to run
55
        //$this->getStrategy()->endOfTest($this->session);
56
57
        return $result;
58
    }
59
60
    public static function set_up_before_class()
61
    {
62
        parent::set_up_before_class();
63
64
        // Set up a database connection or other fixture which needs to be available.
65
        self::$randId = uniqid();
66
        file_put_contents(sys_get_temp_dir() . '/phpunit_rand_id.txt', self::$randId);
67
    }
68
69
    public static function tear_down_after_class()
70
    {
71
        if (is_file(sys_get_temp_dir() . '/phpunit_rand_id.txt')) {
72
            unlink(sys_get_temp_dir() . '/phpunit_rand_id.txt');
73
        }
74
75
        parent::tear_down_after_class();
76
    }
77
78
    public function set_up()
79
    {
80
        parent::set_up();
81
82
        // assumes HTTPURI to be in the form /tests/index.php?etc...
83
        $this->baseUrl = 'http://' . $this->args['HTTPSERVER'] . preg_replace('|\?.+|', '', $this->args['HTTPURI']);
84
        $this->coverageScriptUrl = 'http://' . $this->args['HTTPSERVER'] . preg_replace('|/tests/index\.php(\?.*)?|', '/tests/phpunit_coverage.php', $this->args['HTTPURI']);
85
    }
86
87
    protected function getClient()
88
    {
89
        $server = explode(':', $this->args['HTTPSERVER']);
90
        /// @todo use the non-legacy API calling convention, except in a dedicated test
91
        if (count($server) > 1) {
92
            $client = new xmlrpc_client($this->args['HTTPURI'], $server[0], $server[1]);
0 ignored issues
show
Bug introduced by
$server[1] of type string is incompatible with the type integer expected by parameter $port of xmlrpc_client::__construct(). ( Ignorable by Annotation )

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

92
            $client = new xmlrpc_client($this->args['HTTPURI'], $server[0], /** @scrutinizer ignore-type */ $server[1]);
Loading history...
93
        } else {
94
            $client = new xmlrpc_client($this->args['HTTPURI'], $this->args['HTTPSERVER']);
95
        }
96
97
        $client->setDebug($this->args['DEBUG']);
98
99
        $client->setCookie('PHPUNIT_RANDOM_TEST_ID', static::$randId);
100
101
        if ($this->collectCodeCoverageInformation) {
102
            $client->setCookie('PHPUNIT_SELENIUM_TEST_ID', $this->testId);
103
        }
104
105
        return $client;
106
    }
107
108
    /**
109
     * Dataprovider method: generates the list of test cases for tests which have to be run on curl vs. socket
110
     * @return array[]
111
     */
112
    public function getAvailableUseCurlOptions()
113
    {
114
        $opts = array(array(Client::USE_CURL_NEVER));
115
        if (function_exists('curl_init'))
116
        {
117
            $opts[] = array(Client::USE_CURL_ALWAYS);
118
        }
119
120
        return $opts;
121
    }
122
}
123