diff --git a/.github/workflows/ci-cd.yaml b/.github/workflows/ci-cd.yaml new file mode 100644 index 0000000..d0ba89f --- /dev/null +++ b/.github/workflows/ci-cd.yaml @@ -0,0 +1,58 @@ +--- +name: PHP CI/CD + +on: [push, pull_request] + +permissions: {} +jobs: + Unit_tests: + runs-on: ${{ matrix.os }} + timeout-minutes: 10 + strategy: + fail-fast: false + matrix: + php-version: [ + "5.4", + "5.6", + "7.4", + "8.0", + "8.4", + ] + os: [ubuntu-latest, macOS-latest, windows-latest] + steps: + - uses: shivammathur/setup-php@2.32.0 + with: + php-version: ${{ matrix.php-version }} + tools: composer:v2 + - uses: actions/checkout@v3 + - name: Validate composer.json and composer.lock + run: composer validate --strict + - name: Install Dependencies + run: composer install --no-ansi --no-interaction --no-progress + - name: Run test suite + run: vendor/bin/phpunit + Integration_tests: + if: github.event_name == 'push' + runs-on: ${{ matrix.os }} + timeout-minutes: 10 + needs: Unit_tests + strategy: + fail-fast: false + matrix: + php-version: [ + "7.4", + "8.4", + ] + os: [ubuntu-latest, macOS-latest, windows-latest] + steps: + - uses: shivammathur/setup-php@2.32.0 + with: + php-version: ${{ matrix.php-version }} + tools: composer:v2 + - uses: actions/checkout@v3 + - name: Install Dependencies + run: composer install --no-ansi --no-interaction --no-progress + - name: Run test suite + env: + TINIFY_KEY: ${{ secrets.TINIFY_KEY }} + run: vendor/bin/phpunit --no-configuration test/integration.php diff --git a/.gitignore b/.gitignore index 22d0d82..d769eb5 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ vendor +.phpunit.result.cache +composer.lock diff --git a/CHANGES.md b/CHANGES.md index c0c95e0..fec117f 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,14 @@ +## 1.6.2 +* Remove deprecated curl constant (https://php.watch/versions/8.4/CURLOPT_BINARYTRANSFER-deprecated) + +## 1.6.1 +* Fixed string interpolation for php 8.2: https://wiki.php.net/rfc/deprecate_dollar_brace_string_interpolation + +## 1.6.0 +* Support to run the unittests on newer versions of PHP (5.5 +) +* Add API methods for converting/transcoding and transformation +* Add helper function for returning the compressed file extension + ## 1.5.2 * Fail early if version of curl/openssl is too old. diff --git a/README.md b/README.md index ac14496..59d5030 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,7 @@ -[Build Status](https://travis-ci.org/tinify/tinify-php) +[![MIT License](http://img.shields.io/badge/license-MIT-green.svg) ](https://github.com/tinify/tinify-php/blob/main/LICENSE) +[![CI_CD](https://github.com/tinify/tinify-php/actions/workflows/ci-cd.yaml/badge.svg?branch=master)](https://github.com/tinify/tinify-php/actions/workflows/ci-cd.yaml) +[![Packagist Version](https://img.shields.io/packagist/v/tinify/tinify)](https://packagist.org/packages/tinify/tinify) +[![Packagist PHP Version Support](https://img.shields.io/packagist/php-v/tinify/tinify)](https://packagist.org/packages/tinify/tinify) # Tinify API client for PHP diff --git a/composer.json b/composer.json index 067d6e0..b9b32cc 100644 --- a/composer.json +++ b/composer.json @@ -30,8 +30,7 @@ }, "require-dev": { - "symfony/yaml": "~2.0", - "phpunit/phpunit": "~4.0" + "phpunit/phpunit": "^4.8 || ^5.7 || ^6.5 || ^7.5 || ^8.4 || ^9.3" }, "autoload": { diff --git a/composer.lock b/composer.lock deleted file mode 100644 index aa679b7..0000000 --- a/composer.lock +++ /dev/null @@ -1,977 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", - "This file is @generated automatically" - ], - "hash": "24129bff61e8cfa8b2a82efee5c7069a", - "content-hash": "6251dc24eeaff94cb037569e414a6195", - "packages": [], - "packages-dev": [ - { - "name": "doctrine/instantiator", - "version": "1.0.5", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", - "shasum": "" - }, - "require": { - "php": ">=5.3,<8.0-DEV" - }, - "require-dev": { - "athletic/athletic": "~0.1.8", - "ext-pdo": "*", - "ext-phar": "*", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.com/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://github.com/doctrine/instantiator", - "keywords": [ - "constructor", - "instantiate" - ], - "time": "2015-06-14 21:17:01" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d68dbdc53dc358a816f00b300704702b2eaff7b8", - "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" - }, - "suggest": { - "dflydev/markdown": "~1.0", - "erusev/parsedown": "~1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-0": { - "phpDocumentor": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "mike.vanriel@naenius.com" - } - ], - "time": "2015-02-03 12:10:50" - }, - { - "name": "phpspec/prophecy", - "version": "v1.6.0", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "3c91bdf81797d725b14cb62906f9a4ce44235972" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/3c91bdf81797d725b14cb62906f9a4ce44235972", - "reference": "3c91bdf81797d725b14cb62906f9a4ce44235972", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.0.2", - "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "~2.0", - "sebastian/comparator": "~1.1", - "sebastian/recursion-context": "~1.0" - }, - "require-dev": { - "phpspec/phpspec": "~2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.5.x-dev" - } - }, - "autoload": { - "psr-0": { - "Prophecy\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], - "time": "2016-02-15 07:46:21" - }, - { - "name": "phpunit/php-code-coverage", - "version": "2.2.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979", - "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "phpunit/php-file-iterator": "~1.3", - "phpunit/php-text-template": "~1.2", - "phpunit/php-token-stream": "~1.3", - "sebastian/environment": "^1.3.2", - "sebastian/version": "~1.0" - }, - "require-dev": { - "ext-xdebug": ">=2.1.4", - "phpunit/phpunit": "~4" - }, - "suggest": { - "ext-dom": "*", - "ext-xdebug": ">=2.2.1", - "ext-xmlwriter": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "time": "2015-10-06 15:47:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "1.4.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6150bf2c35d3fc379e50c7602b75caceaa39dbf0", - "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "time": "2015-06-21 13:08:43" - }, - { - "name": "phpunit/php-text-template", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "time": "2015-06-21 13:50:34" - }, - { - "name": "phpunit/php-timer", - "version": "1.0.7", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3e82f4e9fc92665fafd9157568e4dcb01d014e5b", - "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "time": "2015-06-21 08:01:12" - }, - { - "name": "phpunit/php-token-stream", - "version": "1.4.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", - "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Wrapper around PHP's tokenizer extension.", - "homepage": "https://github.com/sebastianbergmann/php-token-stream/", - "keywords": [ - "tokenizer" - ], - "time": "2015-09-15 10:49:45" - }, - { - "name": "phpunit/phpunit", - "version": "4.8.24", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "a1066c562c52900a142a0e2bbf0582994671385e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a1066c562c52900a142a0e2bbf0582994671385e", - "reference": "a1066c562c52900a142a0e2bbf0582994671385e", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-json": "*", - "ext-pcre": "*", - "ext-reflection": "*", - "ext-spl": "*", - "php": ">=5.3.3", - "phpspec/prophecy": "^1.3.1", - "phpunit/php-code-coverage": "~2.1", - "phpunit/php-file-iterator": "~1.4", - "phpunit/php-text-template": "~1.2", - "phpunit/php-timer": ">=1.0.6", - "phpunit/phpunit-mock-objects": "~2.3", - "sebastian/comparator": "~1.1", - "sebastian/diff": "~1.2", - "sebastian/environment": "~1.3", - "sebastian/exporter": "~1.2", - "sebastian/global-state": "~1.0", - "sebastian/version": "~1.0", - "symfony/yaml": "~2.1|~3.0" - }, - "suggest": { - "phpunit/php-invoker": "~1.1" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.8.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "time": "2016-03-14 06:16:08" - }, - { - "name": "phpunit/phpunit-mock-objects", - "version": "2.3.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983", - "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.0.2", - "php": ">=5.3.3", - "phpunit/php-text-template": "~1.2", - "sebastian/exporter": "~1.2" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "suggest": { - "ext-soap": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Mock Object library for PHPUnit", - "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", - "keywords": [ - "mock", - "xunit" - ], - "time": "2015-10-02 06:51:40" - }, - { - "name": "sebastian/comparator", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "937efb279bd37a375bcadf584dec0726f84dbf22" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/937efb279bd37a375bcadf584dec0726f84dbf22", - "reference": "937efb279bd37a375bcadf584dec0726f84dbf22", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "sebastian/diff": "~1.2", - "sebastian/exporter": "~1.2" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "http://www.github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "time": "2015-07-26 15:48:44" - }, - { - "name": "sebastian/diff", - "version": "1.4.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e", - "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff" - ], - "time": "2015-12-08 07:14:41" - }, - { - "name": "sebastian/environment", - "version": "1.3.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "dc7a29032cf72b54f36dac15a1ca5b3a1b6029bf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/dc7a29032cf72b54f36dac15a1ca5b3a1b6029bf", - "reference": "dc7a29032cf72b54f36dac15a1ca5b3a1b6029bf", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "time": "2016-02-26 18:40:46" - }, - { - "name": "sebastian/exporter", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "7ae5513327cb536431847bcc0c10edba2701064e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/7ae5513327cb536431847bcc0c10edba2701064e", - "reference": "7ae5513327cb536431847bcc0c10edba2701064e", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "sebastian/recursion-context": "~1.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "time": "2015-06-21 07:55:53" - }, - { - "name": "sebastian/global-state", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", - "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.2" - }, - "suggest": { - "ext-uopz": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "time": "2015-10-12 03:26:01" - }, - { - "name": "sebastian/recursion-context", - "version": "1.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "913401df809e99e4f47b27cdd781f4a258d58791" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/913401df809e99e4f47b27cdd781f4a258d58791", - "reference": "913401df809e99e4f47b27cdd781f4a258d58791", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2015-11-11 19:50:13" - }, - { - "name": "sebastian/version", - "version": "1.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", - "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", - "shasum": "" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "time": "2015-06-21 13:59:46" - }, - { - "name": "symfony/yaml", - "version": "v2.8.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "584e52cb8f788a887553ba82db6caacb1d6260bb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/584e52cb8f788a887553ba82db6caacb1d6260bb", - "reference": "584e52cb8f788a887553ba82db6caacb1d6260bb", - "shasum": "" - }, - "require": { - "php": ">=5.3.9" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.8-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Yaml Component", - "homepage": "https://symfony.com", - "time": "2016-03-04 07:54:35" - } - ], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": [], - "prefer-stable": false, - "prefer-lowest": false, - "platform": { - "php": ">=5.3.0", - "ext-curl": "*", - "ext-json": "*", - "lib-curl": ">=7.20.0" - }, - "platform-dev": [] -} diff --git a/lib/Tinify.php b/lib/Tinify.php index 32d10f1..6cc7422 100644 --- a/lib/Tinify.php +++ b/lib/Tinify.php @@ -2,7 +2,7 @@ namespace Tinify; -const VERSION = "1.5.2"; +const VERSION = "1.6.2"; class Tinify { const AUTHENTICATED = true; diff --git a/lib/Tinify/Client.php b/lib/Tinify/Client.php index 115c672..7c2bc03 100644 --- a/lib/Tinify/Client.php +++ b/lib/Tinify/Client.php @@ -28,13 +28,12 @@ function __construct($key, $appIdentifier = NULL, $proxy = NULL) { if ($curl["version_number"] < 0x071201) { $version = $curl["version"]; - throw new ClientException("Your curl version ${version} is outdated; please upgrade to 7.18.1 or higher"); + throw new ClientException("Your curl version {$version} is outdated; please upgrade to 7.18.1 or higher"); } $userAgent = join(" ", array_filter(array(self::userAgent(), $appIdentifier))); $this->options = array( - CURLOPT_BINARYTRANSFER => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_HEADER => true, CURLOPT_USERPWD => $key ? ("api:" . $key) : NULL, @@ -114,7 +113,7 @@ function request($method, $url, $body = NULL) { $headers = self::parseHeaders(substr($response, 0, $headerSize)); $responseBody = substr($response, $headerSize); - if (isset($headers["compression-count"])) { + if ( isset($headers["compression-count"] ) ) { Tinify::setCompressionCount(intval($headers["compression-count"])); } @@ -126,6 +125,17 @@ function request($method, $url, $body = NULL) { Tinify::setPayingState( $headers["paying-state"] ); } + $details = json_decode($responseBody); + if (!$details) { + $message = sprintf("Error while parsing response: %s (#%d)", + PHP_VERSION_ID >= 50500 ? json_last_error_msg() : "Error", + json_last_error()); + $details = (object) array( + "message" => $message, + "error" => "ParseError" + ); + } + if ( isset( $headers["email-address"] ) ) { Tinify::setEmailAddress( $headers["email-address"] ); } diff --git a/lib/Tinify/ResultMeta.php b/lib/Tinify/ResultMeta.php index 337a48f..27aba0e 100644 --- a/lib/Tinify/ResultMeta.php +++ b/lib/Tinify/ResultMeta.php @@ -20,4 +20,12 @@ public function height() { public function location() { return isset($this->meta["location"]) ? $this->meta["location"] : null; } + + public function extension() { + if (isset($this->meta["content-type"])) { + $parts = explode("/", $this->meta["content-type"]); + return end($parts); + } + return null; + } } diff --git a/lib/Tinify/Source.php b/lib/Tinify/Source.php index 01c013f..304040a 100644 --- a/lib/Tinify/Source.php +++ b/lib/Tinify/Source.php @@ -42,6 +42,16 @@ public function store($options) { return new Result($response->headers, $response->body); } + public function convert($options) { + $commands = array_merge($this->commands, array("convert" => $options)); + return new self($this->url, $commands); + } + + public function transform($options) { + $commands = array_merge($this->commands, array("transform" => $options)); + return new self($this->url, $commands); + } + public function result() { $response = Tinify::getClient()->request("get", $this->url, $this->commands); return new Result($response->headers, $response->body); diff --git a/phpunit.xml b/phpunit.xml index 8053190..a313121 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -1,4 +1,4 @@ - + test diff --git a/test/TinifyResultTest.php b/test/TinifyResultTest.php index 81687c5..94e3406 100644 --- a/test/TinifyResultTest.php +++ b/test/TinifyResultTest.php @@ -32,4 +32,14 @@ public function testWithMetaAndDataToBufferShouldReturnImageData() { $result = new Tinify\Result(array(), "image data"); $this->assertSame("image data", $result->toBuffer()); } + + public function testWithMetadataReturnsExtension() { + $result = new Tinify\Result(array("content-type" => "image/png"), "image data"); + $this->assertSame($result->extension(), "png"); + } + + public function testWithoutMetadataReturnsExtensionAsNull() { + $result = new Tinify\ResultMeta(array(), "image data"); + $this->assertSame($result->extension(), null); + } } diff --git a/test/TinifySourceTest.php b/test/TinifySourceTest.php index 4edacb8..80c5fd8 100644 --- a/test/TinifySourceTest.php +++ b/test/TinifySourceTest.php @@ -3,13 +3,6 @@ use Tinify\CurlMock; class TinifySourceTest extends TestCase { - private $dummyFile; - - public function setUp() { - parent::setUp(); - $this->dummyFile = __DIR__ . "/examples/dummy.png"; - } - public function testWithInvalidApiKeyFromFileShouldThrowAccountException() { Tinify\setKey("invalid"); @@ -18,7 +11,7 @@ public function testWithInvalidApiKeyFromFileShouldThrowAccountException() { )); $this->setExpectedException("Tinify\AccountException"); - Tinify\Source::fromFile($this->dummyFile); + Tinify\Source::fromFile(DUMMY_FILE_LOCATION); } public function testWithInvalidApiKeyFromBufferShouldThrowAccountException() { @@ -43,17 +36,17 @@ public function testWithInvalidApiKeyFromUrlShouldThrowAccountException() { Tinify\Source::fromUrl("http://example.com/test.jpg"); } - public function testWithValidApiKeyFromFileShouldReturnSource() { + public function testFromFileShouldReturnSource() { Tinify\setKey("valid"); CurlMock::register("https://api.tinify.com/shrink", array( "status" => 201, "headers" => array("Location" => "https://api.tinify.com/some/location") )); - $this->assertInstanceOf("Tinify\Source", Tinify\Source::fromFile($this->dummyFile)); + $this->assertInstanceOf("Tinify\Source", Tinify\Source::fromFile(DUMMY_FILE_LOCATION)); } - public function testWithValidApiKeyFromFileShouldReturnSourceWithData() { + public function testFromFileShouldReturnSourceWithData() { Tinify\setKey("valid"); CurlMock::register("https://api.tinify.com/shrink", array( @@ -64,10 +57,10 @@ public function testWithValidApiKeyFromFileShouldReturnSourceWithData() { "status" => 200, "body" => "compressed file" )); - $this->assertSame("compressed file", Tinify\Source::fromFile($this->dummyFile)->toBuffer()); + $this->assertSame("compressed file", Tinify\Source::fromFile(DUMMY_FILE_LOCATION)->toBuffer()); } - public function testWithValidApiKeyFromBufferShouldReturnSource() { + public function testFromBufferShouldReturnSource() { Tinify\setKey("valid"); CurlMock::register("https://api.tinify.com/shrink", array( @@ -77,7 +70,7 @@ public function testWithValidApiKeyFromBufferShouldReturnSource() { $this->assertInstanceOf("Tinify\Source", Tinify\Source::fromBuffer("png file")); } - public function testWithValidApiKeyFromBufferShouldReturnSourceWithData() { + public function testFromBufferShouldReturnSourceWithData() { Tinify\setKey("valid"); CurlMock::register("https://api.tinify.com/shrink", array( @@ -91,17 +84,17 @@ public function testWithValidApiKeyFromBufferShouldReturnSourceWithData() { $this->assertSame("compressed file", Tinify\Source::fromBuffer("png file")->toBuffer()); } - public function testWithValidApiKeyFromUrlShouldReturnSource() { + public function testFromUrlShouldReturnSource() { Tinify\setKey("valid"); CurlMock::register("https://api.tinify.com/shrink", array( "status" => 201, "headers" => array("Location" => "https://api.tinify.com/some/location") )); - $this->assertInstanceOf("Tinify\Source", Tinify\Source::fromUrl("http://example.com/testWithValidApiKey.jpg")); + $this->assertInstanceOf("Tinify\Source", Tinify\Source::fromUrl("http://example.com/test.jpg")); } - public function testWithValidApiKeyFromUrlShouldReturnSourceWithData() { + public function testFromUrlShouldReturnSourceWithData() { Tinify\setKey("valid"); CurlMock::register("https://api.tinify.com/shrink", array( @@ -112,10 +105,10 @@ public function testWithValidApiKeyFromUrlShouldReturnSourceWithData() { "status" => 200, "body" => "compressed file" )); - $this->assertSame("compressed file", Tinify\Source::fromUrl("http://example.com/testWithValidApiKey.jpg")->toBuffer()); + $this->assertSame("compressed file", Tinify\Source::fromUrl("http://example.com/test.jpg")->toBuffer()); } - public function testWithValidApiKeyFromUrlShouldThrowExceptionIfRequestIsNotOK() { + public function testFromUrlShouldThrowExceptionIfRequestIsNotOK() { Tinify\setKey("valid"); CurlMock::register("https://api.tinify.com/shrink", array( @@ -126,7 +119,7 @@ public function testWithValidApiKeyFromUrlShouldThrowExceptionIfRequestIsNotOK() Tinify\Source::fromUrl("file://wrong"); } - public function testWithValidApiKeyResultShouldReturnResult() { + public function testResultShouldReturnResult() { Tinify\setKey("valid"); CurlMock::register("https://api.tinify.com/shrink", array( @@ -141,7 +134,7 @@ public function testWithValidApiKeyResultShouldReturnResult() { $this->assertInstanceOf("Tinify\Result", Tinify\Source::fromBuffer("png file")->result()); } - public function testWithValidApiKeyPreserveShouldReturnSource() { + public function testPreserveShouldReturnSource() { Tinify\setKey("valid"); CurlMock::register("https://api.tinify.com/shrink", array( @@ -156,7 +149,7 @@ public function testWithValidApiKeyPreserveShouldReturnSource() { $this->assertSame("png file", CurlMock::last(CURLOPT_POSTFIELDS)); } - public function testWithValidApiKeyPreserveShouldReturnSourceWithData() { + public function testPreserveShouldReturnSourceWithData() { Tinify\setKey("valid"); CurlMock::register("https://api.tinify.com/shrink", array( @@ -171,7 +164,7 @@ public function testWithValidApiKeyPreserveShouldReturnSourceWithData() { $this->assertSame("{\"preserve\":[\"copyright\",\"location\"]}", CurlMock::last(CURLOPT_POSTFIELDS)); } - public function testWithValidApiKeyPreserveShouldReturnSourceWithDataForArray() { + public function testPreserveShouldReturnSourceWithDataForArray() { Tinify\setKey("valid"); CurlMock::register("https://api.tinify.com/shrink", array( @@ -186,7 +179,7 @@ public function testWithValidApiKeyPreserveShouldReturnSourceWithDataForArray() $this->assertSame("{\"preserve\":[\"copyright\",\"location\"]}", CurlMock::last(CURLOPT_POSTFIELDS)); } - public function testWithValidApiKeyPreserveShouldIncludeOtherOptionsIfSet() { + public function testPreserveShouldIncludeOtherOptionsIfSet() { Tinify\setKey("valid"); CurlMock::register("https://api.tinify.com/shrink", array( @@ -203,7 +196,7 @@ public function testWithValidApiKeyPreserveShouldIncludeOtherOptionsIfSet() { $this->assertSame("{\"resize\":{\"width\":400},\"preserve\":[\"copyright\",\"location\"]}", CurlMock::last(CURLOPT_POSTFIELDS)); } - public function testWithValidApiKeyResizeShouldReturnSource() { + public function testResizeShouldReturnSource() { Tinify\setKey("valid"); CurlMock::register("https://api.tinify.com/shrink", array( @@ -218,7 +211,7 @@ public function testWithValidApiKeyResizeShouldReturnSource() { $this->assertSame("png file", CurlMock::last(CURLOPT_POSTFIELDS)); } - public function testWithValidApiKeyResizeShouldReturnSourceWithData() { + public function testResizeShouldReturnSourceWithData() { Tinify\setKey("valid"); CurlMock::register("https://api.tinify.com/shrink", array( @@ -233,7 +226,67 @@ public function testWithValidApiKeyResizeShouldReturnSourceWithData() { $this->assertSame("{\"resize\":{\"width\":400}}", CurlMock::last(CURLOPT_POSTFIELDS)); } - public function testWithValidApiKeyStoreShouldReturnResultMeta() { + public function testConvertShouldReturnSource() { + Tinify\setKey("valid"); + + CurlMock::register("https://api.tinify.com/shrink", array( + "status" => 201, "headers" => array("Location" => "https://api.tinify.com/some/location") + )); + + CurlMock::register("https://api.tinify.com/some/location", array( + "status" => 200, "body" => "Convertd file" + )); + + $this->assertInstanceOf("Tinify\Source", Tinify\Source::fromBuffer("png file")->Convert(array("type" =>"image/webp"))); + $this->assertSame("png file", CurlMock::last(CURLOPT_POSTFIELDS)); + } + + public function testConvertShouldReturnSourceWithData() { + Tinify\setKey("valid"); + + CurlMock::register("https://api.tinify.com/shrink", array( + "status" => 201, "headers" => array("Location" => "https://api.tinify.com/some/location") + )); + + CurlMock::register("https://api.tinify.com/some/location", array( + "status" => 200, "body" => "Convertd file" + )); + + $this->assertSame("Convertd file", Tinify\Source::fromBuffer("png file")->convert(array("type" => "image/webp"))->toBuffer()); + $this->assertSame("{\"convert\":{\"type\":\"image\/webp\"}}", CurlMock::last(CURLOPT_POSTFIELDS)); + } + + public function testTransformShouldReturnSource() { + Tinify\setKey("valid"); + + CurlMock::register("https://api.tinify.com/shrink", array( + "status" => 201, "headers" => array("Location" => "https://api.tinify.com/some/location") + )); + + CurlMock::register("https://api.tinify.com/some/location", array( + "status" => 200, "body" => "transformed file" + )); + + $this->assertInstanceOf("Tinify\Source", Tinify\Source::fromBuffer("png file")->transform(array("background" => "black"))); + $this->assertSame("png file", CurlMock::last(CURLOPT_POSTFIELDS)); + } + + public function testTransformShouldReturnSourceWithData() { + Tinify\setKey("valid"); + + CurlMock::register("https://api.tinify.com/shrink", array( + "status" => 201, "headers" => array("Location" => "https://api.tinify.com/some/location") + )); + + CurlMock::register("https://api.tinify.com/some/location", array( + "status" => 200, "body" => "transformd file" + )); + + $this->assertSame("transformd file", Tinify\Source::fromBuffer("png file")->transform(array("background" => "black"))->toBuffer()); + $this->assertSame("{\"transform\":{\"background\":\"black\"}}", CurlMock::last(CURLOPT_POSTFIELDS)); + } + + public function testStoreShouldReturnResultMeta() { Tinify\setKey("valid"); CurlMock::register("https://api.tinify.com/shrink", array( @@ -250,7 +303,7 @@ public function testWithValidApiKeyStoreShouldReturnResultMeta() { $this->assertSame("{\"store\":{\"service\":\"s3\",\"aws_secret_access_key\":\"abcde\"}}", CurlMock::last(CURLOPT_POSTFIELDS)); } - public function testWithValidApiKeyStoreShouldReturnResultMetaWithLocation() { + public function testStoreShouldReturnResultMetaWithLocation() { Tinify\setKey("valid"); CurlMock::register("https://api.tinify.com/shrink", array( @@ -270,7 +323,7 @@ public function testWithValidApiKeyStoreShouldReturnResultMetaWithLocation() { $this->assertSame("{\"store\":{\"service\":\"s3\"}}", CurlMock::last(CURLOPT_POSTFIELDS)); } - public function testWithValidApiKeyStoreShouldIncludeOtherOptionsIfSet() { + public function testStoreShouldIncludeOtherOptionsIfSet() { Tinify\setKey("valid"); CurlMock::register("https://api.tinify.com/shrink", array( @@ -287,7 +340,7 @@ public function testWithValidApiKeyStoreShouldIncludeOtherOptionsIfSet() { $this->assertSame("{\"resize\":{\"width\":300},\"store\":{\"service\":\"s3\",\"aws_secret_access_key\":\"abcde\"}}", CurlMock::last(CURLOPT_POSTFIELDS)); } - public function testWithValidApiKeyToBufferShouldReturnImageData() { + public function testToBufferShouldReturnImageData() { Tinify\setKey("valid"); CurlMock::register("https://api.tinify.com/shrink", array( @@ -300,7 +353,7 @@ public function testWithValidApiKeyToBufferShouldReturnImageData() { $this->assertSame("compressed file", Tinify\Source::fromBuffer("png file")->toBuffer()); } - public function testWithValidApiKeyToFileShouldStoreImageData() { + public function testToFileShouldStoreImageData() { Tinify\setKey("valid"); CurlMock::register("https://api.tinify.com/shrink", array( diff --git a/test/TinifyTest.php b/test/TinifyTest.php index 889df26..39348da 100644 --- a/test/TinifyTest.php +++ b/test/TinifyTest.php @@ -3,13 +3,6 @@ use Tinify\CurlMock; class ClientTest extends TestCase { - private $dummyFile; - - public function setUp() { - parent::setUp(); - $this->dummyFile = __DIR__ . "/examples/dummy.png"; - } - public function testGetKeyWithoutKeyShouldReturnNull() { $this->assertSame(NULL, Tinify\getKey()); } @@ -137,7 +130,7 @@ public function testFromFileShouldReturnSource() { "status" => 201, "headers" => array("Location" => "https://api.tinify.com/some/location") )); Tinify\setKey("valid"); - $this->assertInstanceOf("Tinify\Source", Tinify\fromFile($this->dummyFile)); + $this->assertInstanceOf("Tinify\Source", Tinify\fromFile(DUMMY_FILE_LOCATION)); } public function testFromBufferShouldReturnSource() { diff --git a/test/base/test_case_1.php b/test/base/test_case_1.php new file mode 100644 index 0000000..3a2082b --- /dev/null +++ b/test/base/test_case_1.php @@ -0,0 +1,12 @@ += 0) { + require_once("base" . DIRECTORY_SEPARATOR . "test_case_2.php"); + class_alias('TestCase_2', 'TestCase'); +} else { + require_once("base" . DIRECTORY_SEPARATOR . "test_case_1.php"); + class_alias('TestCase_1', 'TestCase'); +} + +define('DUMMY_FILE_LOCATION', dirname(__DIR__) . DIRECTORY_SEPARATOR . 'test' . DIRECTORY_SEPARATOR . 'examples' . DIRECTORY_SEPARATOR . 'dummy.png'); diff --git a/test/helper.php b/test/helper.php deleted file mode 100644 index a2536ce..0000000 --- a/test/helper.php +++ /dev/null @@ -1,16 +0,0 @@ -assertLessThan(1500, $size); /* width == 137 */ - $this->assertContains("\0\0\0\x89", $contents); - $this->assertNotContains("Copyright Voormedia", $contents); + $this->assertStringContainsString("\0\0\0\x89", $contents); + $this->assertStringNotContainsString("Copyright Voormedia", $contents); } public function testShouldCompressFromUrl() { @@ -43,8 +44,8 @@ public function testShouldCompressFromUrl() { $this->assertLessThan(1500, $size); /* width == 137 */ - $this->assertContains("\0\0\0\x89", $contents); - $this->assertNotContains("Copyright Voormedia", $contents); + $this->assertStringContainsString("\0\0\0\x89", $contents); + $this->assertStringNotContainsString("Copyright Voormedia", $contents); } public function testShouldResize() { @@ -58,8 +59,8 @@ public function testShouldResize() { $this->assertLessThan(1000, $size); /* width == 50 */ - $this->assertContains("\0\0\0\x32", $contents); - $this->assertNotContains("Copyright Voormedia", $contents); + $this->assertStringContainsString("\0\0\0\x32", $contents); + $this->assertStringNotContainsString("Copyright Voormedia", $contents); } public function testShouldPreserveMetadata() { @@ -73,7 +74,18 @@ public function testShouldPreserveMetadata() { $this->assertLessThan(2000, $size); /* width == 137 */ - $this->assertContains("\0\0\0\x89", $contents); - $this->assertContains("Copyright Voormedia", $contents); + $this->assertStringContainsString("\0\0\0\x89", $contents); + $this->assertStringContainsString("Copyright Voormedia", $contents); + } + + public function testShouldConvert() { + $path = tempnam(sys_get_temp_dir(), "tinify-php"); + self::$optimized->convert(array("type" => ["image/webp"]))->toFile($path); + + $size = filesize($path); + $contents = fread(fopen($path, "rb"), $size); + + $this->assertEquals(substr($contents, 0, 4), "RIFF"); + $this->assertEquals(substr($contents, 8, 4), "WEBP"); } }