parse(); } return $parser; } public function testParsingAccessLevels() { $statics = $this->parseSelf()->getStatics(); $levels = array( 'nolevel' => null, 'public' => T_PUBLIC, 'public2' => T_PUBLIC, 'protected' => T_PROTECTED, 'protected2' => T_PROTECTED, 'private' => T_PRIVATE, 'private2' => T_PRIVATE, 'nolevel_after_private' => null ); 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() { $statics = $this->parseSelf()->getStatics(); // Check assigning values $values = array( 'none', 'null', 'int', 'float', 'string', 'array', 'heredoc', 'nowdoc' ); $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' ); } } } public function testIgnoreComments() { $statics = $this->parseSelf()->getStatics(); $this->assertEquals(self::$commented_int, $statics[__CLASS__]['commented_int']['value']); $this->assertEquals(self::$commented_string, $statics[__CLASS__]['commented_string']['value']); $this->assertEquals(self::$docblocked_int, $statics[__CLASS__]['docblocked_int']['value']); $this->assertEquals(self::$docblocked_string, $statics[__CLASS__]['docblocked_string']['value']); } public function testIgnoresMethodStatics() { $statics = $this->parseSelf()->getStatics(); $this->assertNull(@$statics[__CLASS__]['method_static']); } public function testIgnoresStaticMethods() { $statics = $this->parseSelf()->getStatics(); $this->assertNull(@$statics[__CLASS__]['static_method']); } public function testParsingShortArray() { if(version_compare(PHP_VERSION, '5.4', '<')) { $this->markTestSkipped('This test requires PHP 5.4 or higher'); return; } $parser = new SS_ConfigStaticManifest_Parser(__DIR__ . '/ConfigStaticManifestTest/ConfigStaticManifestTestMyObject.php'); $parser->parse(); $statics = $parser->getStatics(); $expectedValue = array( 'Name' => 'Varchar', 'Description' => 'Text', ); $this->assertEquals($expectedValue, $statics['ConfigStaticManifestTestMyObject']['db']['value']); } public function testParsingNamespacesclass() { $parser = new SS_ConfigStaticManifest_Parser(__DIR__ . '/ConfigStaticManifestTest/ConfigStaticManifestTestNamespace.php'); $parser->parse(); $statics = $parser->getStatics(); $expectedValue = array( 'Name' => 'Varchar', 'Description' => 'Text', ); $this->assertEquals($expectedValue, $statics['config\staticmanifest\NamespaceTest']['db']['value']); } public function testParsingMultyStringClass() { static $tokens = array( array(T_OPEN_TAG, "parse(); $statics = $parser->getStatics(); $expected = array( 'test' => array( 'access' => T_PRIVATE, 'value' => array(3) ) ); $this->assertEquals($expected, $statics[':ss:test2']); } public function testParsingClassKeyword() { $parser = new SS_ConfigStaticManifest_Parser(__DIR__ . '/ConfigStaticManifestTest/ConfigStaticManifestTestClassKeyword.php'); $parser->parse(); $statics = $parser->getStatics(); $this->assertEquals('bar', $statics['ConfigStaticManifestTestClassKeyword']['foo']['value']); } } class ConfigStaticManifestTest_Parser extends SS_ConfigStaticManifest_Parser implements TestOnly { public function __construct($tokens) { $this->path = __FILE__; $this->tokens = $tokens; $this->length = count($this->tokens); $this->pos = 0; } }