jenkins-bot has submitted this change and it was merged.

Change subject: [DIC]: @var type-hinting, /dic/README.mediawiki -> 
/dic/README.md
......................................................................


[DIC]: @var type-hinting, /dic/README.mediawiki -> /dic/README.md

+ README.mediawiki doesn't show source examples appropriately therefore
move to md format
+ Add some @var
+ Add MockUpdateObserver test for \SMW\LinksUpdateConstructed now
that the \SMW\ParserData object is fully resolved by the DIC

Change-Id: I8a1a9ad6af11d677c50721ae3af74610da9d92da
---
R includes/dic/README.md
M includes/dic/SharedDependencyContainer.php
M includes/dic/SimpleDependencyBuilder.php
M includes/hooks/ArticlePurge.php
M includes/hooks/LinksUpdateConstructed.php
M tests/phpunit/MockObjectBuilder.php
M tests/phpunit/SemanticMediaWikiTestCase.php
M tests/phpunit/includes/dic/SharedDependencyContainerTest.php
M tests/phpunit/includes/dic/SimpleDependencyBuilderTest.php
M tests/phpunit/includes/hooks/LinksUpdateConstructedTest.php
10 files changed, 261 insertions(+), 157 deletions(-)

Approvals:
  Mwjames: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/includes/dic/README.mediawiki b/includes/dic/README.md
similarity index 89%
rename from includes/dic/README.mediawiki
rename to includes/dic/README.md
index 9c31e62..9b71b58 100644
--- a/includes/dic/README.mediawiki
+++ b/includes/dic/README.md
@@ -1,4 +1,4 @@
-== Overview ==
+## Overview
 A basic dependency injection framework that enables object injection for 
immutable or service objects in Semantic MediaWiki.
 
 A dependency injection container (or object assembler) bundles specification 
and definitions of objects (also known as service objects) that can be used 
independently for instantiation from an invoking class. The current framework 
supports:
@@ -11,8 +11,8 @@
 
 This framework does not deploy a DependencyResolver (trying to automatically 
resolve dependencies) instead injections will have to be declarative within a 
dependency requestor.
 
-=== Usage ===
-<pre>
+### Usage
+```php
 // Traditional instantiation
 $mightyObject = new ElephantineObject();
 
@@ -22,7 +22,7 @@
  */
 $mightyObject = $this->getDependencyBuilder()->newObject( 'ElephantineObject' 
) or
 $mightyObject = $this->getDependencyBuilder()->ElephantineObject()
-</pre>
+```
 
 When constructing objects using the DI framework we avoid using the “new” 
keyword to create objects and instead rely on a builder to resolve an object 
graph and its instantiation. The use of dependency injection and for that 
matter of a dependency injection framework can help:
 * Reduce reliance on hard-coded dependencies
@@ -37,19 +37,19 @@
 
 Gaining independence and control over service object instantiation requires 
appropriate unit testing to ensure that injected containers do contain proper 
object definitions used within a requestor that will yield proper object 
instantiation.
 
-=== Scope ===
+### Scope
 The scope defines the lifetime of an object and if not declared otherwise an 
object is alwasy create with a prototypical scope.
 * SCOPE_PROTOTYPE (default) each injection or call to the newObject() method 
will result in a new instance
 * SCOPE_SINGLETON  scope will return the same instance over the lifetime of a 
request
 
-== DependencyContainer ==
-<pre>
+## DependencyContainer
+```
 DependencyObject
        -> DependencyContainer
                -> BaseDependencyContainer
                        -> EmptyDependencyContainer
                        -> SharedDependencyContainer
-</pre>
+```
 
 A dependency container bundles specification and definitions of objects with 
each object being responsible to specify an object graph and its internal 
dependencies. The current framework specifies:
 * DependencyObject an interface that specifies a method to register a 
dependency object
@@ -58,26 +58,26 @@
 * EmptyDependencyContainer an empty container that extends 
BaseDependencyContainer.
 * SharedDependencyContainer implements common object definitions used during 
Semantic MediaWiki's life cycle.
 
-== DependencyBuilder ==
-<pre>
+## DependencyBuilder
+```
 DependencyFactory
        -> DependencyBuilder
                -> SimpleDependencyBuilder
-</pre>
+```
 * DependencyFactory an interface that specifies a method to create a new object
 * DependencyBuilder an interface specifies methods to handle injection 
container and objects
 * SimpleDependencyBuilder implementing the DependencyBuilder to enable access 
to DependencyContainer objects and other invoked arguments
 
-== DependencyInjector ==
-<pre>
+## DependencyInjector
+```
 DependencyRequestor
        -> DependencyInjector
-</pre>
+```
 * DependencyRequestor an interface specifying access to a DependencyBuilder 
within a client that requests dependency injection
 * DependencyInjector an abstract class that implements the DependencyRequestor 
to enable convenience access to an injected DependencyBuilder
 
-== Examples ==
-<pre>
+## Examples
+```php
 /**
  * Object specifications
  */
@@ -120,19 +120,19 @@
 
 /* @var ElephantineObject $mightyObject */
 $mightyObject = $elephantine->get( new OuterRimChocolate() )
-</pre>
+```
 
-=== DependencyContainer ===
-==== Register an object (eager loading) ====
-<pre>
+### DependencyContainer
+#### Register an object (eager loading)
+```php
 $container = new EmptyDependencyContainer();
 
 $container->Title = new Title();
 $container->registerObject( 'Foo', new \stdClass );
-</pre>
+```
 
-==== Register an object (lazy loading) ====
-<pre>
+### Register an object (lazy loading)
+```php
 $container = new EmptyDependencyContainer();
 
 $container->Foo = function ( DependencyBuilder $builder ) {
@@ -142,19 +142,19 @@
 $container->registerObject( 'DIWikiPage', function ( DependencyBuilder 
$builder ) {
   return DIWikiPage::newFromTitle( $builder->getArgument( 'Title' ) );
 } );
-</pre>
+```
 
-=== SimpleDependencyBuilder ===
-==== Access objects ====
-<pre>
+### SimpleDependencyBuilder
+#### Access objects
+```php
 $builder = new SimpleDependencyBuilder( $container );
 
 $builder->newObject( 'Foo' );
 $builder->Foo();
-</pre>
+```
 
-==== Access objects with arguments ====
-<pre>
+#### Access objects with arguments
+```php
 $builder = new SimpleDependencyBuilder( $container );
 
 $builder->addArgument( 'Title', $builder->newObject( 'Title' ) );
@@ -162,50 +162,49 @@
 
 $builder->DIWikiPage( $builder->newObject( 'Title' ) );
 $builder->newObject( 'DIWikiPage', array( $builder->Title() ) );
-</pre>
+```
 
-==== Deferred object registration using the builder ====
-<pre>
+### Deferred object registration using the builder
+```php
 $builder = new SimpleDependencyBuilder( $container );
 
 $builder->getContainer()->registerObject( 'Bar', new Fruits() );
 $builder->newObject( 'Bar' );
-</pre>
+```
 
-=== Specifying object scope ===
-==== Specify object scope (SCOPE_PROTOTYPE) ====
-<pre>
+### Specifying object scope
+#### Specify object scope (SCOPE_PROTOTYPE)
+```php
 $container = new EmptyDependencyContainer();
 
 $container->registerObject( 'Foo', function ( return new Foo() ) { ... } )
 $container->registerObject( 'Foo', new Foo() )
 
 $container->registerObject( 'Foo', function ( return new Foo() ) { ... }, 
DependencyObject::SCOPE_PROTOTYPE )
-</pre>
-====  Specify object scope (SCOPE_SINGLETON) ====
-<pre>
+```
+
+####  Specify object scope (SCOPE_SINGLETON)
+```php
 $container = new EmptyDependencyContainer();
 
 $container->registerObject( 'Foo', function ( return new Foo() ) { ... }, 
DependencyObject::SCOPE_SINGLETON )
 $container->registerObject( 'Foo', new Foo(), 
DependencyObject::SCOPE_SINGLETON )
-</pre>
+```
 
-==== Change object scope during build process ====
-<pre>
+#### Change object scope during build process
+```php
 $builder = new SimpleDependencyBuilder( $container );
 
 $builder->setScope( DependencyObject::SCOPE_SINGLETON )->newObject( 
'ElephantineObject' )
 $builder->setScope( DependencyObject::SCOPE_PROTOTYPE )->ElephantineObject()
-</pre>
+```
 
-=== Using the DependencyInjector ===
-<pre>
+### Using the DependencyInjector
+```php
 class FooClass extends DependencyInjector { ... }
 
 $fooClass = new FooClass( ... )
 $fooClass->setDependencyBuilder( new SimpleDependencyBuilder() );
 
 $fooClass->getDependencyBuilder()->newObject( 'Bar' );
-</pre>
-
-__NOTOC__
\ No newline at end of file
+```
\ No newline at end of file
diff --git a/includes/dic/SharedDependencyContainer.php 
b/includes/dic/SharedDependencyContainer.php
index d1cef69..c1e0e70 100644
--- a/includes/dic/SharedDependencyContainer.php
+++ b/includes/dic/SharedDependencyContainer.php
@@ -76,10 +76,15 @@
                 * @return ParserData
                 */
                $this->registerObject( 'ParserData', function ( 
DependencyBuilder $builder ) {
-                       return new ParserData(
+
+                       $parserData = new ParserData(
                                $builder->getArgument( 'Title' ),
                                $builder->getArgument( 'ParserOutput' )
                        );
+
+                       $parserData->setObservableDispatcher( 
$builder->newObject( 'ObservableUpdateDispatcher' ) );
+
+                       return $parserData;
                } );
 
                /**
@@ -96,6 +101,17 @@
                } );
 
                /**
+                * ObservableSubjectDispatcher object definitions
+                *
+                * @since  1.9
+                *
+                * @return ObservableSubjectDispatcher
+                */
+               $this->registerObject( 'ObservableUpdateDispatcher', function ( 
DependencyBuilder $builder ){
+                       return new ObservableSubjectDispatcher( 
$builder->newObject( 'UpdateObserver' ) );
+               } );
+
+               /**
                 * NamespaceExaminer object definitions
                 *
                 * @since  1.9
diff --git a/includes/dic/SimpleDependencyBuilder.php 
b/includes/dic/SimpleDependencyBuilder.php
index 5c6e9f1..833c739 100644
--- a/includes/dic/SimpleDependencyBuilder.php
+++ b/includes/dic/SimpleDependencyBuilder.php
@@ -20,6 +20,34 @@
  * Basic implementation of the DependencyBuilder interface to enable access to
  * DependencyContainer objects and other invoked arguments
  *
+ * For a more exhaustive description, see /dic/README.mediawiki
+ *
+ * @par Example:
+ * @code
+ *  // Constructor injection
+ *  $builder = new SimpleDependencyBuilder( new EmptyDependencyContainer() )
+ *
+ *  // Setter injection
+ *  $builder->registerContainer( new GenericDependencyContainer() )
+ *
+ *  // Register multiple container
+ *  $builder = new SimpleDependencyBuilder()
+ *  $builder->registerContainer( new GenericDependencyContainer() )
+ *  $builder->registerContainer( new AnotherDependencyContainer() )
+ *
+ *  // Register additional object definitions during runtime
+ *  $builder->getContainer()->registerObject( 'Title', new Title() ) or
+ *  $builder->getContainer()->registerObject( 'DIWikiPage', function ( 
DependencyBuilder $builder ) {
+ *     return DIWikiPage::newFromTitle( $builder->getArgument( 'Title' ) );
+ *  } );
+ *
+ *  // Create an object
+ *  $diWikiPage = $builder->newObject( 'DIWikiPage', array( $title ) ) or
+ *  $diWikiPage = $builder->addArgument( 'Title', $title )->newObject( 
'DIWikiPage' ) or
+ *  $diWikiPage = $builder->DIWikiPage( array( 'Title', $title ) )
+ *
+ * @endcode
+ *
  * @ingroup DependencyBuilder
  */
 class SimpleDependencyBuilder implements DependencyBuilder {
@@ -34,12 +62,6 @@
         * @note In case no DependencyContainer has been injected during 
construction
         * an empty container is set as default to enable registration without 
the need
         * to rely on constructor injection.
-        *
-        * @par Example:
-        * @code
-        *  $builder = new SimpleDependencyBuilder() or
-        *  $builder = new SimpleDependencyBuilder( new 
EmptyDependencyContainer() )
-        * @endcode
         *
         * @since  1.9
         *
@@ -56,20 +78,7 @@
        }
 
        /**
-        * Registers a DependencyContainer
-        *
-        * @par Example:
-        * @code
-        *  $builder = new SimpleDependencyBuilder()
-        *
-        *  // Setter injection
-        *  $builder->registerContainer( new GenericDependencyContainer() )
-        *
-        *  // Register multiple container
-        *  $builder = new SimpleDependencyBuilder()
-        *  $builder->registerContainer( new GenericDependencyContainer() )
-        *  $builder->registerContainer( new AnotherDependencyContainer() )
-        * @endcode
+        * Register DependencyContainer
         *
         * @since  1.9
         *
@@ -82,18 +91,6 @@
        /**
         * @see DependencyBuilder::getContainer
         *
-        * @par Example:
-        * @code
-        *  $builder = new SimpleDependencyBuilder( new 
EmptyDependencyContainer() );
-        *  $builder->getContainer() returns EmptyDependencyContainer
-        *
-        *  // Register additional objects during runtime
-        *  $builder->getContainer()->registerObject( 'Title', new Title() ) or
-        *  $builder->getContainer()->registerObject( 'DIWikiPage', function ( 
DependencyBuilder $builder ) {
-        *      return DIWikiPage::newFromTitle( $builder->getArgument( 'Title' 
) );
-        *  } );
-        * @endcode
-        *
         * @since  1.9
         *
         * @return DependencyContainer
@@ -103,15 +100,19 @@
        }
 
        /**
-        * Creates a new object
+        * Create a new object
         *
         * @par Example:
         * @code
-        *  $builder = new SimpleDependencyBuilder( ... )
-        *
-        *  $diWikiPage = $builder->newObject( 'DIWikiPage', array( $title ) ) 
or
-        *  $diWikiPage = $builder->addArgument( 'Title', $title )->newObject( 
'DIWikiPage' );
+        *  $builder->newObject( 'DIWikiPage', array( 'Title', $title ) ) or
+        *  $builder->DIWikiPage( array( 'Title', $title ) )
         * @endcode
+        *
+        * @note When adding arguments it is preferable to use type hinting even
+        * though no types are declared an auto recognition will try to resolve
+        * the identify but when mock objects are used during testing this will
+        * cause objects being recognized with their mock name instead of the
+        * original entity
         *
         * @since  1.9
         *
@@ -119,24 +120,26 @@
         * @param  array|null $objectArguments
         *
         * @return mixed
+        * @throws InvalidArgumentException
         */
        public function newObject( $objectName, $objectArguments = null ) {
-               return $this->setArguments( $objectArguments )->build( 
$objectName );
+
+               if ( $objectArguments !== null ) {
+
+                       if ( !is_array( $objectArguments ) ) {
+                               throw new InvalidArgumentException( "Arguments 
are not an array type" );
+                       }
+
+                       foreach ( $objectArguments as $key => $value ) {
+                               $this->addArgument( is_string( $key ) ? $key : 
get_class( $value ), $value );
+                       }
+               }
+
+               return $this->build( $objectName );
        }
 
        /**
-        * Build dynamic object entities via magic method __call
-        *
-        * @par Example:
-        * @code
-        *  $builder = new SimpleDependencyBuilder( ... )
-        *
-        *  // Register object
-        *  $builder->getContainer()->title = new Title()
-        *
-        *  // Retrieve object
-        *  $builder->title() returns Title object
-        * @endcode
+        * Create a new object using the magic __call method
         *
         * @param string $objectName
         * @param array|null $objectArguments
@@ -144,7 +147,12 @@
         * @return mixed
         */
        public function __call( $objectName, $objectArguments = null ) {
-               return $this->setArguments( $objectArguments )->build( 
$objectName );
+
+               if ( isset( $objectArguments[0] ) && is_array( 
$objectArguments[0] ) ) {
+                       $objectArguments = $objectArguments[0];
+               }
+
+               return $this->newObject( $objectName, $objectArguments );
        }
 
        /**
@@ -222,26 +230,6 @@
         */
        public function setScope( $objectScope ) {
                $this->objectScope = $objectScope;
-               return $this;
-       }
-
-       /**
-        * Auto registration of arguments
-        *
-        * @since  1.9
-        *
-        * @param  array|null $objectArguments
-        *
-        * @return DependencyBuilder
-        */
-       protected function setArguments( $objectArguments = null ) {
-
-               if ( $objectArguments !== null && is_array( $objectArguments ) 
) {
-                       foreach ( $objectArguments as $key => $value ) {
-                               $this->addArgument( get_class( $value ), $value 
);
-                       }
-               }
-
                return $this;
        }
 
diff --git a/includes/hooks/ArticlePurge.php b/includes/hooks/ArticlePurge.php
index 55512bc..62c9c31 100644
--- a/includes/hooks/ArticlePurge.php
+++ b/includes/hooks/ArticlePurge.php
@@ -48,11 +48,18 @@
         */
        public function process() {
 
-               $pageId   = $this->wikiPage->getTitle()->getArticleID();
+               $pageId = $this->wikiPage->getTitle()->getArticleID();
 
-               $cache    = $this->getDependencyBuilder()->newObject( 
'CacheHandler' );
+               /**
+                * @var Settings $settings
+                */
                $settings = $this->getDependencyBuilder()->newObject( 
'Settings' );
 
+               /**
+                * @var CacheHandler $cache
+                */
+               $cache = $this->getDependencyBuilder()->newObject( 
'CacheHandler' );
+
                $cache->setCacheEnabled( $pageId > 0 )
                        ->key( 'autorefresh', $pageId )
                        ->set( $settings->get( 'smwgAutoRefreshOnPurge' ) );
diff --git a/includes/hooks/LinksUpdateConstructed.php 
b/includes/hooks/LinksUpdateConstructed.php
index f9e3bfd..0455539 100644
--- a/includes/hooks/LinksUpdateConstructed.php
+++ b/includes/hooks/LinksUpdateConstructed.php
@@ -45,15 +45,15 @@
         */
        public function process() {
 
-               $observer = new UpdateObserver();
-               $observer->setDependencyBuilder( $this->getDependencyBuilder() 
);
+               /**
+                * @var ParserData $parserData
+                */
+               $parserData = $this->getDependencyBuilder()->newObject( 
'ParserData', array(
+                       'Title'        => $this->linksUpdate->getTitle(),
+                       'ParserOutput' => $this->linksUpdate->getParserOutput()
+               ) );
 
-               $parserData = $this->getDependencyBuilder()
-                       ->addArgument( 'Title', $this->linksUpdate->getTitle() )
-                       ->addArgument( 'ParserOutput', 
$this->linksUpdate->getParserOutput() )
-                       ->newObject( 'ParserData' );
-
-               $parserData->setObservableDispatcher( new 
ObservableSubjectDispatcher( $observer ) )->updateStore();
+               $parserData->updateStore();
 
                return true;
        }
diff --git a/tests/phpunit/MockObjectBuilder.php 
b/tests/phpunit/MockObjectBuilder.php
index 6cdd4cb..48d44eb 100644
--- a/tests/phpunit/MockObjectBuilder.php
+++ b/tests/phpunit/MockObjectBuilder.php
@@ -802,6 +802,10 @@
                        ->method( 'getPageLanguage' )
                        ->will( $this->returnValue( $this->setValue( 
'getPageLanguage' ) ) );
 
+               $title->expects( $this->any() )
+                       ->method( 'inNamespace' )
+                       ->will( $this->setCallback( 'inNamespace' ) );
+
                return $title;
        }
 
diff --git a/tests/phpunit/SemanticMediaWikiTestCase.php 
b/tests/phpunit/SemanticMediaWikiTestCase.php
index 184c748..42def34 100644
--- a/tests/phpunit/SemanticMediaWikiTestCase.php
+++ b/tests/phpunit/SemanticMediaWikiTestCase.php
@@ -276,12 +276,17 @@
         * @param SemanticData $semanticData
         * @param array $expected
         */
-       protected function assertSemanticData( SemanticData $semanticData, 
array $expected ) {
+       protected function assertSemanticData( SemanticData $semanticData, 
array $expected, $message = null ) {
 
                $properties = $semanticData->getProperties();
 
-               $this->assertCount( $expected['propertyCount'], $properties );
-               $this->assertProperties(  $semanticData , $properties, 
$expected );
+               $this->assertCount(
+                       $expected['propertyCount'],
+                       $properties,
+                       'asserts whether the SemanticData container contained 
an expected ammount of properties'
+               );
+
+               $this->assertProperties( $semanticData, $properties, $expected 
);
 
        }
 
@@ -299,11 +304,19 @@
                        $this->assertInstanceOf( '\SMW\DIProperty', $diproperty 
);
 
                        if ( isset( $expected['propertyKey']) ){
-                               $this->assertContains( $diproperty->getKey(), 
$expected['propertyKey'] );
+                               $this->assertContains(
+                                       $diproperty->getKey(),
+                                       $expected['propertyKey'],
+                                       'asserts that the SemanticData 
container contained a specific property key'
+                               );
                        }
 
                        if ( isset( $expected['propertyLabel']) ){
-                               $this->assertContains( $diproperty->getLabel(), 
$expected['propertyLabel'] );
+                               $this->assertContains(
+                                       $diproperty->getLabel(),
+                                       $expected['propertyLabel'],
+                                       'aasserts that the SemanticData 
container contained a specific property label'
+                               );
                        }
 
                        if ( isset( $expected['propertyValue']) ){
@@ -329,13 +342,37 @@
                        $DItype = $dataValue->getDataItem()->getDIType();
 
                        if ( $DItype === SMWDataItem::TYPE_WIKIPAGE ){
-                               $this->assertContains( 
$dataValue->getWikiValue(), $expected['propertyValue'] );
+
+                               $this->assertContains(
+                                       $dataValue->getWikiValue(),
+                                       $expected['propertyValue'],
+                                       'asserts that the SemanticData 
container contained a property value of TYPE_WIKIPAGE'
+                               );
+
                        } else if ( $DItype === SMWDataItem::TYPE_NUMBER ){
-                               $this->assertContains( $dataValue->getNumber(), 
$expected['propertyValue'] );
+
+                               $this->assertContains(
+                                       $dataValue->getNumber(),
+                                       $expected['propertyValue'],
+                                       'asserts that the SemanticData 
container contained a property value of TYPE_NUMBER'
+                               );
+
                        } else if ( $DItype === SMWDataItem::TYPE_TIME ){
-                               $this->assertContains( 
$dataValue->getISO8601Date(), $expected['propertyValue'] );
+
+                               $this->assertContains(
+                                       $dataValue->getISO8601Date(),
+                                       $expected['propertyValue'],
+                                       'asserts that the SemanticData 
container contained a property value of TYPE_TIME'
+                               );
+
                        } else if ( $DItype === SMWDataItem::TYPE_BLOB ){
-                               $this->assertContains( 
$dataValue->getWikiValue(), $expected['propertyValue'] );
+
+                               $this->assertContains(
+                                       $dataValue->getWikiValue(),
+                                       $expected['propertyValue'],
+                                       'asserts that the SemanticData 
container contained a property value of TYPE_BLOB'
+                               );
+
                        }
 
                }
diff --git a/tests/phpunit/includes/dic/SharedDependencyContainerTest.php 
b/tests/phpunit/includes/dic/SharedDependencyContainerTest.php
index 19a73b3..ef204ad 100644
--- a/tests/phpunit/includes/dic/SharedDependencyContainerTest.php
+++ b/tests/phpunit/includes/dic/SharedDependencyContainerTest.php
@@ -106,11 +106,12 @@
 
                $provider = array();
 
-               $provider[] = array( 'Settings',          array( 
'\SMW\Settings'          => array() ) );
-               $provider[] = array( 'Store',             array( '\SMW\Store'   
          => array() ) );
-               $provider[] = array( 'CacheHandler',      array( 
'\SMW\CacheHandler'      => array() ) );
-               $provider[] = array( 'NamespaceExaminer', array( 
'\SMW\NamespaceExaminer' => array() ) );
-               $provider[] = array( 'UpdateObserver',    array( 
'\SMW\UpdateObserver'    => array() ) );
+               $provider[] = array( 'Settings',                   array( 
'\SMW\Settings'                    => array() ) );
+               $provider[] = array( 'Store',                      array( 
'\SMW\Store'                       => array() ) );
+               $provider[] = array( 'CacheHandler',               array( 
'\SMW\CacheHandler'                => array() ) );
+               $provider[] = array( 'NamespaceExaminer',          array( 
'\SMW\NamespaceExaminer'           => array() ) );
+               $provider[] = array( 'UpdateObserver',             array( 
'\SMW\UpdateObserver'              => array() ) );
+               $provider[] = array( 'ObservableUpdateDispatcher', array( 
'\SMW\ObservableSubjectDispatcher' => array() ) );
 
                $provider[] = array( 'ParserData' , array(  '\SMW\ParserData' 
=> array(
                                'Title'        => 
$this->newMockObject()->getMockTitle(),
diff --git a/tests/phpunit/includes/dic/SimpleDependencyBuilderTest.php 
b/tests/phpunit/includes/dic/SimpleDependencyBuilderTest.php
index 7b0e094..6186ecb 100644
--- a/tests/phpunit/includes/dic/SimpleDependencyBuilderTest.php
+++ b/tests/phpunit/includes/dic/SimpleDependencyBuilderTest.php
@@ -346,31 +346,29 @@
        }
 
        /**
-        * @test SimpleDependencyBuilder::getContainer
-        * @test SimpleDependencyBuilder::addArgument
-        * @test SimpleDependencyBuilder::getArgument
+        * @test SimpleDependencyBuilder::newObject
+        * @dataProvider autoArgumentsDataProvider
         *
         * @since 1.9
         */
-       public function testAddGetArgumentsAutoRegistration() {
+       public function testAutoArguments( $setup, $expected ) {
 
                $instance = $this->newInstance();
-               $title    = $this->newTitle( NS_MAIN, 'Lila' );
 
                $instance->getContainer()->registerObject( 'Test', function ( 
DependencyBuilder $builder ) {
                        return DIWikiPage::newFromTitle( $builder->getArgument( 
'Title' ) );
                } );
 
                $this->assertEquals(
-                       $title,
-                       $instance->newObject( 'Test', array( $title ) 
)->getTitle(),
-                       'asserts object instance using newObject() constructor'
+                       $expected,
+                       $instance->newObject( 'Test', $setup )->getTitle(),
+                       'asserts that newObject() and arguments return expected 
results'
                );
 
                $this->assertEquals(
-                       $title,
-                       $instance->Test( $title )->getTitle(),
-                       'asserts object instance using __call constructor'
+                       $expected,
+                       $instance->Test( $setup )->getTitle(),
+                       'asserts that __call and arguments return expected 
results'
                );
 
        }
@@ -562,6 +560,15 @@
                        'asserts that ...'
                );
 
+               $this->assertEquals(
+                       array( $title1, $title2 ),
+                       $instance->getArray( array(
+                               'Title1' => $title1,
+                               'Title2' => $title2
+                       ) ),
+                       'asserts that ...'
+               );
+
        }
 
        /**
@@ -692,6 +699,18 @@
         *
         * @since 1.9
         */
+       public function testNewObjectArgumentsInvalidArgument() {
+
+               $this->setExpectedException( 'InvalidArgumentException' );
+               $this->newInstance()->newObject( new \stdclass, new \stdclass );
+
+       }
+
+       /**
+        * @test SimpleDependencyBuilder::newObject
+        *
+        * @since 1.9
+        */
        public function testUnknownObject() {
 
                $this->setExpectedException( 'OutOfBoundsException' );
@@ -714,4 +733,19 @@
                return $provider;
        }
 
+       /**
+        * @return array
+        */
+       public function autoArgumentsDataProvider() {
+
+               $provider = array();
+               $title    = $this->newTitle( NS_MAIN, 'Lala' );
+
+               $provider[] = array( array( $title ), $title );
+               $provider[] = array( array( $title, $title ), $title );
+               $provider[] = array( array( 'Title' => $title, 'Title2' => 
$title ), $title );
+
+               return $provider;
+       }
+
 }
diff --git a/tests/phpunit/includes/hooks/LinksUpdateConstructedTest.php 
b/tests/phpunit/includes/hooks/LinksUpdateConstructedTest.php
index e04def2..0d0f5f4 100644
--- a/tests/phpunit/includes/hooks/LinksUpdateConstructedTest.php
+++ b/tests/phpunit/includes/hooks/LinksUpdateConstructedTest.php
@@ -82,7 +82,25 @@
         * @since 1.9
         */
        public function testProcess() {
-               $this->assertTrue( $this->newInstance()->process() );
+
+               $instance       = $this->newInstance();
+               $updateObserver = new MockUpdateObserver();
+
+               $instance->getDependencyBuilder()
+                       ->getContainer()
+                       ->registerObject( 'UpdateObserver', $updateObserver );
+
+               $this->assertTrue(
+                       $instance->process(),
+                       'asserts that process() always returns true'
+               );
+
+               $this->assertEquals(
+                       'runStoreUpdater',
+                       $updateObserver->getNotifier(),
+                       'asserts that the invoked observer was notfied'
+               );
+
        }
 
 }

-- 
To view, visit https://gerrit.wikimedia.org/r/81141
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I8a1a9ad6af11d677c50721ae3af74610da9d92da
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/SemanticMediaWiki
Gerrit-Branch: master
Gerrit-Owner: Mwjames <[email protected]>
Gerrit-Reviewer: Mwjames <[email protected]>
Gerrit-Reviewer: jenkins-bot

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to