From: <lph...@us...> - 2009-01-26 23:22:12
|
Revision: 16419 http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=16419&view=rev Author: lphuberdeau Date: 2009-01-26 22:19:54 +0000 (Mon, 26 Jan 2009) Log Message: ----------- [MOD] Adding basic support to fetch plugin info and repair broken tests by path changes in files Modified Paths: -------------- trunk/lib/core/test/AllTests.php trunk/lib/core/test/WikiParser/AllTests.php Added Paths: ----------- trunk/lib/core/lib/WikiParser/PluginDefinition.php trunk/lib/core/lib/WikiParser/PluginRepository.php trunk/lib/core/test/WikiParser/PluginRepositoryTest.php trunk/lib/core/test/WikiParser/wikiplugin_foo.php Added: trunk/lib/core/lib/WikiParser/PluginDefinition.php =================================================================== --- trunk/lib/core/lib/WikiParser/PluginDefinition.php (rev 0) +++ trunk/lib/core/lib/WikiParser/PluginDefinition.php 2009-01-26 22:19:54 UTC (rev 16419) @@ -0,0 +1,41 @@ +<?php + +class WikiParser_PluginDefinition implements ArrayAccess, Countable +{ + private $repository; + private $data; + + function __construct( $repository, $data ) + { + $this->repository = $repository; + $this->data = $data; + } + + function offsetExists( $offset ) + { + return isset( $this->data[$offset] ); + } + + function offsetGet( $offset ) + { + return $this->data[$offset]; + } + + function offsetSet( $offset, $value ) + { + // Immutable + return $this->offsetGet( $offset ); + } + + function offsetUnset( $offset ) + { + // Immutable + } + + function count() + { + return count( $this->data ); + } +} + +?> Added: trunk/lib/core/lib/WikiParser/PluginRepository.php =================================================================== --- trunk/lib/core/lib/WikiParser/PluginRepository.php (rev 0) +++ trunk/lib/core/lib/WikiParser/PluginRepository.php 2009-01-26 22:19:54 UTC (rev 16419) @@ -0,0 +1,83 @@ +<?php + +class WikiParser_PluginRepository +{ + private $folders = array(); + private $pluginsFound = array(); + + function addPluginFolder( $folder ) + { + $this->folders[] = $folder; + } + + function getInfo( $pluginName ) + { + if( ! $this->pluginExists( $pluginName ) ) { + return null; + } + + $pluginName = strtolower( $pluginName ); + $location = $this->pluginsFound[$pluginName]; + + $functionName = "wikiplugin_$pluginName"; + $infoName = "wikiplugin_{$pluginName}_info"; + + include_once "{$location}/$functionName.php"; + + if( ! function_exists( $functionName ) ) { + $this->pluginsFound[ $pluginName ] = false; + return null; + } + + if( ! function_exists( $infoName ) ) { + return null; + } + + return new WikiParser_PluginDefinition( $this, $infoName() ); + } + + function pluginExists( $pluginName ) + { + $pluginName = strtolower( $pluginName ); + + if( isset( $this->pluginsFound[ $pluginName ] ) ) { + return false !== $this->pluginsFound[ $pluginName ]; + } + + foreach( $this->folders as $folder ) { + if( $this->pluginExistsIn( $pluginName, $folder ) ) { + $this->pluginsFound[ $pluginName ] = $folder; + return true; + } + } + + $this->pluginsFound[ $pluginName ] = false; + return false; + } + + private function pluginExistsIn( $pluginName, $folder ) + { + $file = $folder . '/wikiplugin_' . $pluginName . '.php'; + + return file_exists( $file ); + } + + function getList() + { + $real = array(); + + foreach( $this->folders as $folder ) { + foreach( glob( $folder . '/wikiplugin_*.php' ) as $file ) + { + $base = basename( $file ); + $plugin = substr( $base, 11, -4 ); + + $real[] = $plugin; + } + } + + return $real; + } +} + +?> Modified: trunk/lib/core/test/AllTests.php =================================================================== --- trunk/lib/core/test/AllTests.php 2009-01-26 22:11:20 UTC (rev 16418) +++ trunk/lib/core/test/AllTests.php 2009-01-26 22:19:54 UTC (rev 16419) @@ -2,8 +2,12 @@ ini_set( 'display_errors', 'on' ); error_reporting( E_ALL ); -ini_set( 'include_path', ini_get('include_path') . ':.:../lib' ); +ini_set( 'include_path', ini_get('include_path') . ':.:../lib:../../..' ); +function tra( $string ) { + return $string; +} + function __autoload( $name ) { $path = str_replace( '_', '/', $name ); require_once( $path . '.php' ); Modified: trunk/lib/core/test/WikiParser/AllTests.php =================================================================== --- trunk/lib/core/test/WikiParser/AllTests.php 2009-01-26 22:11:20 UTC (rev 16418) +++ trunk/lib/core/test/WikiParser/AllTests.php 2009-01-26 22:19:54 UTC (rev 16419) @@ -11,6 +11,7 @@ { $suite = new PHPUnit_Framework_TestSuite('WikiParserSuite'); + $suite->addTestSuite('WikiParser_PluginRepositoryTest'); $suite->addTestSuite('WikiParser_PluginMatcherTest'); $suite->addTestSuite('WikiParser_PluginArgumentParserTest'); //$suite->addTestSuite('WikiParser_PluginParserTest'); Added: trunk/lib/core/test/WikiParser/PluginRepositoryTest.php =================================================================== --- trunk/lib/core/test/WikiParser/PluginRepositoryTest.php (rev 0) +++ trunk/lib/core/test/WikiParser/PluginRepositoryTest.php 2009-01-26 22:19:54 UTC (rev 16419) @@ -0,0 +1,40 @@ +<?php + +class WikiParser_PluginRepositoryTest extends PHPUnit_Framework_TestCase +{ + function testPluginDoesNotExist() + { + $repository = new WikiParser_PluginRepository; + $this->assertFalse( $repository->pluginExists( 'test' ) ); + } + + function testTestPhysicalPlugin() + { + $repository = new WikiParser_PluginRepository; + $repository->addPluginFolder( dirname(__FILE__) ); + + $this->assertTrue( $repository->pluginExists( 'foo' ) ); + $this->assertFalse( $repository->pluginExists( 'fake' ) ); + } + + function testObtainInfoForNormalPlugin() + { + $repository = new WikiParser_PluginRepository; + $repository->addPluginFolder( dirname(__FILE__) ); + + $info = $repository->getInfo( 'foo' ); + + $this->assertEquals( 2, count( $info['params'] ) ); + $this->assertEquals( tra('Foo'), $info['name'] ); + } + + function testGetListWithNormalOnly() + { + $repository = new WikiParser_PluginRepository; + $repository->addPluginFolder( dirname(__FILE__) ); + + $this->assertEquals( array( 'foo' ), $repository->getList() ); + } +} + +?> Added: trunk/lib/core/test/WikiParser/wikiplugin_foo.php =================================================================== --- trunk/lib/core/test/WikiParser/wikiplugin_foo.php (rev 0) +++ trunk/lib/core/test/WikiParser/wikiplugin_foo.php 2009-01-26 22:19:54 UTC (rev 16419) @@ -0,0 +1,31 @@ +<?php +/* Tiki-Wiki plugin example + */ +function wikiplugin_foo_info() { + return array( + 'name' => tra('Foo'), + 'description' => tra('Sample plugin.'), + 'prefs' => array( 'wikiplugin_example' ), + 'body' => tra('text'), + 'params' => array( + 'face' => array( + 'required' => true, + 'name' => tra('Face'), + 'description' => tra('Font family to use.'), + ), + 'size' => array( + 'required' => true, + 'name' => tra('Size'), + 'description' => tra('As defined by CSS.'), + ), + ), + ); +} +function wikiplugin_foo($data, $params) { + extract ($params,EXTR_SKIP); + + $ret = "foo face=$face size=$size :: $data"; + return $ret; +} + +?> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |