diff --git a/.circleci/config.yml b/.circleci/config.yml index e567a9a..e85f342 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -2,17 +2,12 @@ defaults: &defaults steps: # common php steps - run: echo "http://dl-cdn.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories + - run: if [ -n "$ADD_PACKAGES" ]; then apk -U add $ADD_PACKAGES; fi; + - run: if [ -n "$ADD_MODULES" ]; then docker-php-ext-install $ADD_MODULES; fi; - run: echo "date.timezone = UTC" >> $(php --ini |grep Scan |awk '{print $NF}')/timezone.ini - run: curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer - # install apcu - - run: | - docker-php-source extract \ - && apk add --no-cache --virtual .phpize-deps-configure $PHPIZE_DEPS \ - && printf "\n" | pecl install apcu \ - && docker-php-ext-enable apcu \ - && apk del .phpize-deps-configure \ - && docker-php-source delete + # pre-checkout steps # checkout - checkout @@ -27,28 +22,28 @@ defaults: &defaults version: 2 jobs: - build-php71: + build-php74: <<: *defaults docker: - - image: php:7.1-alpine - build-php72: + - image: php:7.4-alpine + build-php80: <<: *defaults docker: - - image: php:7.2-alpine - build-php73: + - image: php:8.0-alpine + build-php81: <<: *defaults docker: - - image: php:7.3-alpine - build-php74: + - image: php:8.1-alpine + build-php82: <<: *defaults docker: - - image: php:7.4-alpine + - image: php:8.2-alpine workflows: version: 2 build: jobs: - - build-php71 - - build-php72 - - build-php73 - build-php74 + - build-php80 + - build-php81 + - build-php82 \ No newline at end of file diff --git a/composer.json b/composer.json index 3b95256..b570b19 100644 --- a/composer.json +++ b/composer.json @@ -9,7 +9,6 @@ } ], "require": { - "php": ">=7.1", "packaged/helpers": "^1.0||^2.0", "packaged/http": "~1.1", "packaged/config": "~1.4", @@ -20,7 +19,7 @@ }, "require-dev": { "ext-apcu": "*", - "phpunit/phpunit": "7.5.*" + "phpunit/phpunit": "10" }, "autoload": { "psr-4": { diff --git a/src/ResourceManager.php b/src/ResourceManager.php index 8e50c72..dd09b4b 100644 --- a/src/ResourceManager.php +++ b/src/ResourceManager.php @@ -48,6 +48,11 @@ class ResourceManager protected $_componentPath; protected $_options = []; + protected static $defaultOptions = [ + self::OPT_THROW_ON_FILE_NOT_FOUND => true, + self::OPT_RESOURCE_STORE => null, + ]; + /** * @var Dispatch|null Dispatch in use for components to calculate paths */ @@ -464,7 +469,7 @@ public function getFileHash($fullPath) public function getOption($option, $default = null) { - return $this->_options[$option] ?? $default; + return $this->_options[$option] ?? $this->_defaultOption($option, $default); } /** @@ -533,4 +538,20 @@ public static function clearCache() static::$cmc = []; static::$_fileHashCache = []; } + + /** + * @param string $key + * @param mixed $value + * + * @return void + */ + public static function setDefaultOption(string $key, $value) + { + static::$defaultOptions[$key] = $value; + } + + protected function _defaultOption(string $key, $default = null) + { + return static::$defaultOptions[$key] ?? $default; + } } diff --git a/tests/ComponentTest.php b/tests/ComponentTest.php index de66f16..13c3d60 100644 --- a/tests/ComponentTest.php +++ b/tests/ComponentTest.php @@ -34,7 +34,7 @@ public function testComponent() $request = Request::create('/' . $uri); $response = $dispatch->handleRequest($request); $this->assertEquals(200, $response->getStatusCode()); - $this->assertContains('body{color:red}', $response->getContent()); + $this->assertStringContainsString('body{color:red}', $response->getContent()); Dispatch::instance()->store()->clearStore(ResourceStore::TYPE_CSS); $this->assertCount(0, Dispatch::instance()->store()->getResources(ResourceStore::TYPE_CSS)); @@ -44,7 +44,7 @@ public function testComponent() $request = Request::create('/' . $manager->getResourceUri('style.css')); $response = $dispatch->handleRequest($request); $this->assertEquals(200, $response->getStatusCode()); - $this->assertContains('body{color:red}', $response->getContent()); + $this->assertStringContainsString('body{color:red}', $response->getContent()); //Required for testing correct namespace validation Dispatch::instance()->addComponentAlias('\Packaged\Dispatch\Tests\TestComponents\DemoComponent', 'DC'); @@ -56,7 +56,7 @@ public function testComponent() $request = Request::create('/c/3/_/MissingComponent/DemoComponent/a4197ed8/style.css'); $response = $dispatch->handleRequest($request); $this->assertEquals(404, $response->getStatusCode()); - $this->assertContains('Component Not Found', $response->getContent()); + $this->assertStringContainsString('Component Not Found', $response->getContent()); $manager = ResourceManager::component(new ChildComponent()); $uri = $manager->getResourceUri('style.css'); diff --git a/tests/DispatchTest.php b/tests/DispatchTest.php index 34109aa..7c66baf 100644 --- a/tests/DispatchTest.php +++ b/tests/DispatchTest.php @@ -54,37 +54,37 @@ public function testHandle() $request = Request::create('/r/bd04a611ed6d/css/test.css'); $response = $dispatch->handleRequest($request); $this->assertEquals(200, $response->getStatusCode()); - $this->assertContains('url(r/395d1a0e8999/img/x.jpg)', $response->getContent()); + $this->assertStringContainsString('url(r/395d1a0e8999/img/x.jpg)', $response->getContent()); $uri = ResourceManager::public()->getResourceUri('css/placeholder.css'); $request = Request::create($uri); $response = $dispatch->handleRequest($request); - $this->assertContains('font-size:14px', $response->getContent()); - $this->assertContains('background:url(p/942e325b1780/img/test.svg#test)', $response->getContent()); + $this->assertStringContainsString('font-size:14px', $response->getContent()); + $this->assertStringContainsString('background:url(p/942e325b1780/img/test.svg#test)', $response->getContent()); $dispatch->addAlias('abc', 'resources/css'); $request = Request::create('/a/abc/bd04a611ed6d/test.css'); $response = $dispatch->handleRequest($request); - $this->assertContains('url("a/abc/942e325be95f/sub/subimg.jpg")', $response->getContent()); + $this->assertStringContainsString('url("a/abc/942e325be95f/sub/subimg.jpg")', $response->getContent()); $uri = ResourceManager::vendor('packaged', 'dispatch')->getResourceUri('css/vendor.css'); $request = Request::create($uri); $response = $dispatch->handleRequest($request); - $this->assertContains('body{background:orange}', $response->getContent()); + $this->assertStringContainsString('body{background:orange}', $response->getContent()); $dispatch->addVendorAlias('packaged', 'dispatch', 'pdsp'); $uri = ResourceManager::vendor('packaged', 'dispatch')->getResourceUri('css/vendor.css'); - self::assertContains('v/pdsp', $uri); + self::assertStringContainsString('v/pdsp', $uri); $request = Request::create($uri); $response = $dispatch->handleRequest($request); - $this->assertContains('body{background:orange}', $response->getContent()); + $this->assertStringContainsString('body{background:orange}', $response->getContent()); Dispatch::instance()->config()->addItem('ext.css', 'sourcemap', true); $uri = ResourceManager::vendor('packaged', 'dispatch')->getResourceUri('css/vendor.css'); $request = Request::create($uri); $response = $dispatch->handleRequest($request); - $this->assertContains('sourceMappingURL', $response->getContent()); - $this->assertContains('Q1NTLU1BUAo', $response->getContent()); + $this->assertStringContainsString('sourceMappingURL', $response->getContent()); + $this->assertStringContainsString('Q1NTLU1BUAo', $response->getContent()); Dispatch::destroy(); } @@ -95,7 +95,10 @@ public function testBaseUri() Dispatch::bind($dispatch); $request = Request::create('/r/bd04a611ed6d/css/test.css'); $response = $dispatch->handleRequest($request); - $this->assertContains('url(http://assets.packaged.in/r/395d1a0e8999/img/x.jpg)', $response->getContent()); + $this->assertStringContainsString( + 'url(http://assets.packaged.in/r/395d1a0e8999/img/x.jpg)', + $response->getContent() + ); Dispatch::destroy(); } @@ -105,10 +108,10 @@ public function testStore() ResourceManager::resources()->requireCss('css/test.css'); ResourceManager::resources()->requireCss('css/do-not-modify.css'); $response = Dispatch::instance()->store()->generateHtmlIncludes(ResourceStore::TYPE_CSS); - $this->assertContains('href="http://assets.packaged.in/r/bd04a6113c11/css/test.css"', $response); + $this->assertStringContainsString('href="http://assets.packaged.in/r/bd04a6113c11/css/test.css"', $response); ResourceManager::resources()->requireJs('js/alert.js'); $response = Dispatch::instance()->store()->generateHtmlIncludes(ResourceStore::TYPE_JS); - $this->assertContains('src="http://assets.packaged.in/r/f417133ec50f/js/alert.js"', $response); + $this->assertStringContainsString('src="http://assets.packaged.in/r/f417133ec50f/js/alert.js"', $response); Dispatch::destroy(); } @@ -166,11 +169,11 @@ public function testWebpReplacements() $request = Request::create(ResourceManager::resources()->getResourceUri('css/webptest.css')); $response = $dispatch->handleRequest($request); - $this->assertContains( + $this->assertStringContainsString( 'url(http://assets.packaged.in/r/30c60da9f504/img/test-sample.png?abc=def#xyz)', $response->getContent() ); - $this->assertNotContains( + $this->assertStringNotContainsString( 'url(http://assets.packaged.in/r/30c60da9f504/img/test-sample.png.webp?abc=def#xyz)', $response->getContent() ); @@ -182,11 +185,11 @@ public function testWebpReplacements() $request = Request::create(ResourceManager::resources()->getResourceUri('css/webptest.css')); $response = $dispatch->handleRequest($request); - $this->assertNotContains( + $this->assertStringNotContainsString( 'url(http://assets.packaged.in/r/30c60da9f504-1/img/test-sample.png?abc=def#xyz)', $response->getContent() ); - $this->assertContains( + $this->assertStringContainsString( 'url(http://assets.packaged.in/r/d6e2937fee66-1/img/test-sample.png.webp?abc=def#xyz)', $response->getContent() ); diff --git a/tests/ResourceManagerTest.php b/tests/ResourceManagerTest.php index 9899e79..cc7d614 100644 --- a/tests/ResourceManagerTest.php +++ b/tests/ResourceManagerTest.php @@ -78,7 +78,7 @@ public function testRequireJs() { Dispatch::bind(new Dispatch(Path::system(__DIR__, '_root'))); ResourceManager::resources()->requireJs('js/alert.js'); - $this->assertContains( + $this->assertStringContainsString( 'src="r/f417133ec50f/js/alert.js"', Dispatch::instance()->store()->generateHtmlIncludes(ResourceStore::TYPE_JS) ); @@ -101,7 +101,7 @@ public function testRequireCss() Dispatch::bind(new Dispatch(Path::system(__DIR__, '_root'))); ResourceManager::resources()->includeCss('css/test.css'); ResourceManager::resources()->requireCss('css/test.css'); - $this->assertContains( + $this->assertStringContainsString( 'href="r/bd04a6113c11/css/test.css"', Dispatch::instance()->store()->generateHtmlIncludes(ResourceStore::TYPE_CSS) ); @@ -243,4 +243,18 @@ public function testSetResourceStoreConfig() $this->assertSame($store1, $manager->getResourceStore()); $this->assertNotSame($store2, $manager->getResourceStore()); } + + public function testDefaultOptions() + { + $manager = ResourceManager::resources(); + static::assertTrue($manager->getOption(ResourceManager::OPT_THROW_ON_FILE_NOT_FOUND, true)); + + ResourceManager::setDefaultOption(ResourceManager::OPT_THROW_ON_FILE_NOT_FOUND, false); + static::assertFalse($manager->getOption(ResourceManager::OPT_THROW_ON_FILE_NOT_FOUND, true)); + + $manager->setOption(ResourceManager::OPT_THROW_ON_FILE_NOT_FOUND, true); + static::assertTrue($manager->getOption(ResourceManager::OPT_THROW_ON_FILE_NOT_FOUND, true)); + + ResourceManager::setDefaultOption(ResourceManager::OPT_THROW_ON_FILE_NOT_FOUND, true); + } } diff --git a/tests/ResourceStoreTest.php b/tests/ResourceStoreTest.php index 3eb949a..8e0870f 100644 --- a/tests/ResourceStoreTest.php +++ b/tests/ResourceStoreTest.php @@ -86,14 +86,17 @@ public function testGenerateHtmlIncludes() $store->requireJs('js/defer.js', ['defer' => null, 'type' => 'application/javascript']); $store->requireInlineJs("alert('hi');"); $store->requireInlineCss("body{background:red;}"); - $this->assertContains('href="css/test.css"', $store->generateHtmlIncludes(ResourceStore::TYPE_CSS)); - $this->assertContains('src="js/alert.js"', $store->generateHtmlIncludes(ResourceStore::TYPE_JS)); - $this->assertContains( + $this->assertStringContainsString('href="css/test.css"', $store->generateHtmlIncludes(ResourceStore::TYPE_CSS)); + $this->assertStringContainsString('src="js/alert.js"', $store->generateHtmlIncludes(ResourceStore::TYPE_JS)); + $this->assertStringContainsString( 'src="js/defer.js" defer type="application/javascript"', $store->generateHtmlIncludes(ResourceStore::TYPE_JS) ); - $this->assertContains('', $store->generateHtmlIncludes(ResourceStore::TYPE_JS)); - $this->assertContains( + $this->assertStringContainsString( + '', + $store->generateHtmlIncludes(ResourceStore::TYPE_JS) + ); + $this->assertStringContainsString( '', $store->generateHtmlIncludes(ResourceStore::TYPE_CSS) ); diff --git a/tests/Resources/AbstractDispatchableResourceTest.php b/tests/Resources/AbstractDispatchableResourceTest.php index 8126563..5d26f3d 100644 --- a/tests/Resources/AbstractDispatchableResourceTest.php +++ b/tests/Resources/AbstractDispatchableResourceTest.php @@ -22,16 +22,16 @@ public function testProcessesContent() $resource->setProcessingPath('css/test.css'); $resource->setContent(file_get_contents(Path::system($root, Dispatch::RESOURCES_DIR, 'css', 'test.css'))); $content = $resource->getContent(); - $this->assertContains('url(r/395d1a0e8999/img/x.jpg)', $content); - $this->assertContains('url(\'r/942e325b86c0/css/css.jpg\')', $content); - $this->assertContains('url("r/942e325be95f/css/sub/subimg.jpg")', $content); - $this->assertContains('url(\'http://www.example.com/background.jpg\')', $content); - $this->assertContains('url(../img/missing-file.jpg)', $content); - $this->assertContains('url(../../../img/missing-file.jpg)', $content); + $this->assertStringContainsString('url(r/395d1a0e8999/img/x.jpg)', $content); + $this->assertStringContainsString('url(\'r/942e325b86c0/css/css.jpg\')', $content); + $this->assertStringContainsString('url("r/942e325be95f/css/sub/subimg.jpg")', $content); + $this->assertStringContainsString('url(\'http://www.example.com/background.jpg\')', $content); + $this->assertStringContainsString('url(../img/missing-file.jpg)', $content); + $this->assertStringContainsString('url(../../../img/missing-file.jpg)', $content); $resource->setProcessingPath('css/do-not-modify.css'); $resource->setContent(file_get_contents(Path::system($root, Dispatch::RESOURCES_DIR, 'css', 'do-not-modify.css'))); - $this->assertContains('url(../img/x.jpg)', $resource->getContent()); + $this->assertStringContainsString('url(../img/x.jpg)', $resource->getContent()); } public function testJsContent() @@ -46,9 +46,9 @@ public function testJsContent() $resource->setFilePath($manager->getFilePath('js/url.min.js')); $resource->setContent(file_get_contents(Path::system($root, Dispatch::RESOURCES_DIR, 'js', 'url.min.js'))); $content = $resource->getContent(); - $this->assertContains('import test from \'./test\';', $content); - $this->assertContains('import {default as alert} from \'r/f417133ec50f/js/alert.js\';', $content); - $this->assertContains('import misc from \'r/b6ccf604ae88/js/misc.js\';', $content); - $this->assertContains('"url(" + test(p) + ")"', $content); + $this->assertStringContainsString('import test from \'./test\';', $content); + $this->assertStringContainsString('import {default as alert} from \'r/f417133ec50f/js/alert.js\';', $content); + $this->assertStringContainsString('import misc from \'r/b6ccf604ae88/js/misc.js\';', $content); + $this->assertStringContainsString('"url(" + test(p) + ")"', $content); } } diff --git a/tests/Resources/NestedResourceTest.php b/tests/Resources/NestedResourceTest.php index 65942fa..bbfff3f 100644 --- a/tests/Resources/NestedResourceTest.php +++ b/tests/Resources/NestedResourceTest.php @@ -20,6 +20,6 @@ public function testProcessesContent() $resource->setProcessingPath('css/test.css'); $resource->setContent(file_get_contents(Path::system($root, Dispatch::RESOURCES_DIR, 'css', 'test.css'))); $content = $resource->getContent(); - $this->assertContains('url(/_r/r/395d1a0e8999/img/x.jpg?x=y&request=b)', $content); + $this->assertStringContainsString('url(/_r/r/395d1a0e8999/img/x.jpg?x=y&request=b)', $content); } }