2013-03-12 03:32:46 +01:00
|
|
|
<?php
|
|
|
|
|
|
|
|
class ConfigStaticManifestTest extends SapphireTest {
|
|
|
|
|
|
|
|
/* Example statics */
|
|
|
|
|
|
|
|
// Different access levels
|
|
|
|
static $nolevel;
|
|
|
|
public static $public;
|
|
|
|
protected static $protected;
|
|
|
|
private static $private;
|
|
|
|
static public $public2;
|
|
|
|
static protected $protected2;
|
|
|
|
static private $private2;
|
|
|
|
|
|
|
|
// Assigning values
|
|
|
|
static $snone;
|
|
|
|
static $snull = null;
|
|
|
|
static $sint = 1;
|
|
|
|
static $sfloat = 2.5;
|
|
|
|
static $sstring = 'string';
|
|
|
|
static $sarray = array(1, 2, array(3, 4), 5);
|
2013-03-12 23:26:49 +01:00
|
|
|
static $sheredoc = <<<DOC
|
|
|
|
heredoc
|
|
|
|
DOC;
|
|
|
|
static $snowdoc = <<<'DOC'
|
|
|
|
nowdoc
|
|
|
|
DOC;
|
2013-03-12 03:32:46 +01:00
|
|
|
|
|
|
|
// Assigning multiple values
|
2013-03-12 23:26:49 +01:00
|
|
|
static $onone, $onull = null, $oint = 1, $ofloat = 2.5, $ostring = 'string', $oarray = array(1, 2, array(3, 4), 5), $oheredoc = <<<DOC
|
|
|
|
heredoc
|
|
|
|
DOC
|
|
|
|
, $onowdoc = <<<'DOC'
|
|
|
|
nowdoc
|
|
|
|
DOC;
|
2013-03-12 03:32:46 +01:00
|
|
|
|
|
|
|
static
|
|
|
|
$mnone,
|
|
|
|
$mnull = null,
|
|
|
|
$mint = 1,
|
|
|
|
$mfloat = 2.5,
|
|
|
|
$mstring = 'string',
|
|
|
|
$marray = array(
|
|
|
|
1, 2,
|
|
|
|
array(3, 4),
|
|
|
|
5
|
2013-03-12 23:26:49 +01:00
|
|
|
),
|
|
|
|
$mheredoc = <<<DOC
|
|
|
|
heredoc
|
|
|
|
DOC
|
|
|
|
,
|
|
|
|
$mnowdoc = <<<'DOC'
|
|
|
|
nowdoc
|
|
|
|
DOC;
|
|
|
|
|
|
|
|
|
|
|
|
static /* Has comment inline */ $commented_int = 1, /* And here */ $commented_string = 'string';
|
2013-03-12 03:32:46 +01:00
|
|
|
|
2013-03-12 23:59:49 +01:00
|
|
|
static
|
|
|
|
/**
|
|
|
|
* Has docblock inline
|
|
|
|
*/
|
|
|
|
$docblocked_int = 1,
|
|
|
|
/** And here */
|
|
|
|
$docblocked_string = 'string';
|
|
|
|
|
2013-03-12 03:32:46 +01:00
|
|
|
// Should ignore static methpds
|
|
|
|
static function static_method() {}
|
|
|
|
|
|
|
|
// Should ignore method statics
|
|
|
|
function instanceMethod() {
|
|
|
|
static $method_static;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* The tests */
|
|
|
|
|
|
|
|
protected function parseSelf() {
|
|
|
|
static $statics = null;
|
|
|
|
|
|
|
|
if ($statics === null) {
|
|
|
|
$parser = new SS_ConfigStaticManifest_Parser(__FILE__);
|
2013-03-12 05:14:12 +01:00
|
|
|
$parser->parse();
|
2013-03-12 03:32:46 +01:00
|
|
|
}
|
|
|
|
|
2013-03-12 05:14:12 +01:00
|
|
|
return $parser;
|
2013-03-12 03:32:46 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public function testParsingAccessLevels() {
|
2013-03-12 05:14:12 +01:00
|
|
|
$statics = $this->parseSelf()->getStatics();
|
2013-03-12 03:32:46 +01:00
|
|
|
|
|
|
|
$levels = array(
|
|
|
|
'nolevel' => null,
|
|
|
|
'public' => T_PUBLIC,
|
|
|
|
'public2' => T_PUBLIC,
|
|
|
|
'protected' => T_PROTECTED,
|
|
|
|
'protected2' => T_PROTECTED,
|
|
|
|
'private' => T_PRIVATE,
|
|
|
|
'private2' => T_PRIVATE
|
|
|
|
);
|
|
|
|
|
|
|
|
foreach($levels as $var => $level) {
|
|
|
|
$this->assertEquals(
|
|
|
|
$level,
|
|
|
|
$statics[__CLASS__][$var]['access'],
|
|
|
|
'Variable '.$var.' has '.($level ? token_name($level) : 'no').' access level'
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function testParsingValues() {
|
2013-03-12 05:14:12 +01:00
|
|
|
$statics = $this->parseSelf()->getStatics();
|
2013-03-12 03:32:46 +01:00
|
|
|
|
|
|
|
// Check assigning values
|
|
|
|
$values = array(
|
|
|
|
'none',
|
|
|
|
'null',
|
|
|
|
'int',
|
|
|
|
'float',
|
|
|
|
'string',
|
|
|
|
'array',
|
2013-03-12 23:26:49 +01:00
|
|
|
'heredoc',
|
|
|
|
'nowdoc'
|
2013-03-12 03:32:46 +01:00
|
|
|
);
|
|
|
|
|
|
|
|
$prepends = array(
|
|
|
|
's', // Each on it's own
|
|
|
|
'o', // All on one line
|
|
|
|
'm' // All in on static statement, but each on own line
|
|
|
|
);
|
|
|
|
|
|
|
|
foreach ($values as $value) {
|
|
|
|
foreach ($prepends as $prepend) {
|
|
|
|
$var = "$prepend$value";
|
|
|
|
|
|
|
|
$this->assertEquals(
|
|
|
|
self::$$var,
|
|
|
|
$statics[__CLASS__][$var]['value'],
|
|
|
|
'Variable '.$var.' value is extracted properly'
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-03-12 23:26:49 +01:00
|
|
|
public function testIgnoreComments() {
|
|
|
|
$statics = $this->parseSelf()->getStatics();
|
2013-03-12 23:59:49 +01:00
|
|
|
|
2013-03-12 23:26:49 +01:00
|
|
|
$this->assertEquals(self::$commented_int, $statics[__CLASS__]['commented_int']['value']);
|
|
|
|
$this->assertEquals(self::$commented_string, $statics[__CLASS__]['commented_string']['value']);
|
2013-03-12 23:59:49 +01:00
|
|
|
|
|
|
|
$this->assertEquals(self::$docblocked_int, $statics[__CLASS__]['docblocked_int']['value']);
|
|
|
|
$this->assertEquals(self::$docblocked_string, $statics[__CLASS__]['docblocked_string']['value']);
|
2013-03-12 23:26:49 +01:00
|
|
|
}
|
|
|
|
|
2013-03-12 03:32:46 +01:00
|
|
|
public function testIgnoresMethodStatics() {
|
2013-03-12 05:14:12 +01:00
|
|
|
$statics = $this->parseSelf()->getStatics();
|
2013-03-12 03:32:46 +01:00
|
|
|
$this->assertNull(@$statics[__CLASS__]['method_static']);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function testIgnoresStaticMethods() {
|
2013-03-12 05:14:12 +01:00
|
|
|
$statics = $this->parseSelf()->getStatics();
|
2013-03-12 03:32:46 +01:00
|
|
|
$this->assertNull(@$statics[__CLASS__]['static_method']);
|
|
|
|
}
|
|
|
|
}
|