From 1cd29cb65507532110b85fb134dc6e32514da256 Mon Sep 17 00:00:00 2001 From: Allon Moritz Date: Thu, 29 Jun 2017 17:09:56 +0200 Subject: [PATCH 01/36] Add getLanguage function to interface --- .../src/CMS/Application/CMSApplicationInterface.php | 10 ++++++++++ libraries/src/CMS/Application/CliApplication.php | 13 +++++++++++++ 2 files changed, 23 insertions(+) diff --git a/libraries/src/CMS/Application/CMSApplicationInterface.php b/libraries/src/CMS/Application/CMSApplicationInterface.php index d3b2cea4796dd..ead33475eadee 100644 --- a/libraries/src/CMS/Application/CMSApplicationInterface.php +++ b/libraries/src/CMS/Application/CMSApplicationInterface.php @@ -8,6 +8,7 @@ namespace Joomla\CMS\Application; +use Joomla\CMS\Language\Language; use Joomla\CMS\User\User; use Joomla\Session\SessionInterface; @@ -132,6 +133,15 @@ public function isClient($identifier); */ public function getSession(); + /** + * Method to get the application language object. + * + * @return Language The language object + * + * @since __DEPLOY_VERSION__ + */ + public function getLanguage(); + /** * Flag if the application instance is a CLI or web based application. * diff --git a/libraries/src/CMS/Application/CliApplication.php b/libraries/src/CMS/Application/CliApplication.php index fb7d477b9e9df..c1136b66e0728 100644 --- a/libraries/src/CMS/Application/CliApplication.php +++ b/libraries/src/CMS/Application/CliApplication.php @@ -14,6 +14,7 @@ use Joomla\Application\Cli\CliInput; use Joomla\Application\Cli\CliOutput; use Joomla\Application\Cli\Output\Stdout; +use Joomla\CMS\Factory; use Joomla\DI\Container; use Joomla\DI\ContainerAwareTrait; use Joomla\Event\DispatcherAwareInterface; @@ -217,6 +218,18 @@ public function getSession() return $this->container->get(SessionInterface::class); } + /** + * Method to get the application language object. + * + * @return Language The language object + * + * @since __DEPLOY_VERSION__ + */ + public function getLanguage() + { + return Factory::getLanguage(); + } + /** * Flag if the application instance is a CLI or web based application. * From 5d373d31321fd73d10e5a95cc81bca6a2bcc6d87 Mon Sep 17 00:00:00 2001 From: Allon Moritz Date: Thu, 29 Jun 2017 17:10:31 +0200 Subject: [PATCH 02/36] Deprecate getInstance function --- libraries/src/CMS/Application/CMSApplication.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/libraries/src/CMS/Application/CMSApplication.php b/libraries/src/CMS/Application/CMSApplication.php index 04e15229c1a58..243dae3701681 100644 --- a/libraries/src/CMS/Application/CMSApplication.php +++ b/libraries/src/CMS/Application/CMSApplication.php @@ -471,8 +471,9 @@ public function getClientId() * * @return CmsApplication * - * @since 3.2 - * @throws \RuntimeException + * @since 3.2 + * @throws \RuntimeException + * @deprecated 5.0 Use the application from the container */ public static function getInstance($name = null, $prefix = '\JApplication', Container $container = null) { From 4ace48be140fb222b16e3b5019bc388bce172335 Mon Sep 17 00:00:00 2001 From: Allon Moritz Date: Thu, 29 Jun 2017 17:11:00 +0200 Subject: [PATCH 03/36] Factory returns global application object --- libraries/src/CMS/Factory.php | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/libraries/src/CMS/Factory.php b/libraries/src/CMS/Factory.php index fff773625c9de..0d8af46eac627 100644 --- a/libraries/src/CMS/Factory.php +++ b/libraries/src/CMS/Factory.php @@ -133,17 +133,7 @@ public static function getApplication($id = null, array $config = array(), $pref { if (!self::$application) { - if (!$id) - { - throw new \Exception('Application Instantiation Error', 500); - } - - $container = $container ?: self::getContainer(); - - self::$application = CMSApplication::getInstance($id, $prefix, $container); - - // Attach a delegated JLog object to the application - self::$application->setLogger(Log::createDelegatedLogger()); + throw new \Exception('Application Instantiation Error', 500); } return self::$application; From 59dc9a506f174bad18a30e58208a7ac18225d7a2 Mon Sep 17 00:00:00 2001 From: Allon Moritz Date: Thu, 29 Jun 2017 17:14:50 +0200 Subject: [PATCH 04/36] Load the application trough the container --- administrator/includes/app.php | 7 ++++-- includes/app.php | 7 ++++-- libraries/container.php | 22 +++++++++++++++++++ .../src/CMS/Service/Provider/Application.php | 16 ++++++++------ 4 files changed, 41 insertions(+), 11 deletions(-) create mode 100644 libraries/container.php diff --git a/administrator/includes/app.php b/administrator/includes/app.php index 723b6f787a2e5..034383b49ff25 100644 --- a/administrator/includes/app.php +++ b/administrator/includes/app.php @@ -25,11 +25,14 @@ require_once JPATH_BASE . '/includes/framework.php'; +/** @var \Joomla\DI\Container $container */ +$container = require_once JPATH_LIBRARIES . '/container.php'; + // Set profiler start time and memory usage and mark afterLoad in the profiler. JDEBUG ? JProfiler::getInstance('Application')->setStart($startTime, $startMem)->mark('afterLoad') : null; -// Instantiate the application. -$app = JFactory::getApplication('administrator'); +// Get the application from the container +$app = $container->get('AdministratorApplication'); // Execute the application. $app->execute(); diff --git a/includes/app.php b/includes/app.php index 103986585931b..a5ea23032fe9d 100644 --- a/includes/app.php +++ b/includes/app.php @@ -25,11 +25,14 @@ require_once JPATH_BASE . '/includes/framework.php'; +/** @var \Joomla\DI\Container $container */ +$container = require_once JPATH_LIBRARIES . '/container.php'; + // Set profiler start time and memory usage and mark afterLoad in the profiler. JDEBUG ? JProfiler::getInstance('Application')->setStart($startTime, $startMem)->mark('afterLoad') : null; -// Instantiate the application. -$app = JFactory::getApplication('site'); +// Get the application from the container +$app = $container->get('SiteApplication'); // Execute the application. $app->execute(); diff --git a/libraries/container.php b/libraries/container.php new file mode 100644 index 0000000000000..7ff7889ec73d2 --- /dev/null +++ b/libraries/container.php @@ -0,0 +1,22 @@ +registerServiceProvider(new \Joomla\CMS\Service\Provider\Application) + ->registerServiceProvider(new \Joomla\CMS\Service\Provider\Database) + ->registerServiceProvider(new \Joomla\CMS\Service\Provider\Dispatcher) + ->registerServiceProvider(new \Joomla\CMS\Service\Provider\Form) + ->registerServiceProvider(new \Joomla\CMS\Service\Provider\Document) + ->registerServiceProvider(new \Joomla\CMS\Service\Provider\Menu) + ->registerServiceProvider(new \Joomla\CMS\Service\Provider\Session) + ->registerServiceProvider(new \Joomla\CMS\Service\Provider\Toolbar); + +return $container; \ No newline at end of file diff --git a/libraries/src/CMS/Service/Provider/Application.php b/libraries/src/CMS/Service/Provider/Application.php index d5d48a83c42ee..f0d29665882d1 100644 --- a/libraries/src/CMS/Service/Provider/Application.php +++ b/libraries/src/CMS/Service/Provider/Application.php @@ -11,9 +11,9 @@ defined('JPATH_PLATFORM') or die; -use JFactory; use Joomla\CMS\Application\AdministratorApplication; use Joomla\CMS\Application\SiteApplication; +use Joomla\CMS\Factory; use Joomla\CMS\Log\Log; use Joomla\DI\Container; use Joomla\DI\ServiceProviderInterface; @@ -37,20 +37,21 @@ class Application implements ServiceProviderInterface public function register(Container $container) { $container->share( - 'JApplicationAdministrator', + 'AdministratorApplication', function (Container $container) { $app = new AdministratorApplication(null, null, null, $container); // The session service provider needs JFactory::$application, set it if still null - if (JFactory::$application === null) + if (Factory::$application === null) { - JFactory::$application = $app; + Factory::$application = $app; } $app->setDispatcher($container->get('Joomla\Event\DispatcherInterface')); $app->setLogger(Log::createDelegatedLogger()); $app->setSession($container->get('Joomla\Session\SessionInterface')); + $app->loadIdentity(Factory::getUser()); return $app; }, @@ -58,20 +59,21 @@ function (Container $container) ); $container->share( - 'JApplicationSite', + 'SiteApplication', function (Container $container) { $app = new SiteApplication(null, null, null, $container); // The session service provider needs JFactory::$application, set it if still null - if (JFactory::$application === null) + if (Factory::$application === null) { - JFactory::$application = $app; + Factory::$application = $app; } $app->setDispatcher($container->get('Joomla\Event\DispatcherInterface')); $app->setLogger(Log::createDelegatedLogger()); $app->setSession($container->get('Joomla\Session\SessionInterface')); + $app->loadIdentity(Factory::getUser()); return $app; }, From aa44db1b54ec683cc02618816fcd283eaeb1c202 Mon Sep 17 00:00:00 2001 From: Allon Moritz Date: Thu, 29 Jun 2017 17:15:28 +0200 Subject: [PATCH 05/36] SiteRouter should load the app trough the container --- libraries/src/CMS/Router/SiteRouter.php | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/libraries/src/CMS/Router/SiteRouter.php b/libraries/src/CMS/Router/SiteRouter.php index 0d6988a2da962..4b7e77fae88c4 100644 --- a/libraries/src/CMS/Router/SiteRouter.php +++ b/libraries/src/CMS/Router/SiteRouter.php @@ -10,9 +10,10 @@ defined('JPATH_PLATFORM') or die; -use Joomla\CMS\Application\CMSApplication; +use Joomla\CMS\Application\SiteApplication; use Joomla\CMS\Component\Router\RouterInterface; use Joomla\CMS\Component\Router\RouterLegacy; +use Joomla\CMS\Factory; use Joomla\CMS\Menu\AbstractMenu; use Joomla\Cms\Uri\Uri as JUri; use Joomla\String\StringHelper; @@ -33,9 +34,9 @@ class SiteRouter extends Router protected $componentRouters = array(); /** - * Current Application-Object + * The SiteApplication object * - * @var CMSApplication + * @var SiteApplication * @since 3.4 */ protected $app; @@ -51,14 +52,14 @@ class SiteRouter extends Router /** * Class constructor * - * @param CMSApplication $app JApplicationCms Object - * @param AbstractMenu $menu JMenu object + * @param SiteApplication $app SiteApplication Object + * @param AbstractMenu $menu JMenu object * * @since 3.4 */ - public function __construct(CMSApplication $app = null, AbstractMenu $menu = null) + public function __construct(SiteApplication $app = null, AbstractMenu $menu = null) { - $this->app = $app ?: CMSApplication::getInstance('site'); + $this->app = $app ?: Factory::getApplication()->getContainer()->get('SiteApplication'); $this->menu = $menu ?: $this->app->getMenu(); // Add core rules From 7f03466802c061701b282488800331b373c5009a Mon Sep 17 00:00:00 2001 From: Allon Moritz Date: Thu, 29 Jun 2017 17:35:09 +0200 Subject: [PATCH 06/36] Load the database when required and not on construct --- libraries/src/CMS/Filter/InputFilter.php | 81 ++++++++++++++---------- 1 file changed, 48 insertions(+), 33 deletions(-) diff --git a/libraries/src/CMS/Filter/InputFilter.php b/libraries/src/CMS/Filter/InputFilter.php index a9d10c727b791..26f0030c74055 100644 --- a/libraries/src/CMS/Filter/InputFilter.php +++ b/libraries/src/CMS/Filter/InputFilter.php @@ -29,7 +29,7 @@ class InputFilter extends BaseInputFilter * @var integer * @since 3.5 */ - public $stripUSC = 0; + private $stripUSC = 0; /** * Constructor for inputFilter class. Only first parameter is required. @@ -49,37 +49,6 @@ public function __construct($tagsArray = array(), $attrArray = array(), $tagsMet // Assign member variables $this->stripUSC = $stripUSC; - - /** - * If Unicode Supplementary Characters stripping is not set we have to check with the database driver. If the - * driver does not support USCs (i.e. there is no utf8mb4 support) we will enable USC stripping. - */ - if ($this->stripUSC === -1) - { - try - { - // Get the database driver - $db = \JFactory::getDbo(); - - if ($db instanceof UTF8MB4SupportInterface) - { - // This trick is required to let the driver determine the utf-8 multibyte support - $db->connect(); - - // And now we can decide if we should strip USCs - $this->stripUSC = $db->hasUTF8mb4Support() ? 0 : 1; - } - else - { - $this->stripUSC = 1; - } - } - catch (\RuntimeException $e) - { - // Could not connect to the database. Strip USC to be on the safe side. - $this->stripUSC = 1; - } - } } /** @@ -139,7 +108,7 @@ public static function &getInstance($tagsArray = array(), $attrArray = array(), public function clean($source, $type = 'string') { // Strip Unicode Supplementary Characters when requested to do so - if ($this->stripUSC) + if ($this->isStripUSC()) { // Alternatively: preg_replace('/[\x{10000}-\x{10FFFF}]/u', "\xE2\xAF\x91", $source) but it'd be slower. $source = $this->stripUSC($source); @@ -528,4 +497,50 @@ protected function stripUSC($source) return preg_replace('/[\xF0-\xF7].../s', "\xE2\xAF\x91", $source); } + + /** + * Returns if USC should be stripped. + * + * @return boolean If USC should be stripped + * + * @since __DEPLOY_VERSION__ + */ + private function isStripUSC() + { + // Flag is set + if ($this->stripUSC != -1) + { + return $this->stripUSC; + } + + /** + * If Unicode Supplementary Characters stripping is not set we have to check with the database driver. If the + * driver does not support USCs (i.e. there is no utf8mb4 support) we will enable USC stripping. + */ + try + { + // Get the database driver + $db = \JFactory::getDbo(); + + if ($db instanceof UTF8MB4SupportInterface) + { + // This trick is required to let the driver determine the utf-8 multibyte support + $db->connect(); + + // And now we can decide if we should strip USCs + $this->stripUSC = $db->hasUTF8mb4Support() ? 0 : 1; + } + else + { + $this->stripUSC = 1; + } + } + catch (\RuntimeException $e) + { + // Could not connect to the database. Strip USC to be on the safe side. + $this->stripUSC = 1; + } + + return $this->stripUSC === 1; + } } From 26032388b339efe270d09a202344dcd70d995831 Mon Sep 17 00:00:00 2001 From: Allon Moritz Date: Thu, 29 Jun 2017 17:40:50 +0200 Subject: [PATCH 07/36] Get the container from the global application --- libraries/src/CMS/Application/CMSApplication.php | 7 +------ libraries/src/CMS/Application/CliApplication.php | 7 ++++++- libraries/src/CMS/Authentication/Authentication.php | 2 +- libraries/src/CMS/Cache/CacheController.php | 4 ++-- libraries/src/CMS/Categories/Categories.php | 4 ++-- libraries/src/CMS/Controller/Controller.php | 4 ++-- libraries/src/CMS/Editor/Editor.php | 2 +- libraries/src/CMS/Error/AbstractRenderer.php | 4 ++-- libraries/src/CMS/Factory.php | 4 ++-- libraries/src/CMS/Form/Form.php | 2 +- libraries/src/CMS/Installer/Installer.php | 4 ++-- libraries/src/CMS/Menu/AbstractMenu.php | 2 +- libraries/src/CMS/Model/Model.php | 4 ++-- libraries/src/CMS/Pathway/Pathway.php | 4 ++-- libraries/src/CMS/Router/Router.php | 4 ++-- libraries/src/CMS/Table/Table.php | 4 ++-- libraries/src/CMS/Toolbar/Toolbar.php | 4 ++-- 17 files changed, 33 insertions(+), 33 deletions(-) diff --git a/libraries/src/CMS/Application/CMSApplication.php b/libraries/src/CMS/Application/CMSApplication.php index 243dae3701681..8d5604d417222 100644 --- a/libraries/src/CMS/Application/CMSApplication.php +++ b/libraries/src/CMS/Application/CMSApplication.php @@ -487,12 +487,7 @@ public static function getInstance($name = null, $prefix = '\JApplication', Cont throw new \RuntimeException(\JText::sprintf('JLIB_APPLICATION_ERROR_APPLICATION_LOAD', $name), 500); } - if (!$container) - { - $container = \JFactory::getContainer(); - } - - if ($container->exists($classname)) + if ($container && $container->exists($classname)) { static::$instances[$name] = $container->get($classname); } diff --git a/libraries/src/CMS/Application/CliApplication.php b/libraries/src/CMS/Application/CliApplication.php index c1136b66e0728..0a111ddd598a5 100644 --- a/libraries/src/CMS/Application/CliApplication.php +++ b/libraries/src/CMS/Application/CliApplication.php @@ -68,7 +68,7 @@ public function __construct(\JInputCli $input = null, Registry $config = null, C $this->close(); } - $container = $container ?: \JFactory::getContainer(); + $container = $container ?: new Container; $this->setContainer($container); $this->input = $input ?: new \JInputCli; @@ -215,6 +215,11 @@ public function isClient($identifier) */ public function getSession() { + if (!$this->container->has(SessionInterface::class)) + { + return null; + } + return $this->container->get(SessionInterface::class); } diff --git a/libraries/src/CMS/Authentication/Authentication.php b/libraries/src/CMS/Authentication/Authentication.php index 791861440c0cd..7dd3cbac962ce 100644 --- a/libraries/src/CMS/Authentication/Authentication.php +++ b/libraries/src/CMS/Authentication/Authentication.php @@ -83,7 +83,7 @@ public function __construct(DispatcherInterface $dispatcher = null) // Set the dispatcher if (!is_object($dispatcher)) { - $dispatcher = \JFactory::getContainer()->get('dispatcher'); + $dispatcher = \JFactory::getApplication()->getContainer()->get('dispatcher'); } $this->setDispatcher($dispatcher); diff --git a/libraries/src/CMS/Cache/CacheController.php b/libraries/src/CMS/Cache/CacheController.php index deb5f93e35aa3..417ac4f486740 100644 --- a/libraries/src/CMS/Cache/CacheController.php +++ b/libraries/src/CMS/Cache/CacheController.php @@ -115,9 +115,9 @@ public static function getInstance($type = 'output', $options = array()) } // Check for a possible service from the container otherwise manually instantiate the class - if (\JFactory::getContainer()->exists($class)) + if (\JFactory::getApplication()->getContainer()->exists($class)) { - return \JFactory::getContainer()->get($class); + return \JFactory::getApplication()->getContainer()->get($class); } return new $class($options); diff --git a/libraries/src/CMS/Categories/Categories.php b/libraries/src/CMS/Categories/Categories.php index 15c2c89193722..5f58773fb013e 100644 --- a/libraries/src/CMS/Categories/Categories.php +++ b/libraries/src/CMS/Categories/Categories.php @@ -153,9 +153,9 @@ public static function getInstance($extension, $options = array()) } // Check for a possible service from the container otherwise manually instantiate the class - if (\JFactory::getContainer()->exists($classname)) + if (\JFactory::getApplication()->getContainer()->exists($classname)) { - self::$instances[$hash] = \JFactory::getContainer()->get($classname); + self::$instances[$hash] = \JFactory::getApplication()->getContainer()->get($classname); } else { diff --git a/libraries/src/CMS/Controller/Controller.php b/libraries/src/CMS/Controller/Controller.php index a752e76263eb0..8483e7d2f3622 100644 --- a/libraries/src/CMS/Controller/Controller.php +++ b/libraries/src/CMS/Controller/Controller.php @@ -324,9 +324,9 @@ public static function getInstance($prefix, $config = array()) } // Check for a possible service from the container otherwise manually instantiate the class - if (\JFactory::getContainer()->exists($class)) + if (\JFactory::getApplication()->getContainer()->exists($class)) { - self::$instance = \JFactory::getContainer()->get($class); + self::$instance = \JFactory::getApplication()->getContainer()->get($class); } else { diff --git a/libraries/src/CMS/Editor/Editor.php b/libraries/src/CMS/Editor/Editor.php index bbb912136179d..e2023aa86a14d 100644 --- a/libraries/src/CMS/Editor/Editor.php +++ b/libraries/src/CMS/Editor/Editor.php @@ -79,7 +79,7 @@ public function __construct($editor = 'none', DispatcherInterface $dispatcher = // Set the dispatcher if (!is_object($dispatcher)) { - $dispatcher = \JFactory::getContainer()->get('dispatcher'); + $dispatcher = \JFactory::getApplication()->getContainer()->get('dispatcher'); } $this->setDispatcher($dispatcher); diff --git a/libraries/src/CMS/Error/AbstractRenderer.php b/libraries/src/CMS/Error/AbstractRenderer.php index a08c5250b562e..48d81bf4713b1 100644 --- a/libraries/src/CMS/Error/AbstractRenderer.php +++ b/libraries/src/CMS/Error/AbstractRenderer.php @@ -76,9 +76,9 @@ public static function getRenderer($type) $class = __NAMESPACE__ . '\\Renderer\\' . ucfirst(strtolower($type)) . 'Renderer'; // First check if an object may exist in the container and prefer that over everything else - if (\JFactory::getContainer()->exists($class)) + if (\JFactory::getApplication()->getContainer()->exists($class)) { - return \JFactory::getContainer()->get($class); + return \JFactory::getApplication()->getContainer()->get($class); } // Next check if a local class exists and use that diff --git a/libraries/src/CMS/Factory.php b/libraries/src/CMS/Factory.php index 0d8af46eac627..dd96309156783 100644 --- a/libraries/src/CMS/Factory.php +++ b/libraries/src/CMS/Factory.php @@ -352,9 +352,9 @@ public static function getDbo() { if (!self::$database) { - if (self::getContainer()->exists('JDatabaseDriver')) + if (self::getApplication()->getContainer()->exists('JDatabaseDriver')) { - self::$database = self::getContainer()->get('JDatabaseDriver'); + self::$database = self::getApplication()->getContainer()->get('JDatabaseDriver'); } else { diff --git a/libraries/src/CMS/Form/Form.php b/libraries/src/CMS/Form/Form.php index 9cc5e45b203b7..93797ae7bd7e0 100644 --- a/libraries/src/CMS/Form/Form.php +++ b/libraries/src/CMS/Form/Form.php @@ -2210,7 +2210,7 @@ public static function getInstance($name, $data = null, $options = array(), $rep } // Instantiate the form. - $forms[$name] = \JFactory::getContainer()->get(FormFactoryInterface::class)->createForm($name, $options); + $forms[$name] = \JFactory::getApplication()->getContainer()->get(FormFactoryInterface::class)->createForm($name, $options); // Load the data. if (substr($data, 0, 1) == '<') diff --git a/libraries/src/CMS/Installer/Installer.php b/libraries/src/CMS/Installer/Installer.php index 277dd3fe50517..4b7b3c43c746a 100644 --- a/libraries/src/CMS/Installer/Installer.php +++ b/libraries/src/CMS/Installer/Installer.php @@ -2386,9 +2386,9 @@ public function loadAdapter($adapter, $options = array()) $options['type'] = $adapter; // Check for a possible service from the container otherwise manually instantiate the class - if (\JFactory::getContainer()->exists($class)) + if (\JFactory::getApplication()->getContainer()->exists($class)) { - return \JFactory::getContainer()->get($class); + return \JFactory::getApplication()->getContainer()->get($class); } return new $class($this, $this->getDbo(), $options); diff --git a/libraries/src/CMS/Menu/AbstractMenu.php b/libraries/src/CMS/Menu/AbstractMenu.php index 6be229dd3be96..fa2d2afd510c5 100644 --- a/libraries/src/CMS/Menu/AbstractMenu.php +++ b/libraries/src/CMS/Menu/AbstractMenu.php @@ -102,7 +102,7 @@ public static function getInstance($client, $options = array()) if (empty(self::$instances[$client])) { - self::$instances[$client] = \JFactory::getContainer()->get(MenuFactoryInterface::class)->createMenu($client, $options); + self::$instances[$client] = \JFactory::getApplication()->getContainer()->get(MenuFactoryInterface::class)->createMenu($client, $options); } return self::$instances[$client]; diff --git a/libraries/src/CMS/Model/Model.php b/libraries/src/CMS/Model/Model.php index 1806b12e0c12a..cdf8c9b4767e0 100644 --- a/libraries/src/CMS/Model/Model.php +++ b/libraries/src/CMS/Model/Model.php @@ -214,9 +214,9 @@ public static function getInstance($type, $prefix = '', $config = array()) } // Check for a possible service from the container otherwise manually instantiate the class - if (\JFactory::getContainer()->exists($modelClass)) + if (\JFactory::getApplication()->getContainer()->exists($modelClass)) { - return \JFactory::getContainer()->get($modelClass); + return \JFactory::getApplication()->getContainer()->get($modelClass); } return new $modelClass($config); diff --git a/libraries/src/CMS/Pathway/Pathway.php b/libraries/src/CMS/Pathway/Pathway.php index a49d87fb431a4..23055dd6c4255 100644 --- a/libraries/src/CMS/Pathway/Pathway.php +++ b/libraries/src/CMS/Pathway/Pathway.php @@ -67,9 +67,9 @@ public static function getInstance($client, $options = array()) } // Check for a possible service from the container otherwise manually instantiate the class - if (\JFactory::getContainer()->has($classname)) + if (\JFactory::getApplication()->getContainer()->has($classname)) { - self::$instances[$client] = \JFactory::getContainer()->get($classname); + self::$instances[$client] = \JFactory::getApplication()->getContainer()->get($classname); } else { diff --git a/libraries/src/CMS/Router/Router.php b/libraries/src/CMS/Router/Router.php index fb64de904af7e..55823a856eba7 100644 --- a/libraries/src/CMS/Router/Router.php +++ b/libraries/src/CMS/Router/Router.php @@ -103,9 +103,9 @@ public static function getInstance($client, $options = array()) } // Check for a possible service from the container otherwise manually instantiate the class - if (\JFactory::getContainer()->exists($classname)) + if (\JFactory::getApplication()->getContainer()->exists($classname)) { - self::$instances[$client] = \JFactory::getContainer()->get($classname); + self::$instances[$client] = \JFactory::getApplication()->getContainer()->get($classname); } else { diff --git a/libraries/src/CMS/Table/Table.php b/libraries/src/CMS/Table/Table.php index c26922ffcf381..f3bd2d4405736 100644 --- a/libraries/src/CMS/Table/Table.php +++ b/libraries/src/CMS/Table/Table.php @@ -300,9 +300,9 @@ public static function getInstance($type, $prefix = 'JTable', $config = array()) $db = isset($config['dbo']) ? $config['dbo'] : \JFactory::getDbo(); // Check for a possible service from the container otherwise manually instantiate the class - if (\JFactory::getContainer()->exists($tableClass)) + if (\JFactory::getApplication()->getContainer()->exists($tableClass)) { - return \JFactory::getContainer()->get($tableClass); + return \JFactory::getApplication()->getContainer()->get($tableClass); } // Instantiate a new table class and return it. diff --git a/libraries/src/CMS/Toolbar/Toolbar.php b/libraries/src/CMS/Toolbar/Toolbar.php index 968b21aaa8359..d4b7697f495c5 100644 --- a/libraries/src/CMS/Toolbar/Toolbar.php +++ b/libraries/src/CMS/Toolbar/Toolbar.php @@ -89,7 +89,7 @@ public function __construct($name = 'toolbar', ToolbarFactoryInterface $factory ); $factory = new ContainerAwareToolbarFactory; - $factory->setContainer(\JFactory::getContainer()); + $factory->setContainer(\JFactory::getApplication()->getContainer()); } $this->setFactory($factory); @@ -111,7 +111,7 @@ public static function getInstance($name = 'toolbar') { if (empty(self::$instances[$name])) { - self::$instances[$name] = \JFactory::getContainer()->get(ToolbarFactoryInterface::class)->createToolbar($name); + self::$instances[$name] = \JFactory::getApplication()->getContainer()->get(ToolbarFactoryInterface::class)->createToolbar($name); } return self::$instances[$name]; From b375ef270aee74542849c5113f0d054d1b0a6db9 Mon Sep 17 00:00:00 2001 From: Allon Moritz Date: Thu, 29 Jun 2017 17:41:54 +0200 Subject: [PATCH 08/36] Remove container code from the Factory --- libraries/src/CMS/Factory.php | 49 ----------------------------------- 1 file changed, 49 deletions(-) diff --git a/libraries/src/CMS/Factory.php b/libraries/src/CMS/Factory.php index dd96309156783..739178106272d 100644 --- a/libraries/src/CMS/Factory.php +++ b/libraries/src/CMS/Factory.php @@ -56,14 +56,6 @@ abstract class Factory */ public static $config = null; - /** - * Global container object - * - * @var Container - * @since 4.0 - */ - public static $container = null; - /** * Container for Date instances * @@ -184,25 +176,6 @@ public static function getConfig($file = null, $type = 'PHP', $namespace = '') return self::$config; } - /** - * Get a container object - * - * Returns the global service container object, only creating it if it doesn't already exist. - * - * @return Container - * - * @since 4.0 - */ - public static function getContainer() - { - if (!self::$container) - { - self::$container = self::createContainer(); - } - - return self::$container; - } - /** * Get a session object. * @@ -491,28 +464,6 @@ protected static function createConfig($file, $type = 'PHP', $namespace = '') return $registry; } - /** - * Create a container object - * - * @return Container - * - * @since 4.0 - */ - protected static function createContainer() - { - $container = (new Container) - ->registerServiceProvider(new \Joomla\CMS\Service\Provider\Application) - ->registerServiceProvider(new \Joomla\CMS\Service\Provider\Database) - ->registerServiceProvider(new \Joomla\CMS\Service\Provider\Dispatcher) - ->registerServiceProvider(new \Joomla\CMS\Service\Provider\Form) - ->registerServiceProvider(new \Joomla\CMS\Service\Provider\Document) - ->registerServiceProvider(new \Joomla\CMS\Service\Provider\Menu) - ->registerServiceProvider(new \Joomla\CMS\Service\Provider\Session) - ->registerServiceProvider(new \Joomla\CMS\Service\Provider\Toolbar); - - return $container; - } - /** * Create a session object * From 96c5cda7e23b3065c7e48f8109e0906d9b4d1290 Mon Sep 17 00:00:00 2001 From: Allon Moritz Date: Thu, 29 Jun 2017 17:44:46 +0200 Subject: [PATCH 09/36] Change the getContainer from app --- libraries/joomla/archive/archive.php | 4 ++-- libraries/joomla/base/adapter.php | 4 ++-- libraries/joomla/document/document.php | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/libraries/joomla/archive/archive.php b/libraries/joomla/archive/archive.php index afe6d52499952..601cbb58a7cf1 100644 --- a/libraries/joomla/archive/archive.php +++ b/libraries/joomla/archive/archive.php @@ -188,9 +188,9 @@ public static function getAdapter($type) } // Check for a possible service from the container otherwise manually instantiate the class - if (JFactory::getContainer()->exists($class)) + if (\Joomla\CMS\Factory::getApplication()->getContainer()->exists($class)) { - self::$adapters[$type] = JFactory::getContainer()->get($class); + self::$adapters[$type] = \Joomla\CMS\Factory::getApplication()->getContainer()->get($class); } else { diff --git a/libraries/joomla/base/adapter.php b/libraries/joomla/base/adapter.php index f4164dc5fe355..84a0530fe346c 100644 --- a/libraries/joomla/base/adapter.php +++ b/libraries/joomla/base/adapter.php @@ -168,9 +168,9 @@ public function setAdapter($name, &$adapter = null, $options = array()) } // Check for a possible service from the container otherwise manually instantiate the class - if (JFactory::getContainer()->exists($class)) + if (\Joomla\CMS\Factory::getApplication()->getContainer()->exists($class)) { - $this->_adapters[$name] = JFactory::getContainer()->get($class); + $this->_adapters[$name] = \Joomla\CMS\Factory::getApplication()->getContainer()->get($class); } else { diff --git a/libraries/joomla/document/document.php b/libraries/joomla/document/document.php index f238462c5199f..1c7ad05efd611 100644 --- a/libraries/joomla/document/document.php +++ b/libraries/joomla/document/document.php @@ -331,7 +331,7 @@ public static function getInstance($type = 'html', $attributes = array()) if (empty(self::$instances[$signature])) { - self::$instances[$signature] = JFactory::getContainer()->get(FactoryInterface::class)->createDocument($type, $attributes); + self::$instances[$signature] = \Joomla\CMS\Factory::getApplication()->getContainer()->get(FactoryInterface::class)->createDocument($type, $attributes); } return self::$instances[$signature]; From ce300b47aff1699b8c703a22668b9214b03d8d8b Mon Sep 17 00:00:00 2001 From: Allon Moritz Date: Thu, 29 Jun 2017 17:49:33 +0200 Subject: [PATCH 10/36] Change cli files --- cli/deletefiles.php | 15 ++++++++++----- cli/finder_indexer.php | 15 ++++++++++----- cli/garbagecron.php | 15 ++++++++++----- cli/update_cron.php | 15 ++++++++++----- 4 files changed, 40 insertions(+), 20 deletions(-) diff --git a/cli/deletefiles.php b/cli/deletefiles.php index 3a1efcdaeefa0..ab14c52654585 100644 --- a/cli/deletefiles.php +++ b/cli/deletefiles.php @@ -64,12 +64,15 @@ protected function doExecute() } } +/** @var \Joomla\DI\Container $container */ +$container = require_once JPATH_LIBRARIES . '/container.php'; + // Set up the container -JFactory::getContainer()->share( +$container->share( 'DeletefilesCli', function (\Joomla\DI\Container $container) { - return new DeletefilesCli( + $app = new DeletefilesCli( null, null, null, @@ -77,9 +80,11 @@ function (\Joomla\DI\Container $container) $container->get(\Joomla\Event\DispatcherInterface::class), $container ); + + JFactory::$application = $app; + + return $app; }, true ); -$app = JFactory::getContainer()->get('DeletefilesCli'); -JFactory::$application = $app; -$app->execute(); +$container->get('DeletefilesCli')->execute(); diff --git a/cli/finder_indexer.php b/cli/finder_indexer.php index 010f7ffcec080..ef9f364f5b17d 100644 --- a/cli/finder_indexer.php +++ b/cli/finder_indexer.php @@ -360,12 +360,15 @@ private function getFilters() } } +/** @var \Joomla\DI\Container $container */ +$container = require_once JPATH_LIBRARIES . '/container.php'; + // Set up the container -JFactory::getContainer()->share( +$container->share( 'FinderCli', function (\Joomla\DI\Container $container) { - return new FinderCli( + $app = new FinderCli( null, null, null, @@ -373,9 +376,11 @@ function (\Joomla\DI\Container $container) $container->get(\Joomla\Event\DispatcherInterface::class), $container ); + + \Joomla\CMS\Factory::$application = $app; + + return $app; }, true ); -$app = JFactory::getContainer()->get('FinderCli'); -JFactory::$application = $app; -$app->execute(); +$container->get('FinderCli')->execute(); diff --git a/cli/garbagecron.php b/cli/garbagecron.php index 0968051ad101c..1de44c61c2d76 100644 --- a/cli/garbagecron.php +++ b/cli/garbagecron.php @@ -44,12 +44,15 @@ protected function doExecute() } } +/** @var \Joomla\DI\Container $container */ +$container = require_once JPATH_LIBRARIES . '/container.php'; + // Set up the container -JFactory::getContainer()->share( +$container->share( 'GarbageCron', function (\Joomla\DI\Container $container) { - return new GarbageCron( + $app = new GarbageCron( null, null, null, @@ -57,9 +60,11 @@ function (\Joomla\DI\Container $container) $container->get(\Joomla\Event\DispatcherInterface::class), $container ); + + \Joomla\CMS\Factory::$application = $app; + + return $app; }, true ); -$app = JFactory::getContainer()->get('GarbageCron'); -JFactory::$application = $app; -$app->execute(); +$container->get('GarbageCron')->execute(); diff --git a/cli/update_cron.php b/cli/update_cron.php index d642dc459568b..d2f9bbbbe4624 100644 --- a/cli/update_cron.php +++ b/cli/update_cron.php @@ -65,12 +65,15 @@ protected function doExecute() } } +/** @var \Joomla\DI\Container $container */ +$container = require_once JPATH_LIBRARIES . '/container.php'; + // Set up the container -JFactory::getContainer()->share( +$container->share( 'Updatecron', function (\Joomla\DI\Container $container) { - return new Updatecron( + $app = new Updatecron( null, null, null, @@ -78,9 +81,11 @@ function (\Joomla\DI\Container $container) $container->get(\Joomla\Event\DispatcherInterface::class), $container ); + + \Joomla\CMS\Factory::$application = $app; + + return $app; }, true ); -$app = JFactory::getContainer()->get('Updatecron'); -JFactory::$application = $app; -$app->execute(); +$container->get('Updatecron')->execute(); From fdd213a7a152da324fb163e713a6786aef480c04 Mon Sep 17 00:00:00 2001 From: Allon Moritz Date: Thu, 29 Jun 2017 17:54:12 +0200 Subject: [PATCH 11/36] fixing tests --- libraries/src/CMS/Factory.php | 12 +++------- tests/unit/core/case/case.php | 2 -- tests/unit/core/case/database.php | 2 -- tests/unit/core/case/trait.php | 22 +++++++++++++++++-- tests/unit/core/mock/application/base.php | 1 + .../JApplicationAdministratorTest.php | 1 + .../cms/application/JApplicationCmsTest.php | 1 + .../cms/application/JApplicationSiteTest.php | 1 + .../libraries/cms/editor/JEditorTest.php | 4 +++- .../libraries/cms/model/JModelAdminTest.php | 2 +- .../libraries/cms/model/JModelFormTest.php | 2 +- .../libraries/cms/model/JModelItemTest.php | 2 +- .../cms/toolbar/JToolbarButtonTest.php | 6 ++--- .../libraries/cms/toolbar/JToolbarTest.php | 4 ++-- .../button/JToolbarButtonConfirmTest.php | 6 ++--- .../button/JToolbarButtonCustomTest.php | 4 +++- .../toolbar/button/JToolbarButtonHelpTest.php | 6 ++--- .../toolbar/button/JToolbarButtonLinkTest.php | 8 +++---- .../button/JToolbarButtonPopupTest.php | 4 +++- .../button/JToolbarButtonSliderTest.php | 4 +++- .../button/JToolbarButtonStandardTest.php | 4 +++- .../suites/libraries/joomla/JFactoryTest.php | 2 ++ .../joomla/archive/JArchiveTestCase.php | 2 ++ .../joomla/document/JDocumentTest.php | 4 +++- .../libraries/joomla/user/JUserHelperTest.php | 7 ------ 25 files changed, 67 insertions(+), 46 deletions(-) diff --git a/libraries/src/CMS/Factory.php b/libraries/src/CMS/Factory.php index 739178106272d..ffaf46ede7571 100644 --- a/libraries/src/CMS/Factory.php +++ b/libraries/src/CMS/Factory.php @@ -108,23 +108,17 @@ abstract class Factory /** * Get an application object. * - * Returns the global {@link CMSApplication} object, only creating it if it doesn't already exist. - * - * @param mixed $id A client identifier or name. - * @param array $config An optional associative array of configuration settings. - * @param string $prefix Application prefix - * @param Container $container An optional dependency injection container to inject into the application. + * Returns the global {@link CMSApplication} object. * * @return CMSApplication object * - * @see JApplication * @since 11.1 * @throws \Exception */ - public static function getApplication($id = null, array $config = array(), $prefix = 'JApplication', Container $container = null) + public static function getApplication() { if (!self::$application) - { + {echo new \Exception();die; throw new \Exception('Application Instantiation Error', 500); } diff --git a/tests/unit/core/case/case.php b/tests/unit/core/case/case.php index 8269b5cad055f..53fa33a73de29 100644 --- a/tests/unit/core/case/case.php +++ b/tests/unit/core/case/case.php @@ -27,7 +27,6 @@ protected function restoreFactoryState() { JFactory::$application = $this->_stashedFactoryState['application']; JFactory::$config = $this->_stashedFactoryState['config']; - JFactory::$container = $this->_stashedFactoryState['container']; JFactory::$dates = $this->_stashedFactoryState['dates']; JFactory::$session = $this->_stashedFactoryState['session']; JFactory::$language = $this->_stashedFactoryState['language']; @@ -47,7 +46,6 @@ protected function saveFactoryState() { $this->_stashedFactoryState['application'] = JFactory::$application; $this->_stashedFactoryState['config'] = JFactory::$config; - $this->_stashedFactoryState['container'] = JFactory::$container; $this->_stashedFactoryState['dates'] = JFactory::$dates; $this->_stashedFactoryState['session'] = JFactory::$session; $this->_stashedFactoryState['language'] = JFactory::$language; diff --git a/tests/unit/core/case/database.php b/tests/unit/core/case/database.php index e3182104751f6..644e3c762f2c2 100644 --- a/tests/unit/core/case/database.php +++ b/tests/unit/core/case/database.php @@ -168,7 +168,6 @@ protected function restoreFactoryState() { JFactory::$application = $this->_stashedFactoryState['application']; JFactory::$config = $this->_stashedFactoryState['config']; - JFactory::$container = $this->_stashedFactoryState['container']; JFactory::$dates = $this->_stashedFactoryState['dates']; JFactory::$session = $this->_stashedFactoryState['session']; JFactory::$language = $this->_stashedFactoryState['language']; @@ -187,7 +186,6 @@ protected function saveFactoryState() { $this->_stashedFactoryState['application'] = JFactory::$application; $this->_stashedFactoryState['config'] = JFactory::$config; - $this->_stashedFactoryState['container'] = JFactory::$container; $this->_stashedFactoryState['dates'] = JFactory::$dates; $this->_stashedFactoryState['session'] = JFactory::$session; $this->_stashedFactoryState['language'] = JFactory::$language; diff --git a/tests/unit/core/case/trait.php b/tests/unit/core/case/trait.php index 7f49f2cd15716..02a1d21fd353f 100644 --- a/tests/unit/core/case/trait.php +++ b/tests/unit/core/case/trait.php @@ -165,7 +165,22 @@ public function getMockCmsApp($options = array(), $constructor = array()) // Attempt to load the real class first. class_exists('JApplicationCms'); - return TestMockApplicationCms::create($this, $options, $constructor); + $app = TestMockApplicationCms::create($this, $options, $constructor); + $app->method('getContainer')->willReturn($this->getContainer()); + + return $app; + } + + /** + * Returns a ready container. + * + * @return \Joomla\DI\Container + * + * @since __DEPLOY_VERSION__ + */ + protected function getContainer() + { + return require JPATH_LIBRARIES . '/container.php'; } /** @@ -302,7 +317,10 @@ public function getMockWeb($options = array()) // Attempt to load the real class first. class_exists('JApplicationWeb'); - return TestMockApplicationWeb::create($this, $options); + $app = TestMockApplicationWeb::create($this, $options); + $app->method('getContainer')->willReturn($this->getContainer()); + + return $app; } /** diff --git a/tests/unit/core/mock/application/base.php b/tests/unit/core/mock/application/base.php index 8383c530b1e6e..3b2218ef3853e 100644 --- a/tests/unit/core/mock/application/base.php +++ b/tests/unit/core/mock/application/base.php @@ -31,6 +31,7 @@ public static function getMethods() 'loadDispatcher', 'loadIdentity', 'getDispatcher', + 'getContainer', ); } diff --git a/tests/unit/suites/libraries/cms/application/JApplicationAdministratorTest.php b/tests/unit/suites/libraries/cms/application/JApplicationAdministratorTest.php index 452fb130b2029..a8bb5cd3bbb64 100644 --- a/tests/unit/suites/libraries/cms/application/JApplicationAdministratorTest.php +++ b/tests/unit/suites/libraries/cms/application/JApplicationAdministratorTest.php @@ -106,6 +106,7 @@ public function setUp() $this->class = new JApplicationAdministrator($this->getMockInput(), $config); $this->class->setSession(JFactory::$session); $this->class->setDispatcher($this->getMockDispatcher()); + $this->class->setContainer($this->getContainer()); TestReflection::setValue('JApplicationCms', 'instances', array('administrator' => $this->class)); JFactory::$application = $this->class; diff --git a/tests/unit/suites/libraries/cms/application/JApplicationCmsTest.php b/tests/unit/suites/libraries/cms/application/JApplicationCmsTest.php index 76f1bcd11af7f..d0bf79218b289 100644 --- a/tests/unit/suites/libraries/cms/application/JApplicationCmsTest.php +++ b/tests/unit/suites/libraries/cms/application/JApplicationCmsTest.php @@ -109,6 +109,7 @@ public function setUp() $this->class = new JApplicationCmsInspector($this->getMockInput(), $config); $this->class->setSession(JFactory::$session); $this->class->setDispatcher($this->getMockDispatcher()); + $this->class->setContainer($this->getContainer()); JFactory::$application = $this->class; } diff --git a/tests/unit/suites/libraries/cms/application/JApplicationSiteTest.php b/tests/unit/suites/libraries/cms/application/JApplicationSiteTest.php index e57c4970a9adb..dced619cc7384 100644 --- a/tests/unit/suites/libraries/cms/application/JApplicationSiteTest.php +++ b/tests/unit/suites/libraries/cms/application/JApplicationSiteTest.php @@ -106,6 +106,7 @@ public function setUp() $this->class = new JApplicationSite($this->getMockInput(), $config); $this->class->setSession(JFactory::$session); $this->class->setDispatcher($this->getMockDispatcher()); + $this->class->setContainer($this->getContainer()); TestReflection::setValue('JApplicationCms', 'instances', array('site' => $this->class)); JFactory::$application = $this->class; diff --git a/tests/unit/suites/libraries/cms/editor/JEditorTest.php b/tests/unit/suites/libraries/cms/editor/JEditorTest.php index 84c085601cd84..836309983dce0 100644 --- a/tests/unit/suites/libraries/cms/editor/JEditorTest.php +++ b/tests/unit/suites/libraries/cms/editor/JEditorTest.php @@ -16,7 +16,7 @@ * @subpackage Editor * @since 3.0 */ -class JEditorTest extends \PHPUnit\Framework\TestCase +class JEditorTest extends TestCase { /** * Object under test @@ -36,6 +36,8 @@ class JEditorTest extends \PHPUnit\Framework\TestCase */ protected function setUp() { + \Joomla\CMS\Factory::$application = $this->getMockCmsApp(); + $this->object = new JEditor; } diff --git a/tests/unit/suites/libraries/cms/model/JModelAdminTest.php b/tests/unit/suites/libraries/cms/model/JModelAdminTest.php index 68dc1c83bb8e1..54e947a2eb253 100644 --- a/tests/unit/suites/libraries/cms/model/JModelAdminTest.php +++ b/tests/unit/suites/libraries/cms/model/JModelAdminTest.php @@ -15,7 +15,7 @@ * * @since 12.3 */ -class JModelAdminTest extends TestCase +class JModelAdminTest extends TestCaseDatabase { /** * @var JModelAdmin diff --git a/tests/unit/suites/libraries/cms/model/JModelFormTest.php b/tests/unit/suites/libraries/cms/model/JModelFormTest.php index 655e6322bb6cc..59244237a43c4 100644 --- a/tests/unit/suites/libraries/cms/model/JModelFormTest.php +++ b/tests/unit/suites/libraries/cms/model/JModelFormTest.php @@ -15,7 +15,7 @@ * * @since 12.3 */ -class JModelFormTest extends TestCase +class JModelFormTest extends TestCaseDatabase { /** * @var JModelForm diff --git a/tests/unit/suites/libraries/cms/model/JModelItemTest.php b/tests/unit/suites/libraries/cms/model/JModelItemTest.php index e75b80fcd18ed..3424ad7ad1d94 100644 --- a/tests/unit/suites/libraries/cms/model/JModelItemTest.php +++ b/tests/unit/suites/libraries/cms/model/JModelItemTest.php @@ -15,7 +15,7 @@ * * @since 3.4 */ -class JModelItemTest extends TestCase +class JModelItemTest extends TestCaseDatabase { /** * @var JModelItem diff --git a/tests/unit/suites/libraries/cms/toolbar/JToolbarButtonTest.php b/tests/unit/suites/libraries/cms/toolbar/JToolbarButtonTest.php index 22153684ad18a..72ea273599f1d 100644 --- a/tests/unit/suites/libraries/cms/toolbar/JToolbarButtonTest.php +++ b/tests/unit/suites/libraries/cms/toolbar/JToolbarButtonTest.php @@ -50,9 +50,6 @@ protected function setUp() { parent::setUp(); - $this->toolbar = JToolbar::getInstance(); - $this->object = $this->toolbar->loadButtonType('standard'); - $this->saveFactoryState(); JFactory::$application = $this->getMockCmsApp(); @@ -61,6 +58,9 @@ protected function setUp() $_SERVER['HTTP_HOST'] = 'example.com'; $_SERVER['SCRIPT_NAME'] = ''; + + $this->toolbar = JToolbar::getInstance(); + $this->object = $this->toolbar->loadButtonType('standard'); } /** diff --git a/tests/unit/suites/libraries/cms/toolbar/JToolbarTest.php b/tests/unit/suites/libraries/cms/toolbar/JToolbarTest.php index adee5dc8a5cd4..01c3a23679792 100644 --- a/tests/unit/suites/libraries/cms/toolbar/JToolbarTest.php +++ b/tests/unit/suites/libraries/cms/toolbar/JToolbarTest.php @@ -32,13 +32,13 @@ class JToolbarTest extends TestCase */ protected function setUp() { - $this->object = new JToolbar('toolbar'); - parent::setUp(); $this->saveFactoryState(); JFactory::$application = $this->getMockCmsApp(); + + $this->object = new JToolbar('toolbar'); } /** diff --git a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonConfirmTest.php b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonConfirmTest.php index 47fef6b5aef23..81b950e489370 100644 --- a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonConfirmTest.php +++ b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonConfirmTest.php @@ -50,9 +50,6 @@ class JToolbarButtonConfirmTest extends TestCaseDatabase */ protected function setUp() { - $this->toolbar = JToolbar::getInstance(); - $this->object = $this->toolbar->loadButtonType('confirm'); - $this->saveFactoryState(); JFactory::$application = $this->getMockCmsApp(); @@ -61,6 +58,9 @@ protected function setUp() $_SERVER['HTTP_HOST'] = 'example.com'; $_SERVER['SCRIPT_NAME'] = ''; + + $this->toolbar = JToolbar::getInstance(); + $this->object = $this->toolbar->loadButtonType('confirm'); } /** diff --git a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonCustomTest.php b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonCustomTest.php index aed1530197061..849fa786c2c3a 100644 --- a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonCustomTest.php +++ b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonCustomTest.php @@ -14,7 +14,7 @@ * @subpackage Toolbar * @since 3.0 */ -class JToolbarButtonCustomTest extends \PHPUnit\Framework\TestCase +class JToolbarButtonCustomTest extends TestCaseDatabase { /** * Toolbar object @@ -44,6 +44,8 @@ protected function setUp() { parent::setUp(); + JFactory::$application = $this->getMockCmsApp(); + $this->toolbar = JToolbar::getInstance(); $this->object = $this->toolbar->loadButtonType('custom'); } diff --git a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonHelpTest.php b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonHelpTest.php index 0ba9426766cbc..8e452be8e4c73 100644 --- a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonHelpTest.php +++ b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonHelpTest.php @@ -52,9 +52,6 @@ protected function setUp() { parent::setUp(); - $this->toolbar = JToolbar::getInstance(); - $this->object = $this->toolbar->loadButtonType('help'); - $this->saveFactoryState(); JFactory::$application = $this->getMockCmsApp(); @@ -64,6 +61,9 @@ protected function setUp() $_SERVER['HTTP_HOST'] = 'example.com'; $_SERVER['SCRIPT_NAME'] = ''; + + $this->toolbar = JToolbar::getInstance(); + $this->object = $this->toolbar->loadButtonType('help'); } /** diff --git a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonLinkTest.php b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonLinkTest.php index 37c2b6a0b18d0..1e2eb83e2e78c 100644 --- a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonLinkTest.php +++ b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonLinkTest.php @@ -14,7 +14,7 @@ * @subpackage Toolbar * @since 3.0 */ -class JToolbarButtonLinkTest extends TestCase +class JToolbarButtonLinkTest extends TestCaseDatabase { /** * Toolbar object @@ -44,12 +44,12 @@ protected function setUp() { parent::setUp(); - $this->toolbar = JToolbar::getInstance(); - $this->object = $this->toolbar->loadButtonType('link'); - $this->saveFactoryState(); JFactory::$application = $this->getMockCmsApp(); + + $this->toolbar = JToolbar::getInstance(); + $this->object = $this->toolbar->loadButtonType('link'); } /** diff --git a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonPopupTest.php b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonPopupTest.php index 92b4e61c8093d..9d5a75363e24a 100644 --- a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonPopupTest.php +++ b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonPopupTest.php @@ -14,7 +14,7 @@ * @subpackage Toolbar * @since 3.0 */ -class JToolbarButtonPopupTest extends \PHPUnit\Framework\TestCase +class JToolbarButtonPopupTest extends TestCaseDatabase { /** * Toolbar object @@ -44,6 +44,8 @@ protected function setUp() { parent::setUp(); + JFactory::$application = $this->getMockCmsApp(); + $this->toolbar = JToolbar::getInstance(); $this->object = $this->toolbar->loadButtonType('popup'); } diff --git a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonSliderTest.php b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonSliderTest.php index ebac9fac70a44..a3b3bef5ef374 100644 --- a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonSliderTest.php +++ b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonSliderTest.php @@ -14,7 +14,7 @@ * @subpackage Toolbar * @since 3.0 */ -class JToolbarButtonSliderTest extends \PHPUnit\Framework\TestCase +class JToolbarButtonSliderTest extends TestCaseDatabase { /** * Toolbar object @@ -44,6 +44,8 @@ protected function setUp() { parent::setUp(); + JFactory::$application = $this->getMockCmsApp(); + $this->toolbar = JToolbar::getInstance(); $this->object = $this->toolbar->loadButtonType('slider'); } diff --git a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonStandardTest.php b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonStandardTest.php index a18cf94c0d0f7..d515a17144c54 100644 --- a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonStandardTest.php +++ b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonStandardTest.php @@ -14,7 +14,7 @@ * @subpackage Toolbar * @since 3.0 */ -class JToolbarButtonStandardTest extends \PHPUnit\Framework\TestCase +class JToolbarButtonStandardTest extends TestCaseDatabase { /** * Toolbar object @@ -44,6 +44,8 @@ protected function setUp() { parent::setUp(); + JFactory::$application = $this->getMockCmsApp(); + $this->toolbar = JToolbar::getInstance(); $this->object = $this->toolbar->loadButtonType('standard'); } diff --git a/tests/unit/suites/libraries/joomla/JFactoryTest.php b/tests/unit/suites/libraries/joomla/JFactoryTest.php index 06297cb452e2f..7285a3625b665 100644 --- a/tests/unit/suites/libraries/joomla/JFactoryTest.php +++ b/tests/unit/suites/libraries/joomla/JFactoryTest.php @@ -29,6 +29,8 @@ public function setUp() parent::setUp(); $this->saveFactoryState(); + + \Joomla\CMS\Factory::$application = $this->getMockCmsApp(); } /** diff --git a/tests/unit/suites/libraries/joomla/archive/JArchiveTestCase.php b/tests/unit/suites/libraries/joomla/archive/JArchiveTestCase.php index 7124b2a4a8259..0987697012d47 100644 --- a/tests/unit/suites/libraries/joomla/archive/JArchiveTestCase.php +++ b/tests/unit/suites/libraries/joomla/archive/JArchiveTestCase.php @@ -54,6 +54,8 @@ protected function setUp() // We need a configuration with a tmp_path set JFactory::$config = new Registry(['tmp_path' => __DIR__ . '/output']); + + \Joomla\CMS\Factory::$application = $this->getMockCmsApp(); } /** diff --git a/tests/unit/suites/libraries/joomla/document/JDocumentTest.php b/tests/unit/suites/libraries/joomla/document/JDocumentTest.php index 61a34b4a677e6..3436e4b0ec4c1 100644 --- a/tests/unit/suites/libraries/joomla/document/JDocumentTest.php +++ b/tests/unit/suites/libraries/joomla/document/JDocumentTest.php @@ -10,7 +10,7 @@ /** * Test class for JDocument. */ -class JDocumentTest extends \PHPUnit\Framework\TestCase +class JDocumentTest extends TestCase { /** * @var JDocument @@ -25,6 +25,8 @@ protected function setUp() { parent::setUp(); + \Joomla\CMS\Factory::$application = $this->getMockCmsApp(); + $this->object = new JDocument; } diff --git a/tests/unit/suites/libraries/joomla/user/JUserHelperTest.php b/tests/unit/suites/libraries/joomla/user/JUserHelperTest.php index 6eefe6375e402..abe1832c68f74 100644 --- a/tests/unit/suites/libraries/joomla/user/JUserHelperTest.php +++ b/tests/unit/suites/libraries/joomla/user/JUserHelperTest.php @@ -305,13 +305,6 @@ public function casesActivateUser() */ public function testActivateUser($activation, $expected) { - // Configure the container - $container = (new \Joomla\DI\Container) - ->set('dispatcher', $this->getMockDispatcher()) - ->set('db', static::$driver); - - JFactory::$container = $container; - $this->assertEquals( JUserHelper::activateUser($activation), $expected From 6ef3e50b89630e0beba4391e37ef10d5f06659ff Mon Sep 17 00:00:00 2001 From: Allon Moritz Date: Thu, 29 Jun 2017 21:43:53 +0200 Subject: [PATCH 12/36] Stabilizing core --- libraries/joomla/base/adapter.php | 4 ++-- libraries/src/CMS/Cache/CacheController.php | 6 ++++-- libraries/src/CMS/Pathway/Pathway.php | 4 +++- libraries/src/CMS/Router/SiteRouter.php | 12 ++++++------ 4 files changed, 15 insertions(+), 11 deletions(-) diff --git a/libraries/joomla/base/adapter.php b/libraries/joomla/base/adapter.php index 84a0530fe346c..5cc17af604948 100644 --- a/libraries/joomla/base/adapter.php +++ b/libraries/joomla/base/adapter.php @@ -168,9 +168,9 @@ public function setAdapter($name, &$adapter = null, $options = array()) } // Check for a possible service from the container otherwise manually instantiate the class - if (\Joomla\CMS\Factory::getApplication()->getContainer()->exists($class)) + if (JFactory::$application && JFactory::getApplication()->getContainer()->exists($class)) { - $this->_adapters[$name] = \Joomla\CMS\Factory::getApplication()->getContainer()->get($class); + $this->_adapters[$name] = JFactory::getApplication()->getContainer()->get($class); } else { diff --git a/libraries/src/CMS/Cache/CacheController.php b/libraries/src/CMS/Cache/CacheController.php index 417ac4f486740..b39480671bebb 100644 --- a/libraries/src/CMS/Cache/CacheController.php +++ b/libraries/src/CMS/Cache/CacheController.php @@ -8,6 +8,8 @@ namespace Joomla\CMS\Cache; +use Joomla\CMS\Factory; + defined('JPATH_PLATFORM') or die; /** @@ -115,9 +117,9 @@ public static function getInstance($type = 'output', $options = array()) } // Check for a possible service from the container otherwise manually instantiate the class - if (\JFactory::getApplication()->getContainer()->exists($class)) + if (Factory::$application && Factory::getApplication()->getContainer()->exists($class)) { - return \JFactory::getApplication()->getContainer()->get($class); + return Factory::getApplication()->getContainer()->get($class); } return new $class($options); diff --git a/libraries/src/CMS/Pathway/Pathway.php b/libraries/src/CMS/Pathway/Pathway.php index 23055dd6c4255..6f1e8442b0440 100644 --- a/libraries/src/CMS/Pathway/Pathway.php +++ b/libraries/src/CMS/Pathway/Pathway.php @@ -8,6 +8,8 @@ namespace Joomla\CMS\Pathway; +use Joomla\CMS\Factory; + defined('JPATH_PLATFORM') or die; /** @@ -67,7 +69,7 @@ public static function getInstance($client, $options = array()) } // Check for a possible service from the container otherwise manually instantiate the class - if (\JFactory::getApplication()->getContainer()->has($classname)) + if (Factory::$application && Factory::getApplication()->getContainer()->has($classname)) { self::$instances[$client] = \JFactory::getApplication()->getContainer()->get($classname); } diff --git a/libraries/src/CMS/Router/SiteRouter.php b/libraries/src/CMS/Router/SiteRouter.php index 4b7e77fae88c4..18af681c16334 100644 --- a/libraries/src/CMS/Router/SiteRouter.php +++ b/libraries/src/CMS/Router/SiteRouter.php @@ -10,7 +10,7 @@ defined('JPATH_PLATFORM') or die; -use Joomla\CMS\Application\SiteApplication; +use Joomla\CMS\Application\CMSApplication; use Joomla\CMS\Component\Router\RouterInterface; use Joomla\CMS\Component\Router\RouterLegacy; use Joomla\CMS\Factory; @@ -34,9 +34,9 @@ class SiteRouter extends Router protected $componentRouters = array(); /** - * The SiteApplication object + * Current Application-Object * - * @var SiteApplication + * @var CMSApplication * @since 3.4 */ protected $app; @@ -52,12 +52,12 @@ class SiteRouter extends Router /** * Class constructor * - * @param SiteApplication $app SiteApplication Object - * @param AbstractMenu $menu JMenu object + * @param CMSApplication $app JApplicationCms Object + * @param AbstractMenu $menu JMenu object * * @since 3.4 */ - public function __construct(SiteApplication $app = null, AbstractMenu $menu = null) + public function __construct(CMSApplication $app = null, AbstractMenu $menu = null) { $this->app = $app ?: Factory::getApplication()->getContainer()->get('SiteApplication'); $this->menu = $menu ?: $this->app->getMenu(); From 6708c8f7903939e0b3285acc2297da6fb27ea4cd Mon Sep 17 00:00:00 2001 From: Allon Moritz Date: Thu, 29 Jun 2017 21:45:19 +0200 Subject: [PATCH 13/36] cs --- libraries/container.php | 2 +- libraries/src/CMS/Factory.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/container.php b/libraries/container.php index 7ff7889ec73d2..4819a5a77c732 100644 --- a/libraries/container.php +++ b/libraries/container.php @@ -19,4 +19,4 @@ ->registerServiceProvider(new \Joomla\CMS\Service\Provider\Session) ->registerServiceProvider(new \Joomla\CMS\Service\Provider\Toolbar); -return $container; \ No newline at end of file +return $container; diff --git a/libraries/src/CMS/Factory.php b/libraries/src/CMS/Factory.php index ffaf46ede7571..2b0b3ee47aa26 100644 --- a/libraries/src/CMS/Factory.php +++ b/libraries/src/CMS/Factory.php @@ -118,7 +118,7 @@ abstract class Factory public static function getApplication() { if (!self::$application) - {echo new \Exception();die; + { throw new \Exception('Application Instantiation Error', 500); } From 2c044334876d87f4d1762c3970a2f14511f33a03 Mon Sep 17 00:00:00 2001 From: Allon Moritz Date: Fri, 30 Jun 2017 07:32:31 +0200 Subject: [PATCH 14/36] cleanup tests --- libraries/src/CMS/Factory.php | 2 +- tests/unit/suites/libraries/cms/model/JModelAdminTest.php | 4 +++- tests/unit/suites/libraries/cms/model/JModelFormTest.php | 2 +- tests/unit/suites/libraries/cms/model/JModelItemTest.php | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/libraries/src/CMS/Factory.php b/libraries/src/CMS/Factory.php index 2b0b3ee47aa26..5b82ca7d8b7a8 100644 --- a/libraries/src/CMS/Factory.php +++ b/libraries/src/CMS/Factory.php @@ -106,7 +106,7 @@ abstract class Factory public static $mailer = null; /** - * Get an application object. + * Get the global application object. * * Returns the global {@link CMSApplication} object. * diff --git a/tests/unit/suites/libraries/cms/model/JModelAdminTest.php b/tests/unit/suites/libraries/cms/model/JModelAdminTest.php index 54e947a2eb253..5ae7f781db32f 100644 --- a/tests/unit/suites/libraries/cms/model/JModelAdminTest.php +++ b/tests/unit/suites/libraries/cms/model/JModelAdminTest.php @@ -15,7 +15,7 @@ * * @since 12.3 */ -class JModelAdminTest extends TestCaseDatabase +class JModelAdminTest extends TestCase { /** * @var JModelAdmin @@ -32,6 +32,8 @@ class JModelAdminTest extends TestCaseDatabase */ public function setUp() { + JFactory::$application = $this->getMockCmsApp(); + // Create mock of abstract class JModelAdmin to test concrete methods in there $this->object = $this->getMockForAbstractClass('JModelAdmin'); } diff --git a/tests/unit/suites/libraries/cms/model/JModelFormTest.php b/tests/unit/suites/libraries/cms/model/JModelFormTest.php index 59244237a43c4..655e6322bb6cc 100644 --- a/tests/unit/suites/libraries/cms/model/JModelFormTest.php +++ b/tests/unit/suites/libraries/cms/model/JModelFormTest.php @@ -15,7 +15,7 @@ * * @since 12.3 */ -class JModelFormTest extends TestCaseDatabase +class JModelFormTest extends TestCase { /** * @var JModelForm diff --git a/tests/unit/suites/libraries/cms/model/JModelItemTest.php b/tests/unit/suites/libraries/cms/model/JModelItemTest.php index 3424ad7ad1d94..e75b80fcd18ed 100644 --- a/tests/unit/suites/libraries/cms/model/JModelItemTest.php +++ b/tests/unit/suites/libraries/cms/model/JModelItemTest.php @@ -15,7 +15,7 @@ * * @since 3.4 */ -class JModelItemTest extends TestCaseDatabase +class JModelItemTest extends TestCase { /** * @var JModelItem From 2031eb65e5287f22f26d3db6d72b8680b3fb1ee8 Mon Sep 17 00:00:00 2001 From: Allon Moritz Date: Fri, 30 Jun 2017 07:35:26 +0200 Subject: [PATCH 15/36] cleanup tests --- .../libraries/cms/toolbar/button/JToolbarButtonCustomTest.php | 2 +- .../libraries/cms/toolbar/button/JToolbarButtonLinkTest.php | 2 +- .../libraries/cms/toolbar/button/JToolbarButtonPopupTest.php | 2 +- .../libraries/cms/toolbar/button/JToolbarButtonSliderTest.php | 2 +- .../libraries/cms/toolbar/button/JToolbarButtonStandardTest.php | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonCustomTest.php b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonCustomTest.php index 849fa786c2c3a..dbaf554de0f52 100644 --- a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonCustomTest.php +++ b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonCustomTest.php @@ -14,7 +14,7 @@ * @subpackage Toolbar * @since 3.0 */ -class JToolbarButtonCustomTest extends TestCaseDatabase +class JToolbarButtonCustomTest extends TestCase { /** * Toolbar object diff --git a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonLinkTest.php b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonLinkTest.php index 1e2eb83e2e78c..c6302bed0ea85 100644 --- a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonLinkTest.php +++ b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonLinkTest.php @@ -14,7 +14,7 @@ * @subpackage Toolbar * @since 3.0 */ -class JToolbarButtonLinkTest extends TestCaseDatabase +class JToolbarButtonLinkTest extends TestCase { /** * Toolbar object diff --git a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonPopupTest.php b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonPopupTest.php index 9d5a75363e24a..5a29bb526aa1b 100644 --- a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonPopupTest.php +++ b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonPopupTest.php @@ -14,7 +14,7 @@ * @subpackage Toolbar * @since 3.0 */ -class JToolbarButtonPopupTest extends TestCaseDatabase +class JToolbarButtonPopupTest extends TestCase { /** * Toolbar object diff --git a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonSliderTest.php b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonSliderTest.php index a3b3bef5ef374..21be4b30d2876 100644 --- a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonSliderTest.php +++ b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonSliderTest.php @@ -14,7 +14,7 @@ * @subpackage Toolbar * @since 3.0 */ -class JToolbarButtonSliderTest extends TestCaseDatabase +class JToolbarButtonSliderTest extends TestCase { /** * Toolbar object diff --git a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonStandardTest.php b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonStandardTest.php index d515a17144c54..359b191d978f9 100644 --- a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonStandardTest.php +++ b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonStandardTest.php @@ -14,7 +14,7 @@ * @subpackage Toolbar * @since 3.0 */ -class JToolbarButtonStandardTest extends TestCaseDatabase +class JToolbarButtonStandardTest extends TestCase { /** * Toolbar object From abaa3487300c299de959b33cf3877ba780d6a110 Mon Sep 17 00:00:00 2001 From: Allon Moritz Date: Fri, 30 Jun 2017 07:42:21 +0200 Subject: [PATCH 16/36] harmonize front controller --- administrator/includes/app.php | 2 +- build/helpTOC.php | 9 +++++++-- cli/deletefiles.php | 9 +++++++-- cli/finder_indexer.php | 9 +++++++-- cli/garbagecron.php | 9 +++++++-- cli/update_cron.php | 9 +++++++-- includes/app.php | 2 +- libraries/joomla/archive/archive.php | 4 ++-- libraries/joomla/base/adapter.php | 2 +- libraries/joomla/document/document.php | 2 +- libraries/src/CMS/Cache/CacheController.php | 6 ++---- libraries/src/CMS/Pathway/Pathway.php | 4 +--- .../libraries/cms/pathway/JPathwayTest.php | 2 ++ .../suites/libraries/joomla/JFactoryTest.php | 2 +- .../joomla/archive/JArchiveTestCase.php | 2 +- .../joomla/base/JAdapterInstanceTest.php | 3 ++- .../libraries/joomla/base/JAdapterTest.php | 3 ++- .../joomla/cache/JCacheConstructTest.php | 18 +++++++++++++++++- .../JCacheControllerCallbackCallbackTest.php | 4 +++- 19 files changed, 72 insertions(+), 29 deletions(-) diff --git a/administrator/includes/app.php b/administrator/includes/app.php index 034383b49ff25..4db14a06289b6 100644 --- a/administrator/includes/app.php +++ b/administrator/includes/app.php @@ -26,7 +26,7 @@ require_once JPATH_BASE . '/includes/framework.php'; /** @var \Joomla\DI\Container $container */ -$container = require_once JPATH_LIBRARIES . '/container.php'; +$container = require JPATH_LIBRARIES . '/container.php'; // Set profiler start time and memory usage and mark afterLoad in the profiler. JDEBUG ? JProfiler::getInstance('Application')->setStart($startTime, $startMem)->mark('afterLoad') : null; diff --git a/build/helpTOC.php b/build/helpTOC.php index f430bfb5dbb80..31f8c049b8032 100644 --- a/build/helpTOC.php +++ b/build/helpTOC.php @@ -201,7 +201,7 @@ public function doExecute() } /** @var \Joomla\DI\Container $container */ -$container = require_once JPATH_LIBRARIES . '/container.php'; +$container = require JPATH_LIBRARIES . '/container.php'; // Set up the container $container->share( @@ -223,4 +223,9 @@ function (\Joomla\DI\Container $container) }, true ); -$container->get('MediawikiCli')->execute(); + +// Get the application from the container +$app = $container->get('MediawikiCli'); + +// Execute the application. +$app->execute(); diff --git a/cli/deletefiles.php b/cli/deletefiles.php index ab14c52654585..399e52e55cae5 100644 --- a/cli/deletefiles.php +++ b/cli/deletefiles.php @@ -65,7 +65,7 @@ protected function doExecute() } /** @var \Joomla\DI\Container $container */ -$container = require_once JPATH_LIBRARIES . '/container.php'; +$container = require JPATH_LIBRARIES . '/container.php'; // Set up the container $container->share( @@ -87,4 +87,9 @@ function (\Joomla\DI\Container $container) }, true ); -$container->get('DeletefilesCli')->execute(); + +// Get the application from the container +$app = $container->get('DeletefilesCli'); + +// Execute the application. +$app->execute(); diff --git a/cli/finder_indexer.php b/cli/finder_indexer.php index ef9f364f5b17d..e6b8949763316 100644 --- a/cli/finder_indexer.php +++ b/cli/finder_indexer.php @@ -361,7 +361,7 @@ private function getFilters() } /** @var \Joomla\DI\Container $container */ -$container = require_once JPATH_LIBRARIES . '/container.php'; +$container = require JPATH_LIBRARIES . '/container.php'; // Set up the container $container->share( @@ -383,4 +383,9 @@ function (\Joomla\DI\Container $container) }, true ); -$container->get('FinderCli')->execute(); + +// Get the application from the container +$app = $container->get('FinderCli'); + +// Execute the application. +$app->execute(); diff --git a/cli/garbagecron.php b/cli/garbagecron.php index 1de44c61c2d76..7c91a26772e39 100644 --- a/cli/garbagecron.php +++ b/cli/garbagecron.php @@ -45,7 +45,7 @@ protected function doExecute() } /** @var \Joomla\DI\Container $container */ -$container = require_once JPATH_LIBRARIES . '/container.php'; +$container = require JPATH_LIBRARIES . '/container.php'; // Set up the container $container->share( @@ -67,4 +67,9 @@ function (\Joomla\DI\Container $container) }, true ); -$container->get('GarbageCron')->execute(); + +// Get the application from the container +$app = $container->get('GarbageCron'); + +// Execute the application. +$app->execute(); diff --git a/cli/update_cron.php b/cli/update_cron.php index d2f9bbbbe4624..e68921bf56383 100644 --- a/cli/update_cron.php +++ b/cli/update_cron.php @@ -66,7 +66,7 @@ protected function doExecute() } /** @var \Joomla\DI\Container $container */ -$container = require_once JPATH_LIBRARIES . '/container.php'; +$container = require JPATH_LIBRARIES . '/container.php'; // Set up the container $container->share( @@ -88,4 +88,9 @@ function (\Joomla\DI\Container $container) }, true ); -$container->get('Updatecron')->execute(); + +// Get the application from the container +$app = $container->get('Updatecron'); + +// Execute the application. +$app->execute(); diff --git a/includes/app.php b/includes/app.php index a5ea23032fe9d..b22c8d7c41acd 100644 --- a/includes/app.php +++ b/includes/app.php @@ -26,7 +26,7 @@ require_once JPATH_BASE . '/includes/framework.php'; /** @var \Joomla\DI\Container $container */ -$container = require_once JPATH_LIBRARIES . '/container.php'; +$container = require JPATH_LIBRARIES . '/container.php'; // Set profiler start time and memory usage and mark afterLoad in the profiler. JDEBUG ? JProfiler::getInstance('Application')->setStart($startTime, $startMem)->mark('afterLoad') : null; diff --git a/libraries/joomla/archive/archive.php b/libraries/joomla/archive/archive.php index 601cbb58a7cf1..c40e847bc573e 100644 --- a/libraries/joomla/archive/archive.php +++ b/libraries/joomla/archive/archive.php @@ -188,9 +188,9 @@ public static function getAdapter($type) } // Check for a possible service from the container otherwise manually instantiate the class - if (\Joomla\CMS\Factory::getApplication()->getContainer()->exists($class)) + if (JFactory::getApplication()->getContainer()->exists($class)) { - self::$adapters[$type] = \Joomla\CMS\Factory::getApplication()->getContainer()->get($class); + self::$adapters[$type] = JFactory::getApplication()->getContainer()->get($class); } else { diff --git a/libraries/joomla/base/adapter.php b/libraries/joomla/base/adapter.php index 5cc17af604948..e29798619494b 100644 --- a/libraries/joomla/base/adapter.php +++ b/libraries/joomla/base/adapter.php @@ -168,7 +168,7 @@ public function setAdapter($name, &$adapter = null, $options = array()) } // Check for a possible service from the container otherwise manually instantiate the class - if (JFactory::$application && JFactory::getApplication()->getContainer()->exists($class)) + if (JFactory::getApplication()->getContainer()->exists($class)) { $this->_adapters[$name] = JFactory::getApplication()->getContainer()->get($class); } diff --git a/libraries/joomla/document/document.php b/libraries/joomla/document/document.php index 1c7ad05efd611..b9b8e94cc8527 100644 --- a/libraries/joomla/document/document.php +++ b/libraries/joomla/document/document.php @@ -331,7 +331,7 @@ public static function getInstance($type = 'html', $attributes = array()) if (empty(self::$instances[$signature])) { - self::$instances[$signature] = \Joomla\CMS\Factory::getApplication()->getContainer()->get(FactoryInterface::class)->createDocument($type, $attributes); + self::$instances[$signature] = JFactory::getApplication()->getContainer()->get(FactoryInterface::class)->createDocument($type, $attributes); } return self::$instances[$signature]; diff --git a/libraries/src/CMS/Cache/CacheController.php b/libraries/src/CMS/Cache/CacheController.php index b39480671bebb..417ac4f486740 100644 --- a/libraries/src/CMS/Cache/CacheController.php +++ b/libraries/src/CMS/Cache/CacheController.php @@ -8,8 +8,6 @@ namespace Joomla\CMS\Cache; -use Joomla\CMS\Factory; - defined('JPATH_PLATFORM') or die; /** @@ -117,9 +115,9 @@ public static function getInstance($type = 'output', $options = array()) } // Check for a possible service from the container otherwise manually instantiate the class - if (Factory::$application && Factory::getApplication()->getContainer()->exists($class)) + if (\JFactory::getApplication()->getContainer()->exists($class)) { - return Factory::getApplication()->getContainer()->get($class); + return \JFactory::getApplication()->getContainer()->get($class); } return new $class($options); diff --git a/libraries/src/CMS/Pathway/Pathway.php b/libraries/src/CMS/Pathway/Pathway.php index 6f1e8442b0440..23055dd6c4255 100644 --- a/libraries/src/CMS/Pathway/Pathway.php +++ b/libraries/src/CMS/Pathway/Pathway.php @@ -8,8 +8,6 @@ namespace Joomla\CMS\Pathway; -use Joomla\CMS\Factory; - defined('JPATH_PLATFORM') or die; /** @@ -69,7 +67,7 @@ public static function getInstance($client, $options = array()) } // Check for a possible service from the container otherwise manually instantiate the class - if (Factory::$application && Factory::getApplication()->getContainer()->has($classname)) + if (\JFactory::getApplication()->getContainer()->has($classname)) { self::$instances[$client] = \JFactory::getApplication()->getContainer()->get($classname); } diff --git a/tests/unit/suites/libraries/cms/pathway/JPathwayTest.php b/tests/unit/suites/libraries/cms/pathway/JPathwayTest.php index 2f9992f64c461..8c21fee52cb7e 100644 --- a/tests/unit/suites/libraries/cms/pathway/JPathwayTest.php +++ b/tests/unit/suites/libraries/cms/pathway/JPathwayTest.php @@ -36,6 +36,8 @@ protected function setUp() $this->fixture = new JPathway; parent::setUp(); + + JFactory::$application = $this->getMockCmsApp(); } /** diff --git a/tests/unit/suites/libraries/joomla/JFactoryTest.php b/tests/unit/suites/libraries/joomla/JFactoryTest.php index 7285a3625b665..04e981a981b03 100644 --- a/tests/unit/suites/libraries/joomla/JFactoryTest.php +++ b/tests/unit/suites/libraries/joomla/JFactoryTest.php @@ -30,7 +30,7 @@ public function setUp() $this->saveFactoryState(); - \Joomla\CMS\Factory::$application = $this->getMockCmsApp(); + JFactory::$application = $this->getMockCmsApp(); } /** diff --git a/tests/unit/suites/libraries/joomla/archive/JArchiveTestCase.php b/tests/unit/suites/libraries/joomla/archive/JArchiveTestCase.php index 0987697012d47..afa20b6aff4ec 100644 --- a/tests/unit/suites/libraries/joomla/archive/JArchiveTestCase.php +++ b/tests/unit/suites/libraries/joomla/archive/JArchiveTestCase.php @@ -55,7 +55,7 @@ protected function setUp() // We need a configuration with a tmp_path set JFactory::$config = new Registry(['tmp_path' => __DIR__ . '/output']); - \Joomla\CMS\Factory::$application = $this->getMockCmsApp(); + JFactory::$application = $this->getMockCmsApp(); } /** diff --git a/tests/unit/suites/libraries/joomla/base/JAdapterInstanceTest.php b/tests/unit/suites/libraries/joomla/base/JAdapterInstanceTest.php index cd836c51cd945..566d99731a2a3 100644 --- a/tests/unit/suites/libraries/joomla/base/JAdapterInstanceTest.php +++ b/tests/unit/suites/libraries/joomla/base/JAdapterInstanceTest.php @@ -34,7 +34,8 @@ protected function setUp() $this->saveFactoryState(); - JFactory::$database = $this->getMockDatabase(); + JFactory::$application = $this->getMockCmsApp(); + JFactory::$database = $this->getMockDatabase(); } /** diff --git a/tests/unit/suites/libraries/joomla/base/JAdapterTest.php b/tests/unit/suites/libraries/joomla/base/JAdapterTest.php index 9ebf478d4f280..14931fc16b984 100644 --- a/tests/unit/suites/libraries/joomla/base/JAdapterTest.php +++ b/tests/unit/suites/libraries/joomla/base/JAdapterTest.php @@ -34,7 +34,8 @@ protected function setUp() $this->saveFactoryState(); - JFactory::$database = $this->getMockDatabase(); + JFactory::$application = $this->getMockCmsApp(); + JFactory::$database = $this->getMockDatabase(); } /** diff --git a/tests/unit/suites/libraries/joomla/cache/JCacheConstructTest.php b/tests/unit/suites/libraries/joomla/cache/JCacheConstructTest.php index b0bf936d53483..883ce106debdb 100644 --- a/tests/unit/suites/libraries/joomla/cache/JCacheConstructTest.php +++ b/tests/unit/suites/libraries/joomla/cache/JCacheConstructTest.php @@ -15,8 +15,24 @@ * * @since 11.1 */ -class JCacheTest_Construct extends \PHPUnit\Framework\TestCase +class JCacheTest_Construct extends TestCase { + /** + * Sets up the fixture. + * + * This method is called before a test is executed. + * + * @return void + * + * @since __DEPLOY_VERSION__ + */ + protected function setUp() + { + parent::setUp(); + + JFactory::$application = $this->getMockCmsApp(); + } + /** * Test... * diff --git a/tests/unit/suites/libraries/joomla/cache/controller/JCacheControllerCallbackCallbackTest.php b/tests/unit/suites/libraries/joomla/cache/controller/JCacheControllerCallbackCallbackTest.php index b668499030bf4..d0d82257ea1ac 100644 --- a/tests/unit/suites/libraries/joomla/cache/controller/JCacheControllerCallbackCallbackTest.php +++ b/tests/unit/suites/libraries/joomla/cache/controller/JCacheControllerCallbackCallbackTest.php @@ -11,7 +11,7 @@ * @package Joomla.UnitTest * @subpackage Cache */ -class JCacheControllerCallbackTest_Callback extends \PHPUnit\Framework\TestCase +class JCacheControllerCallbackTest_Callback extends TestCase { /** @@ -27,6 +27,8 @@ protected function setUp() // Some tests are affected by the output of the logger, so we clear the logger here. JLog::setInstance(null); + + JFactory::$application = $this->getMockCmsApp(); } /** From d241488f74ffc2842f7ff620d79867924f44a45c Mon Sep 17 00:00:00 2001 From: Allon Moritz Date: Fri, 30 Jun 2017 08:20:32 +0200 Subject: [PATCH 17/36] simplify tests --- tests/unit/core/case/trait.php | 22 ++----------------- tests/unit/core/mock/application/base.php | 1 - tests/unit/core/mock/application/cms.php | 16 ++++++++++++++ .../JApplicationAdministratorTest.php | 2 +- .../cms/application/JApplicationCmsTest.php | 2 +- .../cms/application/JApplicationSiteTest.php | 2 +- 6 files changed, 21 insertions(+), 24 deletions(-) diff --git a/tests/unit/core/case/trait.php b/tests/unit/core/case/trait.php index 02a1d21fd353f..7f49f2cd15716 100644 --- a/tests/unit/core/case/trait.php +++ b/tests/unit/core/case/trait.php @@ -165,22 +165,7 @@ public function getMockCmsApp($options = array(), $constructor = array()) // Attempt to load the real class first. class_exists('JApplicationCms'); - $app = TestMockApplicationCms::create($this, $options, $constructor); - $app->method('getContainer')->willReturn($this->getContainer()); - - return $app; - } - - /** - * Returns a ready container. - * - * @return \Joomla\DI\Container - * - * @since __DEPLOY_VERSION__ - */ - protected function getContainer() - { - return require JPATH_LIBRARIES . '/container.php'; + return TestMockApplicationCms::create($this, $options, $constructor); } /** @@ -317,10 +302,7 @@ public function getMockWeb($options = array()) // Attempt to load the real class first. class_exists('JApplicationWeb'); - $app = TestMockApplicationWeb::create($this, $options); - $app->method('getContainer')->willReturn($this->getContainer()); - - return $app; + return TestMockApplicationWeb::create($this, $options); } /** diff --git a/tests/unit/core/mock/application/base.php b/tests/unit/core/mock/application/base.php index 3b2218ef3853e..8383c530b1e6e 100644 --- a/tests/unit/core/mock/application/base.php +++ b/tests/unit/core/mock/application/base.php @@ -31,7 +31,6 @@ public static function getMethods() 'loadDispatcher', 'loadIdentity', 'getDispatcher', - 'getContainer', ); } diff --git a/tests/unit/core/mock/application/cms.php b/tests/unit/core/mock/application/cms.php index aef603fc96926..a9a1135249bbd 100644 --- a/tests/unit/core/mock/application/cms.php +++ b/tests/unit/core/mock/application/cms.php @@ -28,6 +28,7 @@ public static function getMethods() 'getMenu', 'getPathway', 'getTemplate', + 'getContainer', 'getLanguageFilter', 'initialiseApp', 'isClient', @@ -57,6 +58,9 @@ public static function addBehaviours($test, $mockObject, $options) // Mock calls to JApplicationCms::getMenu(); $mockObject->expects($test->any())->method('getMenu')->will($test->returnValue(TestMockMenu::create($test))); + // Mock calls to JApplicationCms::getContainer(); + $mockObject->expects($test->any())->method('getContainer')->will($test->returnValue(self::getContainer())); + return parent::addBehaviours($test, $mockObject, $options); } @@ -107,4 +111,16 @@ public static function create($test, $options = array(), $constructor = array()) return self::addBehaviours($test, $mockObject, $options); } + + /** + * Returns a ready container. + * + * @return \Joomla\DI\Container + * + * @since __DEPLOY_VERSION__ + */ + public static function getContainer() + { + return require JPATH_LIBRARIES . '/container.php'; + } } diff --git a/tests/unit/suites/libraries/cms/application/JApplicationAdministratorTest.php b/tests/unit/suites/libraries/cms/application/JApplicationAdministratorTest.php index a8bb5cd3bbb64..7fb392ebd4c13 100644 --- a/tests/unit/suites/libraries/cms/application/JApplicationAdministratorTest.php +++ b/tests/unit/suites/libraries/cms/application/JApplicationAdministratorTest.php @@ -106,7 +106,7 @@ public function setUp() $this->class = new JApplicationAdministrator($this->getMockInput(), $config); $this->class->setSession(JFactory::$session); $this->class->setDispatcher($this->getMockDispatcher()); - $this->class->setContainer($this->getContainer()); + $this->class->setContainer(TestMockApplicationCms::getContainer()); TestReflection::setValue('JApplicationCms', 'instances', array('administrator' => $this->class)); JFactory::$application = $this->class; diff --git a/tests/unit/suites/libraries/cms/application/JApplicationCmsTest.php b/tests/unit/suites/libraries/cms/application/JApplicationCmsTest.php index d0bf79218b289..523ffc648411e 100644 --- a/tests/unit/suites/libraries/cms/application/JApplicationCmsTest.php +++ b/tests/unit/suites/libraries/cms/application/JApplicationCmsTest.php @@ -109,7 +109,7 @@ public function setUp() $this->class = new JApplicationCmsInspector($this->getMockInput(), $config); $this->class->setSession(JFactory::$session); $this->class->setDispatcher($this->getMockDispatcher()); - $this->class->setContainer($this->getContainer()); + $this->class->setContainer(TestMockApplicationCms::getContainer()); JFactory::$application = $this->class; } diff --git a/tests/unit/suites/libraries/cms/application/JApplicationSiteTest.php b/tests/unit/suites/libraries/cms/application/JApplicationSiteTest.php index dced619cc7384..4bd6290e6cc61 100644 --- a/tests/unit/suites/libraries/cms/application/JApplicationSiteTest.php +++ b/tests/unit/suites/libraries/cms/application/JApplicationSiteTest.php @@ -106,7 +106,7 @@ public function setUp() $this->class = new JApplicationSite($this->getMockInput(), $config); $this->class->setSession(JFactory::$session); $this->class->setDispatcher($this->getMockDispatcher()); - $this->class->setContainer($this->getContainer()); + $this->class->setContainer(TestMockApplicationCms::getContainer()); TestReflection::setValue('JApplicationCms', 'instances', array('site' => $this->class)); JFactory::$application = $this->class; From fbefa187a103f516c913f5185bd7f61c4987b0fe Mon Sep 17 00:00:00 2001 From: Allon Moritz Date: Fri, 30 Jun 2017 08:56:44 +0200 Subject: [PATCH 18/36] mock the container --- tests/unit/core/case/trait.php | 15 ++++++ tests/unit/core/mock/application/cms.php | 14 +---- tests/unit/core/mock/container.php | 54 +++++++++++++++++++ .../JApplicationAdministratorTest.php | 2 +- .../cms/application/JApplicationCmsTest.php | 2 +- .../cms/application/JApplicationSiteTest.php | 2 +- 6 files changed, 73 insertions(+), 16 deletions(-) create mode 100644 tests/unit/core/mock/container.php diff --git a/tests/unit/core/case/trait.php b/tests/unit/core/case/trait.php index 7f49f2cd15716..bb7b49981134b 100644 --- a/tests/unit/core/case/trait.php +++ b/tests/unit/core/case/trait.php @@ -217,6 +217,21 @@ class_exists('Joomla\\Event\\DispatcherInterface'); return TestMockDispatcher::create($this, $defaults); } + /** + * Gets a mock container object. + * + * @return \Joomla\DI\Container + * + * @since __DEPLOY_VERSION__ + */ + public function getMockContainer() + { + // Attempt to load the class first. + class_exists(\Joomla\DI\Container::class); + + return TestMockContainer::create($this); + } + /** * Gets a mock document object. * diff --git a/tests/unit/core/mock/application/cms.php b/tests/unit/core/mock/application/cms.php index a9a1135249bbd..9e7e243d586d8 100644 --- a/tests/unit/core/mock/application/cms.php +++ b/tests/unit/core/mock/application/cms.php @@ -59,7 +59,7 @@ public static function addBehaviours($test, $mockObject, $options) $mockObject->expects($test->any())->method('getMenu')->will($test->returnValue(TestMockMenu::create($test))); // Mock calls to JApplicationCms::getContainer(); - $mockObject->expects($test->any())->method('getContainer')->will($test->returnValue(self::getContainer())); + $mockObject->expects($test->any())->method('getContainer')->will($test->returnValue(TestMockContainer::create($test))); return parent::addBehaviours($test, $mockObject, $options); } @@ -111,16 +111,4 @@ public static function create($test, $options = array(), $constructor = array()) return self::addBehaviours($test, $mockObject, $options); } - - /** - * Returns a ready container. - * - * @return \Joomla\DI\Container - * - * @since __DEPLOY_VERSION__ - */ - public static function getContainer() - { - return require JPATH_LIBRARIES . '/container.php'; - } } diff --git a/tests/unit/core/mock/container.php b/tests/unit/core/mock/container.php new file mode 100644 index 0000000000000..7f117836143a4 --- /dev/null +++ b/tests/unit/core/mock/container.php @@ -0,0 +1,54 @@ +getMockBuilder(\Joomla\DI\Container::class) + ->setMethods($methods) + ->getMock(); + + // @Todo mock the container + $container = require JPATH_LIBRARIES . '/container.php'; + + $test->assignMockCallbacks( + $mockObject, + array( + 'has' => array($container, 'has'), + 'exists' => array($container, 'exists'), + 'get' => array($container, 'get'), + ) + ); + + return $mockObject; + } +} diff --git a/tests/unit/suites/libraries/cms/application/JApplicationAdministratorTest.php b/tests/unit/suites/libraries/cms/application/JApplicationAdministratorTest.php index 7fb392ebd4c13..c648e60aa39ea 100644 --- a/tests/unit/suites/libraries/cms/application/JApplicationAdministratorTest.php +++ b/tests/unit/suites/libraries/cms/application/JApplicationAdministratorTest.php @@ -106,7 +106,7 @@ public function setUp() $this->class = new JApplicationAdministrator($this->getMockInput(), $config); $this->class->setSession(JFactory::$session); $this->class->setDispatcher($this->getMockDispatcher()); - $this->class->setContainer(TestMockApplicationCms::getContainer()); + $this->class->setContainer($this->getMockContainer()); TestReflection::setValue('JApplicationCms', 'instances', array('administrator' => $this->class)); JFactory::$application = $this->class; diff --git a/tests/unit/suites/libraries/cms/application/JApplicationCmsTest.php b/tests/unit/suites/libraries/cms/application/JApplicationCmsTest.php index 523ffc648411e..04813ef4c3413 100644 --- a/tests/unit/suites/libraries/cms/application/JApplicationCmsTest.php +++ b/tests/unit/suites/libraries/cms/application/JApplicationCmsTest.php @@ -109,7 +109,7 @@ public function setUp() $this->class = new JApplicationCmsInspector($this->getMockInput(), $config); $this->class->setSession(JFactory::$session); $this->class->setDispatcher($this->getMockDispatcher()); - $this->class->setContainer(TestMockApplicationCms::getContainer()); + $this->class->setContainer($this->getMockContainer()); JFactory::$application = $this->class; } diff --git a/tests/unit/suites/libraries/cms/application/JApplicationSiteTest.php b/tests/unit/suites/libraries/cms/application/JApplicationSiteTest.php index 4bd6290e6cc61..5386e152bea31 100644 --- a/tests/unit/suites/libraries/cms/application/JApplicationSiteTest.php +++ b/tests/unit/suites/libraries/cms/application/JApplicationSiteTest.php @@ -106,7 +106,7 @@ public function setUp() $this->class = new JApplicationSite($this->getMockInput(), $config); $this->class->setSession(JFactory::$session); $this->class->setDispatcher($this->getMockDispatcher()); - $this->class->setContainer(TestMockApplicationCms::getContainer()); + $this->class->setContainer($this->getMockContainer()); TestReflection::setValue('JApplicationCms', 'instances', array('site' => $this->class)); JFactory::$application = $this->class; From 22e21ea77721fe1414dbcd393530b39fad227766 Mon Sep 17 00:00:00 2001 From: Allon Moritz Date: Fri, 30 Jun 2017 09:11:43 +0200 Subject: [PATCH 19/36] needs a CMS app --- tests/unit/core/mock/container.php | 2 +- tests/unit/suites/libraries/cms/ucm/JUcmContentTest.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/unit/core/mock/container.php b/tests/unit/core/mock/container.php index 7f117836143a4..d5bb33306b055 100644 --- a/tests/unit/core/mock/container.php +++ b/tests/unit/core/mock/container.php @@ -37,7 +37,7 @@ public static function create($test) ->setMethods($methods) ->getMock(); - // @Todo mock the container + // @Todo mock the container functions $container = require JPATH_LIBRARIES . '/container.php'; $test->assignMockCallbacks( diff --git a/tests/unit/suites/libraries/cms/ucm/JUcmContentTest.php b/tests/unit/suites/libraries/cms/ucm/JUcmContentTest.php index f17891983819e..c00f1e31abe9d 100644 --- a/tests/unit/suites/libraries/cms/ucm/JUcmContentTest.php +++ b/tests/unit/suites/libraries/cms/ucm/JUcmContentTest.php @@ -36,7 +36,7 @@ protected function setUp() $this->saveFactoryState(); - JFactory::$application = $this->getMockWeb(); + JFactory::$application = $this->getMockCmsApp(); $this->object = new JUcmContent(JTable::getInstance('Content'), 'com_content.article'); } From e5f6af5df869ee396a1d3ff17fb223c523f9eba1 Mon Sep 17 00:00:00 2001 From: Allon Moritz Date: Fri, 30 Jun 2017 09:20:19 +0200 Subject: [PATCH 20/36] getApplication has no arguments anymore --- .../components/com_banners/Model/Tracks.php | 2 +- .../com_categories/Model/Category.php | 2 +- .../components/com_fields/Model/Field.php | 2 +- .../com_installer/Model/Install.php | 2 +- .../com_languages/Model/Language.php | 2 +- .../components/com_menus/Model/Item.php | 4 +-- .../components/com_menus/Model/Items.php | 2 +- .../components/com_menus/Model/Menu.php | 2 +- .../components/com_modules/Model/Module.php | 2 +- .../components/com_modules/Model/Select.php | 2 +- .../components/com_plugins/Model/Plugin.php | 2 +- .../components/com_tags/Model/Tag.php | 2 +- .../components/com_templates/Model/Style.php | 2 +- .../com_templates/Model/Template.php | 2 +- .../components/com_users/Model/Debuggroup.php | 2 +- .../components/com_users/Model/Debuguser.php | 2 +- .../components/com_users/Model/Users.php | 2 +- components/com_config/Model/Modules.php | 2 +- components/com_contact/Model/Contact.php | 2 +- components/com_content/Model/Archive.php | 2 +- components/com_content/Model/Article.php | 2 +- components/com_content/Model/Category.php | 4 +-- components/com_finder/helpers/route.php | 2 +- components/com_newsfeeds/Model/Newsfeed.php | 2 +- components/com_tags/Model/Tags.php | 4 +-- installation/application/app.php | 25 +++++++++---------- .../src/CMS/Component/Router/RouterBase.php | 2 +- .../folderinstaller/tmpl/default.php | 2 +- 28 files changed, 42 insertions(+), 43 deletions(-) diff --git a/administrator/components/com_banners/Model/Tracks.php b/administrator/components/com_banners/Model/Tracks.php index 3da5f08673f52..6e69b558c5eb5 100644 --- a/administrator/components/com_banners/Model/Tracks.php +++ b/administrator/components/com_banners/Model/Tracks.php @@ -483,7 +483,7 @@ public function getContent() if ($this->getState('compressed')) { - $app = \JFactory::getApplication('administrator'); + $app = \JFactory::getApplication(); $files = array( 'track' => array( diff --git a/administrator/components/com_categories/Model/Category.php b/administrator/components/com_categories/Model/Category.php index 43220024dbd4b..344b45cbeee24 100644 --- a/administrator/components/com_categories/Model/Category.php +++ b/administrator/components/com_categories/Model/Category.php @@ -145,7 +145,7 @@ public function getTable($type = 'Category', $prefix = 'Administrator', $config */ protected function populateState() { - $app = \JFactory::getApplication('administrator'); + $app = \JFactory::getApplication(); $parentId = $app->input->getInt('parent_id'); $this->setState('category.parent_id', $parentId); diff --git a/administrator/components/com_fields/Model/Field.php b/administrator/components/com_fields/Model/Field.php index 65d8b2b21a604..88b0ec8c061da 100644 --- a/administrator/components/com_fields/Model/Field.php +++ b/administrator/components/com_fields/Model/Field.php @@ -823,7 +823,7 @@ protected function canEditState($record) */ protected function populateState() { - $app = \JFactory::getApplication('administrator'); + $app = \JFactory::getApplication(); // Load the User state. $pk = $app->input->getInt('id'); diff --git a/administrator/components/com_installer/Model/Install.php b/administrator/components/com_installer/Model/Install.php index 3abb4fdbef0f3..3edc863441493 100644 --- a/administrator/components/com_installer/Model/Install.php +++ b/administrator/components/com_installer/Model/Install.php @@ -48,7 +48,7 @@ class Install extends Model */ protected function populateState() { - $app = \JFactory::getApplication('administrator'); + $app = \JFactory::getApplication(); $this->setState('message', $app->getUserState('com_installer.message')); $this->setState('extension_message', $app->getUserState('com_installer.extension_message')); diff --git a/administrator/components/com_languages/Model/Language.php b/administrator/components/com_languages/Model/Language.php index 36364f6efe12e..e5328773c1d81 100644 --- a/administrator/components/com_languages/Model/Language.php +++ b/administrator/components/com_languages/Model/Language.php @@ -76,7 +76,7 @@ public function getTable($name = '', $prefix = '', $options = array()) */ protected function populateState() { - $app = \JFactory::getApplication('administrator'); + $app = \JFactory::getApplication(); $params = ComponentHelper::getParams('com_languages'); // Load the User state. diff --git a/administrator/components/com_menus/Model/Item.php b/administrator/components/com_menus/Model/Item.php index 9a7afbef270de..7ef94b10b7e93 100644 --- a/administrator/components/com_menus/Model/Item.php +++ b/administrator/components/com_menus/Model/Item.php @@ -695,7 +695,7 @@ public function getItem($pk = null) { // Check if we are changing away from the actual link type. - if (MenusHelper::getLinkKey($table->link) !== MenusHelper::getLinkKey($link) && (int) $table->id === (int) $this->getState('item.id')) + if (MenusHelper::getLinkKey($table->link) !== MenusHelper::getLinkKey($link) && (int) $table->id === (int) $this->getState('item.id')) { $table->link = $link; } @@ -942,7 +942,7 @@ protected function getReorderConditions($table) */ protected function populateState() { - $app = \JFactory::getApplication('administrator'); + $app = \JFactory::getApplication(); // Load the User state. $pk = $app->input->getInt('id'); diff --git a/administrator/components/com_menus/Model/Items.php b/administrator/components/com_menus/Model/Items.php index 659d72723cf2c..d3879ee9b7c21 100644 --- a/administrator/components/com_menus/Model/Items.php +++ b/administrator/components/com_menus/Model/Items.php @@ -79,7 +79,7 @@ public function __construct($config = array(), MvcFactoryInterface $factory = nu */ protected function populateState($ordering = 'a.lft', $direction = 'asc') { - $app = \JFactory::getApplication('administrator'); + $app = \JFactory::getApplication(); $forcedLanguage = $app->input->get('forcedLanguage', '', 'cmd'); diff --git a/administrator/components/com_menus/Model/Menu.php b/administrator/components/com_menus/Model/Menu.php index a5197f6664390..a4be8e2069ce5 100644 --- a/administrator/components/com_menus/Model/Menu.php +++ b/administrator/components/com_menus/Model/Menu.php @@ -93,7 +93,7 @@ public function getTable($type = 'MenuType', $prefix = '\JTable', $config = arra */ protected function populateState() { - $app = \JFactory::getApplication('administrator'); + $app = \JFactory::getApplication(); // Load the User state. $id = $app->input->getInt('id'); diff --git a/administrator/components/com_modules/Model/Module.php b/administrator/components/com_modules/Model/Module.php index e3523074f145a..9b33228b6737e 100644 --- a/administrator/components/com_modules/Model/Module.php +++ b/administrator/components/com_modules/Model/Module.php @@ -104,7 +104,7 @@ public function __construct($config = array()) */ protected function populateState() { - $app = \JFactory::getApplication('administrator'); + $app = \JFactory::getApplication(); // Load the User state. $pk = $app->input->getInt('id'); diff --git a/administrator/components/com_modules/Model/Select.php b/administrator/components/com_modules/Model/Select.php index 724f0f67cab52..5b3f98fb1d5c7 100644 --- a/administrator/components/com_modules/Model/Select.php +++ b/administrator/components/com_modules/Model/Select.php @@ -36,7 +36,7 @@ class Select extends ListModel */ protected function populateState($ordering = null, $direction = null) { - $app = \JFactory::getApplication('administrator'); + $app = \JFactory::getApplication(); // Load the filter state. $clientId = $app->getUserState('com_modules.modules.client_id', 0); diff --git a/administrator/components/com_plugins/Model/Plugin.php b/administrator/components/com_plugins/Model/Plugin.php index 14037fe703818..6796a04f2ba7a 100644 --- a/administrator/components/com_plugins/Model/Plugin.php +++ b/administrator/components/com_plugins/Model/Plugin.php @@ -222,7 +222,7 @@ protected function populateState() // Execute the parent method. parent::populateState(); - $app = \JFactory::getApplication('administrator'); + $app = \JFactory::getApplication(); // Load the User state. $pk = $app->input->getInt('extension_id'); diff --git a/administrator/components/com_tags/Model/Tag.php b/administrator/components/com_tags/Model/Tag.php index 2d55d0ef5fa5d..870819a70132d 100644 --- a/administrator/components/com_tags/Model/Tag.php +++ b/administrator/components/com_tags/Model/Tag.php @@ -94,7 +94,7 @@ protected function canEditState($record) */ protected function populateState() { - $app = \JFactory::getApplication('administrator'); + $app = \JFactory::getApplication(); $parentId = $app->input->getInt('parent_id'); $this->setState('tag.parent_id', $parentId); diff --git a/administrator/components/com_templates/Model/Style.php b/administrator/components/com_templates/Model/Style.php index 310df6ee5f67c..108144076b99d 100644 --- a/administrator/components/com_templates/Model/Style.php +++ b/administrator/components/com_templates/Model/Style.php @@ -86,7 +86,7 @@ public function __construct($config = array(), MvcFactoryInterface $factory = nu */ protected function populateState() { - $app = \JFactory::getApplication('administrator'); + $app = \JFactory::getApplication(); // Load the User state. $pk = $app->input->getInt('id'); diff --git a/administrator/components/com_templates/Model/Template.php b/administrator/components/com_templates/Model/Template.php index 86b2a6b0f57ac..0ef0455d76cb2 100644 --- a/administrator/components/com_templates/Model/Template.php +++ b/administrator/components/com_templates/Model/Template.php @@ -160,7 +160,7 @@ public function getDirectoryTree($dir) protected function populateState() { jimport('joomla.filesystem.file'); - $app = \JFactory::getApplication('administrator'); + $app = \JFactory::getApplication(); // Load the User state. $pk = $app->input->getInt('id'); diff --git a/administrator/components/com_users/Model/Debuggroup.php b/administrator/components/com_users/Model/Debuggroup.php index 9f1e51ad515ba..4ec92e31e7c62 100644 --- a/administrator/components/com_users/Model/Debuggroup.php +++ b/administrator/components/com_users/Model/Debuggroup.php @@ -118,7 +118,7 @@ public function getItems() */ protected function populateState($ordering = 'a.lft', $direction = 'asc') { - $app = \JFactory::getApplication('administrator'); + $app = \JFactory::getApplication(); // Adjust the context to support modal layouts. $layout = $app->input->get('layout', 'default'); diff --git a/administrator/components/com_users/Model/Debuguser.php b/administrator/components/com_users/Model/Debuguser.php index 64970b5f79d5f..f5f9de9061336 100644 --- a/administrator/components/com_users/Model/Debuguser.php +++ b/administrator/components/com_users/Model/Debuguser.php @@ -118,7 +118,7 @@ public function getItems() */ protected function populateState($ordering = 'a.lft', $direction = 'asc') { - $app = \JFactory::getApplication('administrator'); + $app = \JFactory::getApplication(); // Adjust the context to support modal layouts. $layout = $app->input->get('layout', 'default'); diff --git a/administrator/components/com_users/Model/Users.php b/administrator/components/com_users/Model/Users.php index 8cf797fa8394d..410e15317773f 100644 --- a/administrator/components/com_users/Model/Users.php +++ b/administrator/components/com_users/Model/Users.php @@ -70,7 +70,7 @@ public function __construct($config = array(), MvcFactoryInterface $factory = nu */ protected function populateState($ordering = 'a.name', $direction = 'asc') { - $app = \JFactory::getApplication('administrator'); + $app = \JFactory::getApplication(); // Adjust the context to support modal layouts. if ($layout = $app->input->get('layout', 'default', 'cmd')) diff --git a/components/com_config/Model/Modules.php b/components/com_config/Model/Modules.php index a88a7d3155b52..acca734621cf8 100644 --- a/components/com_config/Model/Modules.php +++ b/components/com_config/Model/Modules.php @@ -31,7 +31,7 @@ class Modules extends Form */ protected function populateState() { - $app = \JFactory::getApplication('administrator'); + $app = \JFactory::getApplication(); // Load the User state. $pk = $app->input->getInt('id'); diff --git a/components/com_contact/Model/Contact.php b/components/com_contact/Model/Contact.php index 4ae6ec06cf626..cc2ba7461512d 100644 --- a/components/com_contact/Model/Contact.php +++ b/components/com_contact/Model/Contact.php @@ -62,7 +62,7 @@ class Contact extends Form protected function populateState() { /** @var SiteApplication $app */ - $app = \JFactory::getApplication('site'); + $app = \JFactory::getApplication(); $this->setState('contact.id', $app->input->getInt('id')); $this->setState('params', $app->getParams()); diff --git a/components/com_content/Model/Archive.php b/components/com_content/Model/Archive.php index 7b9b2b243709c..c94d1aca0edaf 100644 --- a/components/com_content/Model/Archive.php +++ b/components/com_content/Model/Archive.php @@ -83,7 +83,7 @@ protected function populateState($ordering = null, $direction = null) protected function getListQuery() { $params = $this->state->params; - $app = JFactory::getApplication('site'); + $app = JFactory::getApplication(); $catids = $app->input->getVar('catid', array()); $catids = array_values(array_diff($catids, array(''))); $articleOrderDate = $params->get('order_date'); diff --git a/components/com_content/Model/Article.php b/components/com_content/Model/Article.php index 51da6d1f0cb8c..9a0b2a8b56081 100644 --- a/components/com_content/Model/Article.php +++ b/components/com_content/Model/Article.php @@ -40,7 +40,7 @@ class Article extends Item */ protected function populateState() { - $app = \JFactory::getApplication('site'); + $app = \JFactory::getApplication(); // Load state from the request. $pk = $app->input->getInt('id'); diff --git a/components/com_content/Model/Category.php b/components/com_content/Model/Category.php index 8876c33a2fbbe..033d825f56d7d 100644 --- a/components/com_content/Model/Category.php +++ b/components/com_content/Model/Category.php @@ -114,7 +114,7 @@ public function __construct($config = array()) */ protected function populateState($ordering = null, $direction = null) { - $app = \JFactory::getApplication('site'); + $app = \JFactory::getApplication(); $pk = $app->input->getInt('id'); $this->setState('category.id', $pk); @@ -282,7 +282,7 @@ public function getItems() */ protected function _buildContentOrderBy() { - $app = \JFactory::getApplication('site'); + $app = \JFactory::getApplication(); $db = $this->getDbo(); $params = $this->state->params; $itemid = $app->input->get('id', 0, 'int') . ':' . $app->input->get('Itemid', 0, 'int'); diff --git a/components/com_finder/helpers/route.php b/components/com_finder/helpers/route.php index 093bd7aa81e97..773748798e2bf 100644 --- a/components/com_finder/helpers/route.php +++ b/components/com_finder/helpers/route.php @@ -113,7 +113,7 @@ public static function getItemid($query) // Get the menu items for com_finder. if (!$items || !$active) { - $app = JFactory::getApplication('site'); + $app = JFactory::getApplication(); $com = JComponentHelper::getComponent('com_finder'); $menu = $app->getMenu(); $active = $menu->getActive(); diff --git a/components/com_newsfeeds/Model/Newsfeed.php b/components/com_newsfeeds/Model/Newsfeed.php index 3d69642ebfd5b..874ec2a6d06f1 100644 --- a/components/com_newsfeeds/Model/Newsfeed.php +++ b/components/com_newsfeeds/Model/Newsfeed.php @@ -39,7 +39,7 @@ class Newsfeed extends Item */ protected function populateState() { - $app = \JFactory::getApplication('site'); + $app = \JFactory::getApplication(); // Load state from the request. $pk = $app->input->getInt('id'); diff --git a/components/com_tags/Model/Tags.php b/components/com_tags/Model/Tags.php index 72ac5a3a74409..2c7555f1d3c67 100644 --- a/components/com_tags/Model/Tags.php +++ b/components/com_tags/Model/Tags.php @@ -44,7 +44,7 @@ class Tags extends ListModel */ protected function populateState($ordering = null, $direction = null) { - $app = \JFactory::getApplication('site'); + $app = \JFactory::getApplication(); // Load state from the request. $pid = $app->input->getInt('parent_id'); @@ -115,7 +115,7 @@ public function getItems() */ protected function getListQuery() { - $app = \JFactory::getApplication('site'); + $app = \JFactory::getApplication(); $user = \JFactory::getUser(); $groups = implode(',', $user->getAuthorisedViewLevels()); $pid = $this->getState('tag.parent_id'); diff --git a/installation/application/app.php b/installation/application/app.php index d21fe0fcdd99e..ad33463a2d2e2 100644 --- a/installation/application/app.php +++ b/installation/application/app.php @@ -36,16 +36,15 @@ // Register the application's router due to non-standard include JLoader::register('JRouterInstallation', __DIR__ . '/router.php'); -// Instantiate the dependency injection container -JFactory::$container = (new \Joomla\DI\Container) - ->registerServiceProvider(new InstallationServiceProviderApplication) - ->registerServiceProvider(new InstallationServiceProviderSession) - ->registerServiceProvider(new \Joomla\CMS\Service\Provider\Toolbar) - ->registerServiceProvider(new \Joomla\CMS\Service\Provider\Menu) - ->registerServiceProvider(new \Joomla\CMS\Service\Provider\Document) - ->registerServiceProvider(new \Joomla\CMS\Service\Provider\Dispatcher) - ->registerServiceProvider(new \Joomla\CMS\Service\Provider\Form) - ->registerServiceProvider(new \Joomla\CMS\Service\Provider\Database); - -// Instantiate and execute the application -JFactory::getApplication('web', [], 'InstallationApplication')->execute(); +/** @var \Joomla\DI\Container $container */ +$container = require JPATH_LIBRARIES . '/container.php'; + +// register installation specific service providers +$container->registerServiceProvider(new InstallationServiceProviderApplication); +$container->registerServiceProvider(new InstallationServiceProviderSession); + +// Get the application from the container +$app = $container->get('InstallationApplicationWeb'); + +// Execute the application. +$app->execute(); diff --git a/libraries/src/CMS/Component/Router/RouterBase.php b/libraries/src/CMS/Component/Router/RouterBase.php index c67ddead9062d..7255d769d856f 100644 --- a/libraries/src/CMS/Component/Router/RouterBase.php +++ b/libraries/src/CMS/Component/Router/RouterBase.php @@ -49,7 +49,7 @@ public function __construct($app = null, $menu = null) } else { - $this->app = \JFactory::getApplication('site'); + $this->app = \JFactory::getApplication(); } if ($menu) diff --git a/plugins/installer/folderinstaller/tmpl/default.php b/plugins/installer/folderinstaller/tmpl/default.php index a10e98c6469b3..7aa0ea06a9a62 100644 --- a/plugins/installer/folderinstaller/tmpl/default.php +++ b/plugins/installer/folderinstaller/tmpl/default.php @@ -11,7 +11,7 @@ JHtml::_('bootstrap.tooltip'); -$app = JFactory::getApplication('administrator'); +$app = JFactory::getApplication(); ?> From f5d11a3ed70988edd5ee3cf6e750e473f4fa54ee Mon Sep 17 00:00:00 2001 From: Allon Moritz Date: Fri, 30 Jun 2017 09:47:50 +0200 Subject: [PATCH 21/36] cs --- installation/application/app.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/installation/application/app.php b/installation/application/app.php index ad33463a2d2e2..d3ac5d335b81c 100644 --- a/installation/application/app.php +++ b/installation/application/app.php @@ -39,7 +39,7 @@ /** @var \Joomla\DI\Container $container */ $container = require JPATH_LIBRARIES . '/container.php'; -// register installation specific service providers +// Register installation specific service providers $container->registerServiceProvider(new InstallationServiceProviderApplication); $container->registerServiceProvider(new InstallationServiceProviderSession); From 56c9270bd1d3f8129edd3d45fb95110beb5afe91 Mon Sep 17 00:00:00 2001 From: Allon Moritz Date: Fri, 30 Jun 2017 09:57:57 +0200 Subject: [PATCH 22/36] better doc --- libraries/src/CMS/Application/CMSApplication.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/src/CMS/Application/CMSApplication.php b/libraries/src/CMS/Application/CMSApplication.php index 8d5604d417222..cf7b16d09e7b0 100644 --- a/libraries/src/CMS/Application/CMSApplication.php +++ b/libraries/src/CMS/Application/CMSApplication.php @@ -473,7 +473,7 @@ public function getClientId() * * @since 3.2 * @throws \RuntimeException - * @deprecated 5.0 Use the application from the container + * @deprecated 5.0 Use the application trough the container of the global application */ public static function getInstance($name = null, $prefix = '\JApplication', Container $container = null) { From 4bdd7c5d2ccd957d640422724e01e3323a43f324 Mon Sep 17 00:00:00 2001 From: Allon Moritz Date: Fri, 30 Jun 2017 09:59:53 +0200 Subject: [PATCH 23/36] deprecate the genInstance function on the applications --- libraries/src/CMS/Application/CMSApplication.php | 2 +- libraries/src/CMS/Application/CliApplication.php | 4 ++-- libraries/src/CMS/Application/WebApplication.php | 5 +++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/libraries/src/CMS/Application/CMSApplication.php b/libraries/src/CMS/Application/CMSApplication.php index cf7b16d09e7b0..39a50d19d9af1 100644 --- a/libraries/src/CMS/Application/CMSApplication.php +++ b/libraries/src/CMS/Application/CMSApplication.php @@ -473,7 +473,7 @@ public function getClientId() * * @since 3.2 * @throws \RuntimeException - * @deprecated 5.0 Use the application trough the container of the global application + * @deprecated 5.0 Get the application trough the container of the global application */ public static function getInstance($name = null, $prefix = '\JApplication', Container $container = null) { diff --git a/libraries/src/CMS/Application/CliApplication.php b/libraries/src/CMS/Application/CliApplication.php index 0a111ddd598a5..57fa8a1ae9dcc 100644 --- a/libraries/src/CMS/Application/CliApplication.php +++ b/libraries/src/CMS/Application/CliApplication.php @@ -106,8 +106,8 @@ public function __construct(\JInputCli $input = null, Registry $config = null, C * @return CliApplication * * @since 11.1 - * @deprecated 5.0 Load the app through the container - * @throws \RuntimeException + * @throws \RuntimeException + * @deprecated 5.0 Get the application trough the container of the global application */ public static function getInstance($name = null) { diff --git a/libraries/src/CMS/Application/WebApplication.php b/libraries/src/CMS/Application/WebApplication.php index ca0bd9033ae39..f31872ae60cdd 100644 --- a/libraries/src/CMS/Application/WebApplication.php +++ b/libraries/src/CMS/Application/WebApplication.php @@ -100,8 +100,9 @@ public function __construct(\JInput $input = null, Registry $config = null, WebC * * @return WebApplication * - * @since 11.3 - * @throws \RuntimeException + * @since 11.3 + * @throws \RuntimeException + * @deprecated 5.0 Get the application trough the container of the global application */ public static function getInstance($name = null) { From c4dfbf13cee60890faa2bf1499c7cbb71797cf9f Mon Sep 17 00:00:00 2001 From: Allon Moritz Date: Fri, 30 Jun 2017 11:04:55 +0200 Subject: [PATCH 24/36] deprecated --- libraries/src/CMS/Application/CMSApplication.php | 2 +- libraries/src/CMS/Application/CliApplication.php | 2 +- libraries/src/CMS/Application/WebApplication.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/src/CMS/Application/CMSApplication.php b/libraries/src/CMS/Application/CMSApplication.php index 39a50d19d9af1..9bced1f497fc9 100644 --- a/libraries/src/CMS/Application/CMSApplication.php +++ b/libraries/src/CMS/Application/CMSApplication.php @@ -473,7 +473,7 @@ public function getClientId() * * @since 3.2 * @throws \RuntimeException - * @deprecated 5.0 Get the application trough the container of the global application + * @deprecated 5.0 Use \Joomla\CMS\Factory::getApplication()->getContainer()->get($name) instead */ public static function getInstance($name = null, $prefix = '\JApplication', Container $container = null) { diff --git a/libraries/src/CMS/Application/CliApplication.php b/libraries/src/CMS/Application/CliApplication.php index 57fa8a1ae9dcc..ffd49064c3706 100644 --- a/libraries/src/CMS/Application/CliApplication.php +++ b/libraries/src/CMS/Application/CliApplication.php @@ -107,7 +107,7 @@ public function __construct(\JInputCli $input = null, Registry $config = null, C * * @since 11.1 * @throws \RuntimeException - * @deprecated 5.0 Get the application trough the container of the global application + * @deprecated 5.0 Use \Joomla\CMS\Factory::getApplication()->getContainer()->get($name) instead */ public static function getInstance($name = null) { diff --git a/libraries/src/CMS/Application/WebApplication.php b/libraries/src/CMS/Application/WebApplication.php index f31872ae60cdd..4cb24464fab54 100644 --- a/libraries/src/CMS/Application/WebApplication.php +++ b/libraries/src/CMS/Application/WebApplication.php @@ -102,7 +102,7 @@ public function __construct(\JInput $input = null, Registry $config = null, WebC * * @since 11.3 * @throws \RuntimeException - * @deprecated 5.0 Get the application trough the container of the global application + * @deprecated 5.0 Use \Joomla\CMS\Factory::getApplication()->getContainer()->get($name) instead */ public static function getInstance($name = null) { From 7a5b8cb1db4129ce397910c4196d283a246f0287 Mon Sep 17 00:00:00 2001 From: Allon Moritz Date: Fri, 30 Jun 2017 11:24:37 +0200 Subject: [PATCH 25/36] Change to interface return type --- libraries/src/CMS/Factory.php | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/libraries/src/CMS/Factory.php b/libraries/src/CMS/Factory.php index 5b82ca7d8b7a8..3cc42071963a7 100644 --- a/libraries/src/CMS/Factory.php +++ b/libraries/src/CMS/Factory.php @@ -10,7 +10,7 @@ defined('JPATH_PLATFORM') or die; -use Joomla\CMS\Application\CMSApplication; +use Joomla\CMS\Application\CMSApplicationInterface; use Joomla\CMS\Cache\Cache; use Joomla\CMS\Date\Date; use Joomla\CMS\Language\Language; @@ -19,7 +19,6 @@ use Joomla\CMS\Mail\MailHelper; use Joomla\CMS\Session\Session; use Joomla\Database\DatabaseDriver; -use Joomla\DI\Container; use Joomla\CMS\User\User; use Joomla\Registry\Registry; use PHPMailer\PHPMailer\Exception as phpmailerException; @@ -34,7 +33,7 @@ abstract class Factory /** * Global application object * - * @var CMSApplication + * @var CMSApplicationInterface * @since 11.1 */ public static $application = null; @@ -108,9 +107,7 @@ abstract class Factory /** * Get the global application object. * - * Returns the global {@link CMSApplication} object. - * - * @return CMSApplication object + * @return CMSApplicationInterface object * * @since 11.1 * @throws \Exception From 99685e2bd07ac09723106a79e25435bc00fcccb2 Mon Sep 17 00:00:00 2001 From: Allon Moritz Date: Fri, 30 Jun 2017 11:37:24 +0200 Subject: [PATCH 26/36] support alias in container for apps --- administrator/includes/app.php | 2 +- includes/app.php | 2 +- .../src/CMS/Service/Provider/Application.php | 74 ++++++++++--------- 3 files changed, 41 insertions(+), 37 deletions(-) diff --git a/administrator/includes/app.php b/administrator/includes/app.php index 4db14a06289b6..ea999c8537e8f 100644 --- a/administrator/includes/app.php +++ b/administrator/includes/app.php @@ -32,7 +32,7 @@ JDEBUG ? JProfiler::getInstance('Application')->setStart($startTime, $startMem)->mark('afterLoad') : null; // Get the application from the container -$app = $container->get('AdministratorApplication'); +$app = $container->get(\Joomla\CMS\Application\AdministratorApplication::class); // Execute the application. $app->execute(); diff --git a/includes/app.php b/includes/app.php index b22c8d7c41acd..9b1c63032f8ed 100644 --- a/includes/app.php +++ b/includes/app.php @@ -32,7 +32,7 @@ JDEBUG ? JProfiler::getInstance('Application')->setStart($startTime, $startMem)->mark('afterLoad') : null; // Get the application from the container -$app = $container->get('SiteApplication'); +$app = $container->get(\Joomla\CMS\Application\SiteApplication::class); // Execute the application. $app->execute(); diff --git a/libraries/src/CMS/Service/Provider/Application.php b/libraries/src/CMS/Service/Provider/Application.php index f0d29665882d1..1882fb31dc63f 100644 --- a/libraries/src/CMS/Service/Provider/Application.php +++ b/libraries/src/CMS/Service/Provider/Application.php @@ -36,48 +36,52 @@ class Application implements ServiceProviderInterface */ public function register(Container $container) { - $container->share( - 'AdministratorApplication', - function (Container $container) - { - $app = new AdministratorApplication(null, null, null, $container); - - // The session service provider needs JFactory::$application, set it if still null - if (Factory::$application === null) + $container->alias('JApplicationAdministrator', AdministratorApplication::class) + ->alias('AdministratorApplication', AdministratorApplication::class) + ->share( + AdministratorApplication::class, + function (Container $container) { - Factory::$application = $app; - } + $app = new AdministratorApplication(null, null, null, $container); - $app->setDispatcher($container->get('Joomla\Event\DispatcherInterface')); - $app->setLogger(Log::createDelegatedLogger()); - $app->setSession($container->get('Joomla\Session\SessionInterface')); - $app->loadIdentity(Factory::getUser()); + // The session service provider needs JFactory::$application, set it if still null + if (Factory::$application === null) + { + Factory::$application = $app; + } - return $app; - }, - true - ); + $app->setDispatcher($container->get('Joomla\Event\DispatcherInterface')); + $app->setLogger(Log::createDelegatedLogger()); + $app->setSession($container->get('Joomla\Session\SessionInterface')); + $app->loadIdentity(Factory::getUser()); - $container->share( - 'SiteApplication', - function (Container $container) - { - $app = new SiteApplication(null, null, null, $container); + return $app; + }, + true + ); - // The session service provider needs JFactory::$application, set it if still null - if (Factory::$application === null) + $container->alias('JApplicationSite', SiteApplication::class) + ->alias('SiteApplication', SiteApplication::class) + ->share( + SiteApplication::class, + function (Container $container) { - Factory::$application = $app; - } + $app = new SiteApplication(null, null, null, $container); + + // The session service provider needs JFactory::$application, set it if still null + if (Factory::$application === null) + { + Factory::$application = $app; + } - $app->setDispatcher($container->get('Joomla\Event\DispatcherInterface')); - $app->setLogger(Log::createDelegatedLogger()); - $app->setSession($container->get('Joomla\Session\SessionInterface')); - $app->loadIdentity(Factory::getUser()); + $app->setDispatcher($container->get('Joomla\Event\DispatcherInterface')); + $app->setLogger(Log::createDelegatedLogger()); + $app->setSession($container->get('Joomla\Session\SessionInterface')); + $app->loadIdentity(Factory::getUser()); - return $app; - }, - true - ); + return $app; + }, + true + ); } } From 4cbffc31c9943ea4e2e95cedb52e1b59d2f11a27 Mon Sep 17 00:00:00 2001 From: Allon Moritz Date: Fri, 30 Jun 2017 13:14:30 +0200 Subject: [PATCH 27/36] Should always be available --- libraries/src/CMS/Application/CliApplication.php | 5 ----- 1 file changed, 5 deletions(-) diff --git a/libraries/src/CMS/Application/CliApplication.php b/libraries/src/CMS/Application/CliApplication.php index ffd49064c3706..a8f116dcc45bd 100644 --- a/libraries/src/CMS/Application/CliApplication.php +++ b/libraries/src/CMS/Application/CliApplication.php @@ -215,11 +215,6 @@ public function isClient($identifier) */ public function getSession() { - if (!$this->container->has(SessionInterface::class)) - { - return null; - } - return $this->container->get(SessionInterface::class); } From 88bb57f5b6dc76a2b952cd86026b2cddda32a0de Mon Sep 17 00:00:00 2001 From: Allon Moritz Date: Fri, 30 Jun 2017 13:23:30 +0200 Subject: [PATCH 28/36] save and restore factory state in tests --- .../libraries/cms/editor/JEditorTest.php | 7 ++++++ .../libraries/cms/model/JModelAdminTest.php | 8 +++++++ .../libraries/cms/pathway/JPathwayTest.php | 4 ++++ .../button/JToolbarButtonCustomTest.php | 5 +++++ .../button/JToolbarButtonPopupTest.php | 5 +++++ .../button/JToolbarButtonSliderTest.php | 5 +++++ .../button/JToolbarButtonStandardTest.php | 5 +++++ .../joomla/cache/JCacheConstructTest.php | 18 +++++++++++++++ .../JCacheControllerCallbackCallbackTest.php | 22 ++++++++++++++++++- .../joomla/document/JDocumentTest.php | 5 +++++ 10 files changed, 83 insertions(+), 1 deletion(-) diff --git a/tests/unit/suites/libraries/cms/editor/JEditorTest.php b/tests/unit/suites/libraries/cms/editor/JEditorTest.php index 836309983dce0..90199569c2f37 100644 --- a/tests/unit/suites/libraries/cms/editor/JEditorTest.php +++ b/tests/unit/suites/libraries/cms/editor/JEditorTest.php @@ -36,6 +36,10 @@ class JEditorTest extends TestCase */ protected function setUp() { + parent::setUp(); + + $this->saveFactoryState(); + \Joomla\CMS\Factory::$application = $this->getMockCmsApp(); $this->object = new JEditor; @@ -52,6 +56,9 @@ protected function setUp() protected function tearDown() { unset($this->object); + + $this->restoreFactoryState(); + parent::tearDown(); } diff --git a/tests/unit/suites/libraries/cms/model/JModelAdminTest.php b/tests/unit/suites/libraries/cms/model/JModelAdminTest.php index 5ae7f781db32f..2e01b1f825f68 100644 --- a/tests/unit/suites/libraries/cms/model/JModelAdminTest.php +++ b/tests/unit/suites/libraries/cms/model/JModelAdminTest.php @@ -32,6 +32,10 @@ class JModelAdminTest extends TestCase */ public function setUp() { + parent::setUp(); + + $this->saveFactoryState(); + JFactory::$application = $this->getMockCmsApp(); // Create mock of abstract class JModelAdmin to test concrete methods in there @@ -50,6 +54,10 @@ public function setUp() protected function tearDown() { unset($this->object); + + $this->restoreFactoryState(); + + parent::tearDown(); } /** diff --git a/tests/unit/suites/libraries/cms/pathway/JPathwayTest.php b/tests/unit/suites/libraries/cms/pathway/JPathwayTest.php index 8c21fee52cb7e..825aedff76710 100644 --- a/tests/unit/suites/libraries/cms/pathway/JPathwayTest.php +++ b/tests/unit/suites/libraries/cms/pathway/JPathwayTest.php @@ -37,6 +37,8 @@ protected function setUp() parent::setUp(); + $this->saveFactoryState(); + JFactory::$application = $this->getMockCmsApp(); } @@ -51,6 +53,8 @@ protected function tearDown() { unset($this->fixture); + $this->restoreFactoryState(); + parent::tearDown(); } diff --git a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonCustomTest.php b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonCustomTest.php index dbaf554de0f52..97a8632673fa8 100644 --- a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonCustomTest.php +++ b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonCustomTest.php @@ -44,6 +44,8 @@ protected function setUp() { parent::setUp(); + $this->saveFactoryState(); + JFactory::$application = $this->getMockCmsApp(); $this->toolbar = JToolbar::getInstance(); @@ -61,6 +63,9 @@ protected function setUp() protected function tearDown() { unset($this->toolbar, $this->object); + + $this->restoreFactoryState(); + parent::tearDown(); } diff --git a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonPopupTest.php b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonPopupTest.php index 5a29bb526aa1b..6184f33213143 100644 --- a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonPopupTest.php +++ b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonPopupTest.php @@ -44,6 +44,8 @@ protected function setUp() { parent::setUp(); + $this->saveFactoryState(); + JFactory::$application = $this->getMockCmsApp(); $this->toolbar = JToolbar::getInstance(); @@ -61,6 +63,9 @@ protected function setUp() protected function tearDown() { unset($this->toolbar, $this->object); + + $this->restoreFactoryState(); + parent::tearDown(); } diff --git a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonSliderTest.php b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonSliderTest.php index 21be4b30d2876..70ec53985de2b 100644 --- a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonSliderTest.php +++ b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonSliderTest.php @@ -44,6 +44,8 @@ protected function setUp() { parent::setUp(); + $this->saveFactoryState(); + JFactory::$application = $this->getMockCmsApp(); $this->toolbar = JToolbar::getInstance(); @@ -61,6 +63,9 @@ protected function setUp() protected function tearDown() { unset($this->toolbar, $this->object); + + $this->restoreFactoryState(); + parent::tearDown(); } diff --git a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonStandardTest.php b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonStandardTest.php index 359b191d978f9..ff106c28f8427 100644 --- a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonStandardTest.php +++ b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonStandardTest.php @@ -44,6 +44,8 @@ protected function setUp() { parent::setUp(); + $this->saveFactoryState(); + JFactory::$application = $this->getMockCmsApp(); $this->toolbar = JToolbar::getInstance(); @@ -61,6 +63,9 @@ protected function setUp() protected function tearDown() { unset($this->toolbar, $this->object); + + $this->restoreFactoryState(); + parent::tearDown(); } diff --git a/tests/unit/suites/libraries/joomla/cache/JCacheConstructTest.php b/tests/unit/suites/libraries/joomla/cache/JCacheConstructTest.php index 883ce106debdb..d6d62262aa396 100644 --- a/tests/unit/suites/libraries/joomla/cache/JCacheConstructTest.php +++ b/tests/unit/suites/libraries/joomla/cache/JCacheConstructTest.php @@ -30,9 +30,27 @@ protected function setUp() { parent::setUp(); + $this->saveFactoryState(); + JFactory::$application = $this->getMockCmsApp(); } + /** + * Tears down the fixture. + * + * This method is called after a test is executed. + * + * @return void + * + * @since __DEPLOY_VERSION__ + */ + public function tearDown() + { + $this->restoreFactoryState(); + + parent::tearDown(); + } + /** * Test... * diff --git a/tests/unit/suites/libraries/joomla/cache/controller/JCacheControllerCallbackCallbackTest.php b/tests/unit/suites/libraries/joomla/cache/controller/JCacheControllerCallbackCallbackTest.php index d0d82257ea1ac..52371ba45bb7d 100644 --- a/tests/unit/suites/libraries/joomla/cache/controller/JCacheControllerCallbackCallbackTest.php +++ b/tests/unit/suites/libraries/joomla/cache/controller/JCacheControllerCallbackCallbackTest.php @@ -21,16 +21,36 @@ class JCacheControllerCallbackTest_Callback extends TestCase */ protected function setUp() { + parent::setUp(); + + $this->saveFactoryState(); + require_once dirname(__DIR__) . '/storage/JCacheStorageMock.php'; require_once __DIR__ . '/JCacheControllerCallback.helper.php'; // Some tests are affected by the output of the logger, so we clear the logger here. JLog::setInstance(null); - + JFactory::$application = $this->getMockCmsApp(); } + /** + * Tears down the fixture. + * + * This method is called after a test is executed. + * + * @return void + * + * @since __DEPLOY_VERSION__ + */ + public function tearDown() + { + $this->restoreFactoryState(); + + parent::tearDown(); + } + /** * Test callbackStatic * diff --git a/tests/unit/suites/libraries/joomla/document/JDocumentTest.php b/tests/unit/suites/libraries/joomla/document/JDocumentTest.php index 3436e4b0ec4c1..3eae786fecc75 100644 --- a/tests/unit/suites/libraries/joomla/document/JDocumentTest.php +++ b/tests/unit/suites/libraries/joomla/document/JDocumentTest.php @@ -25,6 +25,8 @@ protected function setUp() { parent::setUp(); + $this->saveFactoryState(); + \Joomla\CMS\Factory::$application = $this->getMockCmsApp(); $this->object = new JDocument; @@ -38,6 +40,9 @@ protected function tearDown() { JDocument::$_buffer = null; unset($this->object); + + $this->restoreFactoryState(); + parent::tearDown(); } From 001a1f65eb8de679cf58ad343fa6d973950b2af7 Mon Sep 17 00:00:00 2001 From: Allon Moritz Date: Fri, 30 Jun 2017 13:35:33 +0200 Subject: [PATCH 29/36] fix tests --- .../unit/suites/libraries/cms/model/JModelFormTest.php | 8 ++++++-- .../unit/suites/libraries/cms/model/JModelItemTest.php | 10 ++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/tests/unit/suites/libraries/cms/model/JModelFormTest.php b/tests/unit/suites/libraries/cms/model/JModelFormTest.php index 655e6322bb6cc..e85822b192b0a 100644 --- a/tests/unit/suites/libraries/cms/model/JModelFormTest.php +++ b/tests/unit/suites/libraries/cms/model/JModelFormTest.php @@ -32,15 +32,19 @@ class JModelFormTest extends TestCase */ public function setUp() { + parent::setUp(); + $this->saveFactoryState(); - // Create mock of abstract class JModelForm to test concrete methods in there - $this->object = $this->getMockForAbstractClass('JModelForm'); + $mockApp = $this->getMockCmsApp(); $mockApp->expects($this->any()) ->method('getDispatcher') ->willReturn($this->getMockDispatcher()); JFactory::$application = $mockApp; TestReflection::setValue('JPluginHelper', 'plugins', array()); + + // Create mock of abstract class JModelForm to test concrete methods in there + $this->object = $this->getMockForAbstractClass('JModelForm'); } /** diff --git a/tests/unit/suites/libraries/cms/model/JModelItemTest.php b/tests/unit/suites/libraries/cms/model/JModelItemTest.php index e75b80fcd18ed..72f78bb69011f 100644 --- a/tests/unit/suites/libraries/cms/model/JModelItemTest.php +++ b/tests/unit/suites/libraries/cms/model/JModelItemTest.php @@ -32,6 +32,12 @@ class JModelItemTest extends TestCase */ public function setUp() { + parent::setUp(); + + $this->saveFactoryState(); + + JFactory::$application = $this->getMockCmsApp(); + // Create mock of abstract class JModelForm to test concrete methods in there $this->object = $this->getMockForAbstractClass('JModelItem'); } @@ -48,6 +54,10 @@ public function setUp() protected function tearDown() { unset($this->object); + + $this->restoreFactoryState(); + + parent::tearDown(); } /** From 77ed3e658a9fb0e7b346669fa3a084440013cbbe Mon Sep 17 00:00:00 2001 From: Allon Moritz Date: Fri, 30 Jun 2017 15:36:34 +0200 Subject: [PATCH 30/36] remove not needed alias --- libraries/src/CMS/Router/SiteRouter.php | 3 ++- libraries/src/CMS/Service/Provider/Application.php | 2 -- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/libraries/src/CMS/Router/SiteRouter.php b/libraries/src/CMS/Router/SiteRouter.php index 18af681c16334..32b661b482a58 100644 --- a/libraries/src/CMS/Router/SiteRouter.php +++ b/libraries/src/CMS/Router/SiteRouter.php @@ -11,6 +11,7 @@ defined('JPATH_PLATFORM') or die; use Joomla\CMS\Application\CMSApplication; +use Joomla\CMS\Application\SiteApplication; use Joomla\CMS\Component\Router\RouterInterface; use Joomla\CMS\Component\Router\RouterLegacy; use Joomla\CMS\Factory; @@ -59,7 +60,7 @@ class SiteRouter extends Router */ public function __construct(CMSApplication $app = null, AbstractMenu $menu = null) { - $this->app = $app ?: Factory::getApplication()->getContainer()->get('SiteApplication'); + $this->app = $app ?: Factory::getApplication()->getContainer()->get(SiteApplication::class); $this->menu = $menu ?: $this->app->getMenu(); // Add core rules diff --git a/libraries/src/CMS/Service/Provider/Application.php b/libraries/src/CMS/Service/Provider/Application.php index 1882fb31dc63f..23e0280eade3d 100644 --- a/libraries/src/CMS/Service/Provider/Application.php +++ b/libraries/src/CMS/Service/Provider/Application.php @@ -37,7 +37,6 @@ class Application implements ServiceProviderInterface public function register(Container $container) { $container->alias('JApplicationAdministrator', AdministratorApplication::class) - ->alias('AdministratorApplication', AdministratorApplication::class) ->share( AdministratorApplication::class, function (Container $container) @@ -61,7 +60,6 @@ function (Container $container) ); $container->alias('JApplicationSite', SiteApplication::class) - ->alias('SiteApplication', SiteApplication::class) ->share( SiteApplication::class, function (Container $container) From 0f6cb8540eb6a2d11d9343fd0faca6a801a916c6 Mon Sep 17 00:00:00 2001 From: Allon Moritz Date: Fri, 30 Jun 2017 17:06:09 +0200 Subject: [PATCH 31/36] Remove the installer session service provider as it works with the default one --- installation/application/app.php | 1 - installation/service/provider/session.php | 76 ------------------- .../src/CMS/Service/Provider/Session.php | 35 +++++---- 3 files changed, 17 insertions(+), 95 deletions(-) delete mode 100644 installation/service/provider/session.php diff --git a/installation/application/app.php b/installation/application/app.php index d3ac5d335b81c..361d30e5c2807 100644 --- a/installation/application/app.php +++ b/installation/application/app.php @@ -41,7 +41,6 @@ // Register installation specific service providers $container->registerServiceProvider(new InstallationServiceProviderApplication); -$container->registerServiceProvider(new InstallationServiceProviderSession); // Get the application from the container $app = $container->get('InstallationApplicationWeb'); diff --git a/installation/service/provider/session.php b/installation/service/provider/session.php deleted file mode 100644 index a24b25d9147aa..0000000000000 --- a/installation/service/provider/session.php +++ /dev/null @@ -1,76 +0,0 @@ -alias('session', 'Joomla\Session\SessionInterface') - ->alias('JSession', 'Joomla\Session\SessionInterface') - ->alias('Joomla\Session\Session', 'Joomla\Session\SessionInterface') - ->share( - 'Joomla\Session\SessionInterface', - function (Container $container) - { - $app = JFactory::getApplication(); - - // Generate a session name. - $name = JApplicationHelper::getHash($app->get('session_name', get_class($app))); - - // Calculate the session lifetime. - $lifetime = (($app->get('lifetime')) ? $app->get('lifetime') * 60 : 900); - - // Initialize the options for the Session object. - $options = array( - 'name' => $name, - 'expire' => $lifetime - ); - - // Set up the storage handler - $handler = new FilesystemHandler(JPATH_INSTALLATION . '/sessions'); - - $input = $app->input; - - $storage = new JoomlaStorage($input, $handler); - - $dispatcher = $container->get('Joomla\Event\DispatcherInterface'); - $dispatcher->addListener('onAfterSessionStart', array($app, 'afterSessionStart')); - - $session = new JSession($storage, $dispatcher, $options); - $session->addValidator(new AddressValidator($input, $session)); - $session->addValidator(new ForwardedValidator($input, $session)); - - return $session; - }, - true - ); - } -} diff --git a/libraries/src/CMS/Service/Provider/Session.php b/libraries/src/CMS/Service/Provider/Session.php index cf3fa9fb92053..23881019c5b48 100644 --- a/libraries/src/CMS/Service/Provider/Session.php +++ b/libraries/src/CMS/Service/Provider/Session.php @@ -12,8 +12,8 @@ defined('JPATH_PLATFORM') or die; use InvalidArgumentException; -use JFactory; use Joomla\CMS\Application\ApplicationHelper; +use Joomla\CMS\Factory; use Joomla\CMS\Session\Storage\JoomlaStorage; use Joomla\Session\Storage\RuntimeStorage; use Joomla\CMS\Session\Validator\AddressValidator; @@ -51,14 +51,13 @@ public function register(Container $container) 'Joomla\Session\SessionInterface', function (Container $container) { - $config = JFactory::getConfig(); - $app = JFactory::getApplication(); + $app = Factory::getApplication(); // Generate a session name. - $name = ApplicationHelper::getHash($config->get('session_name', get_class($app))); + $name = ApplicationHelper::getHash($app->get('session_name', get_class($app))); // Calculate the session lifetime. - $lifetime = (($config->get('lifetime')) ? $config->get('lifetime') * 60 : 900); + $lifetime = (($app->get('lifetime')) ? $app->get('lifetime') * 60 : 900); // Initialize the options for the Session object. $options = array( @@ -66,18 +65,18 @@ function (Container $container) 'expire' => $lifetime ); - if ($app->isClient('site') && $config->get('force_ssl') == 2) + if ($app->isClient('site') && $app->get('force_ssl') == 2) { $options['force_ssl'] = true; } - if ($app->isClient('administrator') && $config->get('force_ssl') >= 1) + if ($app->isClient('administrator') && $app->get('force_ssl') >= 1) { $options['force_ssl'] = true; } // Set up the storage handler - $handlerType = $config->get('session_handler', 'filesystem'); + $handlerType = $app->get('session_handler', 'filesystem'); switch ($handlerType) { @@ -102,13 +101,13 @@ function (Container $container) break; case 'database': - $handler = new Handler\DatabaseHandler(JFactory::getDbo()); + $handler = new Handler\DatabaseHandler(Factory::getDbo()); break; case 'filesystem': case 'none': - $path = $config->get('session_filesystem_path', ''); + $path = $app->get('session_filesystem_path', ''); // If no path is given, fall back to the system's temporary directory if (empty($path)) @@ -126,10 +125,10 @@ function (Container $container) throw new RuntimeException('Memcached is not supported on this system.'); } - $host = $config->get('session_memcached_server_host', 'localhost'); - $port = $config->get('session_memcached_server_port', 11211); + $host = $app->get('session_memcached_server_host', 'localhost'); + $port = $app->get('session_memcached_server_port', 11211); - $memcached = new Memcached($config->get('session_memcached_server_id', 'joomla_cms')); + $memcached = new Memcached($app->get('session_memcached_server_id', 'joomla_cms')); $memcached->addServer($host, $port); $handler = new Handler\MemcachedHandler($memcached, array('ttl' => $lifetime)); @@ -145,10 +144,10 @@ function (Container $container) throw new RuntimeException('Memcache is not supported on this system.'); } - $host = $config->get('session_memcache_server_host', 'localhost'); - $port = $config->get('session_memcache_server_port', 11211); + $host = $app->get('session_memcache_server_host', 'localhost'); + $port = $app->get('session_memcache_server_port', 11211); - $memcache = new Memcache($config->get('session_memcache_server_id', 'joomla_cms')); + $memcache = new Memcache($app->get('session_memcache_server_id', 'joomla_cms')); $memcache->addserver($host, $port); $handler = new Handler\MemcacheHandler($memcache, array('ttl' => $lifetime)); @@ -166,8 +165,8 @@ function (Container $container) $redis = new Redis; $redis->connect( - $config->get('session_redis_server_host', '127.0.0.1'), - $config->get('session_redis_server_port', 6379) + $app->get('session_redis_server_host', '127.0.0.1'), + $app->get('session_redis_server_port', 6379) ); $handler = new Handler\RedisHandler($redis, array('ttl' => $lifetime)); From bd4ca0a94be6882aa761e0986a2a186d8aa7d5a7 Mon Sep 17 00:00:00 2001 From: Allon Moritz Date: Thu, 17 Aug 2017 16:38:29 +0200 Subject: [PATCH 32/36] Restore the Factory::getContainer function and deprecate it --- libraries/container.php | 2 + libraries/joomla/archive/archive.php | 4 +- libraries/joomla/base/adapter.php | 4 +- libraries/joomla/document/document.php | 5 +- .../src/CMS/Application/CMSApplication.php | 2 +- .../src/CMS/Application/CliApplication.php | 4 +- .../src/CMS/Application/WebApplication.php | 2 +- .../src/CMS/Authentication/Authentication.php | 2 +- libraries/src/CMS/Cache/CacheController.php | 4 +- libraries/src/CMS/Categories/Categories.php | 4 +- libraries/src/CMS/Controller/Controller.php | 4 +- libraries/src/CMS/Editor/Editor.php | 2 +- libraries/src/CMS/Error/AbstractRenderer.php | 4 +- libraries/src/CMS/Factory.php | 59 ++++++++++++++++++- libraries/src/CMS/Form/Form.php | 2 +- libraries/src/CMS/Installer/Installer.php | 4 +- libraries/src/CMS/Menu/AbstractMenu.php | 3 +- libraries/src/CMS/Model/Model.php | 7 ++- libraries/src/CMS/Pathway/Pathway.php | 9 +-- libraries/src/CMS/Router/Router.php | 4 +- libraries/src/CMS/Router/SiteRouter.php | 2 +- libraries/src/CMS/Table/Table.php | 7 ++- libraries/src/CMS/Toolbar/Toolbar.php | 7 ++- tests/unit/core/case/case.php | 2 + tests/unit/core/case/database.php | 2 + tests/unit/core/case/trait.php | 15 ----- tests/unit/core/mock/application/cms.php | 4 -- tests/unit/core/mock/container.php | 54 ----------------- .../JApplicationAdministratorTest.php | 1 - .../cms/application/JApplicationCmsTest.php | 1 - .../cms/application/JApplicationSiteTest.php | 1 - 31 files changed, 109 insertions(+), 118 deletions(-) delete mode 100644 tests/unit/core/mock/container.php diff --git a/libraries/container.php b/libraries/container.php index 4819a5a77c732..39e3efc3bf0ed 100644 --- a/libraries/container.php +++ b/libraries/container.php @@ -19,4 +19,6 @@ ->registerServiceProvider(new \Joomla\CMS\Service\Provider\Session) ->registerServiceProvider(new \Joomla\CMS\Service\Provider\Toolbar); +\Joomla\CMS\Factory::$container = $container; + return $container; diff --git a/libraries/joomla/archive/archive.php b/libraries/joomla/archive/archive.php index c40e847bc573e..afe6d52499952 100644 --- a/libraries/joomla/archive/archive.php +++ b/libraries/joomla/archive/archive.php @@ -188,9 +188,9 @@ public static function getAdapter($type) } // Check for a possible service from the container otherwise manually instantiate the class - if (JFactory::getApplication()->getContainer()->exists($class)) + if (JFactory::getContainer()->exists($class)) { - self::$adapters[$type] = JFactory::getApplication()->getContainer()->get($class); + self::$adapters[$type] = JFactory::getContainer()->get($class); } else { diff --git a/libraries/joomla/base/adapter.php b/libraries/joomla/base/adapter.php index e29798619494b..f4164dc5fe355 100644 --- a/libraries/joomla/base/adapter.php +++ b/libraries/joomla/base/adapter.php @@ -168,9 +168,9 @@ public function setAdapter($name, &$adapter = null, $options = array()) } // Check for a possible service from the container otherwise manually instantiate the class - if (JFactory::getApplication()->getContainer()->exists($class)) + if (JFactory::getContainer()->exists($class)) { - $this->_adapters[$name] = JFactory::getApplication()->getContainer()->get($class); + $this->_adapters[$name] = JFactory::getContainer()->get($class); } else { diff --git a/libraries/joomla/document/document.php b/libraries/joomla/document/document.php index b9b8e94cc8527..cfdffe1f6f997 100644 --- a/libraries/joomla/document/document.php +++ b/libraries/joomla/document/document.php @@ -323,7 +323,8 @@ public function __construct($options = array()) * * @return object The document object. * - * @since 11.1 + * @since 11.1 + * @deprecated 5.0 Use the document factory */ public static function getInstance($type = 'html', $attributes = array()) { @@ -331,7 +332,7 @@ public static function getInstance($type = 'html', $attributes = array()) if (empty(self::$instances[$signature])) { - self::$instances[$signature] = JFactory::getApplication()->getContainer()->get(FactoryInterface::class)->createDocument($type, $attributes); + self::$instances[$signature] = JFactory::getContainer()->get(FactoryInterface::class)->createDocument($type, $attributes); } return self::$instances[$signature]; diff --git a/libraries/src/CMS/Application/CMSApplication.php b/libraries/src/CMS/Application/CMSApplication.php index dcbe82cbebf96..71d5d72f40b1a 100644 --- a/libraries/src/CMS/Application/CMSApplication.php +++ b/libraries/src/CMS/Application/CMSApplication.php @@ -473,7 +473,7 @@ public function getClientId() * * @since 3.2 * @throws \RuntimeException - * @deprecated 5.0 Use \Joomla\CMS\Factory::getApplication()->getContainer()->get($name) instead + * @deprecated 5.0 Use \Joomla\CMS\Factory::getContainer()->get($name) instead */ public static function getInstance($name = null, $prefix = '\JApplication', Container $container = null) { diff --git a/libraries/src/CMS/Application/CliApplication.php b/libraries/src/CMS/Application/CliApplication.php index a8f116dcc45bd..84c56c498ccd7 100644 --- a/libraries/src/CMS/Application/CliApplication.php +++ b/libraries/src/CMS/Application/CliApplication.php @@ -68,7 +68,7 @@ public function __construct(\JInputCli $input = null, Registry $config = null, C $this->close(); } - $container = $container ?: new Container; + $container = $container ?: Factory::getContainer(); $this->setContainer($container); $this->input = $input ?: new \JInputCli; @@ -107,7 +107,7 @@ public function __construct(\JInputCli $input = null, Registry $config = null, C * * @since 11.1 * @throws \RuntimeException - * @deprecated 5.0 Use \Joomla\CMS\Factory::getApplication()->getContainer()->get($name) instead + * @deprecated 5.0 Use \Joomla\CMS\Factory::getContainer()->get($name) instead */ public static function getInstance($name = null) { diff --git a/libraries/src/CMS/Application/WebApplication.php b/libraries/src/CMS/Application/WebApplication.php index 4cb24464fab54..84766112577cb 100644 --- a/libraries/src/CMS/Application/WebApplication.php +++ b/libraries/src/CMS/Application/WebApplication.php @@ -102,7 +102,7 @@ public function __construct(\JInput $input = null, Registry $config = null, WebC * * @since 11.3 * @throws \RuntimeException - * @deprecated 5.0 Use \Joomla\CMS\Factory::getApplication()->getContainer()->get($name) instead + * @deprecated 5.0 Use \Joomla\CMS\Factory::getContainer()->get($name) instead */ public static function getInstance($name = null) { diff --git a/libraries/src/CMS/Authentication/Authentication.php b/libraries/src/CMS/Authentication/Authentication.php index 7dd3cbac962ce..791861440c0cd 100644 --- a/libraries/src/CMS/Authentication/Authentication.php +++ b/libraries/src/CMS/Authentication/Authentication.php @@ -83,7 +83,7 @@ public function __construct(DispatcherInterface $dispatcher = null) // Set the dispatcher if (!is_object($dispatcher)) { - $dispatcher = \JFactory::getApplication()->getContainer()->get('dispatcher'); + $dispatcher = \JFactory::getContainer()->get('dispatcher'); } $this->setDispatcher($dispatcher); diff --git a/libraries/src/CMS/Cache/CacheController.php b/libraries/src/CMS/Cache/CacheController.php index 417ac4f486740..deb5f93e35aa3 100644 --- a/libraries/src/CMS/Cache/CacheController.php +++ b/libraries/src/CMS/Cache/CacheController.php @@ -115,9 +115,9 @@ public static function getInstance($type = 'output', $options = array()) } // Check for a possible service from the container otherwise manually instantiate the class - if (\JFactory::getApplication()->getContainer()->exists($class)) + if (\JFactory::getContainer()->exists($class)) { - return \JFactory::getApplication()->getContainer()->get($class); + return \JFactory::getContainer()->get($class); } return new $class($options); diff --git a/libraries/src/CMS/Categories/Categories.php b/libraries/src/CMS/Categories/Categories.php index 5f58773fb013e..15c2c89193722 100644 --- a/libraries/src/CMS/Categories/Categories.php +++ b/libraries/src/CMS/Categories/Categories.php @@ -153,9 +153,9 @@ public static function getInstance($extension, $options = array()) } // Check for a possible service from the container otherwise manually instantiate the class - if (\JFactory::getApplication()->getContainer()->exists($classname)) + if (\JFactory::getContainer()->exists($classname)) { - self::$instances[$hash] = \JFactory::getApplication()->getContainer()->get($classname); + self::$instances[$hash] = \JFactory::getContainer()->get($classname); } else { diff --git a/libraries/src/CMS/Controller/Controller.php b/libraries/src/CMS/Controller/Controller.php index 635391c6124bb..7c4b1f04ce249 100644 --- a/libraries/src/CMS/Controller/Controller.php +++ b/libraries/src/CMS/Controller/Controller.php @@ -324,9 +324,9 @@ public static function getInstance($prefix, $config = array()) } // Check for a possible service from the container otherwise manually instantiate the class - if (\JFactory::getApplication()->getContainer()->exists($class)) + if (\JFactory::getContainer()->exists($class)) { - self::$instance = \JFactory::getApplication()->getContainer()->get($class); + self::$instance = \JFactory::getContainer()->get($class); } else { diff --git a/libraries/src/CMS/Editor/Editor.php b/libraries/src/CMS/Editor/Editor.php index e2023aa86a14d..bbb912136179d 100644 --- a/libraries/src/CMS/Editor/Editor.php +++ b/libraries/src/CMS/Editor/Editor.php @@ -79,7 +79,7 @@ public function __construct($editor = 'none', DispatcherInterface $dispatcher = // Set the dispatcher if (!is_object($dispatcher)) { - $dispatcher = \JFactory::getApplication()->getContainer()->get('dispatcher'); + $dispatcher = \JFactory::getContainer()->get('dispatcher'); } $this->setDispatcher($dispatcher); diff --git a/libraries/src/CMS/Error/AbstractRenderer.php b/libraries/src/CMS/Error/AbstractRenderer.php index 48d81bf4713b1..a08c5250b562e 100644 --- a/libraries/src/CMS/Error/AbstractRenderer.php +++ b/libraries/src/CMS/Error/AbstractRenderer.php @@ -76,9 +76,9 @@ public static function getRenderer($type) $class = __NAMESPACE__ . '\\Renderer\\' . ucfirst(strtolower($type)) . 'Renderer'; // First check if an object may exist in the container and prefer that over everything else - if (\JFactory::getApplication()->getContainer()->exists($class)) + if (\JFactory::getContainer()->exists($class)) { - return \JFactory::getApplication()->getContainer()->get($class); + return \JFactory::getContainer()->get($class); } // Next check if a local class exists and use that diff --git a/libraries/src/CMS/Factory.php b/libraries/src/CMS/Factory.php index 3cc42071963a7..cfe10b59c5243 100644 --- a/libraries/src/CMS/Factory.php +++ b/libraries/src/CMS/Factory.php @@ -19,6 +19,7 @@ use Joomla\CMS\Mail\MailHelper; use Joomla\CMS\Session\Session; use Joomla\Database\DatabaseDriver; +use Joomla\DI\Container; use Joomla\CMS\User\User; use Joomla\Registry\Registry; use PHPMailer\PHPMailer\Exception as phpmailerException; @@ -55,6 +56,15 @@ abstract class Factory */ public static $config = null; + /** + * Global container object + * + * @var Container + * @since 4.0 + * @deprecated Don't us it, it is needed for the transition period + */ + public static $container = null; + /** * Container for Date instances * @@ -167,6 +177,28 @@ public static function getConfig($file = null, $type = 'PHP', $namespace = '') return self::$config; } + /** + * Get a container object + * + * Returns the global service container object, only creating it if it doesn't already exist. + * + * This function is for internal purposes only. Extensions should NOT use it!! + * + * @return Container + * + * @since 4.0 + * @deprecated For the current state it is not known when this function will be removed + */ + public static function getContainer() + { + if (!self::$container) + { + self::$container = self::createContainer(); + } + + return self::$container; + } + /** * Get a session object. * @@ -316,9 +348,9 @@ public static function getDbo() { if (!self::$database) { - if (self::getApplication()->getContainer()->exists('JDatabaseDriver')) + if (self::getContainer()->exists('JDatabaseDriver')) { - self::$database = self::getApplication()->getContainer()->get('JDatabaseDriver'); + self::$database = self::getContainer()->get('JDatabaseDriver'); } else { @@ -455,6 +487,29 @@ protected static function createConfig($file, $type = 'PHP', $namespace = '') return $registry; } + /** + * Create a container object + * + * @return Container + * + * @since 4.0 + * @deprecated See Factory::getContainer() + */ + protected static function createContainer() + { + $container = (new Container) + ->registerServiceProvider(new \Joomla\CMS\Service\Provider\Application) + ->registerServiceProvider(new \Joomla\CMS\Service\Provider\Database) + ->registerServiceProvider(new \Joomla\CMS\Service\Provider\Dispatcher) + ->registerServiceProvider(new \Joomla\CMS\Service\Provider\Form) + ->registerServiceProvider(new \Joomla\CMS\Service\Provider\Document) + ->registerServiceProvider(new \Joomla\CMS\Service\Provider\Menu) + ->registerServiceProvider(new \Joomla\CMS\Service\Provider\Session) + ->registerServiceProvider(new \Joomla\CMS\Service\Provider\Toolbar); + + return $container; + } + /** * Create a session object * diff --git a/libraries/src/CMS/Form/Form.php b/libraries/src/CMS/Form/Form.php index 93797ae7bd7e0..9cc5e45b203b7 100644 --- a/libraries/src/CMS/Form/Form.php +++ b/libraries/src/CMS/Form/Form.php @@ -2210,7 +2210,7 @@ public static function getInstance($name, $data = null, $options = array(), $rep } // Instantiate the form. - $forms[$name] = \JFactory::getApplication()->getContainer()->get(FormFactoryInterface::class)->createForm($name, $options); + $forms[$name] = \JFactory::getContainer()->get(FormFactoryInterface::class)->createForm($name, $options); // Load the data. if (substr($data, 0, 1) == '<') diff --git a/libraries/src/CMS/Installer/Installer.php b/libraries/src/CMS/Installer/Installer.php index 4b7b3c43c746a..277dd3fe50517 100644 --- a/libraries/src/CMS/Installer/Installer.php +++ b/libraries/src/CMS/Installer/Installer.php @@ -2386,9 +2386,9 @@ public function loadAdapter($adapter, $options = array()) $options['type'] = $adapter; // Check for a possible service from the container otherwise manually instantiate the class - if (\JFactory::getApplication()->getContainer()->exists($class)) + if (\JFactory::getContainer()->exists($class)) { - return \JFactory::getApplication()->getContainer()->get($class); + return \JFactory::getContainer()->get($class); } return new $class($this, $this->getDbo(), $options); diff --git a/libraries/src/CMS/Menu/AbstractMenu.php b/libraries/src/CMS/Menu/AbstractMenu.php index fa2d2afd510c5..a56629a50a35f 100644 --- a/libraries/src/CMS/Menu/AbstractMenu.php +++ b/libraries/src/CMS/Menu/AbstractMenu.php @@ -92,6 +92,7 @@ public function __construct($options = array()) * * @since 1.5 * @throws \Exception + * @deprecated 5.0 Use the menu factory instead */ public static function getInstance($client, $options = array()) { @@ -102,7 +103,7 @@ public static function getInstance($client, $options = array()) if (empty(self::$instances[$client])) { - self::$instances[$client] = \JFactory::getApplication()->getContainer()->get(MenuFactoryInterface::class)->createMenu($client, $options); + self::$instances[$client] = \JFactory::getContainer()->get(MenuFactoryInterface::class)->createMenu($client, $options); } return self::$instances[$client]; diff --git a/libraries/src/CMS/Model/Model.php b/libraries/src/CMS/Model/Model.php index cdf8c9b4767e0..d1a2d32b9733e 100644 --- a/libraries/src/CMS/Model/Model.php +++ b/libraries/src/CMS/Model/Model.php @@ -181,7 +181,8 @@ protected static function _createFileName($type, $parts = array()) * * @return self|boolean A \JModelLegacy instance or false on failure * - * @since 3.0 + * @since 3.0 + * @deprecated 5.0 Get the model from the MvcFactory */ public static function getInstance($type, $prefix = '', $config = array()) { @@ -214,9 +215,9 @@ public static function getInstance($type, $prefix = '', $config = array()) } // Check for a possible service from the container otherwise manually instantiate the class - if (\JFactory::getApplication()->getContainer()->exists($modelClass)) + if (\JFactory::getContainer()->exists($modelClass)) { - return \JFactory::getApplication()->getContainer()->get($modelClass); + return \JFactory::getContainer()->get($modelClass); } return new $modelClass($config); diff --git a/libraries/src/CMS/Pathway/Pathway.php b/libraries/src/CMS/Pathway/Pathway.php index 23055dd6c4255..6f853f4a73ebe 100644 --- a/libraries/src/CMS/Pathway/Pathway.php +++ b/libraries/src/CMS/Pathway/Pathway.php @@ -51,8 +51,9 @@ class Pathway * * @return Pathway A Pathway object. * - * @since 1.5 - * @throws \RuntimeException + * @since 1.5 + * @throws \RuntimeException + * @deprecated 5.0 Instantiate the object directly */ public static function getInstance($client, $options = array()) { @@ -67,9 +68,9 @@ public static function getInstance($client, $options = array()) } // Check for a possible service from the container otherwise manually instantiate the class - if (\JFactory::getApplication()->getContainer()->has($classname)) + if (\JFactory::getContainer()->has($classname)) { - self::$instances[$client] = \JFactory::getApplication()->getContainer()->get($classname); + self::$instances[$client] = \JFactory::getContainer()->get($classname); } else { diff --git a/libraries/src/CMS/Router/Router.php b/libraries/src/CMS/Router/Router.php index 55823a856eba7..fb64de904af7e 100644 --- a/libraries/src/CMS/Router/Router.php +++ b/libraries/src/CMS/Router/Router.php @@ -103,9 +103,9 @@ public static function getInstance($client, $options = array()) } // Check for a possible service from the container otherwise manually instantiate the class - if (\JFactory::getApplication()->getContainer()->exists($classname)) + if (\JFactory::getContainer()->exists($classname)) { - self::$instances[$client] = \JFactory::getApplication()->getContainer()->get($classname); + self::$instances[$client] = \JFactory::getContainer()->get($classname); } else { diff --git a/libraries/src/CMS/Router/SiteRouter.php b/libraries/src/CMS/Router/SiteRouter.php index 32b661b482a58..bb0e3598765e4 100644 --- a/libraries/src/CMS/Router/SiteRouter.php +++ b/libraries/src/CMS/Router/SiteRouter.php @@ -60,7 +60,7 @@ class SiteRouter extends Router */ public function __construct(CMSApplication $app = null, AbstractMenu $menu = null) { - $this->app = $app ?: Factory::getApplication()->getContainer()->get(SiteApplication::class); + $this->app = $app ?: Factory::getContainer()->get(SiteApplication::class); $this->menu = $menu ?: $this->app->getMenu(); // Add core rules diff --git a/libraries/src/CMS/Table/Table.php b/libraries/src/CMS/Table/Table.php index f3bd2d4405736..b5e50349fb5da 100644 --- a/libraries/src/CMS/Table/Table.php +++ b/libraries/src/CMS/Table/Table.php @@ -257,7 +257,8 @@ public function getFields($reload = false) * * @return Table|boolean A Table object if found or boolean false on failure. * - * @since 11.1 + * @since 11.1 + * @deprecated 5.0 Use the MvcFactory instead */ public static function getInstance($type, $prefix = 'JTable', $config = array()) { @@ -300,9 +301,9 @@ public static function getInstance($type, $prefix = 'JTable', $config = array()) $db = isset($config['dbo']) ? $config['dbo'] : \JFactory::getDbo(); // Check for a possible service from the container otherwise manually instantiate the class - if (\JFactory::getApplication()->getContainer()->exists($tableClass)) + if (\JFactory::getContainer()->exists($tableClass)) { - return \JFactory::getApplication()->getContainer()->get($tableClass); + return \JFactory::getContainer()->get($tableClass); } // Instantiate a new table class and return it. diff --git a/libraries/src/CMS/Toolbar/Toolbar.php b/libraries/src/CMS/Toolbar/Toolbar.php index bf47922f76b0a..28fba1d08da6c 100644 --- a/libraries/src/CMS/Toolbar/Toolbar.php +++ b/libraries/src/CMS/Toolbar/Toolbar.php @@ -89,7 +89,7 @@ public function __construct($name = 'toolbar', ToolbarFactoryInterface $factory ); $factory = new ContainerAwareToolbarFactory; - $factory->setContainer(\JFactory::getApplication()->getContainer()); + $factory->setContainer(\JFactory::getContainer()); } $this->setFactory($factory); @@ -105,13 +105,14 @@ public function __construct($name = 'toolbar', ToolbarFactoryInterface $factory * * @return Toolbar The Toolbar object. * - * @since 1.5 + * @since 1.5 + * @deprecated 5.0 Use the toolbar factory instead */ public static function getInstance($name = 'toolbar') { if (empty(self::$instances[$name])) { - self::$instances[$name] = \JFactory::getApplication()->getContainer()->get(ToolbarFactoryInterface::class)->createToolbar($name); + self::$instances[$name] = \JFactory::getContainer()->get(ToolbarFactoryInterface::class)->createToolbar($name); } return self::$instances[$name]; diff --git a/tests/unit/core/case/case.php b/tests/unit/core/case/case.php index 53fa33a73de29..8269b5cad055f 100644 --- a/tests/unit/core/case/case.php +++ b/tests/unit/core/case/case.php @@ -27,6 +27,7 @@ protected function restoreFactoryState() { JFactory::$application = $this->_stashedFactoryState['application']; JFactory::$config = $this->_stashedFactoryState['config']; + JFactory::$container = $this->_stashedFactoryState['container']; JFactory::$dates = $this->_stashedFactoryState['dates']; JFactory::$session = $this->_stashedFactoryState['session']; JFactory::$language = $this->_stashedFactoryState['language']; @@ -46,6 +47,7 @@ protected function saveFactoryState() { $this->_stashedFactoryState['application'] = JFactory::$application; $this->_stashedFactoryState['config'] = JFactory::$config; + $this->_stashedFactoryState['container'] = JFactory::$container; $this->_stashedFactoryState['dates'] = JFactory::$dates; $this->_stashedFactoryState['session'] = JFactory::$session; $this->_stashedFactoryState['language'] = JFactory::$language; diff --git a/tests/unit/core/case/database.php b/tests/unit/core/case/database.php index 644e3c762f2c2..e3182104751f6 100644 --- a/tests/unit/core/case/database.php +++ b/tests/unit/core/case/database.php @@ -168,6 +168,7 @@ protected function restoreFactoryState() { JFactory::$application = $this->_stashedFactoryState['application']; JFactory::$config = $this->_stashedFactoryState['config']; + JFactory::$container = $this->_stashedFactoryState['container']; JFactory::$dates = $this->_stashedFactoryState['dates']; JFactory::$session = $this->_stashedFactoryState['session']; JFactory::$language = $this->_stashedFactoryState['language']; @@ -186,6 +187,7 @@ protected function saveFactoryState() { $this->_stashedFactoryState['application'] = JFactory::$application; $this->_stashedFactoryState['config'] = JFactory::$config; + $this->_stashedFactoryState['container'] = JFactory::$container; $this->_stashedFactoryState['dates'] = JFactory::$dates; $this->_stashedFactoryState['session'] = JFactory::$session; $this->_stashedFactoryState['language'] = JFactory::$language; diff --git a/tests/unit/core/case/trait.php b/tests/unit/core/case/trait.php index bb7b49981134b..7f49f2cd15716 100644 --- a/tests/unit/core/case/trait.php +++ b/tests/unit/core/case/trait.php @@ -217,21 +217,6 @@ class_exists('Joomla\\Event\\DispatcherInterface'); return TestMockDispatcher::create($this, $defaults); } - /** - * Gets a mock container object. - * - * @return \Joomla\DI\Container - * - * @since __DEPLOY_VERSION__ - */ - public function getMockContainer() - { - // Attempt to load the class first. - class_exists(\Joomla\DI\Container::class); - - return TestMockContainer::create($this); - } - /** * Gets a mock document object. * diff --git a/tests/unit/core/mock/application/cms.php b/tests/unit/core/mock/application/cms.php index 9e7e243d586d8..aef603fc96926 100644 --- a/tests/unit/core/mock/application/cms.php +++ b/tests/unit/core/mock/application/cms.php @@ -28,7 +28,6 @@ public static function getMethods() 'getMenu', 'getPathway', 'getTemplate', - 'getContainer', 'getLanguageFilter', 'initialiseApp', 'isClient', @@ -58,9 +57,6 @@ public static function addBehaviours($test, $mockObject, $options) // Mock calls to JApplicationCms::getMenu(); $mockObject->expects($test->any())->method('getMenu')->will($test->returnValue(TestMockMenu::create($test))); - // Mock calls to JApplicationCms::getContainer(); - $mockObject->expects($test->any())->method('getContainer')->will($test->returnValue(TestMockContainer::create($test))); - return parent::addBehaviours($test, $mockObject, $options); } diff --git a/tests/unit/core/mock/container.php b/tests/unit/core/mock/container.php deleted file mode 100644 index d5bb33306b055..0000000000000 --- a/tests/unit/core/mock/container.php +++ /dev/null @@ -1,54 +0,0 @@ -getMockBuilder(\Joomla\DI\Container::class) - ->setMethods($methods) - ->getMock(); - - // @Todo mock the container functions - $container = require JPATH_LIBRARIES . '/container.php'; - - $test->assignMockCallbacks( - $mockObject, - array( - 'has' => array($container, 'has'), - 'exists' => array($container, 'exists'), - 'get' => array($container, 'get'), - ) - ); - - return $mockObject; - } -} diff --git a/tests/unit/suites/libraries/cms/application/JApplicationAdministratorTest.php b/tests/unit/suites/libraries/cms/application/JApplicationAdministratorTest.php index c648e60aa39ea..452fb130b2029 100644 --- a/tests/unit/suites/libraries/cms/application/JApplicationAdministratorTest.php +++ b/tests/unit/suites/libraries/cms/application/JApplicationAdministratorTest.php @@ -106,7 +106,6 @@ public function setUp() $this->class = new JApplicationAdministrator($this->getMockInput(), $config); $this->class->setSession(JFactory::$session); $this->class->setDispatcher($this->getMockDispatcher()); - $this->class->setContainer($this->getMockContainer()); TestReflection::setValue('JApplicationCms', 'instances', array('administrator' => $this->class)); JFactory::$application = $this->class; diff --git a/tests/unit/suites/libraries/cms/application/JApplicationCmsTest.php b/tests/unit/suites/libraries/cms/application/JApplicationCmsTest.php index 04813ef4c3413..76f1bcd11af7f 100644 --- a/tests/unit/suites/libraries/cms/application/JApplicationCmsTest.php +++ b/tests/unit/suites/libraries/cms/application/JApplicationCmsTest.php @@ -109,7 +109,6 @@ public function setUp() $this->class = new JApplicationCmsInspector($this->getMockInput(), $config); $this->class->setSession(JFactory::$session); $this->class->setDispatcher($this->getMockDispatcher()); - $this->class->setContainer($this->getMockContainer()); JFactory::$application = $this->class; } diff --git a/tests/unit/suites/libraries/cms/application/JApplicationSiteTest.php b/tests/unit/suites/libraries/cms/application/JApplicationSiteTest.php index 5386e152bea31..e57c4970a9adb 100644 --- a/tests/unit/suites/libraries/cms/application/JApplicationSiteTest.php +++ b/tests/unit/suites/libraries/cms/application/JApplicationSiteTest.php @@ -106,7 +106,6 @@ public function setUp() $this->class = new JApplicationSite($this->getMockInput(), $config); $this->class->setSession(JFactory::$session); $this->class->setDispatcher($this->getMockDispatcher()); - $this->class->setContainer($this->getMockContainer()); TestReflection::setValue('JApplicationCms', 'instances', array('site' => $this->class)); JFactory::$application = $this->class; From f7c01b365ad760d5320973daadc46992de424082 Mon Sep 17 00:00:00 2001 From: Allon Moritz Date: Thu, 17 Aug 2017 17:01:53 +0200 Subject: [PATCH 33/36] Revert tests --- .../libraries/cms/editor/JEditorTest.php | 11 +----- .../libraries/cms/model/JModelAdminTest.php | 10 ------ .../libraries/cms/model/JModelFormTest.php | 8 ++--- .../libraries/cms/model/JModelItemTest.php | 10 ------ .../libraries/cms/pathway/JPathwayTest.php | 6 ---- .../cms/toolbar/JToolbarButtonTest.php | 6 ++-- .../libraries/cms/toolbar/JToolbarTest.php | 4 +-- .../button/JToolbarButtonConfirmTest.php | 6 ++-- .../button/JToolbarButtonCustomTest.php | 9 +---- .../toolbar/button/JToolbarButtonHelpTest.php | 6 ++-- .../toolbar/button/JToolbarButtonLinkTest.php | 6 ++-- .../button/JToolbarButtonPopupTest.php | 9 +---- .../button/JToolbarButtonSliderTest.php | 9 +---- .../button/JToolbarButtonStandardTest.php | 9 +---- .../libraries/cms/ucm/JUcmContentTest.php | 2 +- .../suites/libraries/joomla/JFactoryTest.php | 2 -- .../joomla/archive/JArchiveTestCase.php | 2 -- .../joomla/base/JAdapterInstanceTest.php | 3 +- .../libraries/joomla/base/JAdapterTest.php | 3 +- .../joomla/cache/JCacheConstructTest.php | 36 +------------------ .../JCacheControllerCallbackCallbackTest.php | 24 +------------ .../joomla/document/JDocumentTest.php | 6 ---- .../libraries/joomla/user/JUserHelperTest.php | 7 ++++ 23 files changed, 33 insertions(+), 161 deletions(-) diff --git a/tests/unit/suites/libraries/cms/editor/JEditorTest.php b/tests/unit/suites/libraries/cms/editor/JEditorTest.php index 90199569c2f37..84c085601cd84 100644 --- a/tests/unit/suites/libraries/cms/editor/JEditorTest.php +++ b/tests/unit/suites/libraries/cms/editor/JEditorTest.php @@ -16,7 +16,7 @@ * @subpackage Editor * @since 3.0 */ -class JEditorTest extends TestCase +class JEditorTest extends \PHPUnit\Framework\TestCase { /** * Object under test @@ -36,12 +36,6 @@ class JEditorTest extends TestCase */ protected function setUp() { - parent::setUp(); - - $this->saveFactoryState(); - - \Joomla\CMS\Factory::$application = $this->getMockCmsApp(); - $this->object = new JEditor; } @@ -56,9 +50,6 @@ protected function setUp() protected function tearDown() { unset($this->object); - - $this->restoreFactoryState(); - parent::tearDown(); } diff --git a/tests/unit/suites/libraries/cms/model/JModelAdminTest.php b/tests/unit/suites/libraries/cms/model/JModelAdminTest.php index 2e01b1f825f68..68dc1c83bb8e1 100644 --- a/tests/unit/suites/libraries/cms/model/JModelAdminTest.php +++ b/tests/unit/suites/libraries/cms/model/JModelAdminTest.php @@ -32,12 +32,6 @@ class JModelAdminTest extends TestCase */ public function setUp() { - parent::setUp(); - - $this->saveFactoryState(); - - JFactory::$application = $this->getMockCmsApp(); - // Create mock of abstract class JModelAdmin to test concrete methods in there $this->object = $this->getMockForAbstractClass('JModelAdmin'); } @@ -54,10 +48,6 @@ public function setUp() protected function tearDown() { unset($this->object); - - $this->restoreFactoryState(); - - parent::tearDown(); } /** diff --git a/tests/unit/suites/libraries/cms/model/JModelFormTest.php b/tests/unit/suites/libraries/cms/model/JModelFormTest.php index e85822b192b0a..655e6322bb6cc 100644 --- a/tests/unit/suites/libraries/cms/model/JModelFormTest.php +++ b/tests/unit/suites/libraries/cms/model/JModelFormTest.php @@ -32,19 +32,15 @@ class JModelFormTest extends TestCase */ public function setUp() { - parent::setUp(); - $this->saveFactoryState(); - + // Create mock of abstract class JModelForm to test concrete methods in there + $this->object = $this->getMockForAbstractClass('JModelForm'); $mockApp = $this->getMockCmsApp(); $mockApp->expects($this->any()) ->method('getDispatcher') ->willReturn($this->getMockDispatcher()); JFactory::$application = $mockApp; TestReflection::setValue('JPluginHelper', 'plugins', array()); - - // Create mock of abstract class JModelForm to test concrete methods in there - $this->object = $this->getMockForAbstractClass('JModelForm'); } /** diff --git a/tests/unit/suites/libraries/cms/model/JModelItemTest.php b/tests/unit/suites/libraries/cms/model/JModelItemTest.php index 72f78bb69011f..e75b80fcd18ed 100644 --- a/tests/unit/suites/libraries/cms/model/JModelItemTest.php +++ b/tests/unit/suites/libraries/cms/model/JModelItemTest.php @@ -32,12 +32,6 @@ class JModelItemTest extends TestCase */ public function setUp() { - parent::setUp(); - - $this->saveFactoryState(); - - JFactory::$application = $this->getMockCmsApp(); - // Create mock of abstract class JModelForm to test concrete methods in there $this->object = $this->getMockForAbstractClass('JModelItem'); } @@ -54,10 +48,6 @@ public function setUp() protected function tearDown() { unset($this->object); - - $this->restoreFactoryState(); - - parent::tearDown(); } /** diff --git a/tests/unit/suites/libraries/cms/pathway/JPathwayTest.php b/tests/unit/suites/libraries/cms/pathway/JPathwayTest.php index 825aedff76710..2f9992f64c461 100644 --- a/tests/unit/suites/libraries/cms/pathway/JPathwayTest.php +++ b/tests/unit/suites/libraries/cms/pathway/JPathwayTest.php @@ -36,10 +36,6 @@ protected function setUp() $this->fixture = new JPathway; parent::setUp(); - - $this->saveFactoryState(); - - JFactory::$application = $this->getMockCmsApp(); } /** @@ -53,8 +49,6 @@ protected function tearDown() { unset($this->fixture); - $this->restoreFactoryState(); - parent::tearDown(); } diff --git a/tests/unit/suites/libraries/cms/toolbar/JToolbarButtonTest.php b/tests/unit/suites/libraries/cms/toolbar/JToolbarButtonTest.php index 72ea273599f1d..22153684ad18a 100644 --- a/tests/unit/suites/libraries/cms/toolbar/JToolbarButtonTest.php +++ b/tests/unit/suites/libraries/cms/toolbar/JToolbarButtonTest.php @@ -50,6 +50,9 @@ protected function setUp() { parent::setUp(); + $this->toolbar = JToolbar::getInstance(); + $this->object = $this->toolbar->loadButtonType('standard'); + $this->saveFactoryState(); JFactory::$application = $this->getMockCmsApp(); @@ -58,9 +61,6 @@ protected function setUp() $_SERVER['HTTP_HOST'] = 'example.com'; $_SERVER['SCRIPT_NAME'] = ''; - - $this->toolbar = JToolbar::getInstance(); - $this->object = $this->toolbar->loadButtonType('standard'); } /** diff --git a/tests/unit/suites/libraries/cms/toolbar/JToolbarTest.php b/tests/unit/suites/libraries/cms/toolbar/JToolbarTest.php index 22b8487c15b9d..285282580998c 100644 --- a/tests/unit/suites/libraries/cms/toolbar/JToolbarTest.php +++ b/tests/unit/suites/libraries/cms/toolbar/JToolbarTest.php @@ -40,6 +40,8 @@ class JToolbarTest extends TestCase */ protected function setUp() { + $this->object = new JToolbar('toolbar'); + parent::setUp(); $this->saveFactoryState(); @@ -49,8 +51,6 @@ protected function setUp() $_SERVER['SCRIPT_NAME'] = '/'; JFactory::$application = $this->getMockCmsApp(); - - $this->object = new JToolbar('toolbar'); } /** diff --git a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonConfirmTest.php b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonConfirmTest.php index 81b950e489370..47fef6b5aef23 100644 --- a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonConfirmTest.php +++ b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonConfirmTest.php @@ -50,6 +50,9 @@ class JToolbarButtonConfirmTest extends TestCaseDatabase */ protected function setUp() { + $this->toolbar = JToolbar::getInstance(); + $this->object = $this->toolbar->loadButtonType('confirm'); + $this->saveFactoryState(); JFactory::$application = $this->getMockCmsApp(); @@ -58,9 +61,6 @@ protected function setUp() $_SERVER['HTTP_HOST'] = 'example.com'; $_SERVER['SCRIPT_NAME'] = ''; - - $this->toolbar = JToolbar::getInstance(); - $this->object = $this->toolbar->loadButtonType('confirm'); } /** diff --git a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonCustomTest.php b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonCustomTest.php index 97a8632673fa8..aed1530197061 100644 --- a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonCustomTest.php +++ b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonCustomTest.php @@ -14,7 +14,7 @@ * @subpackage Toolbar * @since 3.0 */ -class JToolbarButtonCustomTest extends TestCase +class JToolbarButtonCustomTest extends \PHPUnit\Framework\TestCase { /** * Toolbar object @@ -44,10 +44,6 @@ protected function setUp() { parent::setUp(); - $this->saveFactoryState(); - - JFactory::$application = $this->getMockCmsApp(); - $this->toolbar = JToolbar::getInstance(); $this->object = $this->toolbar->loadButtonType('custom'); } @@ -63,9 +59,6 @@ protected function setUp() protected function tearDown() { unset($this->toolbar, $this->object); - - $this->restoreFactoryState(); - parent::tearDown(); } diff --git a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonHelpTest.php b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonHelpTest.php index 8e452be8e4c73..0ba9426766cbc 100644 --- a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonHelpTest.php +++ b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonHelpTest.php @@ -52,6 +52,9 @@ protected function setUp() { parent::setUp(); + $this->toolbar = JToolbar::getInstance(); + $this->object = $this->toolbar->loadButtonType('help'); + $this->saveFactoryState(); JFactory::$application = $this->getMockCmsApp(); @@ -61,9 +64,6 @@ protected function setUp() $_SERVER['HTTP_HOST'] = 'example.com'; $_SERVER['SCRIPT_NAME'] = ''; - - $this->toolbar = JToolbar::getInstance(); - $this->object = $this->toolbar->loadButtonType('help'); } /** diff --git a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonLinkTest.php b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonLinkTest.php index c6302bed0ea85..37c2b6a0b18d0 100644 --- a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonLinkTest.php +++ b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonLinkTest.php @@ -44,12 +44,12 @@ protected function setUp() { parent::setUp(); + $this->toolbar = JToolbar::getInstance(); + $this->object = $this->toolbar->loadButtonType('link'); + $this->saveFactoryState(); JFactory::$application = $this->getMockCmsApp(); - - $this->toolbar = JToolbar::getInstance(); - $this->object = $this->toolbar->loadButtonType('link'); } /** diff --git a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonPopupTest.php b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonPopupTest.php index 6184f33213143..92b4e61c8093d 100644 --- a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonPopupTest.php +++ b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonPopupTest.php @@ -14,7 +14,7 @@ * @subpackage Toolbar * @since 3.0 */ -class JToolbarButtonPopupTest extends TestCase +class JToolbarButtonPopupTest extends \PHPUnit\Framework\TestCase { /** * Toolbar object @@ -44,10 +44,6 @@ protected function setUp() { parent::setUp(); - $this->saveFactoryState(); - - JFactory::$application = $this->getMockCmsApp(); - $this->toolbar = JToolbar::getInstance(); $this->object = $this->toolbar->loadButtonType('popup'); } @@ -63,9 +59,6 @@ protected function setUp() protected function tearDown() { unset($this->toolbar, $this->object); - - $this->restoreFactoryState(); - parent::tearDown(); } diff --git a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonSliderTest.php b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonSliderTest.php index 70ec53985de2b..ebac9fac70a44 100644 --- a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonSliderTest.php +++ b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonSliderTest.php @@ -14,7 +14,7 @@ * @subpackage Toolbar * @since 3.0 */ -class JToolbarButtonSliderTest extends TestCase +class JToolbarButtonSliderTest extends \PHPUnit\Framework\TestCase { /** * Toolbar object @@ -44,10 +44,6 @@ protected function setUp() { parent::setUp(); - $this->saveFactoryState(); - - JFactory::$application = $this->getMockCmsApp(); - $this->toolbar = JToolbar::getInstance(); $this->object = $this->toolbar->loadButtonType('slider'); } @@ -63,9 +59,6 @@ protected function setUp() protected function tearDown() { unset($this->toolbar, $this->object); - - $this->restoreFactoryState(); - parent::tearDown(); } diff --git a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonStandardTest.php b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonStandardTest.php index ff106c28f8427..a18cf94c0d0f7 100644 --- a/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonStandardTest.php +++ b/tests/unit/suites/libraries/cms/toolbar/button/JToolbarButtonStandardTest.php @@ -14,7 +14,7 @@ * @subpackage Toolbar * @since 3.0 */ -class JToolbarButtonStandardTest extends TestCase +class JToolbarButtonStandardTest extends \PHPUnit\Framework\TestCase { /** * Toolbar object @@ -44,10 +44,6 @@ protected function setUp() { parent::setUp(); - $this->saveFactoryState(); - - JFactory::$application = $this->getMockCmsApp(); - $this->toolbar = JToolbar::getInstance(); $this->object = $this->toolbar->loadButtonType('standard'); } @@ -63,9 +59,6 @@ protected function setUp() protected function tearDown() { unset($this->toolbar, $this->object); - - $this->restoreFactoryState(); - parent::tearDown(); } diff --git a/tests/unit/suites/libraries/cms/ucm/JUcmContentTest.php b/tests/unit/suites/libraries/cms/ucm/JUcmContentTest.php index c00f1e31abe9d..f17891983819e 100644 --- a/tests/unit/suites/libraries/cms/ucm/JUcmContentTest.php +++ b/tests/unit/suites/libraries/cms/ucm/JUcmContentTest.php @@ -36,7 +36,7 @@ protected function setUp() $this->saveFactoryState(); - JFactory::$application = $this->getMockCmsApp(); + JFactory::$application = $this->getMockWeb(); $this->object = new JUcmContent(JTable::getInstance('Content'), 'com_content.article'); } diff --git a/tests/unit/suites/libraries/joomla/JFactoryTest.php b/tests/unit/suites/libraries/joomla/JFactoryTest.php index 04e981a981b03..06297cb452e2f 100644 --- a/tests/unit/suites/libraries/joomla/JFactoryTest.php +++ b/tests/unit/suites/libraries/joomla/JFactoryTest.php @@ -29,8 +29,6 @@ public function setUp() parent::setUp(); $this->saveFactoryState(); - - JFactory::$application = $this->getMockCmsApp(); } /** diff --git a/tests/unit/suites/libraries/joomla/archive/JArchiveTestCase.php b/tests/unit/suites/libraries/joomla/archive/JArchiveTestCase.php index 870796c06595d..a1f1943b798ac 100644 --- a/tests/unit/suites/libraries/joomla/archive/JArchiveTestCase.php +++ b/tests/unit/suites/libraries/joomla/archive/JArchiveTestCase.php @@ -54,8 +54,6 @@ protected function setUp() // We need a configuration with a tmp_path set JFactory::$config = new Registry(['tmp_path' => __DIR__ . '/output']); - - JFactory::$application = $this->getMockCmsApp(); } /** diff --git a/tests/unit/suites/libraries/joomla/base/JAdapterInstanceTest.php b/tests/unit/suites/libraries/joomla/base/JAdapterInstanceTest.php index 566d99731a2a3..cd836c51cd945 100644 --- a/tests/unit/suites/libraries/joomla/base/JAdapterInstanceTest.php +++ b/tests/unit/suites/libraries/joomla/base/JAdapterInstanceTest.php @@ -34,8 +34,7 @@ protected function setUp() $this->saveFactoryState(); - JFactory::$application = $this->getMockCmsApp(); - JFactory::$database = $this->getMockDatabase(); + JFactory::$database = $this->getMockDatabase(); } /** diff --git a/tests/unit/suites/libraries/joomla/base/JAdapterTest.php b/tests/unit/suites/libraries/joomla/base/JAdapterTest.php index 14931fc16b984..9ebf478d4f280 100644 --- a/tests/unit/suites/libraries/joomla/base/JAdapterTest.php +++ b/tests/unit/suites/libraries/joomla/base/JAdapterTest.php @@ -34,8 +34,7 @@ protected function setUp() $this->saveFactoryState(); - JFactory::$application = $this->getMockCmsApp(); - JFactory::$database = $this->getMockDatabase(); + JFactory::$database = $this->getMockDatabase(); } /** diff --git a/tests/unit/suites/libraries/joomla/cache/JCacheConstructTest.php b/tests/unit/suites/libraries/joomla/cache/JCacheConstructTest.php index d6d62262aa396..b0bf936d53483 100644 --- a/tests/unit/suites/libraries/joomla/cache/JCacheConstructTest.php +++ b/tests/unit/suites/libraries/joomla/cache/JCacheConstructTest.php @@ -15,42 +15,8 @@ * * @since 11.1 */ -class JCacheTest_Construct extends TestCase +class JCacheTest_Construct extends \PHPUnit\Framework\TestCase { - /** - * Sets up the fixture. - * - * This method is called before a test is executed. - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - protected function setUp() - { - parent::setUp(); - - $this->saveFactoryState(); - - JFactory::$application = $this->getMockCmsApp(); - } - - /** - * Tears down the fixture. - * - * This method is called after a test is executed. - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - public function tearDown() - { - $this->restoreFactoryState(); - - parent::tearDown(); - } - /** * Test... * diff --git a/tests/unit/suites/libraries/joomla/cache/controller/JCacheControllerCallbackCallbackTest.php b/tests/unit/suites/libraries/joomla/cache/controller/JCacheControllerCallbackCallbackTest.php index 52371ba45bb7d..b668499030bf4 100644 --- a/tests/unit/suites/libraries/joomla/cache/controller/JCacheControllerCallbackCallbackTest.php +++ b/tests/unit/suites/libraries/joomla/cache/controller/JCacheControllerCallbackCallbackTest.php @@ -11,7 +11,7 @@ * @package Joomla.UnitTest * @subpackage Cache */ -class JCacheControllerCallbackTest_Callback extends TestCase +class JCacheControllerCallbackTest_Callback extends \PHPUnit\Framework\TestCase { /** @@ -21,34 +21,12 @@ class JCacheControllerCallbackTest_Callback extends TestCase */ protected function setUp() { - parent::setUp(); - - $this->saveFactoryState(); - require_once dirname(__DIR__) . '/storage/JCacheStorageMock.php'; require_once __DIR__ . '/JCacheControllerCallback.helper.php'; // Some tests are affected by the output of the logger, so we clear the logger here. JLog::setInstance(null); - - JFactory::$application = $this->getMockCmsApp(); - } - - /** - * Tears down the fixture. - * - * This method is called after a test is executed. - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - public function tearDown() - { - $this->restoreFactoryState(); - - parent::tearDown(); } /** diff --git a/tests/unit/suites/libraries/joomla/document/JDocumentTest.php b/tests/unit/suites/libraries/joomla/document/JDocumentTest.php index 3eae786fecc75..ee70d7bc56993 100644 --- a/tests/unit/suites/libraries/joomla/document/JDocumentTest.php +++ b/tests/unit/suites/libraries/joomla/document/JDocumentTest.php @@ -25,10 +25,6 @@ protected function setUp() { parent::setUp(); - $this->saveFactoryState(); - - \Joomla\CMS\Factory::$application = $this->getMockCmsApp(); - $this->object = new JDocument; } @@ -41,8 +37,6 @@ protected function tearDown() JDocument::$_buffer = null; unset($this->object); - $this->restoreFactoryState(); - parent::tearDown(); } diff --git a/tests/unit/suites/libraries/joomla/user/JUserHelperTest.php b/tests/unit/suites/libraries/joomla/user/JUserHelperTest.php index cb3767e152637..12dca10009e3f 100644 --- a/tests/unit/suites/libraries/joomla/user/JUserHelperTest.php +++ b/tests/unit/suites/libraries/joomla/user/JUserHelperTest.php @@ -305,6 +305,13 @@ public function casesActivateUser() */ public function testActivateUser($activation, $expected) { + // Configure the container + $container = (new \Joomla\DI\Container) + ->set('dispatcher', $this->getMockDispatcher()) + ->set('db', static::$driver); + + JFactory::$container = $container; + $this->assertEquals( JUserHelper::activateUser($activation), $expected From f15ffe879745c0883dd8f8972dc5ffdb0aaaf4ea Mon Sep 17 00:00:00 2001 From: Allon Moritz Date: Thu, 17 Aug 2017 19:28:40 +0200 Subject: [PATCH 34/36] Improve deprecated messages --- libraries/src/CMS/Factory.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/libraries/src/CMS/Factory.php b/libraries/src/CMS/Factory.php index cfe10b59c5243..21cf5fc23adb3 100644 --- a/libraries/src/CMS/Factory.php +++ b/libraries/src/CMS/Factory.php @@ -61,7 +61,7 @@ abstract class Factory * * @var Container * @since 4.0 - * @deprecated Don't us it, it is needed for the transition period + * @deprecated 5.0 Don't us it, it is needed for the transition period */ public static $container = null; @@ -182,12 +182,14 @@ public static function getConfig($file = null, $type = 'PHP', $namespace = '') * * Returns the global service container object, only creating it if it doesn't already exist. * - * This function is for internal purposes only. Extensions should NOT use it!! + * This method exists to bridge the CMS architecture to a service injection based structure. + * Use of this method outside of service factory methods (i.e. a static getInstance() method + * or a method which builds class services) is highly discouraged. * * @return Container * * @since 4.0 - * @deprecated For the current state it is not known when this function will be removed + * @deprecated 5.0 For the current state it is not known when this function will be removed */ public static function getContainer() { From f9afe1c2eead6e429fa8df80758e5bd26a8d3987 Mon Sep 17 00:00:00 2001 From: Allon Moritz Date: Thu, 17 Aug 2017 19:40:06 +0200 Subject: [PATCH 35/36] Set the global container in the factory in the front controller --- administrator/includes/app.php | 3 +++ build/helpTOC.php | 3 +++ cli/deletefiles.php | 3 +++ cli/finder_indexer.php | 3 +++ cli/garbagecron.php | 3 +++ cli/update_cron.php | 3 +++ includes/app.php | 3 +++ installation/application/app.php | 3 +++ libraries/container.php | 2 -- 9 files changed, 24 insertions(+), 2 deletions(-) diff --git a/administrator/includes/app.php b/administrator/includes/app.php index ea999c8537e8f..e855559e4466f 100644 --- a/administrator/includes/app.php +++ b/administrator/includes/app.php @@ -28,6 +28,9 @@ /** @var \Joomla\DI\Container $container */ $container = require JPATH_LIBRARIES . '/container.php'; +// Set the container as global one +\Joomla\CMS\Factory::$container = $container; + // Set profiler start time and memory usage and mark afterLoad in the profiler. JDEBUG ? JProfiler::getInstance('Application')->setStart($startTime, $startMem)->mark('afterLoad') : null; diff --git a/build/helpTOC.php b/build/helpTOC.php index 31f8c049b8032..ec07af0338967 100644 --- a/build/helpTOC.php +++ b/build/helpTOC.php @@ -203,6 +203,9 @@ public function doExecute() /** @var \Joomla\DI\Container $container */ $container = require JPATH_LIBRARIES . '/container.php'; +// Set the container as global one +\Joomla\CMS\Factory::$container = $container; + // Set up the container $container->share( 'MediawikiCli', diff --git a/cli/deletefiles.php b/cli/deletefiles.php index 399e52e55cae5..2e4f3e83ddf9e 100644 --- a/cli/deletefiles.php +++ b/cli/deletefiles.php @@ -67,6 +67,9 @@ protected function doExecute() /** @var \Joomla\DI\Container $container */ $container = require JPATH_LIBRARIES . '/container.php'; +// Set the container as global one +\Joomla\CMS\Factory::$container = $container; + // Set up the container $container->share( 'DeletefilesCli', diff --git a/cli/finder_indexer.php b/cli/finder_indexer.php index e6b8949763316..7fac903028b9c 100644 --- a/cli/finder_indexer.php +++ b/cli/finder_indexer.php @@ -363,6 +363,9 @@ private function getFilters() /** @var \Joomla\DI\Container $container */ $container = require JPATH_LIBRARIES . '/container.php'; +// Set the container as global one +\Joomla\CMS\Factory::$container = $container; + // Set up the container $container->share( 'FinderCli', diff --git a/cli/garbagecron.php b/cli/garbagecron.php index 7c91a26772e39..3b0daf1c4bf69 100644 --- a/cli/garbagecron.php +++ b/cli/garbagecron.php @@ -47,6 +47,9 @@ protected function doExecute() /** @var \Joomla\DI\Container $container */ $container = require JPATH_LIBRARIES . '/container.php'; +// Set the container as global one +\Joomla\CMS\Factory::$container = $container; + // Set up the container $container->share( 'GarbageCron', diff --git a/cli/update_cron.php b/cli/update_cron.php index e68921bf56383..9b43e28dcba5e 100644 --- a/cli/update_cron.php +++ b/cli/update_cron.php @@ -68,6 +68,9 @@ protected function doExecute() /** @var \Joomla\DI\Container $container */ $container = require JPATH_LIBRARIES . '/container.php'; +// Set the container as global one +\Joomla\CMS\Factory::$container = $container; + // Set up the container $container->share( 'Updatecron', diff --git a/includes/app.php b/includes/app.php index 9b1c63032f8ed..98ac0c72519c1 100644 --- a/includes/app.php +++ b/includes/app.php @@ -28,6 +28,9 @@ /** @var \Joomla\DI\Container $container */ $container = require JPATH_LIBRARIES . '/container.php'; +// Set the container as global one +\Joomla\CMS\Factory::$container = $container; + // Set profiler start time and memory usage and mark afterLoad in the profiler. JDEBUG ? JProfiler::getInstance('Application')->setStart($startTime, $startMem)->mark('afterLoad') : null; diff --git a/installation/application/app.php b/installation/application/app.php index 361d30e5c2807..404c1152afbf1 100644 --- a/installation/application/app.php +++ b/installation/application/app.php @@ -39,6 +39,9 @@ /** @var \Joomla\DI\Container $container */ $container = require JPATH_LIBRARIES . '/container.php'; +// Set the container as global one +\Joomla\CMS\Factory::$container = $container; + // Register installation specific service providers $container->registerServiceProvider(new InstallationServiceProviderApplication); diff --git a/libraries/container.php b/libraries/container.php index 39e3efc3bf0ed..4819a5a77c732 100644 --- a/libraries/container.php +++ b/libraries/container.php @@ -19,6 +19,4 @@ ->registerServiceProvider(new \Joomla\CMS\Service\Provider\Session) ->registerServiceProvider(new \Joomla\CMS\Service\Provider\Toolbar); -\Joomla\CMS\Factory::$container = $container; - return $container; From aadb6044eddef13acbb46b3ec753d649db334489 Mon Sep 17 00:00:00 2001 From: Allon Moritz Date: Fri, 18 Aug 2017 14:11:11 +0200 Subject: [PATCH 36/36] Revert test --- tests/unit/suites/libraries/joomla/document/JDocumentTest.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/unit/suites/libraries/joomla/document/JDocumentTest.php b/tests/unit/suites/libraries/joomla/document/JDocumentTest.php index ee70d7bc56993..61a34b4a677e6 100644 --- a/tests/unit/suites/libraries/joomla/document/JDocumentTest.php +++ b/tests/unit/suites/libraries/joomla/document/JDocumentTest.php @@ -10,7 +10,7 @@ /** * Test class for JDocument. */ -class JDocumentTest extends TestCase +class JDocumentTest extends \PHPUnit\Framework\TestCase { /** * @var JDocument @@ -36,7 +36,6 @@ protected function tearDown() { JDocument::$_buffer = null; unset($this->object); - parent::tearDown(); }