mirror of
https://github.com/wiosna-dev/common-library.git
synced 2026-03-12 09:31:51 +01:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3bcda8e906 | ||
|
|
1641c50d1d | ||
|
|
afbbdfe437 |
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
64
.docker/config/Dockerfile
Normal file
64
.docker/config/Dockerfile
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
FROM php:5.5-cli
|
||||||
|
|
||||||
|
#
|
||||||
|
# Tools & libraries
|
||||||
|
#
|
||||||
|
RUN apt-get update \
|
||||||
|
&& apt-get install -y --no-install-recommends \
|
||||||
|
vim \
|
||||||
|
git \
|
||||||
|
zip \
|
||||||
|
unzip \
|
||||||
|
zlib1g-dev \
|
||||||
|
libicu-dev \
|
||||||
|
&& apt-get clean \
|
||||||
|
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
||||||
|
|
||||||
|
#
|
||||||
|
# PHP extensions
|
||||||
|
#
|
||||||
|
RUN docker-php-ext-install \
|
||||||
|
zip \
|
||||||
|
intl \
|
||||||
|
mbstring
|
||||||
|
|
||||||
|
#
|
||||||
|
# PHP configuration:
|
||||||
|
# - default configuration
|
||||||
|
# - timezone
|
||||||
|
#
|
||||||
|
COPY php.ini /usr/local/etc/php/php.ini
|
||||||
|
ARG TIMEZONE
|
||||||
|
RUN echo "\n""date.timezone = $TIMEZONE""\n" >> /usr/local/etc/php/php.ini
|
||||||
|
|
||||||
|
#
|
||||||
|
# Xdebug
|
||||||
|
#
|
||||||
|
RUN pecl install xdebug \
|
||||||
|
&& docker-php-ext-enable xdebug
|
||||||
|
COPY xdebug.ini /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
|
||||||
|
|
||||||
|
#
|
||||||
|
# Phing
|
||||||
|
#
|
||||||
|
RUN pear channel-discover pear.phing.info \
|
||||||
|
&& pear install [--alldeps] phing/phing
|
||||||
|
|
||||||
|
#
|
||||||
|
# Composer + https://packagist.org/packages/hirak/prestissimo package
|
||||||
|
#
|
||||||
|
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
|
||||||
|
&& php -r "if (hash_file('SHA384', 'composer-setup.php') === \
|
||||||
|
'544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061') { echo \
|
||||||
|
'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" \
|
||||||
|
&& php composer-setup.php --install-dir=/usr/local/bin --filename=composer \
|
||||||
|
&& php -r "unlink('composer-setup.php');" \
|
||||||
|
&& composer global require --no-plugins --no-scripts hirak/prestissimo \
|
||||||
|
&& rm -rf /root/.composer/cache/*
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bash
|
||||||
|
#
|
||||||
|
RUN sed -i 's/^# export/export/g' /root/.bashrc \
|
||||||
|
&& sed -i 's/^# alias/alias/g' /root/.bashrc \
|
||||||
|
&& echo "\n"'export PATH=/project/vendor/bin:$PATH'"\n" >> /root/.bashrc
|
||||||
15
.env.dist
15
.env.dist
@@ -1,15 +0,0 @@
|
|||||||
# -----------------------------------------------------------------------------
|
|
||||||
### Docker
|
|
||||||
# -----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#
|
|
||||||
# All containers
|
|
||||||
#
|
|
||||||
DOCKER_CONTAINER_OWNER=meritoo
|
|
||||||
DOCKER_CONTAINER_PROJECT=common-library
|
|
||||||
|
|
||||||
#
|
|
||||||
# PHP configuration:
|
|
||||||
# - timezone
|
|
||||||
#
|
|
||||||
TIMEZONE=Europe/Warsaw
|
|
||||||
72
.gitignore
vendored
72
.gitignore
vendored
@@ -1,58 +1,51 @@
|
|||||||
# ------------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------------------------------------------------
|
||||||
# Environment-related parameters
|
|
||||||
# ------------------------------------------------------------------------------
|
|
||||||
.env
|
|
||||||
|
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
|
||||||
### Vendors
|
### Vendors
|
||||||
# ------------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------------------------------------------------
|
||||||
/vendor/
|
/vendor/
|
||||||
|
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------------------------------------------------
|
||||||
### Composer
|
### Composer
|
||||||
# ------------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------------------------------------------------
|
||||||
/composer.lock
|
/composer.lock
|
||||||
/composer.phar
|
/composer.phar
|
||||||
|
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------------------------------------------------
|
||||||
### Phing
|
### Phing
|
||||||
# ------------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------------------------------------------------
|
||||||
/phing/properties
|
/.phing/properties
|
||||||
|
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------------------------------------------------
|
||||||
### PHPUnit
|
### PHPUnit
|
||||||
# ------------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------------------------------------------------
|
||||||
/phpunit.xml
|
/phpunit.xml
|
||||||
|
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------------------------------------------------
|
||||||
### PHP Coding Standards Fixer
|
### PHP Coding Standards Fixer generated files
|
||||||
# ------------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------------------------------------------------
|
||||||
/.php_cs
|
|
||||||
/.php_cs.cache
|
/.php_cs.cache
|
||||||
|
|
||||||
|
|
||||||
# -----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------------------------------------------------
|
||||||
### Build files
|
### Build files
|
||||||
# -----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------------------------------------------------
|
||||||
/build/
|
/.build/
|
||||||
|
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------------------------------------------------
|
||||||
### Generated databases
|
### Generated databases
|
||||||
# ------------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------------------------------------------------
|
||||||
/data/tmp
|
/.data/tmp
|
||||||
*.sql
|
*.sql
|
||||||
*.sqlite
|
*.sqlite
|
||||||
|
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------------------------------------------------
|
||||||
### Compiled source
|
### Compiled source
|
||||||
# ------------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------------------------------------------------
|
||||||
*.com
|
*.com
|
||||||
*.class
|
*.class
|
||||||
*.dll
|
*.dll
|
||||||
@@ -61,22 +54,23 @@
|
|||||||
*.so
|
*.so
|
||||||
|
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------------------------------------------------
|
||||||
### Shell scripts
|
### Shell scripts
|
||||||
# ------------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------------------------------------------------
|
||||||
/*.sh
|
/*.sh
|
||||||
|
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------------------------------------------------
|
||||||
### JetBrains
|
### JetBrains
|
||||||
# ------------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------------------------------------------------
|
||||||
/.idea
|
/.idea
|
||||||
|
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------------------------------------------------
|
||||||
### NetBeans template
|
### NetBeans template
|
||||||
# ------------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------------------------------------------------
|
||||||
nbproject/private/
|
nbproject/private/
|
||||||
|
build/
|
||||||
nbbuild/
|
nbbuild/
|
||||||
dist/
|
dist/
|
||||||
nbdist/
|
nbdist/
|
||||||
@@ -84,9 +78,9 @@ nbactions.xml
|
|||||||
.nb-gradle/
|
.nb-gradle/
|
||||||
|
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------------------------------------------------
|
||||||
### OSX template
|
### OSX template
|
||||||
# ------------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------------------------------------------------
|
||||||
.DS_Store
|
.DS_Store
|
||||||
.AppleDouble
|
.AppleDouble
|
||||||
.LSOverride
|
.LSOverride
|
||||||
@@ -113,9 +107,9 @@ Temporary Items
|
|||||||
.apdisk
|
.apdisk
|
||||||
|
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------------------------------------------------
|
||||||
### Linux template
|
### Linux template
|
||||||
# ------------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------------------------------------------------
|
||||||
*~
|
*~
|
||||||
|
|
||||||
# temporary files which can be created if a process still has a handle open of a deleted file
|
# temporary files which can be created if a process still has a handle open of a deleted file
|
||||||
@@ -128,9 +122,9 @@ Temporary Items
|
|||||||
.Trash-*
|
.Trash-*
|
||||||
|
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------------------------------------------------
|
||||||
### Windows template
|
### Windows template
|
||||||
# ------------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------------------------------------------------
|
||||||
# Windows image file caches
|
# Windows image file caches
|
||||||
Thumbs.db
|
Thumbs.db
|
||||||
ehthumbs.db
|
ehthumbs.db
|
||||||
|
|||||||
@@ -2,12 +2,12 @@
|
|||||||
<project name="Meritoo Package" basedir="." default="build:main" phingVersion="2.14.0">
|
<project name="Meritoo Package" basedir="." default="build:main" phingVersion="2.14.0">
|
||||||
<!-- Properties -->
|
<!-- Properties -->
|
||||||
<if>
|
<if>
|
||||||
<available file="phing/properties" property="custom.properties.available"/>
|
<available file=".phing/properties" property="custom.properties.available"/>
|
||||||
<then>
|
<then>
|
||||||
<property file="phing/properties"/>
|
<property file=".phing/properties" />
|
||||||
</then>
|
</then>
|
||||||
<else>
|
<else>
|
||||||
<property file="phing/properties.dist"/>
|
<property file=".phing/properties.dist" />
|
||||||
</else>
|
</else>
|
||||||
</if>
|
</if>
|
||||||
|
|
||||||
@@ -21,9 +21,9 @@
|
|||||||
depends="app:composer, app:vendors, app:checkout"
|
depends="app:composer, app:vendors, app:checkout"
|
||||||
description="Prepares app to build." />
|
description="Prepares app to build." />
|
||||||
|
|
||||||
<!-- Updates Composer and validates composer.* files -->
|
<!-- Check / update composer -->
|
||||||
<target name="app:composer" description="Updates Composer and validates composer.* files">
|
<target name="app:composer" description="Checks / updates composer">
|
||||||
<echo msg="Updating Composer and validating composer.* files..." />
|
<echo msg="Checking / updating composer..." />
|
||||||
|
|
||||||
<if>
|
<if>
|
||||||
<available file="composer.phar" />
|
<available file="composer.phar" />
|
||||||
@@ -42,14 +42,7 @@
|
|||||||
</if>
|
</if>
|
||||||
</else>
|
</else>
|
||||||
</if>
|
</if>
|
||||||
|
|
||||||
<!-- Update Composer -->
|
|
||||||
<composer command="selfupdate" />
|
<composer command="selfupdate" />
|
||||||
|
|
||||||
<!-- Validate Composer -->
|
|
||||||
<composer command="validate">
|
|
||||||
<arg line="--no-check-all --strict" />
|
|
||||||
</composer>
|
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<!-- Project Install/update vendors -->
|
<!-- Project Install/update vendors -->
|
||||||
@@ -75,8 +68,6 @@
|
|||||||
<then>
|
<then>
|
||||||
<composer php="${composer.php}" composer="${composer.path}" command="install">
|
<composer php="${composer.php}" composer="${composer.path}" command="install">
|
||||||
<arg value="--optimize-autoloader" />
|
<arg value="--optimize-autoloader" />
|
||||||
<arg value="--prefer-dist" />
|
|
||||||
<arg value="--classmap-authoritative" />
|
|
||||||
</composer>
|
</composer>
|
||||||
</then>
|
</then>
|
||||||
<else>
|
<else>
|
||||||
@@ -65,7 +65,7 @@ composer.validate = false
|
|||||||
|
|
||||||
# System directories
|
# System directories
|
||||||
#
|
#
|
||||||
dir.data = ${project.basedir}/data
|
dir.data = ${project.basedir}/.data
|
||||||
dir.src = ${project.basedir}/src
|
dir.src = ${project.basedir}/src
|
||||||
dir.tests = ${project.basedir}/tests
|
dir.tests = ${project.basedir}/tests
|
||||||
|
|
||||||
@@ -73,7 +73,7 @@ dir.tests = ${project.basedir}/tests
|
|||||||
# Build directories
|
# Build directories
|
||||||
# --------------------------------------------------------------------------------
|
# --------------------------------------------------------------------------------
|
||||||
|
|
||||||
dir.build = ${project.basedir}/build
|
dir.build = ${project.basedir}/.build
|
||||||
dir.reports = ${dir.build}/logs
|
dir.reports = ${dir.build}/logs
|
||||||
dir.reports.pdepend = ${dir.reports}/pdepend
|
dir.reports.pdepend = ${dir.reports}/pdepend
|
||||||
dir.reports.coverage = ${dir.reports}/phpunit_coverage
|
dir.reports.coverage = ${dir.reports}/phpunit_coverage
|
||||||
@@ -91,15 +91,40 @@ dir.reports.coverage = ${dir.reports}/phpunit_coverage
|
|||||||
# Data directories
|
# Data directories
|
||||||
# --------------------------------------------------------------------------------
|
# --------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
dir.data.tests = ${dir.data}/tests
|
||||||
dir.data.temporary = ${dir.data}/tmp
|
dir.data.temporary = ${dir.data}/tmp
|
||||||
|
|
||||||
# --------------------------------------------------------------------------------
|
# --------------------------------------------------------------------------------
|
||||||
# Testing
|
# Testing
|
||||||
# --------------------------------------------------------------------------------
|
# --------------------------------------------------------------------------------
|
||||||
|
|
||||||
# Path of the framework used to run unit tests
|
# Test database path
|
||||||
#
|
#
|
||||||
tests.framework.path = ./vendor/bin/phpunit --verbose --no-coverage --testdox
|
tests.database = ${dir.data.temporary}/database.sqlite
|
||||||
|
|
||||||
|
#
|
||||||
|
# Disabled, because unnecessary right now
|
||||||
|
# PHPUnit is installed and loaded by Composer
|
||||||
|
#
|
||||||
|
# Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
||||||
|
# 2017-02-22
|
||||||
|
#
|
||||||
|
# Run PHPUnit using exec task instead of phpunitTask
|
||||||
|
#phpunit.useExec = false
|
||||||
|
|
||||||
|
#
|
||||||
|
# Disabled, because unnecessary right now
|
||||||
|
# We want generate code coverage always
|
||||||
|
#
|
||||||
|
# Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
||||||
|
# 2017-02-22
|
||||||
|
#
|
||||||
|
# Collect coverage data during tests
|
||||||
|
#phpunit.withCoverage = true
|
||||||
|
|
||||||
|
# Path of the PHPUnit (https://phpunit.de)
|
||||||
|
#
|
||||||
|
phpUnit.path = ./vendor/bin/phpunit
|
||||||
|
|
||||||
# Path of the PHP Coding Standards Fixer (http://cs.sensiolabs.org)
|
# Path of the PHP Coding Standards Fixer (http://cs.sensiolabs.org)
|
||||||
#
|
#
|
||||||
@@ -11,12 +11,12 @@
|
|||||||
|
|
||||||
<!-- Properties -->
|
<!-- Properties -->
|
||||||
<if>
|
<if>
|
||||||
<available file="phing/properties" property="custom.properties.available"/>
|
<available file=".phing/properties" property="custom.properties.available"/>
|
||||||
<then>
|
<then>
|
||||||
<property file="phing/properties"/>
|
<property file=".phing/properties" />
|
||||||
</then>
|
</then>
|
||||||
<else>
|
<else>
|
||||||
<property file="phing/properties.dist"/>
|
<property file=".phing/properties.dist" />
|
||||||
</else>
|
</else>
|
||||||
</if>
|
</if>
|
||||||
|
|
||||||
@@ -87,7 +87,7 @@
|
|||||||
|
|
||||||
<!-- Test target -->
|
<!-- Test target -->
|
||||||
<target name="build:test"
|
<target name="build:test"
|
||||||
depends="test:unit"
|
depends="test:phpunit"
|
||||||
description="Executes all tests" />
|
description="Executes all tests" />
|
||||||
|
|
||||||
<!-- Project build clean -->
|
<!-- Project build clean -->
|
||||||
@@ -103,8 +103,8 @@
|
|||||||
<!--<mkdir dir="${dir.docs}" />-->
|
<!--<mkdir dir="${dir.docs}" />-->
|
||||||
<!--<mkdir dir="${dir.docs.phpdoc2}" />-->
|
<!--<mkdir dir="${dir.docs.phpdoc2}" />-->
|
||||||
<mkdir dir="${dir.reports}" />
|
<mkdir dir="${dir.reports}" />
|
||||||
|
<mkdir dir="${dir.reports.coverage}" />
|
||||||
<mkdir dir="${dir.reports.pdepend}" />
|
<mkdir dir="${dir.reports.pdepend}" />
|
||||||
<mkdir dir="${dir.reports.coverage}"/>
|
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<!-- PHPDocumentor2 API documentation target -->
|
<!-- PHPDocumentor2 API documentation target -->
|
||||||
@@ -212,9 +212,94 @@
|
|||||||
</target>
|
</target>
|
||||||
|
|
||||||
<!-- Unit tests -->
|
<!-- Unit tests -->
|
||||||
<target name="test:unit" description="Executes unit tests">
|
<target name="test:phpunit" description="Executes PHPUnit tests">
|
||||||
|
<!-- Check test database -->
|
||||||
|
<if>
|
||||||
|
<not>
|
||||||
|
<available file="${dir.data.tests}" type="dir" property="dir.data.tests.available" />
|
||||||
|
</not>
|
||||||
|
<then>
|
||||||
|
<mkdir dir="${dir.data.tests}" />
|
||||||
|
</then>
|
||||||
|
</if>
|
||||||
|
<if>
|
||||||
|
<not>
|
||||||
|
<available file="${tests.database}" property="tests.database.available" />
|
||||||
|
</not>
|
||||||
|
<then>
|
||||||
|
<touch file="${tests.database}" />
|
||||||
|
</then>
|
||||||
|
</if>
|
||||||
<echo msg="Running unit tests..." />
|
<echo msg="Running unit tests..." />
|
||||||
<exec command="${tests.framework.path}" passthru="true"/>
|
<coverage-setup database="${dir.reports.coverage}/coverage.db">
|
||||||
|
<fileset refid="sourcecode" />
|
||||||
|
</coverage-setup>
|
||||||
|
<exec command="${phpUnit.path} --verbose --configuration ${project.basedir}/phpunit.xml.dist" passthru="true" />
|
||||||
|
<!--
|
||||||
|
I have to use ExecTask to run PHPUnit instead of PHPUnitTask, because tests are not running if PHPUnitTask is
|
||||||
|
used (don't know why):
|
||||||
|
Total tests run: 0, Failures: 0, Errors: 0, Incomplete: 0, Skipped: 0
|
||||||
|
|
||||||
|
Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
||||||
|
2017-02-23
|
||||||
|
|
||||||
|
<phpunit configuration="${project.basedir}/phpunit.xml.dist" printsummary="true">
|
||||||
|
<formatter type="xml" todir="${dir.reports}" outfile="phpunit.xml" />
|
||||||
|
<formatter type="plain" todir="${dir.reports}" outfile="phpunit.txt" />
|
||||||
|
<formatter type="clover" todir="${dir.reports.coverage}" />
|
||||||
|
<formatter type="summary" todir="${dir.reports}" outfile="phpunit_summary.txt" />
|
||||||
|
</phpunit>
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Previous / old version
|
||||||
|
|
||||||
|
Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
||||||
|
2017-02-22
|
||||||
|
|
||||||
|
<if>
|
||||||
|
<istrue value="${phpunit.useExec}" />
|
||||||
|
<then>
|
||||||
|
<if>
|
||||||
|
<istrue value="${phpunit.withCoverage}" />
|
||||||
|
<then>
|
||||||
|
<echo message="Running tests with code coverage..." />
|
||||||
|
<exec command="phpunit \-\-log-junit ${dir.reports}/phpunit.xml \-\-coverage-clover ${dir.reports.coverage}/clover-coverage.xml \-\-coverage-crap4j ${dir.reports.coverage}/crap4j-coverage.xml \-\-coverage-html ${dir.reports.coverage}/ -c ${project.basedir} \-\-colors" passthru="true" checkreturn="true" />
|
||||||
|
</then>
|
||||||
|
<else>
|
||||||
|
<echo message="Running tests without code coverage..." />
|
||||||
|
<exec command="phpunit \-\-log-junit ${dir.reports}/phpunit.xml -c ${project.basedir} \-\-colors" passthru="true" checkreturn="true" />
|
||||||
|
</else>
|
||||||
|
</if>
|
||||||
|
</then>
|
||||||
|
<else>
|
||||||
|
<if>
|
||||||
|
<istrue value="${phpunit.withCoverage}" />
|
||||||
|
<then>
|
||||||
|
<echo message="Running tests with code coverage..." />
|
||||||
|
<coverage-setup database="${dir.reports.coverage}/coverage.db">
|
||||||
|
<fileset refid="sourcecode" />
|
||||||
|
</coverage-setup>
|
||||||
|
<phpunit printsummary="true" codecoverage="true">
|
||||||
|
<formatter type="xml" todir="${dir.reports}" outfile="phpunit.xml" />
|
||||||
|
<formatter type="plain" todir="${dir.reports}" outfile="phpunit.txt" />
|
||||||
|
<formatter type="clover" todir="${dir.reports.coverage}" />
|
||||||
|
<formatter type="summary" todir="${dir.reports}" outfile="phpunit_summary.txt" />
|
||||||
|
</phpunit>
|
||||||
|
</then>
|
||||||
|
<else>
|
||||||
|
<echo message="Running tests without code coverage..." />
|
||||||
|
<phpunit printsummary="true">
|
||||||
|
<formatter todir="${dir.reports}" type="xml" outfile="phpunit.xml" />
|
||||||
|
<batchtest>
|
||||||
|
<fileset refid="tests" />
|
||||||
|
</batchtest>
|
||||||
|
</phpunit>
|
||||||
|
</else>
|
||||||
|
</if>
|
||||||
|
</else>
|
||||||
|
</if>
|
||||||
|
-->
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<!-- Checkout and finalization -->
|
<!-- Checkout and finalization -->
|
||||||
25
.php_cs.dist
25
.php_cs.dist
@@ -1,6 +1,13 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
$finder = PhpCsFixer\Finder::create()
|
$finder = PhpCsFixer\Finder::create()
|
||||||
|
/*
|
||||||
|
* Do not verify:
|
||||||
|
* - all DependencyInjection/Configuration classes: the Configuration.php files
|
||||||
|
* - autoloader from /app directory: autoload.php
|
||||||
|
*/
|
||||||
|
->notPath('/DependencyInjection\/Configuration\.php/')
|
||||||
|
->notPath('/autoload\.php/')
|
||||||
->in([
|
->in([
|
||||||
__DIR__ . '/src',
|
__DIR__ . '/src',
|
||||||
__DIR__ . '/tests',
|
__DIR__ . '/tests',
|
||||||
@@ -8,20 +15,16 @@ $finder = PhpCsFixer\Finder::create()
|
|||||||
|
|
||||||
return PhpCsFixer\Config::create()
|
return PhpCsFixer\Config::create()
|
||||||
->setRules([
|
->setRules([
|
||||||
'@Symfony' => true,
|
'@Symfony' => true,
|
||||||
'binary_operator_spaces' => [
|
'phpdoc_summary' => false,
|
||||||
|
'phpdoc_separation' => false,
|
||||||
|
'phpdoc_align' => false,
|
||||||
|
'cast_spaces' => false,
|
||||||
|
'binary_operator_spaces' => [
|
||||||
'align_double_arrow' => true,
|
'align_double_arrow' => true,
|
||||||
],
|
],
|
||||||
'blank_line_before_return' => false,
|
'concat_space' => [
|
||||||
'cast_spaces' => false,
|
|
||||||
'concat_space' => [
|
|
||||||
'spacing' => 'one',
|
'spacing' => 'one',
|
||||||
],
|
],
|
||||||
'phpdoc_add_missing_param_annotation' => true,
|
|
||||||
'phpdoc_align' => false,
|
|
||||||
'phpdoc_order' => true,
|
|
||||||
'phpdoc_separation' => false,
|
|
||||||
'phpdoc_summary' => false,
|
|
||||||
'trim_array_spaces' => false,
|
|
||||||
])
|
])
|
||||||
->setFinder($finder);
|
->setFinder($finder);
|
||||||
|
|||||||
8
.styleci.yml
Normal file
8
.styleci.yml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
preset: symfony
|
||||||
|
|
||||||
|
disabled:
|
||||||
|
- phpdoc_annotation_without_dot
|
||||||
|
- cast_spaces
|
||||||
|
- concat_without_spaces
|
||||||
|
- blank_line_before_return
|
||||||
|
- trim_array_spaces
|
||||||
@@ -5,12 +5,8 @@ php:
|
|||||||
- 7.0
|
- 7.0
|
||||||
- 7.1
|
- 7.1
|
||||||
|
|
||||||
before_install:
|
|
||||||
- sudo locale-gen de_DE.UTF-8 es_ES.UTF-8 en_GB.UTF-8 en_US.UTF-8 fr_FR.UTF-8 it_IT.UTF-8 pl_PL.UTF-8 ru_RU.UTF-8
|
|
||||||
- composer global require hirak/prestissimo
|
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- travis_wait 30 composer install -vvv
|
- composer install
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- php ./vendor/bin/phpunit
|
- php ./vendor/bin/phpunit
|
||||||
|
|||||||
13
CHANGELOG.md
13
CHANGELOG.md
@@ -1,13 +0,0 @@
|
|||||||
# Meritoo Common Library
|
|
||||||
Common and useful classes, methods, exceptions etc.
|
|
||||||
|
|
||||||
## 0.0.19
|
|
||||||
|
|
||||||
1. Add this changelog
|
|
||||||
2. Reorganize documentation & update [Readme](README.md)
|
|
||||||
3. Docker: use project-related binaries globally
|
|
||||||
4. StyleCI & PHP Coding Standards Fixer: update configuration
|
|
||||||
5. Documentation > Docker > add paragraph for PHP Coding Standards Fixer
|
|
||||||
6. Coding standard > fix automatically
|
|
||||||
7. StyleCI configuration > fix bug "The provided fixer 'binary_operator_spaces' cannot be enabled again because it was already enabled"
|
|
||||||
8. StyleCI > disable & remove
|
|
||||||
120
README.md
120
README.md
@@ -1,26 +1,126 @@
|
|||||||
# Meritoo Common Library
|
# Meritoo Common Library
|
||||||
Common and useful classes, methods, exceptions etc.
|
Common and useful classes, methods, exceptions etc.
|
||||||
|
|
||||||
[](https://travis-ci.org/meritoo/common-library) [](https://packagist.org/packages/meritoo/common-library) [](https://github.com/meritoo/common-library) [](https://github.com/meritoo/common-library) [](https://coveralls.io/github/meritoo/common-library?branch=master)
|
[](https://travis-ci.org/meritoo/common-library) [](https://packagist.org/packages/meritoo/common-library) [](https://styleci.io/repos/101790028) [](https://github.com/meritoo/common-library) [](https://github.com/meritoo/common-library) [](https://coveralls.io/github/meritoo/common-library?branch=master)
|
||||||
|
|
||||||
# Installation
|
## Installation
|
||||||
|
|
||||||
|
In your `composer.json` add address of repository into `repositories` section:
|
||||||
|
|
||||||
|
```json
|
||||||
|
"repositories": [
|
||||||
|
(...)
|
||||||
|
{
|
||||||
|
"type": "vcs",
|
||||||
|
"url": "https://github.com/wiosna-dev/common-library"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
Run [Composer](https://getcomposer.org) to install this package in your project:
|
Run [Composer](https://getcomposer.org) to install this package in your project:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
composer require meritoo/common-library
|
$ composer require wiosna-dev/common-library
|
||||||
```
|
```
|
||||||
|
|
||||||
> [How to install Composer?](https://getcomposer.org/download)
|
> How to install Composer: https://getcomposer.org/download
|
||||||
|
|
||||||
# Usage
|
## Rebuilding project and tests running
|
||||||
|
|
||||||
1. [Base test case (with common methods and data providers)](docs/Base-test-case.md)
|
```bash
|
||||||
2. [Collection of elements](docs/Collection-of-elements.md)
|
$ docker-compose up -d
|
||||||
3. [Static methods](docs/Static-methods.md)
|
$ docker-compose exec php-cli phing
|
||||||
|
```
|
||||||
|
|
||||||
# Development
|
> What is Docker? https://www.docker.com/what-docker
|
||||||
|
|
||||||
More information [you can find here](docs/Development.md)
|
## Static methods
|
||||||
|
|
||||||
|
This package contains a lot of class with static methods, so usage is not so complicated. Just run the static method who would you like to use. Example:
|
||||||
|
|
||||||
|
```php
|
||||||
|
use Meritoo\Common\Utilities\Arrays;
|
||||||
|
|
||||||
|
$firstElement = Arrays::getFirstElement(['lorem', 'ipsum']);
|
||||||
|
var_dump($firstElement); // string(5) "lorem"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Base test case with common methods and data providers
|
||||||
|
|
||||||
|
Located here: `Meritoo\Common\Test\Base\BaseTestCase`. Just extend the `BaseTestCase` class and use it like in `Meritoo\Common\Test\Utilities\DateTest` class:
|
||||||
|
|
||||||
|
```php
|
||||||
|
class DateTest extends BaseTestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param mixed $value Empty value, e.g. ""
|
||||||
|
* @dataProvider provideEmptyValue
|
||||||
|
*/
|
||||||
|
public function testGetDateTimeEmptyValue($value)
|
||||||
|
{
|
||||||
|
self::assertFalse(Date::getDateTime($value));
|
||||||
|
}
|
||||||
|
|
||||||
|
(...)
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
or in `Meritoo\Common\Test\Utilities\MimeTypesTest` class:
|
||||||
|
|
||||||
|
```php
|
||||||
|
class MimeTypesTest extends BaseTestCase
|
||||||
|
{
|
||||||
|
(...)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param bool $mimeType The mime type, e.g. "video/mpeg"
|
||||||
|
* @dataProvider provideBooleanValue
|
||||||
|
*/
|
||||||
|
public function testGetExtensionBooleanMimeType($mimeType)
|
||||||
|
{
|
||||||
|
self::assertEquals('', MimeTypes::getExtension($mimeType));
|
||||||
|
}
|
||||||
|
|
||||||
|
(...)
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Collection of elements
|
||||||
|
|
||||||
|
Located here: `Meritoo\Common\Collection\Collection`. It's a set of some elements, e.g. objects. It's iterable and countable. Provides very useful methods. Some of them:
|
||||||
|
- `getFirst()` - returns the first element in the collection
|
||||||
|
- `getLast()` - returns the last element in the collection
|
||||||
|
- `isEmpty()` - returns information if collection is empty
|
||||||
|
- `add($element, $index = null)` - adds given element (at the end of collection)
|
||||||
|
- `addMultiple($elements, $useIndexes = false)` - adds given elements (at the end of collection)
|
||||||
|
- `prepend($element)` - prepends given element (adds given element at the beginning of collection)
|
||||||
|
- `remove($element)` - removes given element
|
||||||
|
|
||||||
|
Examples of usage below.
|
||||||
|
|
||||||
|
#### An empty collection
|
||||||
|
|
||||||
|
```php
|
||||||
|
use Meritoo\Common\Collection\Collection;
|
||||||
|
|
||||||
|
$emptyCollection = new Collection();
|
||||||
|
var_dump($emptyCollection->isEmpty()); // bool(true)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Simple collection
|
||||||
|
|
||||||
|
```php
|
||||||
|
use Meritoo\Common\Collection\Collection;
|
||||||
|
|
||||||
|
$elements = [
|
||||||
|
'lorem',
|
||||||
|
'ipsum',
|
||||||
|
123 => 'dolor',
|
||||||
|
345 => 'sit',
|
||||||
|
];
|
||||||
|
|
||||||
|
$simpleCollection = new Collection($elements);
|
||||||
|
var_dump($simpleCollection->has('dolor')); // bool(true)
|
||||||
|
```
|
||||||
|
|
||||||
Enjoy!
|
Enjoy!
|
||||||
|
|||||||
12
build.xml
12
build.xml
@@ -2,12 +2,12 @@
|
|||||||
<project name="Meritoo Package" basedir="." default="build:main" phingVersion="2.14.0">
|
<project name="Meritoo Package" basedir="." default="build:main" phingVersion="2.14.0">
|
||||||
<!-- Properties -->
|
<!-- Properties -->
|
||||||
<if>
|
<if>
|
||||||
<available file="phing/properties" property="custom.properties.available"/>
|
<available file=".phing/properties" property="custom.properties.available"/>
|
||||||
<then>
|
<then>
|
||||||
<property file="phing/properties"/>
|
<property file=".phing/properties" />
|
||||||
</then>
|
</then>
|
||||||
<else>
|
<else>
|
||||||
<property file="phing/properties.dist"/>
|
<property file=".phing/properties.dist" />
|
||||||
</else>
|
</else>
|
||||||
</if>
|
</if>
|
||||||
|
|
||||||
@@ -18,12 +18,12 @@
|
|||||||
|
|
||||||
<!-- Build app -->
|
<!-- Build app -->
|
||||||
<target name="build:app" description="Prepares app to build and tests">
|
<target name="build:app" description="Prepares app to build and tests">
|
||||||
<phing phingfile="phing/app.xml" haltonfailure="true"/>
|
<phing phingfile=".phing/app.xml" haltonfailure="true" />
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<!-- Build tests -->
|
<!-- Build tests -->
|
||||||
<target name="build:tests" description="Runs all tests, checks and creates docs">
|
<target name="build:tests" description="Runs all tests, checks and creates docs">
|
||||||
<phing phingfile="phing/tests.xml" haltonfailure="true"/>
|
<phing phingfile=".phing/tests.xml" haltonfailure="true" />
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Conditional running of tests.
|
Conditional running of tests.
|
||||||
@@ -35,7 +35,7 @@
|
|||||||
<if>
|
<if>
|
||||||
<equals arg1="${env}" arg2="test" />
|
<equals arg1="${env}" arg2="test" />
|
||||||
<then>
|
<then>
|
||||||
<phing phingfile="phing/tests.xml" haltonfailure="true" />
|
<phing phingfile=".phing/tests.xml" haltonfailure="true" />
|
||||||
</then>
|
</then>
|
||||||
<else>
|
<else>
|
||||||
<echo message="[Skipped] Running tests, checks and creating docs, because it's a not 'test' environment..." />
|
<echo message="[Skipped] Running tests, checks and creating docs, because it's a not 'test' environment..." />
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"name": "meritoo/common-library",
|
"name": "wiosna-dev/common-library",
|
||||||
"description": "Useful classes, methods, extensions etc.",
|
"description": "Useful classes, methods, extensions etc.",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"version": "0.0.19",
|
"version": "0.0.17",
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
"name": "Meritoo.pl",
|
"name": "Meritoo.pl",
|
||||||
@@ -13,7 +13,8 @@
|
|||||||
"require": {
|
"require": {
|
||||||
"php": ">=5.5.9",
|
"php": ">=5.5.9",
|
||||||
"doctrine/orm": "^2.5",
|
"doctrine/orm": "^2.5",
|
||||||
"gedmo/doctrine-extensions": "^2.4"
|
"gedmo/doctrine-extensions": "^2.4",
|
||||||
|
"symfony/http-foundation": "^3.3"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"friendsofphp/php-cs-fixer": "^2.2",
|
"friendsofphp/php-cs-fixer": "^2.2",
|
||||||
|
|||||||
@@ -2,19 +2,14 @@ version: '3'
|
|||||||
|
|
||||||
services:
|
services:
|
||||||
php-cli:
|
php-cli:
|
||||||
image: ${DOCKER_CONTAINER_OWNER}/${DOCKER_CONTAINER_PROJECT}-php-cli
|
image: meritoo/common-library
|
||||||
container_name: ${DOCKER_CONTAINER_OWNER}-${DOCKER_CONTAINER_PROJECT}-php-cli
|
container_name: meritoo-common-library
|
||||||
|
working_dir: /project
|
||||||
entrypoint: php
|
entrypoint: php
|
||||||
command: -S 0.0.0.0:9999
|
command: -S 0.0.0.0:9999
|
||||||
build:
|
build:
|
||||||
context: ./docker/config
|
context: ./.docker/config
|
||||||
args:
|
args:
|
||||||
- TIMEZONE=$TIMEZONE
|
- TIMEZONE=$TIMEZONE
|
||||||
volumes:
|
volumes:
|
||||||
- .:/project
|
- .:/project
|
||||||
composer:
|
|
||||||
image: ${DOCKER_CONTAINER_OWNER}/${DOCKER_CONTAINER_PROJECT}-php-cli
|
|
||||||
container_name: ${DOCKER_CONTAINER_OWNER}-${DOCKER_CONTAINER_PROJECT}-composer
|
|
||||||
entrypoint: composer
|
|
||||||
volumes:
|
|
||||||
- .:/project
|
|
||||||
|
|||||||
@@ -1,131 +0,0 @@
|
|||||||
FROM php:5.5-cli
|
|
||||||
MAINTAINER Meritoo <github@meritoo.pl>
|
|
||||||
|
|
||||||
#
|
|
||||||
# Tools & libraries
|
|
||||||
#
|
|
||||||
RUN apt-get update \
|
|
||||||
&& apt-get install -y --no-install-recommends \
|
|
||||||
vim \
|
|
||||||
git \
|
|
||||||
unzip \
|
|
||||||
libicu-dev \
|
|
||||||
locales \
|
|
||||||
&& apt-get clean \
|
|
||||||
&& rm -rf \
|
|
||||||
/var/lib/apt/lists/* \
|
|
||||||
/tmp/* \
|
|
||||||
/var/tmp/*
|
|
||||||
|
|
||||||
#
|
|
||||||
# Generating locales:
|
|
||||||
# - de_DE
|
|
||||||
# - es_ES
|
|
||||||
# - en_GB
|
|
||||||
# - en_US
|
|
||||||
# - fr_FR
|
|
||||||
# - it_IT
|
|
||||||
# - pl_PL
|
|
||||||
# - ru_RU
|
|
||||||
#
|
|
||||||
RUN sed -i 's/^# de_DE/de_DE/g; \
|
|
||||||
s/^# es_ES/es_ES/g; \
|
|
||||||
s/^# en_GB/en_GB/g; \
|
|
||||||
s/^# en_US/en_US/g; \
|
|
||||||
s/^# fr_FR/fr_FR/g; \
|
|
||||||
s/^# it_IT/it_IT/g; \
|
|
||||||
s/^# pl_PL/pl_PL/g; \
|
|
||||||
s/^# ru_RU/ru_RU/g;' /etc/locale.gen \
|
|
||||||
&& locale-gen
|
|
||||||
|
|
||||||
#
|
|
||||||
# Set default language
|
|
||||||
#
|
|
||||||
# Required to avoid problem with using strange language by error messages.
|
|
||||||
# Example: "chmod(): Aucun fichier ou dossier de ce type"
|
|
||||||
#
|
|
||||||
ENV LANGUAGE=en_US.UTF-8
|
|
||||||
|
|
||||||
#
|
|
||||||
# PHP extensions
|
|
||||||
#
|
|
||||||
RUN docker-php-ext-install \
|
|
||||||
intl \
|
|
||||||
mbstring
|
|
||||||
|
|
||||||
#
|
|
||||||
# PHP extensions (PECL):
|
|
||||||
# - Xdebug
|
|
||||||
#
|
|
||||||
RUN pecl install \
|
|
||||||
xdebug-2.5.5 \
|
|
||||||
&& docker-php-ext-enable \
|
|
||||||
xdebug
|
|
||||||
|
|
||||||
COPY xdebug.ini /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
|
|
||||||
|
|
||||||
#
|
|
||||||
# PHP configuration:
|
|
||||||
# - default configuration
|
|
||||||
# - timezone
|
|
||||||
#
|
|
||||||
COPY php.ini /usr/local/etc/php/php.ini
|
|
||||||
ARG TIMEZONE
|
|
||||||
RUN ln -snf /usr/share/zoneinfo/${TIMEZONE} /etc/localtime \
|
|
||||||
&& echo ${TIMEZONE} > /etc/timezone \
|
|
||||||
&& printf '[PHP]\ndate.timezone = "%s"\n' ${TIMEZONE} > /usr/local/etc/php/conf.d/tzone.ini \
|
|
||||||
&& "date"
|
|
||||||
#RUN echo "\n""date.timezone = $TIMEZONE""\n" >> /usr/local/etc/php/php.ini
|
|
||||||
|
|
||||||
#
|
|
||||||
# Phing
|
|
||||||
#
|
|
||||||
RUN pear channel-discover pear.phing.info \
|
|
||||||
&& pear install [--alldeps] phing/phing
|
|
||||||
|
|
||||||
#
|
|
||||||
# Composer - environment variables:
|
|
||||||
# - disable warning about running commands as root/super user
|
|
||||||
# - disable automatic clearing of sudo sessions
|
|
||||||
#
|
|
||||||
# More:
|
|
||||||
# https://getcomposer.org/doc/03-cli.md#composer-allow-superuser
|
|
||||||
#
|
|
||||||
ENV COMPOSER_ALLOW_SUPERUSER 1
|
|
||||||
|
|
||||||
#
|
|
||||||
# Composer + https://packagist.org/packages/hirak/prestissimo package
|
|
||||||
#
|
|
||||||
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
|
|
||||||
&& php -r "if (hash_file('SHA384', 'composer-setup.php') === \
|
|
||||||
'544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061') { echo \
|
|
||||||
'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" \
|
|
||||||
&& php composer-setup.php --install-dir=/usr/local/bin --filename=composer \
|
|
||||||
&& php -r "unlink('composer-setup.php');" \
|
|
||||||
&& composer global require \
|
|
||||||
--no-plugins \
|
|
||||||
--no-scripts \
|
|
||||||
--no-progress \
|
|
||||||
--no-suggest \
|
|
||||||
--no-interaction \
|
|
||||||
--prefer-dist \
|
|
||||||
--optimize-autoloader \
|
|
||||||
--classmap-authoritative \
|
|
||||||
hirak/prestissimo \
|
|
||||||
&& rm -rf ~/.composer/cache/* \
|
|
||||||
&& composer clear-cache \
|
|
||||||
&& composer --version
|
|
||||||
|
|
||||||
#
|
|
||||||
# Bash
|
|
||||||
#
|
|
||||||
RUN sed -i 's/^# export/export/g; \
|
|
||||||
s/^# alias/alias/g;' ~/.bashrc \
|
|
||||||
&& echo 'COLUMNS=200'"\n" >> ~/.bashrc
|
|
||||||
|
|
||||||
#
|
|
||||||
# Use project-related binaries globally
|
|
||||||
#
|
|
||||||
ENV PATH="/project/vendor/bin:${PATH}"
|
|
||||||
|
|
||||||
WORKDIR /project
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
# Meritoo Common Library
|
|
||||||
Common and useful classes, methods, exceptions etc.
|
|
||||||
|
|
||||||
# Base test case (with common methods and data providers)
|
|
||||||
|
|
||||||
Located here: `Meritoo\Common\Test\Base\BaseTestCase`. Just extend the `BaseTestCase` class and use it like in `Meritoo\Common\Test\Utilities\DateTest` class:
|
|
||||||
|
|
||||||
```php
|
|
||||||
class DateTest extends BaseTestCase
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @param mixed $value Empty value, e.g. ""
|
|
||||||
* @dataProvider provideEmptyValue
|
|
||||||
*/
|
|
||||||
public function testGetDateTimeEmptyValue($value)
|
|
||||||
{
|
|
||||||
self::assertFalse(Date::getDateTime($value));
|
|
||||||
}
|
|
||||||
|
|
||||||
(...)
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
or in `Meritoo\Common\Test\Utilities\MimeTypesTest` class:
|
|
||||||
|
|
||||||
```php
|
|
||||||
class MimeTypesTest extends BaseTestCase
|
|
||||||
{
|
|
||||||
(...)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param bool $mimeType The mime type, e.g. "video/mpeg"
|
|
||||||
* @dataProvider provideBooleanValue
|
|
||||||
*/
|
|
||||||
public function testGetExtensionBooleanMimeType($mimeType)
|
|
||||||
{
|
|
||||||
self::assertEquals('', MimeTypes::getExtension($mimeType));
|
|
||||||
}
|
|
||||||
|
|
||||||
(...)
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
# More
|
|
||||||
|
|
||||||
1. [**Base test case (with common methods and data providers)**](Base-test-case.md)
|
|
||||||
2. [Collection of elements](Collection-of-elements.md)
|
|
||||||
3. [Static methods](Static-methods.md)
|
|
||||||
|
|
||||||
[‹ Back to `Readme`](../README.md)
|
|
||||||
@@ -1,48 +0,0 @@
|
|||||||
# Meritoo Common Library
|
|
||||||
Common and useful classes, methods, exceptions etc.
|
|
||||||
|
|
||||||
# Collection of elements
|
|
||||||
|
|
||||||
Located here: `Meritoo\Common\Collection\Collection`. It's a set of some elements, e.g. objects. It's iterable and countable. Provides very useful methods. Some of them:
|
|
||||||
- `getFirst()` - returns the first element in the collection
|
|
||||||
- `getLast()` - returns the last element in the collection
|
|
||||||
- `isEmpty()` - returns information if collection is empty
|
|
||||||
- `add($element, $index = null)` - adds given element (at the end of collection)
|
|
||||||
- `addMultiple($elements, $useIndexes = false)` - adds given elements (at the end of collection)
|
|
||||||
- `prepend($element)` - prepends given element (adds given element at the beginning of collection)
|
|
||||||
- `remove($element)` - removes given element
|
|
||||||
|
|
||||||
Examples of usage below.
|
|
||||||
|
|
||||||
### An empty collection
|
|
||||||
|
|
||||||
```php
|
|
||||||
use Meritoo\Common\Collection\Collection;
|
|
||||||
|
|
||||||
$emptyCollection = new Collection();
|
|
||||||
var_dump($emptyCollection->isEmpty()); // bool(true)
|
|
||||||
```
|
|
||||||
|
|
||||||
### Simple collection
|
|
||||||
|
|
||||||
```php
|
|
||||||
use Meritoo\Common\Collection\Collection;
|
|
||||||
|
|
||||||
$elements = [
|
|
||||||
'lorem',
|
|
||||||
'ipsum',
|
|
||||||
123 => 'dolor',
|
|
||||||
345 => 'sit',
|
|
||||||
];
|
|
||||||
|
|
||||||
$simpleCollection = new Collection($elements);
|
|
||||||
var_dump($simpleCollection->has('dolor')); // bool(true)
|
|
||||||
```
|
|
||||||
|
|
||||||
# More
|
|
||||||
|
|
||||||
1. [Base test case (with common methods and data providers)](Base-test-case.md)
|
|
||||||
2. [**Collection of elements**](Collection-of-elements.md)
|
|
||||||
3. [Static methods](Static-methods.md)
|
|
||||||
|
|
||||||
[‹ Back to `Readme`](../README.md)
|
|
||||||
@@ -1,118 +0,0 @@
|
|||||||
# Meritoo Common Library
|
|
||||||
Development-related information
|
|
||||||
|
|
||||||
# Requirements
|
|
||||||
|
|
||||||
* [Docker](https://www.docker.com)
|
|
||||||
* Your favourite IDE :)
|
|
||||||
|
|
||||||
# Getting started
|
|
||||||
|
|
||||||
1. Build, create and start Docker's containers by running command:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
docker-compose up -d
|
|
||||||
```
|
|
||||||
|
|
||||||
2. Install packages by running command:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
docker-compose run composer install
|
|
||||||
```
|
|
||||||
|
|
||||||
> [What is Docker?](https://www.docker.com/what-docker)
|
|
||||||
|
|
||||||
# Composer
|
|
||||||
|
|
||||||
Available as `composer` service. You can run any Composer's command using the `composer` service:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
docker-compose run composer <command>
|
|
||||||
```
|
|
||||||
|
|
||||||
Examples below.
|
|
||||||
|
|
||||||
##### Install packages
|
|
||||||
|
|
||||||
```bash
|
|
||||||
docker-compose run composer install
|
|
||||||
```
|
|
||||||
|
|
||||||
##### Update packages
|
|
||||||
|
|
||||||
```bash
|
|
||||||
docker-compose run composer update
|
|
||||||
```
|
|
||||||
|
|
||||||
##### Add package
|
|
||||||
|
|
||||||
```bash
|
|
||||||
docker-compose run composer require <vendor>/<package>
|
|
||||||
```
|
|
||||||
|
|
||||||
##### Remove package
|
|
||||||
|
|
||||||
```bash
|
|
||||||
docker-compose run composer remove <vendor>/<package>
|
|
||||||
```
|
|
||||||
|
|
||||||
# Coding Standards Fixer
|
|
||||||
|
|
||||||
Fix coding standard by running command:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
docker-compose exec php-cli php-cs-fixer fix
|
|
||||||
```
|
|
||||||
|
|
||||||
Omit cache and run the Fixer from scratch by running command:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
docker-compose exec php-cli rm .php_cs.cache && docker-compose exec php-cli php-cs-fixer fix
|
|
||||||
```
|
|
||||||
|
|
||||||
> [Want more?](https://cs.sensiolabs.org)
|
|
||||||
|
|
||||||
# Tests
|
|
||||||
|
|
||||||
### Prerequisites
|
|
||||||
|
|
||||||
Install required packages by running command: `docker-compose run composer install`.
|
|
||||||
|
|
||||||
### Running tests
|
|
||||||
|
|
||||||
#### Simply & quick, without code coverage
|
|
||||||
|
|
||||||
Tests are running using Docker and `php-cli` service defined in `docker-compose.yml`. Example:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
docker-compose exec php-cli phpunit --no-coverage
|
|
||||||
```
|
|
||||||
|
|
||||||
You can also run them in container. In this case you have to run 2 commands:
|
|
||||||
1. Enter container:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
docker-compose exec php-cli bash
|
|
||||||
```
|
|
||||||
|
|
||||||
2. Run tests:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
phpunit --no-coverage
|
|
||||||
```
|
|
||||||
|
|
||||||
#### With code coverage
|
|
||||||
|
|
||||||
```bash
|
|
||||||
docker-compose exec php-cli phpunit
|
|
||||||
```
|
|
||||||
|
|
||||||
# Other
|
|
||||||
|
|
||||||
Rebuild project and run tests by running command:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
docker-compose exec php-cli phing
|
|
||||||
```
|
|
||||||
|
|
||||||
[‹ Back to `Readme`](../README.md)
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
# Meritoo Common Library
|
|
||||||
Common and useful classes, methods, exceptions etc.
|
|
||||||
|
|
||||||
# Static methods
|
|
||||||
|
|
||||||
This package contains a lot of class with static methods, so usage is not so complicated. Just run the static method who would you like to use. Example:
|
|
||||||
|
|
||||||
```php
|
|
||||||
use Meritoo\Common\Utilities\Arrays;
|
|
||||||
|
|
||||||
$firstElement = Arrays::getFirstElement(['lorem', 'ipsum']);
|
|
||||||
var_dump($firstElement); // string(5) "lorem"
|
|
||||||
```
|
|
||||||
|
|
||||||
# More
|
|
||||||
|
|
||||||
1. [Base test case (with common methods and data providers)](Base-test-case.md)
|
|
||||||
2. [Collection of elements](Collection-of-elements.md)
|
|
||||||
3. [**Static methods**](Static-methods.md)
|
|
||||||
|
|
||||||
[‹ Back to `Readme`](../README.md)
|
|
||||||
@@ -1,34 +1,16 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
<phpunit
|
<phpunit backupGlobals="false"
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
backupStaticAttributes="false"
|
||||||
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/4.8/phpunit.xsd"
|
colors="true"
|
||||||
backupGlobals="true"
|
convertErrorsToExceptions="true"
|
||||||
backupStaticAttributes="false"
|
convertNoticesToExceptions="true"
|
||||||
bootstrap="./vendor/autoload.php"
|
convertWarningsToExceptions="true"
|
||||||
cacheTokens="false"
|
processIsolation="false"
|
||||||
colors="true"
|
stopOnFailure="false"
|
||||||
convertErrorsToExceptions="true"
|
syntaxCheck="true"
|
||||||
convertNoticesToExceptions="true"
|
bootstrap="./vendor/autoload.php"
|
||||||
convertWarningsToExceptions="true"
|
|
||||||
forceCoversAnnotation="false"
|
|
||||||
mapTestClassNameToCoveredClassName="false"
|
|
||||||
processIsolation="false"
|
|
||||||
stopOnError="false"
|
|
||||||
stopOnFailure="false"
|
|
||||||
stopOnIncomplete="false"
|
|
||||||
stopOnSkipped="false"
|
|
||||||
stopOnRisky="false"
|
|
||||||
testSuiteLoaderClass="PHPUnit_Runner_StandardTestSuiteLoader"
|
|
||||||
timeoutForSmallTests="1"
|
|
||||||
timeoutForMediumTests="10"
|
|
||||||
timeoutForLargeTests="60"
|
|
||||||
verbose="true"
|
|
||||||
>
|
>
|
||||||
<php>
|
|
||||||
<ini name="error_reporting" value="-1"/>
|
|
||||||
</php>
|
|
||||||
|
|
||||||
<testsuites>
|
<testsuites>
|
||||||
<testsuite name="Meritoo Package - Main Test Suite">
|
<testsuite name="Meritoo Package - Main Test Suite">
|
||||||
<directory>./tests/</directory>
|
<directory>./tests/</directory>
|
||||||
@@ -48,6 +30,6 @@
|
|||||||
</groups>
|
</groups>
|
||||||
|
|
||||||
<logging>
|
<logging>
|
||||||
<log type="coverage-html" target="./build/logs/phpunit_coverage/html"/>
|
<log type="coverage-html" target="./.build/logs/phpunit_coverage/html" />
|
||||||
</logging>
|
</logging>
|
||||||
</phpunit>
|
</phpunit>
|
||||||
|
|||||||
@@ -1,34 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* (c) Meritoo.pl, http://www.meritoo.pl
|
|
||||||
* For the full copyright and license information, please view the LICENSE
|
|
||||||
* file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Meritoo\Common\Exception\Bundle;
|
|
||||||
|
|
||||||
use Exception;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An exception used while name of bundle is incorrect
|
|
||||||
*
|
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
|
||||||
* @copyright Meritoo.pl
|
|
||||||
*/
|
|
||||||
class IncorrectBundleNameException extends Exception
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Class constructor
|
|
||||||
*
|
|
||||||
* @param string $bundleName Incorrect name of bundle
|
|
||||||
*/
|
|
||||||
public function __construct($bundleName)
|
|
||||||
{
|
|
||||||
$template = 'Name of bundle \'%s\' is incorrect. It should start with big letter and end with "Bundle". Is'
|
|
||||||
. ' there everything ok?';
|
|
||||||
|
|
||||||
$message = sprintf($template, $bundleName);
|
|
||||||
parent::__construct($message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* (c) Meritoo.pl, http://www.meritoo.pl
|
|
||||||
* For the full copyright and license information, please view the LICENSE
|
|
||||||
* file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Meritoo\Common\Exception\Regex;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An exception used while html attributes are invalid
|
|
||||||
*
|
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
|
||||||
* @copyright Meritoo.pl
|
|
||||||
*/
|
|
||||||
class InvalidHtmlAttributesException extends \Exception
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Class constructor
|
|
||||||
*
|
|
||||||
* @param string $htmlAttributes Invalid html attributes
|
|
||||||
*/
|
|
||||||
public function __construct($htmlAttributes)
|
|
||||||
{
|
|
||||||
$message = sprintf('HTML attributes \'%s\' are invalid. Is there everything ok?', $htmlAttributes);
|
|
||||||
parent::__construct($message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -14,9 +14,7 @@ use Meritoo\Common\Exception\Type\UnknownOopVisibilityTypeException;
|
|||||||
use Meritoo\Common\Type\OopVisibilityType;
|
use Meritoo\Common\Type\OopVisibilityType;
|
||||||
use Meritoo\Common\Utilities\Miscellaneous;
|
use Meritoo\Common\Utilities\Miscellaneous;
|
||||||
use ReflectionClass;
|
use ReflectionClass;
|
||||||
use ReflectionException;
|
|
||||||
use ReflectionMethod;
|
use ReflectionMethod;
|
||||||
use stdClass;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* BaseTestCaseTrait
|
* BaseTestCaseTrait
|
||||||
@@ -32,7 +30,7 @@ trait BaseTestCaseTrait
|
|||||||
*
|
*
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
private static $testsDataDirPath = 'data/tests';
|
private static $testsDataDirPath = '.data/tests';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides an empty value
|
* Provides an empty value
|
||||||
@@ -105,29 +103,9 @@ trait BaseTestCaseTrait
|
|||||||
yield['surprise/me/one/more/time.txt'];
|
yield['surprise/me/one/more/time.txt'];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Provides non scalar value, e.g. [] or null
|
|
||||||
*
|
|
||||||
* @return Generator
|
|
||||||
*/
|
|
||||||
public function provideNonScalarValue()
|
|
||||||
{
|
|
||||||
yield[
|
|
||||||
[],
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
null,
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
new stdClass(),
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns path of file used by tests.
|
* Returns path of file used by tests.
|
||||||
* It should be placed in /data/tests directory of this project.
|
* It should be placed in /.data/tests directory of this project.
|
||||||
*
|
*
|
||||||
* @param string $fileName Name of file
|
* @param string $fileName Name of file
|
||||||
* @param string $directoryPath (optional) Path of directory containing the file
|
* @param string $directoryPath (optional) Path of directory containing the file
|
||||||
@@ -159,7 +137,6 @@ trait BaseTestCaseTrait
|
|||||||
* @param int $requiredArgumentsCount (optional) Expected count/amount of required arguments
|
* @param int $requiredArgumentsCount (optional) Expected count/amount of required arguments
|
||||||
* of the verified method
|
* of the verified method
|
||||||
* @throws UnknownOopVisibilityTypeException
|
* @throws UnknownOopVisibilityTypeException
|
||||||
* @throws ReflectionException
|
|
||||||
*
|
*
|
||||||
* Attention. 2nd argument, the $method, may be:
|
* Attention. 2nd argument, the $method, may be:
|
||||||
* - string - name of the method
|
* - string - name of the method
|
||||||
@@ -216,7 +193,6 @@ trait BaseTestCaseTrait
|
|||||||
* @param int $argumentsCount (optional) Expected count/amount of arguments of the verified method
|
* @param int $argumentsCount (optional) Expected count/amount of arguments of the verified method
|
||||||
* @param int $requiredArgumentsCount (optional) Expected count/amount of required arguments of the verified
|
* @param int $requiredArgumentsCount (optional) Expected count/amount of required arguments of the verified
|
||||||
* method
|
* method
|
||||||
* @throws ReflectionException
|
|
||||||
* @throws UnknownOopVisibilityTypeException
|
* @throws UnknownOopVisibilityTypeException
|
||||||
*/
|
*/
|
||||||
protected static function assertConstructorVisibilityAndArguments(
|
protected static function assertConstructorVisibilityAndArguments(
|
||||||
@@ -238,7 +214,6 @@ trait BaseTestCaseTrait
|
|||||||
* Asserts that class with given namespace has no constructor
|
* Asserts that class with given namespace has no constructor
|
||||||
*
|
*
|
||||||
* @param string $classNamespace Namespace of class that contains constructor to verify
|
* @param string $classNamespace Namespace of class that contains constructor to verify
|
||||||
* @throws ReflectionException
|
|
||||||
*/
|
*/
|
||||||
protected static function assertHasNoConstructor($classNamespace)
|
protected static function assertHasNoConstructor($classNamespace)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -48,6 +48,23 @@ class Arrays
|
|||||||
|
|
||||||
if (is_array($value)) {
|
if (is_array($value)) {
|
||||||
$effect .= self::values2string($value, $arrayColumnKey, $separator);
|
$effect .= self::values2string($value, $arrayColumnKey, $separator);
|
||||||
|
/*
|
||||||
|
* Previous version. Doesn't work with array containing arrays, e.g.:
|
||||||
|
* array(
|
||||||
|
* 1 => array(
|
||||||
|
* 'item1',
|
||||||
|
* 'item2'
|
||||||
|
* ),
|
||||||
|
* 2 => array(
|
||||||
|
* 'item3',
|
||||||
|
* 'item4'
|
||||||
|
* )
|
||||||
|
* )
|
||||||
|
*
|
||||||
|
if(isset($value[$arrayColumnKey])){
|
||||||
|
$effect .= $value[$arrayColumnKey];
|
||||||
|
}
|
||||||
|
*/
|
||||||
} else {
|
} else {
|
||||||
if (empty($arrayColumnKey)) {
|
if (empty($arrayColumnKey)) {
|
||||||
$effect .= $value;
|
$effect .= $value;
|
||||||
@@ -513,10 +530,6 @@ class Arrays
|
|||||||
*/
|
*/
|
||||||
public static function removeElement(array $array, $item)
|
public static function removeElement(array $array, $item)
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
* No elements or the element does not exist?
|
|
||||||
* Nothing to do
|
|
||||||
*/
|
|
||||||
if (empty($array) || !in_array($item, $array)) {
|
if (empty($array) || !in_array($item, $array)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -613,10 +626,6 @@ class Arrays
|
|||||||
*/
|
*/
|
||||||
public static function setKeysAsValues(array $array, $ignoreDuplicatedValues = true)
|
public static function setKeysAsValues(array $array, $ignoreDuplicatedValues = true)
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
* No elements?
|
|
||||||
* Nothing to do
|
|
||||||
*/
|
|
||||||
if (empty($array)) {
|
if (empty($array)) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
@@ -1074,10 +1083,6 @@ class Arrays
|
|||||||
*/
|
*/
|
||||||
public static function getAllValuesOfKey(array $array, $key)
|
public static function getAllValuesOfKey(array $array, $key)
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
* No elements?
|
|
||||||
* Nothing to do
|
|
||||||
*/
|
|
||||||
if (empty($array)) {
|
if (empty($array)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,8 +8,6 @@
|
|||||||
|
|
||||||
namespace Meritoo\Common\Utilities;
|
namespace Meritoo\Common\Utilities;
|
||||||
|
|
||||||
use Meritoo\Common\Exception\Bundle\IncorrectBundleNameException;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Useful methods for bundle
|
* Useful methods for bundle
|
||||||
*
|
*
|
||||||
@@ -19,12 +17,11 @@ use Meritoo\Common\Exception\Bundle\IncorrectBundleNameException;
|
|||||||
class Bundle
|
class Bundle
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Returns path of given bundle to view / template with given extension
|
* Returns path to view / template of given bundle
|
||||||
*
|
*
|
||||||
* @param string $viewPath Path of the view / template, e.g. "MyDirectory/my-template"
|
* @param string $viewPath Path of the view / template, e.g. "MyDirectory/my-template"
|
||||||
* @param string $bundleName Full name of the bundle, e.g. "MyExtraBundle"
|
* @param string $bundleName Name of the bundle, e.g. "MyExtraBundle"
|
||||||
* @param string $extension (optional) Extension of the view / template (default: "html.twig")
|
* @param string $extension (optional) Extension of the view / template
|
||||||
* @throws IncorrectBundleNameException
|
|
||||||
* @return string|null
|
* @return string|null
|
||||||
*/
|
*/
|
||||||
public static function getBundleViewPath($viewPath, $bundleName, $extension = 'html.twig')
|
public static function getBundleViewPath($viewPath, $bundleName, $extension = 'html.twig')
|
||||||
@@ -37,13 +34,6 @@ class Bundle
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Given name of bundle is invalid?
|
|
||||||
*/
|
|
||||||
if (!Regex::isValidBundleName($bundleName)) {
|
|
||||||
throw new IncorrectBundleNameException($bundleName);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Path of the view / template doesn't end with given extension?
|
* Path of the view / template doesn't end with given extension?
|
||||||
*/
|
*/
|
||||||
@@ -51,39 +41,6 @@ class Bundle
|
|||||||
$viewPath = sprintf('%s.%s', $viewPath, $extension);
|
$viewPath = sprintf('%s.%s', $viewPath, $extension);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
return sprintf('%s:%s', $bundleName, $viewPath);
|
||||||
* Prepare short name of bundle and path of view / template with "/" (instead of ":")
|
|
||||||
*/
|
|
||||||
$shortBundleName = static::getShortBundleName($bundleName);
|
|
||||||
$viewPath = str_replace(':', '/', $viewPath);
|
|
||||||
|
|
||||||
return sprintf('@%s/%s', $shortBundleName, $viewPath);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns short name of bundle (without "Bundle")
|
|
||||||
*
|
|
||||||
* @param string $fullBundleName Full name of the bundle, e.g. "MyExtraBundle"
|
|
||||||
* @throws IncorrectBundleNameException
|
|
||||||
* @return string|null
|
|
||||||
*/
|
|
||||||
public static function getShortBundleName($fullBundleName)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Given name of bundle is invalid?
|
|
||||||
*/
|
|
||||||
if (!Regex::isValidBundleName($fullBundleName)) {
|
|
||||||
if (!is_string($fullBundleName)) {
|
|
||||||
$fullBundleName = gettype($fullBundleName);
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new IncorrectBundleNameException($fullBundleName);
|
|
||||||
}
|
|
||||||
|
|
||||||
$matches = [];
|
|
||||||
$pattern = Regex::getBundleNamePattern();
|
|
||||||
preg_match($pattern, $fullBundleName, $matches);
|
|
||||||
|
|
||||||
return $matches[1];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,10 +10,8 @@ namespace Meritoo\Common\Utilities;
|
|||||||
|
|
||||||
use DateInterval;
|
use DateInterval;
|
||||||
use DateTime;
|
use DateTime;
|
||||||
use Exception;
|
|
||||||
use Meritoo\Common\Exception\Date\UnknownDatePartTypeException;
|
use Meritoo\Common\Exception\Date\UnknownDatePartTypeException;
|
||||||
use Meritoo\Common\Type\DatePartType;
|
use Meritoo\Common\Type\DatePartType;
|
||||||
use Meritoo\Common\Type\DatePeriod;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Useful date methods
|
* Useful date methods
|
||||||
@@ -68,106 +66,97 @@ class Date
|
|||||||
* The dates are returned in an array with indexes 'start' and 'end'.
|
* The dates are returned in an array with indexes 'start' and 'end'.
|
||||||
*
|
*
|
||||||
* @param int $period The period, type of period. One of DatePeriod class constants, e.g. DatePeriod::LAST_WEEK.
|
* @param int $period The period, type of period. One of DatePeriod class constants, e.g. DatePeriod::LAST_WEEK.
|
||||||
* @throws Exception
|
* @return DatePeriod
|
||||||
* @return null|DatePeriod
|
|
||||||
*/
|
*/
|
||||||
public static function getDatesForPeriod($period)
|
public static function getDatesForPeriod($period)
|
||||||
{
|
{
|
||||||
/*
|
$datePeriod = null;
|
||||||
* Type of period is incorrect?
|
|
||||||
* Nothing to do
|
|
||||||
*/
|
|
||||||
if (!(new DatePeriod())->isCorrectType($period)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
$dateStart = null;
|
if (DatePeriod::isCorrectPeriod($period)) {
|
||||||
$dateEnd = null;
|
$dateStart = null;
|
||||||
|
$dateEnd = null;
|
||||||
|
|
||||||
switch ($period) {
|
switch ($period) {
|
||||||
case DatePeriod::LAST_WEEK:
|
case DatePeriod::LAST_WEEK:
|
||||||
$thisWeekStart = new DateTime('this week');
|
$thisWeekStart = new DateTime('this week');
|
||||||
|
|
||||||
$dateStart = clone $thisWeekStart;
|
$dateStart = clone $thisWeekStart;
|
||||||
$dateEnd = clone $thisWeekStart;
|
$dateEnd = clone $thisWeekStart;
|
||||||
|
|
||||||
$dateStart->sub(new DateInterval('P7D'));
|
$dateStart->sub(new DateInterval('P7D'));
|
||||||
$dateEnd->sub(new DateInterval('P1D'));
|
$dateEnd->sub(new DateInterval('P1D'));
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case DatePeriod::THIS_WEEK:
|
case DatePeriod::THIS_WEEK:
|
||||||
$dateStart = new DateTime('this week');
|
$dateStart = new DateTime('this week');
|
||||||
|
|
||||||
$dateEnd = clone $dateStart;
|
$dateEnd = clone $dateStart;
|
||||||
$dateEnd->add(new DateInterval('P6D'));
|
$dateEnd->add(new DateInterval('P6D'));
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case DatePeriod::NEXT_WEEK:
|
case DatePeriod::NEXT_WEEK:
|
||||||
$dateStart = new DateTime('this week');
|
$dateStart = new DateTime('this week');
|
||||||
$dateStart->add(new DateInterval('P7D'));
|
$dateStart->add(new DateInterval('P7D'));
|
||||||
|
|
||||||
$dateEnd = clone $dateStart;
|
$dateEnd = clone $dateStart;
|
||||||
$dateEnd->add(new DateInterval('P6D'));
|
$dateEnd->add(new DateInterval('P6D'));
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case DatePeriod::LAST_MONTH:
|
case DatePeriod::LAST_MONTH:
|
||||||
$dateStart = new DateTime('first day of last month');
|
$dateStart = new DateTime('first day of last month');
|
||||||
$dateEnd = new DateTime('last day of last month');
|
$dateEnd = new DateTime('last day of last month');
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case DatePeriod::THIS_MONTH:
|
case DatePeriod::THIS_MONTH:
|
||||||
$lastMonth = self::getDatesForPeriod(DatePeriod::LAST_MONTH);
|
$lastMonth = self::getDatesForPeriod(DatePeriod::LAST_MONTH);
|
||||||
$nextMonth = self::getDatesForPeriod(DatePeriod::NEXT_MONTH);
|
$nextMonth = self::getDatesForPeriod(DatePeriod::NEXT_MONTH);
|
||||||
|
|
||||||
$dateStart = $lastMonth->getEndDate();
|
$dateStart = $lastMonth->getEndDate();
|
||||||
$dateStart->add(new DateInterval('P1D'));
|
$dateStart->add(new DateInterval('P1D'));
|
||||||
|
|
||||||
$dateEnd = $nextMonth->getStartDate();
|
$dateEnd = $nextMonth->getStartDate();
|
||||||
$dateEnd->sub(new DateInterval('P1D'));
|
$dateEnd->sub(new DateInterval('P1D'));
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case DatePeriod::NEXT_MONTH:
|
case DatePeriod::NEXT_MONTH:
|
||||||
$dateStart = new DateTime('first day of next month');
|
$dateStart = new DateTime('first day of next month');
|
||||||
$dateEnd = new DateTime('last day of next month');
|
$dateEnd = new DateTime('last day of next month');
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case DatePeriod::LAST_YEAR:
|
case DatePeriod::LAST_YEAR:
|
||||||
case DatePeriod::THIS_YEAR:
|
case DatePeriod::THIS_YEAR:
|
||||||
case DatePeriod::NEXT_YEAR:
|
case DatePeriod::NEXT_YEAR:
|
||||||
$dateStart = new DateTime();
|
$dateStart = new DateTime();
|
||||||
$dateEnd = new DateTime();
|
$dateEnd = new DateTime();
|
||||||
|
|
||||||
if (DatePeriod::LAST_YEAR == $period || DatePeriod::NEXT_YEAR == $period) {
|
if (DatePeriod::LAST_YEAR == $period || DatePeriod::NEXT_YEAR == $period) {
|
||||||
$yearDifference = 1;
|
$yearDifference = 1;
|
||||||
|
|
||||||
if (DatePeriod::LAST_YEAR == $period) {
|
if (DatePeriod::LAST_YEAR == $period) {
|
||||||
$yearDifference *= -1;
|
$yearDifference *= -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
$modifyString = sprintf('%s year', $yearDifference);
|
||||||
|
$dateStart->modify($modifyString);
|
||||||
|
$dateEnd->modify($modifyString);
|
||||||
}
|
}
|
||||||
|
|
||||||
$modifyString = sprintf('%s year', $yearDifference);
|
$year = $dateStart->format('Y');
|
||||||
$dateStart->modify($modifyString);
|
$dateStart->setDate($year, 1, 1);
|
||||||
$dateEnd->modify($modifyString);
|
$dateEnd->setDate($year, 12, 31);
|
||||||
}
|
|
||||||
|
|
||||||
$year = $dateStart->format('Y');
|
break;
|
||||||
$dateStart->setDate($year, 1, 1);
|
}
|
||||||
$dateEnd->setDate($year, 12, 31);
|
|
||||||
|
|
||||||
break;
|
if (null !== $dateStart && null !== $dateEnd) {
|
||||||
|
$dateStart->setTime(0, 0, 0);
|
||||||
|
$dateEnd->setTime(23, 59, 59);
|
||||||
|
|
||||||
|
$datePeriod = new DatePeriod($dateStart, $dateEnd);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
return $datePeriod;
|
||||||
* Start or end date is unknown?
|
|
||||||
* Nothing to do
|
|
||||||
*/
|
|
||||||
if (null === $dateStart || null === $dateEnd) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
$dateStart->setTime(0, 0, 0);
|
|
||||||
$dateEnd->setTime(23, 59, 59);
|
|
||||||
|
|
||||||
return new DatePeriod($dateStart, $dateEnd);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -220,7 +209,6 @@ class Date
|
|||||||
/**
|
/**
|
||||||
* Returns current day of week
|
* Returns current day of week
|
||||||
*
|
*
|
||||||
* @throws UnknownDatePartTypeException
|
|
||||||
* @return int
|
* @return int
|
||||||
*/
|
*/
|
||||||
public static function getCurrentDayOfWeek()
|
public static function getCurrentDayOfWeek()
|
||||||
@@ -242,8 +230,8 @@ class Date
|
|||||||
* @param int $month The month value
|
* @param int $month The month value
|
||||||
* @param int $day The day value
|
* @param int $day The day value
|
||||||
*
|
*
|
||||||
* @throws UnknownDatePartTypeException
|
|
||||||
* @return int
|
* @return int
|
||||||
|
* @throws UnknownDatePartTypeException
|
||||||
*/
|
*/
|
||||||
public static function getDayOfWeek($year, $month, $day)
|
public static function getDayOfWeek($year, $month, $day)
|
||||||
{
|
{
|
||||||
@@ -487,7 +475,6 @@ class Date
|
|||||||
* @param string $intervalTemplate (optional) Template used to build date interval. It should contain "%d" as the
|
* @param string $intervalTemplate (optional) Template used to build date interval. It should contain "%d" as the
|
||||||
* placeholder which is replaced with a number that represents each iteration.
|
* placeholder which is replaced with a number that represents each iteration.
|
||||||
* Default: interval for days.
|
* Default: interval for days.
|
||||||
* @throws Exception
|
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public static function getDatesCollection(DateTime $startDate, $datesCount, $intervalTemplate = 'P%dD')
|
public static function getDatesCollection(DateTime $startDate, $datesCount, $intervalTemplate = 'P%dD')
|
||||||
@@ -533,7 +520,6 @@ class Date
|
|||||||
* @param int $end (optional) End of random partition
|
* @param int $end (optional) End of random partition
|
||||||
* @param string $intervalTemplate (optional) Template used to build date interval. The placeholder is replaced
|
* @param string $intervalTemplate (optional) Template used to build date interval. The placeholder is replaced
|
||||||
* with next, iterated value.
|
* with next, iterated value.
|
||||||
* @throws Exception
|
|
||||||
* @return DateTime
|
* @return DateTime
|
||||||
*/
|
*/
|
||||||
public static function getRandomDate(DateTime $startDate = null, $start = 1, $end = 100, $intervalTemplate = 'P%sD')
|
public static function getRandomDate(DateTime $startDate = null, $start = 1, $end = 100, $intervalTemplate = 'P%sD')
|
||||||
|
|||||||
@@ -6,11 +6,9 @@
|
|||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Meritoo\Common\Type;
|
namespace Meritoo\Common\Utilities;
|
||||||
|
|
||||||
use DateTime;
|
use DateTime;
|
||||||
use Meritoo\Common\Type\Base\BaseType;
|
|
||||||
use Meritoo\Common\Utilities\Date;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A date's period.
|
* A date's period.
|
||||||
@@ -19,7 +17,7 @@ use Meritoo\Common\Utilities\Date;
|
|||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo.pl
|
||||||
*/
|
*/
|
||||||
class DatePeriod extends BaseType
|
class DatePeriod
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* The period constant: last month
|
* The period constant: last month
|
||||||
@@ -110,6 +108,17 @@ class DatePeriod extends BaseType
|
|||||||
$this->endDate = $endDate;
|
$this->endDate = $endDate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns information if given period is correct
|
||||||
|
*
|
||||||
|
* @param int $period The period to verify
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public static function isCorrectPeriod($period)
|
||||||
|
{
|
||||||
|
return in_array($period, Reflection::getConstants(__CLASS__));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns formatted one of the period's date: start date or end date
|
* Returns formatted one of the period's date: start date or end date
|
||||||
*
|
*
|
||||||
@@ -23,7 +23,7 @@ class Locale
|
|||||||
* setting. It's the same constant as required by setlocale() function.
|
* setting. It's the same constant as required by setlocale() function.
|
||||||
* @param string $languageCode Language code, in ISO 639-1 format. Short form of the locale, e.g. "fr".
|
* @param string $languageCode Language code, in ISO 639-1 format. Short form of the locale, e.g. "fr".
|
||||||
* @param string $countryCode (optional) Country code, in ISO 3166-1 alpha-2 format, e.g. "FR"
|
* @param string $countryCode (optional) Country code, in ISO 3166-1 alpha-2 format, e.g. "FR"
|
||||||
* @return false|string
|
* @return bool
|
||||||
*
|
*
|
||||||
* Available categories (values of $category argument):
|
* Available categories (values of $category argument):
|
||||||
* - LC_ALL for all of the below
|
* - LC_ALL for all of the below
|
||||||
@@ -57,29 +57,9 @@ class Locale
|
|||||||
}
|
}
|
||||||
|
|
||||||
$localeLongForm = self::getLongForm($languageCode, $countryCode);
|
$localeLongForm = self::getLongForm($languageCode, $countryCode);
|
||||||
|
setlocale($category, $localeLongForm);
|
||||||
|
|
||||||
return setlocale($category, $localeLongForm);
|
return true;
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns locale for given category
|
|
||||||
*
|
|
||||||
* @param int $category Named constant specifying the category of the functions affected by the locale setting.
|
|
||||||
* It's the same constant as required by setlocale() function.
|
|
||||||
* @return string
|
|
||||||
*
|
|
||||||
* Available categories (values of $category argument):
|
|
||||||
* - LC_ALL for all of the below
|
|
||||||
* - LC_COLLATE for string comparison, see strcoll()
|
|
||||||
* - LC_CTYPE for character classification and conversion, for example strtoupper()
|
|
||||||
* - LC_MONETARY for localeconv()
|
|
||||||
* - LC_NUMERIC for decimal separator (See also localeconv())
|
|
||||||
* - LC_TIME for date and time formatting with strftime()
|
|
||||||
* - LC_MESSAGES for system responses (available if PHP was compiled with libintl)
|
|
||||||
*/
|
|
||||||
public static function getLocale($category)
|
|
||||||
{
|
|
||||||
return setlocale($category, '0');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -759,8 +759,9 @@ class MimeTypes
|
|||||||
* Returns mime type of given file
|
* Returns mime type of given file
|
||||||
*
|
*
|
||||||
* @param string $filePath Path of the file to check
|
* @param string $filePath Path of the file to check
|
||||||
* @throws \RuntimeException
|
|
||||||
* @return string
|
* @return string
|
||||||
|
*
|
||||||
|
* @throws \RuntimeException
|
||||||
*/
|
*/
|
||||||
public static function getMimeType($filePath)
|
public static function getMimeType($filePath)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -9,8 +9,7 @@
|
|||||||
namespace Meritoo\Common\Utilities;
|
namespace Meritoo\Common\Utilities;
|
||||||
|
|
||||||
use Gedmo\Sluggable\Util\Urlizer;
|
use Gedmo\Sluggable\Util\Urlizer;
|
||||||
use Meritoo\Common\Exception\Regex\IncorrectColorHexLengthException;
|
use Symfony\Component\HttpFoundation\Cookie;
|
||||||
use Meritoo\Common\Exception\Regex\InvalidColorHexValueException;
|
|
||||||
use Transliterator;
|
use Transliterator;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -627,10 +626,10 @@ class Miscellaneous
|
|||||||
* Breaks long text
|
* Breaks long text
|
||||||
*
|
*
|
||||||
* @param string $text The text to check and break
|
* @param string $text The text to check and break
|
||||||
* @param int $perLine (optional) Characters count per line. Default: 100.
|
* @param int $perLine (optional) Characters count per line
|
||||||
* @param string $separator (optional) Separator that is placed between lines. Default: "<br>".
|
* @param string $separator (optional) Separator that is placed beetwen lines
|
||||||
* @param string $encoding (optional) Character encoding. Used by mb_substr(). Default: "UTF-8".
|
* @param string $encoding (optional) Character encoding. Used by mb_substr().
|
||||||
* @param int $proportionalAberration (optional) Proportional aberration for chars (percent value). Default: 20.
|
* @param int $proportionalAberration (optional) Proportional aberration for chars (percent value)
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public static function breakLongText(
|
public static function breakLongText(
|
||||||
@@ -717,23 +716,15 @@ class Miscellaneous
|
|||||||
*
|
*
|
||||||
* @param string $directoryPath Directory path
|
* @param string $directoryPath Directory path
|
||||||
* @param bool $contentOnly (optional) If is set to true, only content of the directory is removed, not
|
* @param bool $contentOnly (optional) If is set to true, only content of the directory is removed, not
|
||||||
* directory itself. Otherwise - directory is removed too (default behaviour).
|
* directory. Otherwise - directory is removed too.
|
||||||
* @return bool|null
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public static function removeDirectory($directoryPath, $contentOnly = false)
|
public static function removeDirectory($directoryPath, $contentOnly = false)
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
* Directory does not exist?
|
|
||||||
* Nothing to do
|
|
||||||
*/
|
|
||||||
if (!file_exists($directoryPath)) {
|
if (!file_exists($directoryPath)) {
|
||||||
return null;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* It's not a directory?
|
|
||||||
* Let's treat it like file
|
|
||||||
*/
|
|
||||||
if (!is_dir($directoryPath)) {
|
if (!is_dir($directoryPath)) {
|
||||||
return unlink($directoryPath);
|
return unlink($directoryPath);
|
||||||
}
|
}
|
||||||
@@ -748,9 +739,6 @@ class Miscellaneous
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Directory should be removed too?
|
|
||||||
*/
|
|
||||||
if (!$contentOnly) {
|
if (!$contentOnly) {
|
||||||
return rmdir($directoryPath);
|
return rmdir($directoryPath);
|
||||||
}
|
}
|
||||||
@@ -1204,6 +1192,138 @@ class Miscellaneous
|
|||||||
return $value;
|
return $value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a CURL response with parsed HTTP headers as array with "headers", "cookies" and "content" keys
|
||||||
|
*
|
||||||
|
* The headers and cookies are parsed and returned as an array, and an array of Cookie objects. Returned array looks
|
||||||
|
* like this example:
|
||||||
|
* <code>
|
||||||
|
* [
|
||||||
|
* 'headers' => [
|
||||||
|
* 'Content-Type' => 'text/html; charset=UTF-8',
|
||||||
|
* ...
|
||||||
|
* ],
|
||||||
|
* 'cookies' => [
|
||||||
|
* new Symfony\Component\HttpFoundation\Cookie(),
|
||||||
|
* new Symfony\Component\HttpFoundation\Cookie(),
|
||||||
|
* ...
|
||||||
|
* ],
|
||||||
|
* 'content' => '<html>...</html>'
|
||||||
|
* ]
|
||||||
|
* </code>
|
||||||
|
*
|
||||||
|
* If you want to attach HTTP headers into response content by CURL you need to set "CURLOPT_HEADER" option
|
||||||
|
* to "true". To read exact length of HTTP headers from CURL you can use "curl_getinfo()" function
|
||||||
|
* and read "CURLINFO_HEADER_SIZE" option.
|
||||||
|
*
|
||||||
|
* @param string $response the full content of response, including HTTP headers
|
||||||
|
* @param int $headerSize The length of HTTP headers in content
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function getCurlResponseWithHeaders($response, $headerSize)
|
||||||
|
{
|
||||||
|
$headerContent = mb_substr($response, 0, $headerSize);
|
||||||
|
$content = mb_substr($response, $headerSize);
|
||||||
|
$headers = [];
|
||||||
|
$cookies = [];
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Let's transform headers content into two arrays: headers and cookies
|
||||||
|
*/
|
||||||
|
foreach (explode("\r\n", $headerContent) as $i => $line) {
|
||||||
|
/*
|
||||||
|
* First line is only HTTP status and is unneeded so skip it
|
||||||
|
*/
|
||||||
|
if (0 === $i) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Regex::contains($line, ':')) {
|
||||||
|
list($key, $value) = explode(': ', $line);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If the header is a "set-cookie" let's save it to "cookies" array
|
||||||
|
*/
|
||||||
|
if ('Set-Cookie' === $key) {
|
||||||
|
$cookieParameters = explode(';', $value);
|
||||||
|
|
||||||
|
$name = '';
|
||||||
|
$value = '';
|
||||||
|
$expire = 0;
|
||||||
|
$path = '/';
|
||||||
|
$domain = null;
|
||||||
|
$secure = false;
|
||||||
|
$httpOnly = true;
|
||||||
|
|
||||||
|
foreach ($cookieParameters as $j => $parameter) {
|
||||||
|
$param = explode('=', $parameter);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* First parameter will be always a cookie name and it's value. It is not needed to run
|
||||||
|
* further actions for them, so save the values and move to next parameter.
|
||||||
|
*/
|
||||||
|
if (0 === $j) {
|
||||||
|
$name = trim($param[0]);
|
||||||
|
$value = trim($param[1]);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Now there would be the rest of cookie parameters, names of params are sent different way so
|
||||||
|
* I need to lowercase the names and remove unneeded spaces.
|
||||||
|
*/
|
||||||
|
$paramName = mb_strtolower(trim($param[0]));
|
||||||
|
$paramValue = true;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Some parameters don't have value e.g. "secure", but the value for them if they're specified
|
||||||
|
* is "true". Otherwise - just read a value for parameter if exists.
|
||||||
|
*/
|
||||||
|
if (array_key_exists(1, $param)) {
|
||||||
|
$paramValue = trim($param[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
switch ($paramName) {
|
||||||
|
case 'expires':
|
||||||
|
$expire = $paramValue;
|
||||||
|
break;
|
||||||
|
case 'path':
|
||||||
|
$path = $paramValue;
|
||||||
|
break;
|
||||||
|
case 'domain':
|
||||||
|
$domain = $paramValue;
|
||||||
|
break;
|
||||||
|
case 'secure':
|
||||||
|
$secure = $paramValue;
|
||||||
|
break;
|
||||||
|
case 'httponly':
|
||||||
|
$httpOnly = $paramValue;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Create new Cookie object and add it to "cookies" array.
|
||||||
|
* I must skip to next header as cookies shouldn't be saved in "headers" array.
|
||||||
|
*/
|
||||||
|
$cookies[] = new Cookie($name, $value, $expire, $path, $domain, $secure, $httpOnly);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Save response header which is not a cookie
|
||||||
|
*/
|
||||||
|
$headers[$key] = $value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
'headers' => $headers,
|
||||||
|
'cookies' => $cookies,
|
||||||
|
'content' => $content,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds missing the "0" characters to given number until given length is reached
|
* Adds missing the "0" characters to given number until given length is reached
|
||||||
*
|
*
|
||||||
@@ -1312,8 +1432,6 @@ class Miscellaneous
|
|||||||
* Returns inverted value of color for given color
|
* Returns inverted value of color for given color
|
||||||
*
|
*
|
||||||
* @param string $color Hexadecimal value of color to invert (with or without hash), e.g. "dd244c" or "#22a5fe"
|
* @param string $color Hexadecimal value of color to invert (with or without hash), e.g. "dd244c" or "#22a5fe"
|
||||||
* @throws IncorrectColorHexLengthException
|
|
||||||
* @throws InvalidColorHexValueException
|
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public static function getInvertedColor($color)
|
public static function getInvertedColor($color)
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ namespace Meritoo\Common\Utilities;
|
|||||||
|
|
||||||
use Doctrine\Common\Collections\ArrayCollection;
|
use Doctrine\Common\Collections\ArrayCollection;
|
||||||
use Doctrine\ORM\EntityManager;
|
use Doctrine\ORM\EntityManager;
|
||||||
use Doctrine\ORM\OptimisticLockException;
|
|
||||||
use Doctrine\ORM\Query\Expr\Join;
|
use Doctrine\ORM\Query\Expr\Join;
|
||||||
use Doctrine\ORM\Query\Parameter;
|
use Doctrine\ORM\Query\Parameter;
|
||||||
use Doctrine\ORM\QueryBuilder;
|
use Doctrine\ORM\QueryBuilder;
|
||||||
@@ -34,10 +33,6 @@ class QueryBuilderUtility
|
|||||||
{
|
{
|
||||||
$aliases = $queryBuilder->getRootAliases();
|
$aliases = $queryBuilder->getRootAliases();
|
||||||
|
|
||||||
/*
|
|
||||||
* No aliases?
|
|
||||||
* Nothing to do
|
|
||||||
*/
|
|
||||||
if (empty($aliases)) {
|
if (empty($aliases)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -47,8 +42,7 @@ class QueryBuilderUtility
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns alias of given property joined in given query builder
|
* Returns alias of given property joined in given query builder
|
||||||
*
|
* If the join does not exist, null is returned.
|
||||||
* If there are no joins or the join does not exist, null is returned.
|
|
||||||
* It's also information if given property is already joined in given query builder.
|
* It's also information if given property is already joined in given query builder.
|
||||||
*
|
*
|
||||||
* @param QueryBuilder $queryBuilder The query builder to verify
|
* @param QueryBuilder $queryBuilder The query builder to verify
|
||||||
@@ -59,10 +53,6 @@ class QueryBuilderUtility
|
|||||||
{
|
{
|
||||||
$joins = $queryBuilder->getDQLPart('join');
|
$joins = $queryBuilder->getDQLPart('join');
|
||||||
|
|
||||||
/*
|
|
||||||
* No joins?
|
|
||||||
* Nothing to do
|
|
||||||
*/
|
|
||||||
if (empty($joins)) {
|
if (empty($joins)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -109,43 +99,33 @@ class QueryBuilderUtility
|
|||||||
*/
|
*/
|
||||||
public static function setCriteria(QueryBuilder $queryBuilder, array $criteria = [], $alias = '')
|
public static function setCriteria(QueryBuilder $queryBuilder, array $criteria = [], $alias = '')
|
||||||
{
|
{
|
||||||
/*
|
if (!empty($criteria)) {
|
||||||
* No criteria used in WHERE clause?
|
if (empty($alias)) {
|
||||||
* Nothing to do
|
$alias = self::getRootAlias($queryBuilder);
|
||||||
*/
|
}
|
||||||
if (empty($criteria)) {
|
|
||||||
return $queryBuilder;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
foreach ($criteria as $column => $value) {
|
||||||
* No alias provided?
|
$compareOperator = '=';
|
||||||
* Let's use root alias
|
|
||||||
*/
|
|
||||||
if (empty($alias)) {
|
|
||||||
$alias = self::getRootAlias($queryBuilder);
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ($criteria as $column => $value) {
|
if (is_array($value) && !empty($value)) {
|
||||||
$compareOperator = '=';
|
if (2 == count($value)) {
|
||||||
|
$compareOperator = $value[1];
|
||||||
|
}
|
||||||
|
|
||||||
if (is_array($value) && !empty($value)) {
|
$value = $value[0];
|
||||||
if (2 == count($value)) {
|
|
||||||
$compareOperator = $value[1];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$value = $value[0];
|
$predicate = sprintf('%s.%s %s :%s', $alias, $column, $compareOperator, $column);
|
||||||
|
|
||||||
|
if (null === $value) {
|
||||||
|
$predicate = $queryBuilder->expr()->isNull(sprintf('%s.%s', $alias, $column));
|
||||||
|
unset($criteria[$column]);
|
||||||
|
} else {
|
||||||
|
$queryBuilder->setParameter($column, $value);
|
||||||
|
}
|
||||||
|
|
||||||
|
$queryBuilder = $queryBuilder->andWhere($predicate);
|
||||||
}
|
}
|
||||||
|
|
||||||
$predicate = sprintf('%s.%s %s :%s', $alias, $column, $compareOperator, $column);
|
|
||||||
|
|
||||||
if (null === $value) {
|
|
||||||
$predicate = $queryBuilder->expr()->isNull(sprintf('%s.%s', $alias, $column));
|
|
||||||
unset($criteria[$column]);
|
|
||||||
} else {
|
|
||||||
$queryBuilder->setParameter($column, $value);
|
|
||||||
}
|
|
||||||
|
|
||||||
$queryBuilder = $queryBuilder->andWhere($predicate);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $queryBuilder;
|
return $queryBuilder;
|
||||||
@@ -156,15 +136,14 @@ class QueryBuilderUtility
|
|||||||
*
|
*
|
||||||
* @param EntityManager $entityManager The entity manager
|
* @param EntityManager $entityManager The entity manager
|
||||||
* @param array|ArrayCollection $entities The entities to delete
|
* @param array|ArrayCollection $entities The entities to delete
|
||||||
* @param bool $flushDeleted (optional) If is set to true, flushes the deleted objects (default
|
* @param bool $flushDeleted (optional) If is set to true, flushes the deleted objects.
|
||||||
* behaviour). Otherwise - not.
|
* Otherwise - not.
|
||||||
* @throws OptimisticLockException
|
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public static function deleteEntities(EntityManager $entityManager, $entities, $flushDeleted = true)
|
public static function deleteEntities(EntityManager $entityManager, $entities, $flushDeleted = true)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* No entities provided?
|
* No entities found?
|
||||||
* Nothing to do
|
* Nothing to do
|
||||||
*/
|
*/
|
||||||
if (empty($entities)) {
|
if (empty($entities)) {
|
||||||
@@ -190,30 +169,24 @@ class QueryBuilderUtility
|
|||||||
* Attention. Existing parameters will be overridden.
|
* Attention. Existing parameters will be overridden.
|
||||||
*
|
*
|
||||||
* @param QueryBuilder $queryBuilder The query builder
|
* @param QueryBuilder $queryBuilder The query builder
|
||||||
* @param array|ArrayCollection $parameters Parameters to add. Collection of Doctrine\ORM\Query\Parameter
|
* @param array|ArrayCollection $parameters Parameters to add. Collection of instances of
|
||||||
* instances or an array with key-value pairs.
|
* Doctrine\ORM\Query\Parameter class or an array with key-value pairs.
|
||||||
* @return QueryBuilder
|
* @return QueryBuilder
|
||||||
*/
|
*/
|
||||||
public static function addParameters(QueryBuilder $queryBuilder, $parameters)
|
public static function addParameters(QueryBuilder $queryBuilder, $parameters)
|
||||||
{
|
{
|
||||||
/*
|
if (!empty($parameters)) {
|
||||||
* No parameters?
|
foreach ($parameters as $key => $parameter) {
|
||||||
* Nothing to do
|
$name = $key;
|
||||||
*/
|
$value = $parameter;
|
||||||
if (empty($parameters)) {
|
|
||||||
return $queryBuilder;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ($parameters as $key => $parameter) {
|
if ($parameter instanceof Parameter) {
|
||||||
$name = $key;
|
$name = $parameter->getName();
|
||||||
$value = $parameter;
|
$value = $parameter->getValue();
|
||||||
|
}
|
||||||
|
|
||||||
if ($parameter instanceof Parameter) {
|
$queryBuilder->setParameter($name, $value);
|
||||||
$name = $parameter->getName();
|
|
||||||
$value = $parameter->getValue();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$queryBuilder->setParameter($name, $value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $queryBuilder;
|
return $queryBuilder;
|
||||||
|
|||||||
@@ -34,7 +34,6 @@ class Reflection
|
|||||||
* @param object|string $class The object or name of object's class
|
* @param object|string $class The object or name of object's class
|
||||||
* @param bool $withoutInheritance (optional) If is set to true, only methods for given class are returned.
|
* @param bool $withoutInheritance (optional) If is set to true, only methods for given class are returned.
|
||||||
* Otherwise - all methods, with inherited methods too.
|
* Otherwise - all methods, with inherited methods too.
|
||||||
* @throws ReflectionException
|
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public static function getMethods($class, $withoutInheritance = false)
|
public static function getMethods($class, $withoutInheritance = false)
|
||||||
@@ -65,7 +64,6 @@ class Reflection
|
|||||||
* Returns constants of given class / object
|
* Returns constants of given class / object
|
||||||
*
|
*
|
||||||
* @param object|string $class The object or name of object's class
|
* @param object|string $class The object or name of object's class
|
||||||
* @throws ReflectionException
|
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public static function getConstants($class)
|
public static function getConstants($class)
|
||||||
@@ -76,11 +74,10 @@ class Reflection
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns maximum integer value of constant of given class / object.
|
* Returns maximum constant from all constants of given class / object.
|
||||||
* Constants whose values are integers are considered only.
|
* Values of constants should be integers.
|
||||||
*
|
*
|
||||||
* @param object|string $class The object or name of object's class
|
* @param object|string $class The object or name of object's class
|
||||||
* @throws ReflectionException
|
|
||||||
* @return int|null
|
* @return int|null
|
||||||
*/
|
*/
|
||||||
public static function getMaxNumberConstant($class)
|
public static function getMaxNumberConstant($class)
|
||||||
@@ -107,7 +104,6 @@ class Reflection
|
|||||||
*
|
*
|
||||||
* @param object|string $class The object or name of object's class
|
* @param object|string $class The object or name of object's class
|
||||||
* @param string $method Name of the method to find
|
* @param string $method Name of the method to find
|
||||||
* @throws ReflectionException
|
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public static function hasMethod($class, $method)
|
public static function hasMethod($class, $method)
|
||||||
@@ -122,7 +118,6 @@ class Reflection
|
|||||||
*
|
*
|
||||||
* @param object|string $class The object or name of object's class
|
* @param object|string $class The object or name of object's class
|
||||||
* @param string $property Name of the property to find
|
* @param string $property Name of the property to find
|
||||||
* @throws ReflectionException
|
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public static function hasProperty($class, $property)
|
public static function hasProperty($class, $property)
|
||||||
@@ -137,7 +132,6 @@ class Reflection
|
|||||||
*
|
*
|
||||||
* @param object|string $class The object or name of object's class
|
* @param object|string $class The object or name of object's class
|
||||||
* @param string $constant Name of the constant to find
|
* @param string $constant Name of the constant to find
|
||||||
* @throws ReflectionException
|
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public static function hasConstant($class, $constant)
|
public static function hasConstant($class, $constant)
|
||||||
@@ -152,7 +146,6 @@ class Reflection
|
|||||||
*
|
*
|
||||||
* @param object|string $class The object or name of object's class
|
* @param object|string $class The object or name of object's class
|
||||||
* @param string $constant Name of the constant that contains a value
|
* @param string $constant Name of the constant that contains a value
|
||||||
* @throws ReflectionException
|
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public static function getConstantValue($class, $constant)
|
public static function getConstantValue($class, $constant)
|
||||||
@@ -175,7 +168,6 @@ class Reflection
|
|||||||
* dot-separated, e.g. "invoice.user.email".
|
* dot-separated, e.g. "invoice.user.email".
|
||||||
* @param bool $force (optional) If is set to true, try to retrieve value even if the object doesn't have
|
* @param bool $force (optional) If is set to true, try to retrieve value even if the object doesn't have
|
||||||
* property. Otherwise - not.
|
* property. Otherwise - not.
|
||||||
* @throws ReflectionException
|
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public static function getPropertyValue($object, $property, $force = false)
|
public static function getPropertyValue($object, $property, $force = false)
|
||||||
@@ -292,7 +284,6 @@ class Reflection
|
|||||||
* @param string $property Name of the property that contains a value
|
* @param string $property Name of the property that contains a value
|
||||||
* @param bool $force (optional) If is set to true, try to retrieve value even if the
|
* @param bool $force (optional) If is set to true, try to retrieve value even if the
|
||||||
* object does not have property. Otherwise - not.
|
* object does not have property. Otherwise - not.
|
||||||
* @throws ReflectionException
|
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public static function getPropertyValues($objects, $property, $force = false)
|
public static function getPropertyValues($objects, $property, $force = false)
|
||||||
@@ -437,7 +428,7 @@ class Reflection
|
|||||||
|
|
||||||
$parents = class_parents($childClassName);
|
$parents = class_parents($childClassName);
|
||||||
|
|
||||||
if (is_array($parents) && 0 < count($parents)) {
|
if (is_array($parents)) {
|
||||||
return in_array($parentClassName, $parents);
|
return in_array($parentClassName, $parents);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -452,7 +443,6 @@ class Reflection
|
|||||||
* constants. By default all properties are returned.
|
* constants. By default all properties are returned.
|
||||||
* @param bool $includeParents (optional) If is set to true, properties of parent classes are
|
* @param bool $includeParents (optional) If is set to true, properties of parent classes are
|
||||||
* included (recursively). Otherwise - not.
|
* included (recursively). Otherwise - not.
|
||||||
* @throws ReflectionException
|
|
||||||
* @return array|ReflectionProperty
|
* @return array|ReflectionProperty
|
||||||
*/
|
*/
|
||||||
public static function getProperties($source, $filter = null, $includeParents = false)
|
public static function getProperties($source, $filter = null, $includeParents = false)
|
||||||
@@ -486,7 +476,6 @@ class Reflection
|
|||||||
* Returns a parent class or false if there is no parent class
|
* Returns a parent class or false if there is no parent class
|
||||||
*
|
*
|
||||||
* @param array|object|string $source An array of objects, namespaces, object or namespace
|
* @param array|object|string $source An array of objects, namespaces, object or namespace
|
||||||
* @throws ReflectionException
|
|
||||||
* @return ReflectionClass|bool
|
* @return ReflectionClass|bool
|
||||||
*/
|
*/
|
||||||
public static function getParentClass($source)
|
public static function getParentClass($source)
|
||||||
@@ -503,8 +492,8 @@ class Reflection
|
|||||||
*
|
*
|
||||||
* @param array|object|string $class Class who child classes should be returned. An array of objects, strings,
|
* @param array|object|string $class Class who child classes should be returned. An array of objects, strings,
|
||||||
* object or string.
|
* object or string.
|
||||||
* @throws CannotResolveClassNameException
|
|
||||||
* @return array|null
|
* @return array|null
|
||||||
|
* @throws CannotResolveClassNameException
|
||||||
*/
|
*/
|
||||||
public static function getChildClasses($class)
|
public static function getChildClasses($class)
|
||||||
{
|
{
|
||||||
@@ -558,10 +547,10 @@ class Reflection
|
|||||||
*
|
*
|
||||||
* @param array|object|string $parentClass Class who child class should be returned. An array of objects,
|
* @param array|object|string $parentClass Class who child class should be returned. An array of objects,
|
||||||
* namespaces, object or namespace.
|
* namespaces, object or namespace.
|
||||||
* @throws CannotResolveClassNameException
|
* @return mixed
|
||||||
|
*
|
||||||
* @throws MissingChildClassesException
|
* @throws MissingChildClassesException
|
||||||
* @throws TooManyChildClassesException
|
* @throws TooManyChildClassesException
|
||||||
* @return mixed
|
|
||||||
*/
|
*/
|
||||||
public static function getOneChildClass($parentClass)
|
public static function getOneChildClass($parentClass)
|
||||||
{
|
{
|
||||||
@@ -593,7 +582,6 @@ class Reflection
|
|||||||
* @param string $property Name of the property
|
* @param string $property Name of the property
|
||||||
* @param int $filter (optional) Filter of properties. Uses ReflectionProperty class constants.
|
* @param int $filter (optional) Filter of properties. Uses ReflectionProperty class constants.
|
||||||
* By default all properties are allowed / processed.
|
* By default all properties are allowed / processed.
|
||||||
* @throws ReflectionException
|
|
||||||
* @return null|ReflectionProperty
|
* @return null|ReflectionProperty
|
||||||
*/
|
*/
|
||||||
public static function getProperty($class, $property, $filter = null)
|
public static function getProperty($class, $property, $filter = null)
|
||||||
@@ -620,9 +608,8 @@ class Reflection
|
|||||||
* @param array|string $trait An array of strings or string
|
* @param array|string $trait An array of strings or string
|
||||||
* @param bool $verifyParents If is set to true, parent classes are verified if they use given
|
* @param bool $verifyParents If is set to true, parent classes are verified if they use given
|
||||||
* trait. Otherwise - not.
|
* trait. Otherwise - not.
|
||||||
* @throws CannotResolveClassNameException
|
|
||||||
* @throws ReflectionException
|
|
||||||
* @return bool|null
|
* @return bool|null
|
||||||
|
* @throws CannotResolveClassNameException
|
||||||
*/
|
*/
|
||||||
public static function usesTrait($class, $trait, $verifyParents = false)
|
public static function usesTrait($class, $trait, $verifyParents = false)
|
||||||
{
|
{
|
||||||
@@ -664,7 +651,6 @@ class Reflection
|
|||||||
* If given class does not extend another, returns null.
|
* If given class does not extend another, returns null.
|
||||||
*
|
*
|
||||||
* @param array|object|string $class An array of objects, namespaces, object or namespace
|
* @param array|object|string $class An array of objects, namespaces, object or namespace
|
||||||
* @throws ReflectionException
|
|
||||||
* @return string|null
|
* @return string|null
|
||||||
*/
|
*/
|
||||||
public static function getParentClassName($class)
|
public static function getParentClassName($class)
|
||||||
|
|||||||
@@ -25,21 +25,18 @@ class Regex
|
|||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
private static $patterns = [
|
private static $patterns = [
|
||||||
'email' => '/^[\w-.]{2,}@[\w-]+\.[\w]{2,}+$/',
|
'email' => '/[\w-]{2,}@[\w-]+\.[\w]{2,}+/',
|
||||||
'phone' => '/^\+?[0-9 ]+$/',
|
'phone' => '/^\+?[0-9 ]+$/',
|
||||||
'camelCasePart' => '/([a-z]|[A-Z]){1}[a-z]*/',
|
'camelCasePart' => '/([a-z]|[A-Z]){1}[a-z]*/',
|
||||||
'urlProtocol' => '/^([a-z]+:\/\/)',
|
'urlProtocol' => '/^([a-z]+:\/\/)',
|
||||||
'urlDomain' => '([\da-z\.-]+)\.([a-z\.]{2,6})(\/)?([\w\.\-]*)?(\?)?([\w \.\-\/=&]*)\/?$/i',
|
'urlDomain' => '([\da-z\.-]+)\.([a-z\.]{2,6})(\/)?([\w\.\-]*)?(\?)?([\w \.\-\/=&]*)\/?$/i',
|
||||||
'letterOrDigit' => '/[a-zA-Z0-9]+/',
|
'letterOrDigit' => '/[a-zA-Z0-9]+/',
|
||||||
'htmlEntity' => '/&[a-z0-9]+;/',
|
'htmlEntity' => '/&[a-z0-9]+;/',
|
||||||
'htmlAttribute' => '/([\w-]+)="([\w -]+)"/',
|
|
||||||
'fileName' => '/.+\.\w+$/',
|
'fileName' => '/.+\.\w+$/',
|
||||||
'isQuoted' => '/^[\'"]{1}.+[\'"]{1}$/',
|
'isQuoted' => '/^[\'"]{1}.+[\'"]{1}$/',
|
||||||
'windowsBasedPath' => '/^[A-Z]{1}:\\\.*$/',
|
'windowsBasedPath' => '/^[A-Z]{1}:\\\.*$/',
|
||||||
'money' => '/^[-+]?\d+([\.,]{1}\d*)?$/',
|
'money' => '/^[-+]?\d+([\.,]{1}\d*)?$/',
|
||||||
'color' => '/^[a-f0-9]{6}$/i',
|
'color' => '/^[a-f0-9]{6}$/i',
|
||||||
'bundleName' => '/^(([A-Z]{1}[a-z0-9]+)((?2))*)(Bundle)$/',
|
|
||||||
'binaryValue' => '/[^\x20-\x7E\t\r\n]/',
|
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -59,77 +56,43 @@ class Regex
|
|||||||
*/
|
*/
|
||||||
public static function isValidEmail($email)
|
public static function isValidEmail($email)
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
* Not a string?
|
|
||||||
* Nothing to do
|
|
||||||
*/
|
|
||||||
if (!is_string($email)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$pattern = self::getEmailPattern();
|
$pattern = self::getEmailPattern();
|
||||||
|
|
||||||
return (bool)preg_match($pattern, $email);
|
return (bool)preg_match($pattern, $email);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns information if given tax ID is valid (in Poland it's named "NIP")
|
* Returns information if given tax ID (in polish: NIP) is valid
|
||||||
*
|
*
|
||||||
* @param string $taxIdString Tax ID (NIP) string
|
* @param string $taxidString Tax ID (NIP) string
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public static function isValidTaxId($taxIdString)
|
public static function isValidTaxid($taxidString)
|
||||||
{
|
{
|
||||||
/*
|
if (!empty($taxidString)) {
|
||||||
* Not a string?
|
$weights = [
|
||||||
* Nothing to do
|
6,
|
||||||
*/
|
5,
|
||||||
if (!is_string($taxIdString)) {
|
7,
|
||||||
return false;
|
2,
|
||||||
}
|
3,
|
||||||
|
4,
|
||||||
|
5,
|
||||||
|
6,
|
||||||
|
7,
|
||||||
|
];
|
||||||
|
$taxid = preg_replace('/[\s-]/', '', $taxidString);
|
||||||
|
$sum = 0;
|
||||||
|
|
||||||
/*
|
if (10 == strlen($taxid) && is_numeric($taxid)) {
|
||||||
* Empty/Unknown value?
|
for ($x = 0; $x <= 8; ++$x) {
|
||||||
* Nothing to do
|
$sum += $taxid[$x] * $weights[$x];
|
||||||
*/
|
}
|
||||||
if (empty($taxIdString)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$taxId = preg_replace('/[\s-]/', '', $taxIdString);
|
if ((($sum % 11) % 10) == $taxid[9]) {
|
||||||
|
return true;
|
||||||
/*
|
}
|
||||||
* Tax ID is not 10 characters length OR is not numeric?
|
}
|
||||||
* Nothing to do
|
|
||||||
*/
|
|
||||||
if (10 !== strlen($taxId) || !is_numeric($taxId)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$weights = [
|
|
||||||
6,
|
|
||||||
5,
|
|
||||||
7,
|
|
||||||
2,
|
|
||||||
3,
|
|
||||||
4,
|
|
||||||
5,
|
|
||||||
6,
|
|
||||||
7,
|
|
||||||
];
|
|
||||||
|
|
||||||
$sum = 0;
|
|
||||||
|
|
||||||
for ($x = 0; $x <= 8; ++$x) {
|
|
||||||
$sum += $taxId[$x] * $weights[$x];
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Last number it's not a remainder from dividing per 11?
|
|
||||||
* Nothing to do
|
|
||||||
*/
|
|
||||||
if ($sum % 11 == $taxId[9]) {
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@@ -145,14 +108,6 @@ class Regex
|
|||||||
*/
|
*/
|
||||||
public static function isValidUrl($url, $requireProtocol = false)
|
public static function isValidUrl($url, $requireProtocol = false)
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
* Not a string?
|
|
||||||
* Nothing to do
|
|
||||||
*/
|
|
||||||
if (!is_string($url)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$pattern = self::getUrlPattern($requireProtocol);
|
$pattern = self::getUrlPattern($requireProtocol);
|
||||||
|
|
||||||
return (bool)preg_match($pattern, $url);
|
return (bool)preg_match($pattern, $url);
|
||||||
@@ -166,108 +121,88 @@ class Regex
|
|||||||
*/
|
*/
|
||||||
public static function isValidPhoneNumber($phoneNumber)
|
public static function isValidPhoneNumber($phoneNumber)
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
* Not a string?
|
|
||||||
* Nothing to do
|
|
||||||
*/
|
|
||||||
if (!is_string($phoneNumber)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$pattern = self::getPhoneNumberPattern();
|
$pattern = self::getPhoneNumberPattern();
|
||||||
|
|
||||||
return (bool)preg_match($pattern, trim($phoneNumber));
|
return (bool)preg_match($pattern, $phoneNumber);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns array values that match given pattern (or values that keys match the pattern)
|
* Returns array values that matches given pattern (or values that keys matches)
|
||||||
*
|
*
|
||||||
* @param string $pattern Pattern to match
|
* @param string $pattern Pattern to match
|
||||||
* @param array $array The array (scalar values only)
|
* @param array $dataArray The array
|
||||||
* @param bool $itsKeyPattern (optional) If is set to true, keys will be checked if they match pattern.
|
* @param bool $itsKeyPattern (optional) If is set to true, keys are checks if they match pattern. Otherwise -
|
||||||
* Otherwise - values will be checked (default behaviour).
|
* values are checks.
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public static function getArrayValuesByPattern($pattern, array $array, $itsKeyPattern = false)
|
public static function getArrayValuesByPattern($pattern, $dataArray, $itsKeyPattern = false)
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
* No elements?
|
|
||||||
* Nothing to do
|
|
||||||
*/
|
|
||||||
if (empty($array)) {
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($itsKeyPattern) {
|
if ($itsKeyPattern) {
|
||||||
$effect = [];
|
$effect = [];
|
||||||
|
|
||||||
foreach ($array as $key => $value) {
|
if (!empty($dataArray)) {
|
||||||
if ((bool)preg_match($pattern, $key)) {
|
$matches = [];
|
||||||
$effect[$key] = $value;
|
|
||||||
|
foreach ($dataArray as $key => $value) {
|
||||||
|
if (preg_match($pattern, $key, $matches)) {
|
||||||
|
$effect[$key] = $value;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $effect;
|
return $effect;
|
||||||
}
|
}
|
||||||
|
|
||||||
return preg_grep($pattern, $array);
|
return preg_grep($pattern, $dataArray);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Filters array by given expression and column
|
* Filters array by given expression and column
|
||||||
*
|
*
|
||||||
* Expression can be simple compare expression, like " == 2", or regular expression.
|
* Expression can be simple compare expression, like ' == 2', or regular expression.
|
||||||
* Returns filtered array.
|
* Returns filtered array.
|
||||||
*
|
*
|
||||||
* @param array $array The 2-dimensional array that should be filtered
|
* @param array $array The array that should be filtered
|
||||||
* @param string $arrayColumnKey Column name
|
* @param string $arrayColumnKey Column name
|
||||||
* @param string $filterExpression Simple filter expression (e.g. "== 2" or "!= \'home\'") or regular
|
* @param string $filterExpression Filter expression, e.g. '== 2' or '!= \'home\''
|
||||||
* expression (e.g. "/\d+/" or "/[a-z]+[,;]{2,}/")
|
* @param bool $itsRegularExpression (optional) If is set to true, means that filter expression is a
|
||||||
* @param bool $itsRegularExpression (optional) If is set to true, means that filter expression is a regular
|
* regular expression
|
||||||
* expression. Otherwise - not (default behaviour).
|
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public static function arrayFilter($array, $arrayColumnKey, $filterExpression, $itsRegularExpression = false)
|
public static function arrayFilter($array, $arrayColumnKey, $filterExpression, $itsRegularExpression = false)
|
||||||
{
|
{
|
||||||
/*
|
$effect = [];
|
||||||
* No elements?
|
|
||||||
* Nothing to do
|
|
||||||
*/
|
|
||||||
if (empty($array)) {
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
|
|
||||||
$effect = $array;
|
if (!empty($array)) {
|
||||||
|
$effect = $array;
|
||||||
|
|
||||||
foreach ($effect as $key => &$item) {
|
foreach ($effect as $key => &$item) {
|
||||||
if (!isset($item[$arrayColumnKey])) {
|
if (isset($item[$arrayColumnKey])) {
|
||||||
continue;
|
$value = $item[$arrayColumnKey];
|
||||||
}
|
|
||||||
|
|
||||||
$value = $item[$arrayColumnKey];
|
if ($itsRegularExpression) {
|
||||||
|
$matches = [];
|
||||||
|
$pattern = '|' . $filterExpression . '|';
|
||||||
|
$matchesCount = preg_match($pattern, $value, $matches);
|
||||||
|
|
||||||
if ($itsRegularExpression) {
|
$remove = 0 == $matchesCount;
|
||||||
$matchesCount = preg_match($filterExpression, $value);
|
|
||||||
$remove = 0 == $matchesCount;
|
|
||||||
} else {
|
|
||||||
if (is_string($value)) {
|
|
||||||
$value = sprintf('\'%s\'', $value);
|
|
||||||
} elseif (is_bool($value)) {
|
|
||||||
if (true === $value) {
|
|
||||||
$value = 'true';
|
|
||||||
} else {
|
} else {
|
||||||
$value = 'false';
|
if ('' == $value) {
|
||||||
|
$value = '\'\'';
|
||||||
|
} elseif (is_string($value)) {
|
||||||
|
$value = '\'' . $value . '\'';
|
||||||
|
}
|
||||||
|
|
||||||
|
eval('$isTrue = ' . $value . $filterExpression . ';');
|
||||||
|
|
||||||
|
/* @var bool $isTrue */
|
||||||
|
$remove = !$isTrue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($remove) {
|
||||||
|
unset($effect[$key]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
eval(sprintf('$isEqual = %s%s;', $value, $filterExpression));
|
|
||||||
|
|
||||||
/* @var bool $isEqual */
|
|
||||||
$remove = !$isEqual;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($remove) {
|
|
||||||
unset($effect[$key]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -275,41 +210,36 @@ class Regex
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Performs regular expression match with many given patterns.
|
* Perform regular expression match with many given patterns.
|
||||||
* Returns information if given $subject matches one or all given $patterns.
|
* Returns information if given $subject matches one or all given $patterns.
|
||||||
*
|
*
|
||||||
* @param array|string $patterns The patterns to match
|
* @param array|string $patterns The patterns to match
|
||||||
* @param string $subject The string to check
|
* @param string $subject The string to check
|
||||||
* @param bool $mustAllMatch (optional) If is set to true, $subject must match all $patterns. Otherwise -
|
* @param bool $mustAllMatch (optional) If is set to true, $subject must match all $patterns. Otherwise -
|
||||||
* not (default behaviour).
|
* not.
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public static function pregMultiMatch($patterns, $subject, $mustAllMatch = false)
|
public static function pregMultiMatch($patterns, $subject, $mustAllMatch = false)
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
* No patterns?
|
|
||||||
* Nothing to do
|
|
||||||
*/
|
|
||||||
if (empty($patterns)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$effect = false;
|
$effect = false;
|
||||||
$patterns = Arrays::makeArray($patterns);
|
$patterns = Arrays::makeArray($patterns);
|
||||||
|
|
||||||
if ($mustAllMatch) {
|
if (!empty($patterns)) {
|
||||||
$effect = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ($patterns as $pattern) {
|
|
||||||
$matched = (bool)preg_match_all($pattern, $subject);
|
|
||||||
|
|
||||||
if ($mustAllMatch) {
|
if ($mustAllMatch) {
|
||||||
$effect = $effect && $matched;
|
$effect = true;
|
||||||
} else {
|
}
|
||||||
if ($matched) {
|
|
||||||
$effect = $matched;
|
foreach ($patterns as $pattern) {
|
||||||
break;
|
$matches = [];
|
||||||
|
$matched = (bool)preg_match_all($pattern, $subject, $matches);
|
||||||
|
|
||||||
|
if ($mustAllMatch) {
|
||||||
|
$effect = $effect && $matched;
|
||||||
|
} else {
|
||||||
|
if ($matched) {
|
||||||
|
$effect = $matched;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -746,14 +676,6 @@ class Regex
|
|||||||
*/
|
*/
|
||||||
public static function isValidMoneyValue($value)
|
public static function isValidMoneyValue($value)
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
* Not a scalar value?
|
|
||||||
* Nothing to do
|
|
||||||
*/
|
|
||||||
if (!is_scalar($value)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$pattern = self::getMoneyPattern();
|
$pattern = self::getMoneyPattern();
|
||||||
|
|
||||||
return (bool)preg_match($pattern, $value);
|
return (bool)preg_match($pattern, $value);
|
||||||
@@ -766,162 +688,39 @@ class Regex
|
|||||||
* @param string $color Color to verify
|
* @param string $color Color to verify
|
||||||
* @param bool $throwException (optional) If is set to true, throws an exception if given color is invalid
|
* @param bool $throwException (optional) If is set to true, throws an exception if given color is invalid
|
||||||
* (default behaviour). Otherwise - not.
|
* (default behaviour). Otherwise - not.
|
||||||
|
* @return string|bool
|
||||||
|
*
|
||||||
* @throws IncorrectColorHexLengthException
|
* @throws IncorrectColorHexLengthException
|
||||||
* @throws InvalidColorHexValueException
|
* @throws InvalidColorHexValueException
|
||||||
* @return string|bool
|
|
||||||
*/
|
*/
|
||||||
public static function getValidColorHexValue($color, $throwException = true)
|
public static function getValidColorHexValue($color, $throwException = true)
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
* Not a scalar value?
|
|
||||||
* Nothing to do
|
|
||||||
*/
|
|
||||||
if (!is_scalar($color)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$color = Miscellaneous::replace($color, '/#/', '');
|
$color = Miscellaneous::replace($color, '/#/', '');
|
||||||
$length = strlen($color);
|
$length = strlen($color);
|
||||||
|
|
||||||
/*
|
|
||||||
* Color is not 3 or 6 characters long?
|
|
||||||
* Nothing to do
|
|
||||||
*/
|
|
||||||
if (3 !== $length && 6 !== $length) {
|
|
||||||
if ($throwException) {
|
|
||||||
throw new IncorrectColorHexLengthException($color);
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Color is 3 characters long?
|
|
||||||
* Let's make it 6 characters long
|
|
||||||
*/
|
|
||||||
if (3 === $length) {
|
if (3 === $length) {
|
||||||
$color = Miscellaneous::replace($color, '/(.)(.)(.)/', '$1$1$2$2$3$3');
|
$color = Miscellaneous::replace($color, '/(.)(.)(.)/', '$1$1$2$2$3$3');
|
||||||
|
} else {
|
||||||
|
if (6 !== $length) {
|
||||||
|
if ($throwException) {
|
||||||
|
throw new IncorrectColorHexLengthException($color);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$pattern = self::$patterns['color'];
|
$pattern = self::$patterns['color'];
|
||||||
$match = (bool)preg_match($pattern, $color);
|
$match = (bool)preg_match($pattern, $color);
|
||||||
|
|
||||||
/*
|
if (!$match) {
|
||||||
* It's valid color
|
if ($throwException) {
|
||||||
* Nothing to do more
|
throw new InvalidColorHexValueException($color);
|
||||||
*/
|
}
|
||||||
if ($match) {
|
|
||||||
return strtolower($color);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($throwException) {
|
|
||||||
throw new InvalidColorHexValueException($color);
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns information if given name of bundle is valid
|
|
||||||
*
|
|
||||||
* @param string $bundleName Full name of bundle to verify, e.g. "MyExtraBundle"
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public static function isValidBundleName($bundleName)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Not a string?
|
|
||||||
* Nothing to do
|
|
||||||
*/
|
|
||||||
if (!is_string($bundleName)) {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$pattern = self::getBundleNamePattern();
|
return strtolower($color);
|
||||||
|
|
||||||
return (bool)preg_match($pattern, $bundleName);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns pattern used to validate / verify name of bundle
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public static function getBundleNamePattern()
|
|
||||||
{
|
|
||||||
return self::$patterns['bundleName'];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns pattern used to validate / verify html attribute
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public static function getHtmlAttributePattern()
|
|
||||||
{
|
|
||||||
return self::$patterns['htmlAttribute'];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns information if given html attribute is valid
|
|
||||||
*
|
|
||||||
* @param string $htmlAttribute The html attribute to verify
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public static function isValidHtmlAttribute($htmlAttribute)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Not a string?
|
|
||||||
* Nothing to do
|
|
||||||
*/
|
|
||||||
if (!is_string($htmlAttribute)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$pattern = self::getHtmlAttributePattern();
|
|
||||||
|
|
||||||
return (bool)preg_match($pattern, $htmlAttribute);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns information if given html attributes are valid
|
|
||||||
*
|
|
||||||
* @param string $htmlAttributes The html attributes to verify
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public static function areValidHtmlAttributes($htmlAttributes)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Not a string?
|
|
||||||
* Nothing to do
|
|
||||||
*/
|
|
||||||
if (!is_string($htmlAttributes)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$pattern = self::getHtmlAttributePattern();
|
|
||||||
|
|
||||||
return (bool)preg_match_all($pattern, $htmlAttributes);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns information if given value is a binary value
|
|
||||||
*
|
|
||||||
* @param string $value Value to verify
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public static function isBinaryValue($value)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Not a string?
|
|
||||||
* Nothing to do
|
|
||||||
*/
|
|
||||||
if (!is_string($value)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$pattern = self::$patterns['binaryValue'];
|
|
||||||
|
|
||||||
return (bool)preg_match($pattern, $value);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,143 +19,67 @@ use Doctrine\ORM\QueryBuilder;
|
|||||||
*/
|
*/
|
||||||
class Repository
|
class Repository
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* Name of key responsible for sorting/position of an item in array
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
const POSITION_KEY = 'position';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Replenishes positions of given items
|
* Replenishes positions of given items
|
||||||
*
|
*
|
||||||
* @param array $items Objects who have "getPosition()" and "setPosition()" methods or arrays
|
* @param array $items The items
|
||||||
* @param bool $asLast (optional) If is set to true, items are placed at the end (default behaviour). Otherwise -
|
* @param bool $asLast (optional) If is set to true, items are placed at the end. Otherwise - at the top.
|
||||||
* at top.
|
|
||||||
* @param bool $force (optional) If is set to true, positions are set even there is no extreme position.
|
* @param bool $force (optional) If is set to true, positions are set even there is no extreme position.
|
||||||
* Otherwise - if extreme position is unknown (is null) replenishment is stopped / skipped
|
* Otherwise - if extreme position is not found (is null) replenishment is stopped / skipped.
|
||||||
* (default behaviour).
|
|
||||||
*/
|
*/
|
||||||
public static function replenishPositions(array &$items, $asLast = true, $force = false)
|
public static function replenishPositions($items, $asLast = true, $force = false)
|
||||||
{
|
{
|
||||||
$position = self::getExtremePosition($items, $asLast);
|
$position = self::getExtremePosition($items, $asLast);
|
||||||
|
|
||||||
/*
|
|
||||||
* Extreme position is unknown, but it's required?
|
|
||||||
* Use 0 as default/start value
|
|
||||||
*/
|
|
||||||
if (null === $position && $force) {
|
if (null === $position && $force) {
|
||||||
$position = 0;
|
$position = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
if (null !== $position && !empty($items)) {
|
||||||
* Extreme position is unknown or there are no items to sort?
|
foreach ($items as $item) {
|
||||||
* Nothing to do
|
if (method_exists($item, 'getPosition')) {
|
||||||
*/
|
if (null === $item->getPosition()) {
|
||||||
if (null === $position || empty($items)) {
|
if ($asLast) {
|
||||||
return;
|
++$position;
|
||||||
}
|
} else {
|
||||||
|
--$position;
|
||||||
|
}
|
||||||
|
|
||||||
foreach ($items as &$item) {
|
if (method_exists($item, 'setPosition')) {
|
||||||
/*
|
$item->setPosition($position);
|
||||||
* The item is not sortable?
|
}
|
||||||
*/
|
}
|
||||||
if (!self::isSortable($item)) {
|
}
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Position has been set?
|
|
||||||
* Nothing to do
|
|
||||||
*/
|
|
||||||
if (self::isSorted($item)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Calculate position
|
|
||||||
*/
|
|
||||||
if ($asLast) {
|
|
||||||
++$position;
|
|
||||||
} else {
|
|
||||||
--$position;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* It's an object?
|
|
||||||
* Use proper method to set position
|
|
||||||
*/
|
|
||||||
if (is_object($item)) {
|
|
||||||
$item->setPosition($position);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* It's an array
|
|
||||||
* Use proper key to set position
|
|
||||||
*/
|
|
||||||
$item[static::POSITION_KEY] = $position;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns extreme position (max or min) of given items
|
* Returns extreme position (max or min) of given items
|
||||||
*
|
*
|
||||||
* @param array $items Objects who have "getPosition()" and "setPosition()" methods or arrays
|
* @param array $items The items
|
||||||
* @param bool $max (optional) If is set to true, maximum value is returned. Otherwise - minimum.
|
* @param bool $max (optional) If is set to true, maximum value is returned. Otherwise - minimum.
|
||||||
* @return int
|
* @return int
|
||||||
*/
|
*/
|
||||||
public static function getExtremePosition(array $items, $max = true)
|
public static function getExtremePosition($items, $max = true)
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
* No items?
|
|
||||||
* Nothing to do
|
|
||||||
*/
|
|
||||||
if (empty($items)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
$extreme = null;
|
$extreme = null;
|
||||||
|
|
||||||
foreach ($items as $item) {
|
if (!empty($items)) {
|
||||||
/*
|
foreach ($items as $item) {
|
||||||
* The item is not sortable?
|
if (Reflection::hasMethod($item, 'getPosition')) {
|
||||||
*/
|
$position = $item->getPosition();
|
||||||
if (!self::isSortable($item)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
$position = null;
|
if ($max) {
|
||||||
|
if ($position > $extreme) {
|
||||||
/*
|
$extreme = $position;
|
||||||
* Let's grab the position
|
}
|
||||||
*/
|
} else {
|
||||||
if (is_object($item)) {
|
if ($position < $extreme) {
|
||||||
$position = $item->getPosition();
|
$extreme = $position;
|
||||||
} elseif (array_key_exists(static::POSITION_KEY, $item)) {
|
}
|
||||||
$position = $item[static::POSITION_KEY];
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Maximum value is expected?
|
|
||||||
*/
|
|
||||||
if ($max) {
|
|
||||||
/*
|
|
||||||
* Position was found and it's larger than previously found position (the extreme position)?
|
|
||||||
*/
|
|
||||||
if (null === $extreme || (null !== $position && $position > $extreme)) {
|
|
||||||
$extreme = $position;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Minimum value is expected here.
|
|
||||||
* Position was found and it's smaller than previously found position (the extreme position)?
|
|
||||||
*/
|
|
||||||
if (null === $extreme || (null !== $position && $position < $extreme)) {
|
|
||||||
$extreme = $position;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -182,54 +106,4 @@ class Repository
|
|||||||
->createQueryBuilder($alias)
|
->createQueryBuilder($alias)
|
||||||
->orderBy(sprintf('%s.%s', $alias, $property), $direction);
|
->orderBy(sprintf('%s.%s', $alias, $property), $direction);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns information if given item is sortable
|
|
||||||
*
|
|
||||||
* Sortable means it's an:
|
|
||||||
* - array
|
|
||||||
* or
|
|
||||||
* - object and has getPosition() and setPosition()
|
|
||||||
*
|
|
||||||
* @param mixed $item An item to verify (object who has "getPosition()" and "setPosition()" methods or an array)
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
private static function isSortable($item)
|
|
||||||
{
|
|
||||||
return is_array($item)
|
|
||||||
||
|
|
||||||
(
|
|
||||||
is_object($item)
|
|
||||||
&&
|
|
||||||
Reflection::hasMethod($item, 'getPosition')
|
|
||||||
&&
|
|
||||||
Reflection::hasMethod($item, 'setPosition')
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns information if given item is sorted (position has been set)
|
|
||||||
*
|
|
||||||
* @param mixed $item An item to verify (object who has "getPosition()" and "setPosition()" methods or an array)
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
private static function isSorted($item)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Given item is not sortable?
|
|
||||||
*/
|
|
||||||
if (!self::isSortable($item)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* It's an object or it's an array
|
|
||||||
* and position has been set?
|
|
||||||
*/
|
|
||||||
|
|
||||||
return
|
|
||||||
(is_object($item) && null !== $item->getPosition())
|
|
||||||
||
|
|
||||||
(is_array($item) && isset($item[static::POSITION_KEY]));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,25 +24,13 @@ class Uri
|
|||||||
*/
|
*/
|
||||||
public static function getFullUri($withoutHost = false)
|
public static function getFullUri($withoutHost = false)
|
||||||
{
|
{
|
||||||
$requestedUrl = Miscellaneous::getSafelyGlobalVariable(INPUT_SERVER, 'REQUEST_URI');
|
$effect = Miscellaneous::getSafelyGlobalVariable(INPUT_SERVER, 'REQUEST_URI');
|
||||||
|
|
||||||
/*
|
|
||||||
* Unknown requested url?
|
|
||||||
* Nothing to do
|
|
||||||
*/
|
|
||||||
if (empty($requestedUrl)) {
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Without host / server name?
|
|
||||||
* All is done
|
|
||||||
*/
|
|
||||||
if ($withoutHost) {
|
if ($withoutHost) {
|
||||||
return $requestedUrl;
|
return $effect;
|
||||||
}
|
}
|
||||||
|
|
||||||
return self::getServerNameOrIp(true) . $requestedUrl;
|
return self::getServerNameOrIp(true) . $effect;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -53,25 +41,13 @@ class Uri
|
|||||||
*/
|
*/
|
||||||
public static function getServerNameOrIp($withProtocol = false)
|
public static function getServerNameOrIp($withProtocol = false)
|
||||||
{
|
{
|
||||||
$host = Miscellaneous::getSafelyGlobalVariable(INPUT_SERVER, 'HTTP_HOST');
|
$protocol = '';
|
||||||
|
|
||||||
/*
|
|
||||||
* Unknown host / server?
|
|
||||||
* Nothing to do
|
|
||||||
*/
|
|
||||||
if (empty($host)) {
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* With protocol?
|
|
||||||
* Let's include the protocol
|
|
||||||
*/
|
|
||||||
if ($withProtocol) {
|
if ($withProtocol) {
|
||||||
return sprintf('%s://%s', self::getProtocolName(), $host);
|
$protocol .= self::getProtocolName() . '://';
|
||||||
}
|
}
|
||||||
|
|
||||||
return $host;
|
return $protocol . Miscellaneous::getSafelyGlobalVariable(INPUT_SERVER, 'HTTP_HOST');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -81,6 +57,8 @@ class Uri
|
|||||||
*/
|
*/
|
||||||
public static function getProtocolName()
|
public static function getProtocolName()
|
||||||
{
|
{
|
||||||
|
$effect = '';
|
||||||
|
|
||||||
$matches = [];
|
$matches = [];
|
||||||
$protocolData = Miscellaneous::getSafelyGlobalVariable(INPUT_SERVER, 'SERVER_PROTOCOL'); // e.g. HTTP/1.1
|
$protocolData = Miscellaneous::getSafelyGlobalVariable(INPUT_SERVER, 'SERVER_PROTOCOL'); // e.g. HTTP/1.1
|
||||||
$matchCount = preg_match('|(.+)\/(.+)|', $protocolData, $matches);
|
$matchCount = preg_match('|(.+)\/(.+)|', $protocolData, $matches);
|
||||||
@@ -90,14 +68,11 @@ class Uri
|
|||||||
* $matches[2] - protocol version, e.g. 1.1
|
* $matches[2] - protocol version, e.g. 1.1
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
if ($matchCount > 0) {
|
||||||
* Oops, cannot match protocol
|
$effect = strtolower($matches[1]);
|
||||||
*/
|
|
||||||
if (0 == $matchCount) {
|
|
||||||
return '';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return strtolower($matches[1]);
|
return $effect;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -107,7 +82,13 @@ class Uri
|
|||||||
*/
|
*/
|
||||||
public static function getRefererUri()
|
public static function getRefererUri()
|
||||||
{
|
{
|
||||||
return Miscellaneous::getSafelyGlobalVariable(INPUT_SERVER, 'HTTP_REFERER');
|
$effect = '';
|
||||||
|
|
||||||
|
if (filter_has_var(INPUT_SERVER, 'HTTP_REFERER')) {
|
||||||
|
$effect = Miscellaneous::getSafelyGlobalVariable(INPUT_SERVER, 'HTTP_REFERER');
|
||||||
|
}
|
||||||
|
|
||||||
|
return $effect;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -233,35 +214,10 @@ class Uri
|
|||||||
*/
|
*/
|
||||||
public static function isExternalUrl($url)
|
public static function isExternalUrl($url)
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
* Unknown url or it's just slash?
|
|
||||||
* Nothing to do
|
|
||||||
*/
|
|
||||||
if (empty($url) || '/' === $url) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$currentUrl = self::getServerNameOrIp(true);
|
$currentUrl = self::getServerNameOrIp(true);
|
||||||
$url = self::replenishProtocol($url);
|
$url = self::replenishProtocol($url);
|
||||||
|
|
||||||
/*
|
return !Regex::contains($currentUrl, $url);
|
||||||
* Let's prepare pattern of current url
|
|
||||||
*/
|
|
||||||
$search = [
|
|
||||||
':',
|
|
||||||
'/',
|
|
||||||
'.',
|
|
||||||
];
|
|
||||||
|
|
||||||
$replace = [
|
|
||||||
'\:',
|
|
||||||
'\/',
|
|
||||||
'\.',
|
|
||||||
];
|
|
||||||
|
|
||||||
$currentUrlPattern = str_replace($search, $replace, $currentUrl);
|
|
||||||
|
|
||||||
return !Regex::contains($url, $currentUrlPattern);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -317,14 +273,6 @@ class Uri
|
|||||||
*/
|
*/
|
||||||
public static function getSecuredUrl($url, $user = '', $password = '')
|
public static function getSecuredUrl($url, $user = '', $password = '')
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
* Url is not provided?
|
|
||||||
* Nothing to do
|
|
||||||
*/
|
|
||||||
if (empty($url)) {
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
|
|
||||||
$protocol = self::getProtocolName();
|
$protocol = self::getProtocolName();
|
||||||
$host = self::getServerNameOrIp();
|
$host = self::getServerNameOrIp();
|
||||||
|
|
||||||
|
|||||||
@@ -82,8 +82,9 @@ class TestService
|
|||||||
* Returns translated type (for testing purposes)
|
* Returns translated type (for testing purposes)
|
||||||
*
|
*
|
||||||
* @param string $type Type of something (for testing purposes)
|
* @param string $type Type of something (for testing purposes)
|
||||||
* @throws UnknownTestTypeException
|
|
||||||
* @return string
|
* @return string
|
||||||
|
*
|
||||||
|
* @throws UnknownTestTypeException
|
||||||
*/
|
*/
|
||||||
public function getTranslatedType($type)
|
public function getTranslatedType($type)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ namespace Meritoo\Common\Test\Exception\Regex;
|
|||||||
|
|
||||||
use Generator;
|
use Generator;
|
||||||
use Meritoo\Common\Exception\Regex\InvalidColorHexValueException;
|
use Meritoo\Common\Exception\Regex\InvalidColorHexValueException;
|
||||||
use Meritoo\Common\Exception\Type\UnknownOopVisibilityTypeException;
|
|
||||||
use Meritoo\Common\Test\Base\BaseTestCase;
|
use Meritoo\Common\Test\Base\BaseTestCase;
|
||||||
use Meritoo\Common\Type\OopVisibilityType;
|
use Meritoo\Common\Type\OopVisibilityType;
|
||||||
|
|
||||||
@@ -22,9 +21,6 @@ use Meritoo\Common\Type\OopVisibilityType;
|
|||||||
*/
|
*/
|
||||||
class InvalidColorHexValueExceptionTest extends BaseTestCase
|
class InvalidColorHexValueExceptionTest extends BaseTestCase
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* @throws UnknownOopVisibilityTypeException
|
|
||||||
*/
|
|
||||||
public function testConstructorVisibilityAndArguments()
|
public function testConstructorVisibilityAndArguments()
|
||||||
{
|
{
|
||||||
static::assertConstructorVisibilityAndArguments(InvalidColorHexValueException::class, OopVisibilityType::IS_PUBLIC, 1, 1);
|
static::assertConstructorVisibilityAndArguments(InvalidColorHexValueException::class, OopVisibilityType::IS_PUBLIC, 1, 1);
|
||||||
|
|||||||
@@ -1,69 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* (c) Meritoo.pl, http://www.meritoo.pl
|
|
||||||
* For the full copyright and license information, please view the LICENSE
|
|
||||||
* file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Meritoo\Common\Test\Exception\Regex;
|
|
||||||
|
|
||||||
use Generator;
|
|
||||||
use Meritoo\Common\Exception\Regex\InvalidHtmlAttributesException;
|
|
||||||
use Meritoo\Common\Exception\Type\UnknownOopVisibilityTypeException;
|
|
||||||
use Meritoo\Common\Test\Base\BaseTestCase;
|
|
||||||
use Meritoo\Common\Type\OopVisibilityType;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Test case of an exception used while html attributes are invalid
|
|
||||||
*
|
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
|
||||||
* @copyright Meritoo.pl
|
|
||||||
*/
|
|
||||||
class InvalidHtmlAttributesExceptionTest extends BaseTestCase
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @throws UnknownOopVisibilityTypeException
|
|
||||||
*/
|
|
||||||
public function testConstructorVisibilityAndArguments()
|
|
||||||
{
|
|
||||||
static::assertConstructorVisibilityAndArguments(InvalidHtmlAttributesException::class, OopVisibilityType::IS_PUBLIC, 1, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $htmlAttributes Invalid html attributes
|
|
||||||
* @param string $expectedMessage Expected exception's message
|
|
||||||
*
|
|
||||||
* @dataProvider provideHtmlAttributes
|
|
||||||
*/
|
|
||||||
public function testConstructorMessage($htmlAttributes, $expectedMessage)
|
|
||||||
{
|
|
||||||
$exception = new InvalidHtmlAttributesException($htmlAttributes);
|
|
||||||
static::assertEquals($expectedMessage, $exception->getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Provides html attributes
|
|
||||||
*
|
|
||||||
* @return Generator
|
|
||||||
*/
|
|
||||||
public function provideHtmlAttributes()
|
|
||||||
{
|
|
||||||
$template = 'HTML attributes \'%s\' are invalid. Is there everything ok?';
|
|
||||||
|
|
||||||
yield[
|
|
||||||
'abc = def',
|
|
||||||
sprintf($template, 'abc = def'),
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
'abc = def ghi = jkl',
|
|
||||||
sprintf($template, 'abc = def ghi = jkl'),
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
'abc=def ghi=jkl',
|
|
||||||
sprintf($template, 'abc=def ghi=jkl'),
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -132,7 +132,7 @@ class BaseTestCaseTest extends BaseTestCase
|
|||||||
$directoryPath .= '/';
|
$directoryPath .= '/';
|
||||||
}
|
}
|
||||||
|
|
||||||
$expectedContains = sprintf('/data/tests/%s%s', $directoryPath, $fileName);
|
$expectedContains = sprintf('/.data/tests/%s%s', $directoryPath, $fileName);
|
||||||
static::assertContains($expectedContains, $path);
|
static::assertContains($expectedContains, $path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,8 +8,6 @@
|
|||||||
|
|
||||||
namespace Meritoo\Common\Test\Utilities;
|
namespace Meritoo\Common\Test\Utilities;
|
||||||
|
|
||||||
use Generator;
|
|
||||||
use Meritoo\Common\Exception\Bundle\IncorrectBundleNameException;
|
|
||||||
use Meritoo\Common\Test\Base\BaseTestCase;
|
use Meritoo\Common\Test\Base\BaseTestCase;
|
||||||
use Meritoo\Common\Utilities\Bundle;
|
use Meritoo\Common\Utilities\Bundle;
|
||||||
|
|
||||||
@@ -26,228 +24,22 @@ class BundleTest extends BaseTestCase
|
|||||||
static::assertHasNoConstructor(Bundle::class);
|
static::assertHasNoConstructor(Bundle::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public function testGetBundleViewPathEmptyPathAndBundle()
|
||||||
* @param string $viewPath Path of the view / template, e.g. "MyDirectory/my-template"
|
|
||||||
* @param string $bundleName Full name of the bundle, e.g. "MyExtraBundle"
|
|
||||||
*
|
|
||||||
* @throws IncorrectBundleNameException
|
|
||||||
* @dataProvider provideEmptyViewPathAndBundle
|
|
||||||
*/
|
|
||||||
public function testGetBundleViewPathUsingEmptyPathAndBundle($viewPath, $bundleName)
|
|
||||||
{
|
{
|
||||||
self::assertNull(Bundle::getBundleViewPath($viewPath, $bundleName));
|
self::assertNull(Bundle::getBundleViewPath('', ''));
|
||||||
|
self::assertNull(Bundle::getBundleViewPath('test', ''));
|
||||||
|
self::assertNull(Bundle::getBundleViewPath('', 'test'));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public function testGetBundleViewPathWithDefaultExtension()
|
||||||
* @param string $viewPath Path of the view / template, e.g. "MyDirectory/my-template"
|
|
||||||
* @param string $bundleName Full name of the bundle, e.g. "MyExtraBundle"
|
|
||||||
*
|
|
||||||
* @throws IncorrectBundleNameException
|
|
||||||
* @dataProvider provideViewPathAndIncorrectBundleName
|
|
||||||
*/
|
|
||||||
public function testGetBundleViewPathUsingIncorrectBundleName($viewPath, $bundleName)
|
|
||||||
{
|
{
|
||||||
$template = 'Name of bundle \'%s\' is incorrect. It should start with big letter and end with "Bundle". Is'
|
self::assertEquals('Lorem:Ipsum.html.twig', Bundle::getBundleViewPath('Ipsum', 'Lorem'));
|
||||||
. ' there everything ok?';
|
self::assertEquals('LobortisTincidunt:FusceElementum.html.twig', Bundle::getBundleViewPath('FusceElementum', 'LobortisTincidunt'));
|
||||||
|
|
||||||
$message = sprintf($template, $bundleName);
|
|
||||||
$this->setExpectedException(IncorrectBundleNameException::class, $message);
|
|
||||||
|
|
||||||
Bundle::getBundleViewPath($viewPath, $bundleName);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public function testGetBundleViewPathWithCustomExtension()
|
||||||
* @param string $viewPath Path of the view / template, e.g. "MyDirectory/my-template"
|
|
||||||
* @param string $bundleName Full name of the bundle, e.g. "MyExtraBundle"
|
|
||||||
* @param string $expected Expected path to view / template
|
|
||||||
*
|
|
||||||
* @throws IncorrectBundleNameException
|
|
||||||
* @dataProvider provideViewPathAndBundle
|
|
||||||
*/
|
|
||||||
public function testGetBundleViewPathUsingDefaultExtension($viewPath, $bundleName, $expected)
|
|
||||||
{
|
{
|
||||||
self::assertEquals($expected, Bundle::getBundleViewPath($viewPath, $bundleName));
|
self::assertNull(Bundle::getBundleViewPath('Ipsum', 'Lorem', ''));
|
||||||
}
|
self::assertEquals('Lorem:Ipsum.js.twig', Bundle::getBundleViewPath('Ipsum', 'Lorem', 'js.twig'));
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $viewPath Path of the view / template, e.g. "MyDirectory/my-template"
|
|
||||||
* @param string $bundleName Full name of the bundle, e.g. "MyExtraBundle"
|
|
||||||
* @param string $extension (optional) Extension of the view / template
|
|
||||||
* @param string $expected Expected path to view / template
|
|
||||||
*
|
|
||||||
* @throws IncorrectBundleNameException
|
|
||||||
* @dataProvider provideViewPathAndBundleAndExtension
|
|
||||||
*/
|
|
||||||
public function testGetBundleViewPathUsingCustomExtension($viewPath, $bundleName, $extension, $expected)
|
|
||||||
{
|
|
||||||
self::assertEquals($expected, Bundle::getBundleViewPath($viewPath, $bundleName, $extension));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param mixed $emptyValue Empty value, e.g. ""
|
|
||||||
*
|
|
||||||
* @throws IncorrectBundleNameException
|
|
||||||
* @dataProvider provideEmptyValue
|
|
||||||
*/
|
|
||||||
public function testGetShortBundleNameUsingEmptyValue($emptyValue)
|
|
||||||
{
|
|
||||||
$this->setExpectedException(IncorrectBundleNameException::class);
|
|
||||||
Bundle::getShortBundleName($emptyValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $bundleName Full name of the bundle, e.g. "MyExtraBundle"
|
|
||||||
*
|
|
||||||
* @throws IncorrectBundleNameException
|
|
||||||
* @dataProvider provideIncorrectBundleName
|
|
||||||
*/
|
|
||||||
public function testGetShortBundleNameUsingIncorrectBundleName($bundleName)
|
|
||||||
{
|
|
||||||
$this->setExpectedException(IncorrectBundleNameException::class);
|
|
||||||
Bundle::getShortBundleName($bundleName);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $fullBundleName Full name of the bundle, e.g. "MyExtraBundle"
|
|
||||||
* @param string $shortBundleName Short name of bundle (without "Bundle")
|
|
||||||
*
|
|
||||||
* @throws IncorrectBundleNameException
|
|
||||||
* @dataProvider provideFullAndShortBundleName
|
|
||||||
*/
|
|
||||||
public function testGetShortBundleName($fullBundleName, $shortBundleName)
|
|
||||||
{
|
|
||||||
self::assertEquals($shortBundleName, Bundle::getShortBundleName($fullBundleName));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Provides empty path of the view / template and/or name of bundle
|
|
||||||
*
|
|
||||||
* @return Generator
|
|
||||||
*/
|
|
||||||
public function provideEmptyViewPathAndBundle()
|
|
||||||
{
|
|
||||||
yield[
|
|
||||||
'',
|
|
||||||
'',
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
'test',
|
|
||||||
'',
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
'',
|
|
||||||
'test',
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Provides path of the view / template and incorrect name of bundle
|
|
||||||
*
|
|
||||||
* @return Generator
|
|
||||||
*/
|
|
||||||
public function provideViewPathAndIncorrectBundleName()
|
|
||||||
{
|
|
||||||
yield[
|
|
||||||
'User:Active',
|
|
||||||
'myExtra',
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
'User:Active',
|
|
||||||
'MyExtra',
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
'User:Active',
|
|
||||||
'MySuperExtraGorgeous',
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Provides path of the view / template and name of bundle
|
|
||||||
*
|
|
||||||
* @return Generator
|
|
||||||
*/
|
|
||||||
public function provideViewPathAndBundle()
|
|
||||||
{
|
|
||||||
yield[
|
|
||||||
'User',
|
|
||||||
'MyExtraBundle',
|
|
||||||
'@MyExtra/User.html.twig',
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
'User:Active',
|
|
||||||
'MyExtraBundle',
|
|
||||||
'@MyExtra/User/Active.html.twig',
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
'User:Active',
|
|
||||||
'MySuperExtraGorgeousBundle',
|
|
||||||
'@MySuperExtraGorgeous/User/Active.html.twig',
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Provides path of the view / template, name of bundle and extension of the view / template
|
|
||||||
*
|
|
||||||
* @return Generator
|
|
||||||
*/
|
|
||||||
public function provideViewPathAndBundleAndExtension()
|
|
||||||
{
|
|
||||||
yield[
|
|
||||||
'User:Active',
|
|
||||||
'MyExtraBundle',
|
|
||||||
'',
|
|
||||||
null,
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
'User:Active',
|
|
||||||
'MyExtraBundle',
|
|
||||||
'js.twig',
|
|
||||||
'@MyExtra/User/Active.js.twig',
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Provides incorrect name of bundle
|
|
||||||
*
|
|
||||||
* @return Generator
|
|
||||||
*/
|
|
||||||
public function provideIncorrectBundleName()
|
|
||||||
{
|
|
||||||
yield[
|
|
||||||
'myExtra',
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
'MyExtra',
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
'MySuperExtraGorgeous',
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Provides full and short name of bundle
|
|
||||||
*
|
|
||||||
* @return Generator
|
|
||||||
*/
|
|
||||||
public function provideFullAndShortBundleName()
|
|
||||||
{
|
|
||||||
yield[
|
|
||||||
'MyExtraBundle',
|
|
||||||
'MyExtra',
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
'MySuperExtraGorgeousBundle',
|
|
||||||
'MySuperExtraGorgeous',
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,13 +6,13 @@
|
|||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Meritoo\Common\Test\Type;
|
namespace Meritoo\Common\Test\Utilities;
|
||||||
|
|
||||||
use DateTime;
|
use DateTime;
|
||||||
use Generator;
|
use Generator;
|
||||||
use Meritoo\Common\Test\Base\BaseTypeTestCase;
|
use Meritoo\Common\Test\Base\BaseTestCase;
|
||||||
use Meritoo\Common\Type\DatePeriod;
|
|
||||||
use Meritoo\Common\Type\OopVisibilityType;
|
use Meritoo\Common\Type\OopVisibilityType;
|
||||||
|
use Meritoo\Common\Utilities\DatePeriod;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test case of date's period
|
* Test case of date's period
|
||||||
@@ -20,7 +20,7 @@ use Meritoo\Common\Type\OopVisibilityType;
|
|||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo.pl
|
||||||
*/
|
*/
|
||||||
class DatePeriodTest extends BaseTypeTestCase
|
class DatePeriodTest extends BaseTestCase
|
||||||
{
|
{
|
||||||
public function testConstructorVisibilityAndArguments()
|
public function testConstructorVisibilityAndArguments()
|
||||||
{
|
{
|
||||||
@@ -58,6 +58,33 @@ class DatePeriodTest extends BaseTypeTestCase
|
|||||||
self::assertEquals($endDate, $period->getEndDate());
|
self::assertEquals($endDate, $period->getEndDate());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $period Empty value, e.g. ""
|
||||||
|
* @dataProvider provideEmptyValue
|
||||||
|
*/
|
||||||
|
public function testIsCorrectPeriodEmptyPeriod($period)
|
||||||
|
{
|
||||||
|
self::assertFalse(DatePeriod::isCorrectPeriod($period));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param int $period Incorrect period to verify
|
||||||
|
* @dataProvider provideIncorrectPeriod
|
||||||
|
*/
|
||||||
|
public function testIsCorrectPeriodIncorrectPeriod($period)
|
||||||
|
{
|
||||||
|
self::assertFalse(DatePeriod::isCorrectPeriod($period));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param int $period The period to verify
|
||||||
|
* @dataProvider providePeriod
|
||||||
|
*/
|
||||||
|
public function testIsCorrectPeriod($period)
|
||||||
|
{
|
||||||
|
self::assertTrue(DatePeriod::isCorrectPeriod($period));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param DatePeriod $period The date period to verify
|
* @param DatePeriod $period The date period to verify
|
||||||
* @param string $format Format used to format the date
|
* @param string $format Format used to format the date
|
||||||
@@ -115,6 +142,36 @@ class DatePeriodTest extends BaseTypeTestCase
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides incorrect period
|
||||||
|
*
|
||||||
|
* @return Generator
|
||||||
|
*/
|
||||||
|
public function provideIncorrectPeriod()
|
||||||
|
{
|
||||||
|
yield[-1];
|
||||||
|
yield[0];
|
||||||
|
yield[10];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides period to verify
|
||||||
|
*
|
||||||
|
* @return Generator
|
||||||
|
*/
|
||||||
|
public function providePeriod()
|
||||||
|
{
|
||||||
|
yield[DatePeriod::LAST_WEEK];
|
||||||
|
yield[DatePeriod::THIS_WEEK];
|
||||||
|
yield[DatePeriod::NEXT_WEEK];
|
||||||
|
yield[DatePeriod::LAST_MONTH];
|
||||||
|
yield[DatePeriod::THIS_MONTH];
|
||||||
|
yield[DatePeriod::NEXT_MONTH];
|
||||||
|
yield[DatePeriod::LAST_YEAR];
|
||||||
|
yield[DatePeriod::THIS_YEAR];
|
||||||
|
yield[DatePeriod::NEXT_YEAR];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides period and incorrect format of date to verify
|
* Provides period and incorrect format of date to verify
|
||||||
*
|
*
|
||||||
@@ -213,68 +270,4 @@ class DatePeriodTest extends BaseTypeTestCase
|
|||||||
'2002-02-02 00:00',
|
'2002-02-02 00:00',
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns all expected types of the tested type
|
|
||||||
*
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
protected function getAllExpectedTypes()
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
'LAST_MONTH' => DatePeriod::LAST_MONTH,
|
|
||||||
'LAST_WEEK' => DatePeriod::LAST_WEEK,
|
|
||||||
'LAST_YEAR' => DatePeriod::LAST_YEAR,
|
|
||||||
'NEXT_MONTH' => DatePeriod::NEXT_MONTH,
|
|
||||||
'NEXT_WEEK' => DatePeriod::NEXT_WEEK,
|
|
||||||
'NEXT_YEAR' => DatePeriod::NEXT_YEAR,
|
|
||||||
'THIS_MONTH' => DatePeriod::THIS_MONTH,
|
|
||||||
'THIS_WEEK' => DatePeriod::THIS_WEEK,
|
|
||||||
'THIS_YEAR' => DatePeriod::THIS_YEAR,
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
protected function getTestedTypeInstance()
|
|
||||||
{
|
|
||||||
return new DatePeriod();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
public function provideTypeToVerify()
|
|
||||||
{
|
|
||||||
yield[
|
|
||||||
'',
|
|
||||||
false,
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
-1,
|
|
||||||
false,
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
true,
|
|
||||||
false,
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
DatePeriod::LAST_MONTH,
|
|
||||||
true,
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
DatePeriod::NEXT_WEEK,
|
|
||||||
true,
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
DatePeriod::THIS_YEAR,
|
|
||||||
true,
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -13,7 +13,6 @@ use DateTime;
|
|||||||
use Generator;
|
use Generator;
|
||||||
use Meritoo\Common\Exception\Date\UnknownDatePartTypeException;
|
use Meritoo\Common\Exception\Date\UnknownDatePartTypeException;
|
||||||
use Meritoo\Common\Test\Base\BaseTestCase;
|
use Meritoo\Common\Test\Base\BaseTestCase;
|
||||||
use Meritoo\Common\Type\DatePeriod;
|
|
||||||
use Meritoo\Common\Utilities\Date;
|
use Meritoo\Common\Utilities\Date;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -507,35 +506,6 @@ class DateTest extends BaseTestCase
|
|||||||
self::assertTrue($randomDate >= $intervalMinDate && $randomDate <= $intervalMaxDate);
|
self::assertTrue($randomDate >= $intervalMinDate && $randomDate <= $intervalMaxDate);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param mixed $period Empty value, e.g. ""
|
|
||||||
* @dataProvider provideEmptyValue
|
|
||||||
*/
|
|
||||||
public function testGetDatesForPeriodUsingEmptyPeriod($period)
|
|
||||||
{
|
|
||||||
self::assertNull(Date::getDatesForPeriod($period));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param int $period Incorrect period to verify
|
|
||||||
* @dataProvider provideIncorrectPeriod
|
|
||||||
*/
|
|
||||||
public function testGetDatesForPeriodUsingIncorrectPeriod($period)
|
|
||||||
{
|
|
||||||
self::assertNull(Date::getDatesForPeriod($period));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param int $period The period, type of period. One of DatePeriod class constants, e.g. DatePeriod::LAST_WEEK.
|
|
||||||
* @param DatePeriod $expected Expected start and end date for given period
|
|
||||||
*
|
|
||||||
* @dataProvider provideCorrectPeriod
|
|
||||||
*/
|
|
||||||
public function testGetDatesForPeriod($period, DatePeriod $expected)
|
|
||||||
{
|
|
||||||
self::assertEquals($expected, Date::getDatesForPeriod($period));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides incorrect invalidCount of DateTime
|
* Provides incorrect invalidCount of DateTime
|
||||||
*
|
*
|
||||||
@@ -788,112 +758,4 @@ class DateTest extends BaseTestCase
|
|||||||
50,
|
50,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Provides incorrect period
|
|
||||||
*
|
|
||||||
* @return Generator
|
|
||||||
*/
|
|
||||||
public function provideIncorrectPeriod()
|
|
||||||
{
|
|
||||||
yield[-1];
|
|
||||||
yield[0];
|
|
||||||
yield[10];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Provides correct period
|
|
||||||
*
|
|
||||||
* @return Generator
|
|
||||||
*/
|
|
||||||
public function provideCorrectPeriod()
|
|
||||||
{
|
|
||||||
yield[
|
|
||||||
DatePeriod::LAST_WEEK,
|
|
||||||
new DatePeriod(
|
|
||||||
(new DateTime('this week'))->sub(new DateInterval('P7D'))->setTime(0, 0, 0),
|
|
||||||
(new DateTime('this week'))->sub(new DateInterval('P1D'))->setTime(23, 59, 59)
|
|
||||||
),
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
DatePeriod::THIS_WEEK,
|
|
||||||
new DatePeriod(
|
|
||||||
(new DateTime('this week'))->setTime(0, 0, 0),
|
|
||||||
(new DateTime('this week'))->add(new DateInterval('P6D'))->setTime(23, 59, 59)
|
|
||||||
),
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
DatePeriod::NEXT_WEEK,
|
|
||||||
new DatePeriod(
|
|
||||||
(new DateTime('this week'))->add(new DateInterval('P7D'))->setTime(0, 0, 0),
|
|
||||||
(new DateTime('this week'))->add(new DateInterval('P7D'))->add(new DateInterval('P6D'))->setTime(23, 59, 59)
|
|
||||||
),
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
DatePeriod::LAST_MONTH,
|
|
||||||
new DatePeriod(
|
|
||||||
(new DateTime('first day of last month'))->setTime(0, 0, 0),
|
|
||||||
(new DateTime('last day of last month'))->setTime(23, 59, 59)
|
|
||||||
),
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
DatePeriod::THIS_MONTH,
|
|
||||||
new DatePeriod(
|
|
||||||
Date::getDatesForPeriod(DatePeriod::LAST_MONTH)
|
|
||||||
->getEndDate()
|
|
||||||
->add(new DateInterval('P1D'))
|
|
||||||
->setTime(0, 0, 0),
|
|
||||||
Date::getDatesForPeriod(DatePeriod::NEXT_MONTH)
|
|
||||||
->getStartDate()
|
|
||||||
->sub(new DateInterval('P1D'))
|
|
||||||
->setTime(23, 59, 59)
|
|
||||||
),
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
DatePeriod::NEXT_MONTH,
|
|
||||||
new DatePeriod(
|
|
||||||
(new DateTime('first day of next month'))->setTime(0, 0, 0),
|
|
||||||
(new DateTime('last day of next month'))->setTime(23, 59, 59)
|
|
||||||
),
|
|
||||||
];
|
|
||||||
|
|
||||||
$lastYearStart = (new DateTime())->modify('-1 year');
|
|
||||||
$lastYearEnd = (new DateTime())->modify('-1 year');
|
|
||||||
$year = $lastYearStart->format('Y');
|
|
||||||
|
|
||||||
yield[
|
|
||||||
DatePeriod::LAST_YEAR,
|
|
||||||
new DatePeriod(
|
|
||||||
$lastYearStart->setDate($year, 1, 1)->setTime(0, 0, 0),
|
|
||||||
$lastYearEnd->setDate($year, 12, 31)->setTime(23, 59, 59)
|
|
||||||
),
|
|
||||||
];
|
|
||||||
|
|
||||||
$year = (new DateTime())->format('Y');
|
|
||||||
|
|
||||||
yield[
|
|
||||||
DatePeriod::THIS_YEAR,
|
|
||||||
new DatePeriod(
|
|
||||||
(new DateTime())->setDate($year, 1, 1)->setTime(0, 0, 0),
|
|
||||||
(new DateTime())->setDate($year, 12, 31)->setTime(23, 59, 59)
|
|
||||||
),
|
|
||||||
];
|
|
||||||
|
|
||||||
$nextYearStart = (new DateTime())->modify('1 year');
|
|
||||||
$nextYearEnd = (new DateTime())->modify('1 year');
|
|
||||||
$year = $nextYearStart->format('Y');
|
|
||||||
|
|
||||||
yield[
|
|
||||||
DatePeriod::NEXT_YEAR,
|
|
||||||
new DatePeriod(
|
|
||||||
$nextYearStart->setDate($year, 1, 1)->setTime(0, 0, 0),
|
|
||||||
$nextYearEnd->setDate($year, 12, 31)->setTime(23, 59, 59)
|
|
||||||
),
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ namespace Meritoo\Common\Test\Utilities;
|
|||||||
use Generator;
|
use Generator;
|
||||||
use Meritoo\Common\Test\Base\BaseTestCase;
|
use Meritoo\Common\Test\Base\BaseTestCase;
|
||||||
use Meritoo\Common\Utilities\Locale;
|
use Meritoo\Common\Utilities\Locale;
|
||||||
use ReflectionException;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test case of the useful locale methods
|
* Test case of the useful locale methods
|
||||||
@@ -21,9 +20,6 @@ use ReflectionException;
|
|||||||
*/
|
*/
|
||||||
class LocaleTest extends BaseTestCase
|
class LocaleTest extends BaseTestCase
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* @throws ReflectionException
|
|
||||||
*/
|
|
||||||
public function testConstructor()
|
public function testConstructor()
|
||||||
{
|
{
|
||||||
static::assertHasNoConstructor(Locale::class);
|
static::assertHasNoConstructor(Locale::class);
|
||||||
@@ -44,7 +40,7 @@ class LocaleTest extends BaseTestCase
|
|||||||
* @param string $encoding Encoding of the final locale
|
* @param string $encoding Encoding of the final locale
|
||||||
* @param string $expected Expected long form of the locale
|
* @param string $expected Expected long form of the locale
|
||||||
*
|
*
|
||||||
* @dataProvider provideLanguageEncodingAndCountryCode
|
* @dataProvider provideLanguageAndCountryCode
|
||||||
*/
|
*/
|
||||||
public function testGetLongForm($languageCode, $countryCode, $encoding, $expected)
|
public function testGetLongForm($languageCode, $countryCode, $encoding, $expected)
|
||||||
{
|
{
|
||||||
@@ -60,46 +56,24 @@ class LocaleTest extends BaseTestCase
|
|||||||
self::assertFalse(Locale::setLocale($emptyValue, $emptyValue));
|
self::assertFalse(Locale::setLocale($emptyValue, $emptyValue));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testSetLocaleIncorrectCategory()
|
|
||||||
{
|
|
||||||
self::assertFalse(Locale::setLocale(-1, 'en'));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param int $category Named constant specifying the category of the functions affected by the locale
|
* @param int $category Named constant specifying the category of the functions affected by the locale
|
||||||
* setting. It's the same constant as required by setlocale() function.
|
* setting. It's the same constant as required by setlocale() function.
|
||||||
* @param string $languageCode Language code, in ISO 639-1 format. Short form of the locale, e.g. "fr".
|
* @param string $languageCode Language code, in ISO 639-1 format. Short form of the locale, e.g. "fr".
|
||||||
* @param string $countryCode Country code, in ISO 3166-1 alpha-2 format, e.g. "FR"
|
|
||||||
* @param string $expectedLocale Expected locale
|
|
||||||
*
|
*
|
||||||
* @dataProvider provideCategoryLanguageCodeAndExpectedLocale
|
* @dataProvider provideCategoryAndLanguageCode
|
||||||
*/
|
*/
|
||||||
public function testSetLocale($category, $languageCode, $countryCode, $expectedLocale)
|
public function testSetLocale($category, $languageCode)
|
||||||
{
|
{
|
||||||
self::assertEquals($expectedLocale, Locale::setLocale($category, $languageCode, $countryCode));
|
self::assertTrue(Locale::setLocale($category, $languageCode));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param int $category Named constant specifying the category of the functions affected by the locale setting.
|
* Provides language and country code
|
||||||
* It's the same constant as required by setlocale() function.
|
|
||||||
* @param string $languageCode Language code, in ISO 639-1 format. Short form of the locale, e.g. "fr".
|
|
||||||
* @param string $countryCode Country code, in ISO 3166-1 alpha-2 format, e.g. "FR"
|
|
||||||
* @param string $expectedLocale Expected locale
|
|
||||||
*
|
|
||||||
* @dataProvider provideCategoryLanguageCodeAndExpectedLocale
|
|
||||||
*/
|
|
||||||
public function testGetLocale($category, $languageCode, $countryCode, $expectedLocale)
|
|
||||||
{
|
|
||||||
Locale::setLocale($category, $languageCode, $countryCode);
|
|
||||||
self::assertEquals($expectedLocale, Locale::getLocale($category));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Provides language, encoding and country code
|
|
||||||
*
|
*
|
||||||
* @return Generator
|
* @return Generator
|
||||||
*/
|
*/
|
||||||
public function provideLanguageEncodingAndCountryCode()
|
public function provideLanguageAndCountryCode()
|
||||||
{
|
{
|
||||||
yield[
|
yield[
|
||||||
'fr',
|
'fr',
|
||||||
@@ -128,97 +102,33 @@ class LocaleTest extends BaseTestCase
|
|||||||
'UTF-8',
|
'UTF-8',
|
||||||
'fr_FR.UTF-8',
|
'fr_FR.UTF-8',
|
||||||
];
|
];
|
||||||
|
|
||||||
yield[
|
|
||||||
'en',
|
|
||||||
'US',
|
|
||||||
'',
|
|
||||||
'en_US',
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
'en',
|
|
||||||
'US',
|
|
||||||
'UTF-8',
|
|
||||||
'en_US.UTF-8',
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
'en',
|
|
||||||
'US',
|
|
||||||
'ISO-8859-1',
|
|
||||||
'en_US.ISO-8859-1',
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides category
|
* Provides category and language
|
||||||
*
|
*
|
||||||
* @return Generator
|
* @return Generator
|
||||||
*/
|
*/
|
||||||
public function provideCategoryLanguageCodeAndExpectedLocale()
|
public function provideCategoryAndLanguageCode()
|
||||||
{
|
{
|
||||||
yield[
|
yield[
|
||||||
LC_ALL,
|
LC_ALL,
|
||||||
'fr',
|
'fr',
|
||||||
'',
|
|
||||||
'fr_FR.UTF-8',
|
|
||||||
];
|
];
|
||||||
|
|
||||||
yield[
|
yield[
|
||||||
LC_COLLATE,
|
LC_COLLATE,
|
||||||
'fr',
|
'fr',
|
||||||
'FR',
|
|
||||||
'fr_FR.UTF-8',
|
|
||||||
];
|
];
|
||||||
|
|
||||||
yield[
|
yield[
|
||||||
LC_CTYPE,
|
LC_CTYPE,
|
||||||
'en',
|
'en',
|
||||||
'US',
|
|
||||||
'en_US.UTF-8',
|
|
||||||
];
|
];
|
||||||
|
|
||||||
yield[
|
yield[
|
||||||
LC_NUMERIC,
|
LC_NUMERIC,
|
||||||
'en',
|
'en',
|
||||||
'GB',
|
|
||||||
'en_GB.UTF-8',
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
LC_MONETARY,
|
|
||||||
'es',
|
|
||||||
'',
|
|
||||||
'es_ES.UTF-8',
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
LC_MONETARY,
|
|
||||||
'es',
|
|
||||||
'ES',
|
|
||||||
'es_ES.UTF-8',
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
LC_TIME,
|
|
||||||
'it',
|
|
||||||
'',
|
|
||||||
'it_IT.UTF-8',
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
LC_TIME,
|
|
||||||
'it',
|
|
||||||
'IT',
|
|
||||||
'it_IT.UTF-8',
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
LC_TIME,
|
|
||||||
'it',
|
|
||||||
'it',
|
|
||||||
'it_IT.UTF-8',
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ use Meritoo\Common\Exception\Regex\InvalidColorHexValueException;
|
|||||||
use Meritoo\Common\Test\Base\BaseTestCase;
|
use Meritoo\Common\Test\Base\BaseTestCase;
|
||||||
use Meritoo\Common\Utilities\Locale;
|
use Meritoo\Common\Utilities\Locale;
|
||||||
use Meritoo\Common\Utilities\Miscellaneous;
|
use Meritoo\Common\Utilities\Miscellaneous;
|
||||||
use ReflectionException;
|
|
||||||
use stdClass;
|
use stdClass;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -28,11 +27,7 @@ class MiscellaneousTest extends BaseTestCase
|
|||||||
private $stringSmall;
|
private $stringSmall;
|
||||||
private $stringCommaSeparated;
|
private $stringCommaSeparated;
|
||||||
private $stringDotSeparated;
|
private $stringDotSeparated;
|
||||||
private $stringWithoutSpaces;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @throws ReflectionException
|
|
||||||
*/
|
|
||||||
public function testConstructor()
|
public function testConstructor()
|
||||||
{
|
{
|
||||||
static::assertHasNoConstructor(Miscellaneous::class);
|
static::assertHasNoConstructor(Miscellaneous::class);
|
||||||
@@ -366,36 +361,37 @@ class MiscellaneousTest extends BaseTestCase
|
|||||||
{
|
{
|
||||||
self::assertEquals('Lorem ipsum dolor sit<br>amet, consectetur<br>adipiscing<br>elit', Miscellaneous::breakLongText($this->stringCommaSeparated, 20));
|
self::assertEquals('Lorem ipsum dolor sit<br>amet, consectetur<br>adipiscing<br>elit', Miscellaneous::breakLongText($this->stringCommaSeparated, 20));
|
||||||
self::assertEquals('Lorem ipsum dolor sit---amet, consectetur---adipiscing---elit', Miscellaneous::breakLongText($this->stringCommaSeparated, 20, '---'));
|
self::assertEquals('Lorem ipsum dolor sit---amet, consectetur---adipiscing---elit', Miscellaneous::breakLongText($this->stringCommaSeparated, 20, '---'));
|
||||||
self::assertEquals('LoremIpsum<br>DolorSitAm<br>etConsecte<br>turAdipisc<br>ingElit', Miscellaneous::breakLongText($this->stringWithoutSpaces, 10));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testRemoveDirectoryUsingNotExistingDirectory()
|
public function testRemoveDirectory()
|
||||||
{
|
{
|
||||||
self::assertNull(Miscellaneous::removeDirectory('/abc/def/ghi'));
|
/*
|
||||||
}
|
* Removing not existing directory
|
||||||
|
*/
|
||||||
|
self::assertTrue(Miscellaneous::removeDirectory('/abc/def/ghi'));
|
||||||
|
|
||||||
public function testRemoveDirectoryUsingNoDirectory()
|
/*
|
||||||
{
|
* Removing not directory
|
||||||
|
*/
|
||||||
$directoryPath = sys_get_temp_dir() . '/ipsum.txt';
|
$directoryPath = sys_get_temp_dir() . '/ipsum.txt';
|
||||||
touch($directoryPath);
|
touch($directoryPath);
|
||||||
self::assertTrue(Miscellaneous::removeDirectory($directoryPath));
|
self::assertTrue(Miscellaneous::removeDirectory($directoryPath));
|
||||||
}
|
|
||||||
|
|
||||||
public function testRemoveDirectoryUsingSimpleDirectory()
|
/*
|
||||||
{
|
* Removing simple directory
|
||||||
|
*/
|
||||||
$directoryPath = sys_get_temp_dir() . '/lorem/ipsum';
|
$directoryPath = sys_get_temp_dir() . '/lorem/ipsum';
|
||||||
mkdir($directoryPath, 0777, true);
|
mkdir($directoryPath, 0777, true);
|
||||||
self::assertTrue(Miscellaneous::removeDirectory($directoryPath));
|
self::assertTrue(Miscellaneous::removeDirectory($directoryPath));
|
||||||
}
|
|
||||||
|
|
||||||
public function testRemoveDirectoryUsingComplexDirectory()
|
/*
|
||||||
{
|
* Removing more complex directory
|
||||||
|
*/
|
||||||
$directory1Path = sys_get_temp_dir() . '/lorem/ipsum';
|
$directory1Path = sys_get_temp_dir() . '/lorem/ipsum';
|
||||||
$directory2Path = sys_get_temp_dir() . '/lorem/dolor/sit';
|
$directory2Path = sys_get_temp_dir() . '/lorem/dolor/sit';
|
||||||
|
|
||||||
mkdir($directory1Path, 0777, true);
|
mkdir($directory1Path, 0777, true);
|
||||||
mkdir($directory2Path, 0777, true);
|
mkdir($directory2Path, 0777, true);
|
||||||
|
|
||||||
self::assertTrue(Miscellaneous::removeDirectory(sys_get_temp_dir() . '/lorem', false));
|
self::assertTrue(Miscellaneous::removeDirectory(sys_get_temp_dir() . '/lorem', false));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -665,10 +661,6 @@ class MiscellaneousTest extends BaseTestCase
|
|||||||
self::assertEquals(255, Miscellaneous::getValidColorComponent(255, false));
|
self::assertEquals(255, Miscellaneous::getValidColorComponent(255, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @throws IncorrectColorHexLengthException
|
|
||||||
* @throws InvalidColorHexValueException
|
|
||||||
*/
|
|
||||||
public function testGetInvertedColorWithIncorrectLength()
|
public function testGetInvertedColorWithIncorrectLength()
|
||||||
{
|
{
|
||||||
$this->setExpectedException(IncorrectColorHexLengthException::class);
|
$this->setExpectedException(IncorrectColorHexLengthException::class);
|
||||||
@@ -683,10 +675,6 @@ class MiscellaneousTest extends BaseTestCase
|
|||||||
Miscellaneous::getInvertedColor('1234567');
|
Miscellaneous::getInvertedColor('1234567');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @throws IncorrectColorHexLengthException
|
|
||||||
* @throws InvalidColorHexValueException
|
|
||||||
*/
|
|
||||||
public function testGetInvertedColorWithInvalidValue()
|
public function testGetInvertedColorWithInvalidValue()
|
||||||
{
|
{
|
||||||
$this->setExpectedException(InvalidColorHexValueException::class);
|
$this->setExpectedException(InvalidColorHexValueException::class);
|
||||||
@@ -698,10 +686,6 @@ class MiscellaneousTest extends BaseTestCase
|
|||||||
Miscellaneous::getInvertedColor('00ppqq');
|
Miscellaneous::getInvertedColor('00ppqq');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @throws IncorrectColorHexLengthException
|
|
||||||
* @throws InvalidColorHexValueException
|
|
||||||
*/
|
|
||||||
public function testGetInvertedColor()
|
public function testGetInvertedColor()
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
@@ -1190,7 +1174,6 @@ class MiscellaneousTest extends BaseTestCase
|
|||||||
$this->stringSmall = 'Lorem ipsum dolor sit amet.';
|
$this->stringSmall = 'Lorem ipsum dolor sit amet.';
|
||||||
$this->stringCommaSeparated = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit';
|
$this->stringCommaSeparated = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit';
|
||||||
$this->stringDotSeparated = 'Etiam ullamcorper. Suspendisse a pellentesque dui, non felis.';
|
$this->stringDotSeparated = 'Etiam ullamcorper. Suspendisse a pellentesque dui, non felis.';
|
||||||
$this->stringWithoutSpaces = 'LoremIpsumDolorSitAmetConsecteturAdipiscingElit';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1203,6 +1186,5 @@ class MiscellaneousTest extends BaseTestCase
|
|||||||
unset($this->stringSmall);
|
unset($this->stringSmall);
|
||||||
unset($this->stringCommaSeparated);
|
unset($this->stringCommaSeparated);
|
||||||
unset($this->stringDotSeparated);
|
unset($this->stringDotSeparated);
|
||||||
unset($this->stringWithoutSpaces);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,341 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* (c) Meritoo.pl, http://www.meritoo.pl
|
|
||||||
* For the full copyright and license information, please view the LICENSE
|
|
||||||
* file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Meritoo\Common\Test\Utilities;
|
|
||||||
|
|
||||||
use Doctrine\Common\Collections\ArrayCollection;
|
|
||||||
use Doctrine\ORM\EntityManager;
|
|
||||||
use Doctrine\ORM\EntityManagerInterface;
|
|
||||||
use Doctrine\ORM\Query\Expr;
|
|
||||||
use Doctrine\ORM\Query\Parameter;
|
|
||||||
use Doctrine\ORM\QueryBuilder;
|
|
||||||
use Generator;
|
|
||||||
use Meritoo\Common\Test\Base\BaseTestCase;
|
|
||||||
use Meritoo\Common\Utilities\QueryBuilderUtility;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Test case of the useful methods for query builder (the Doctrine's QueryBuilder class)
|
|
||||||
*
|
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
|
||||||
* @copyright Meritoo.pl
|
|
||||||
*/
|
|
||||||
class QueryBuilderUtilityTest extends BaseTestCase
|
|
||||||
{
|
|
||||||
public function testConstructor()
|
|
||||||
{
|
|
||||||
static::assertHasNoConstructor(QueryBuilderUtility::class);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param QueryBuilder $queryBuilder The query builder to retrieve root alias
|
|
||||||
* @param null|string $rootAlias Expected root alias of given query builder
|
|
||||||
*
|
|
||||||
* @dataProvider provideQueryBuilderAndRootAlias
|
|
||||||
*/
|
|
||||||
public function testGetRootAlias(QueryBuilder $queryBuilder, $rootAlias)
|
|
||||||
{
|
|
||||||
static::assertSame($rootAlias, QueryBuilderUtility::getRootAlias($queryBuilder));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param QueryBuilder $queryBuilder The query builder to verify
|
|
||||||
* @param string $propertyName Name of property that maybe is joined
|
|
||||||
* @param null|string $propertyAlias Expected alias of given property joined in given query builder
|
|
||||||
*
|
|
||||||
* @dataProvider provideQueryBuilderAndPropertyAlias
|
|
||||||
*/
|
|
||||||
public function testGetJoinedPropertyAlias(QueryBuilder $queryBuilder, $propertyName, $propertyAlias)
|
|
||||||
{
|
|
||||||
static::assertSame($propertyAlias, QueryBuilderUtility::getJoinedPropertyAlias($queryBuilder, $propertyName));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testSetCriteriaWithoutCriteria()
|
|
||||||
{
|
|
||||||
$entityManager = $this->getMock(EntityManagerInterface::class);
|
|
||||||
$queryBuilder = new QueryBuilder($entityManager);
|
|
||||||
$newQueryBuilder = QueryBuilderUtility::setCriteria($queryBuilder);
|
|
||||||
|
|
||||||
static::assertSame($queryBuilder, $newQueryBuilder);
|
|
||||||
static::assertCount(0, $newQueryBuilder->getParameters());
|
|
||||||
static::assertNull($newQueryBuilder->getDQLPart('where'));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testSetCriteriaWithoutAlias()
|
|
||||||
{
|
|
||||||
$criteria = [
|
|
||||||
'lorem' => 11,
|
|
||||||
'ipsum' => 22,
|
|
||||||
];
|
|
||||||
|
|
||||||
$entityManager = $this->getMock(EntityManagerInterface::class);
|
|
||||||
$queryBuilder = new QueryBuilder($entityManager);
|
|
||||||
$newQueryBuilder = QueryBuilderUtility::setCriteria($queryBuilder, $criteria);
|
|
||||||
|
|
||||||
static::assertSame($queryBuilder, $newQueryBuilder);
|
|
||||||
static::assertCount(count($criteria), $newQueryBuilder->getParameters());
|
|
||||||
static::assertNotNull($newQueryBuilder->getDQLPart('where'));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param QueryBuilder $queryBuilder The query builder
|
|
||||||
* @param array $criteria The criteria used in WHERE clause
|
|
||||||
*
|
|
||||||
* @dataProvider provideQueryBuilderAndCriteria
|
|
||||||
*/
|
|
||||||
public function testSetCriteria(QueryBuilder $queryBuilder, array $criteria)
|
|
||||||
{
|
|
||||||
$newQueryBuilder = QueryBuilderUtility::setCriteria($queryBuilder, $criteria);
|
|
||||||
$criteriaCount = count($criteria);
|
|
||||||
$nullsCount = 0;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* I have to verify count/amount of NULLs and decrease $criteriaCount, because for null parameter is not added
|
|
||||||
*/
|
|
||||||
array_walk($criteria, function ($value) use (&$nullsCount) {
|
|
||||||
if (null === $value) {
|
|
||||||
++$nullsCount;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
static::assertSame($queryBuilder, $newQueryBuilder);
|
|
||||||
static::assertCount($criteriaCount - $nullsCount, $newQueryBuilder->getParameters());
|
|
||||||
static::assertNotNull($newQueryBuilder->getDQLPart('where'));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testDeleteEntitiesWithoutFlush()
|
|
||||||
{
|
|
||||||
$methods = [
|
|
||||||
'remove',
|
|
||||||
'flush',
|
|
||||||
];
|
|
||||||
|
|
||||||
$entityManager = $this->getMock(EntityManager::class, $methods, [], '', false);
|
|
||||||
$entities1 = [];
|
|
||||||
|
|
||||||
$entities2 = [
|
|
||||||
new \stdClass(),
|
|
||||||
];
|
|
||||||
|
|
||||||
static::assertFalse(QueryBuilderUtility::deleteEntities($entityManager, $entities1, false));
|
|
||||||
static::assertTrue(QueryBuilderUtility::deleteEntities($entityManager, $entities2, false));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testDeleteEntities()
|
|
||||||
{
|
|
||||||
$methods = [
|
|
||||||
'remove',
|
|
||||||
'flush',
|
|
||||||
];
|
|
||||||
|
|
||||||
$entityManager = $this->getMock(EntityManager::class, $methods, [], '', false);
|
|
||||||
$entities1 = [];
|
|
||||||
|
|
||||||
$entities2 = [
|
|
||||||
new \stdClass(),
|
|
||||||
];
|
|
||||||
|
|
||||||
static::assertFalse(QueryBuilderUtility::deleteEntities($entityManager, $entities1));
|
|
||||||
static::assertTrue(QueryBuilderUtility::deleteEntities($entityManager, $entities2));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param QueryBuilder $queryBuilder The query builder
|
|
||||||
* @param array|ArrayCollection $parameters Parameters to add. Collection of Doctrine\ORM\Query\Parameter
|
|
||||||
* instances or an array with key-value pairs.
|
|
||||||
*
|
|
||||||
* @dataProvider provideQueryBuilderAndParameters
|
|
||||||
*/
|
|
||||||
public function testAddParameters(QueryBuilder $queryBuilder, $parameters)
|
|
||||||
{
|
|
||||||
$newQueryBuilder = QueryBuilderUtility::addParameters($queryBuilder, $parameters);
|
|
||||||
|
|
||||||
static::assertSame($queryBuilder, $newQueryBuilder);
|
|
||||||
static::assertCount(count($parameters), $newQueryBuilder->getParameters());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Provides query builder to retrieve root alias and expected root alias
|
|
||||||
*
|
|
||||||
* @return Generator
|
|
||||||
*/
|
|
||||||
public function provideQueryBuilderAndRootAlias()
|
|
||||||
{
|
|
||||||
$entityManager = $this->getMock(EntityManagerInterface::class);
|
|
||||||
|
|
||||||
yield[
|
|
||||||
new QueryBuilder($entityManager),
|
|
||||||
null,
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
(new QueryBuilder($entityManager))->from('lorem_ipsum', 'lm'),
|
|
||||||
'lm',
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
(new QueryBuilder($entityManager))
|
|
||||||
->from('lorem', 'l')
|
|
||||||
->leftJoin('l.ipsum', 'i'),
|
|
||||||
'l',
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Provides query builder, name of property and expected alias of given property
|
|
||||||
*
|
|
||||||
* @return Generator
|
|
||||||
*/
|
|
||||||
public function provideQueryBuilderAndPropertyAlias()
|
|
||||||
{
|
|
||||||
$entityManager = $this->getMock(EntityManagerInterface::class);
|
|
||||||
|
|
||||||
yield[
|
|
||||||
new QueryBuilder($entityManager),
|
|
||||||
'',
|
|
||||||
null,
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
new QueryBuilder($entityManager),
|
|
||||||
'lorem',
|
|
||||||
null,
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
(new QueryBuilder($entityManager))->from('lorem_ipsum', 'lm'),
|
|
||||||
'lm',
|
|
||||||
null,
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
(new QueryBuilder($entityManager))
|
|
||||||
->from('lorem', 'l')
|
|
||||||
->leftJoin('l.ipsum', 'i'),
|
|
||||||
'ipsum',
|
|
||||||
'i',
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
(new QueryBuilder($entityManager))
|
|
||||||
->from('lorem', 'l')
|
|
||||||
->leftJoin('l.ipsum', 'i')
|
|
||||||
->innerJoin('i.dolor', 'd'),
|
|
||||||
'ipsum1',
|
|
||||||
null,
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
(new QueryBuilder($entityManager))
|
|
||||||
->from('lorem', 'l')
|
|
||||||
->leftJoin('l.ipsum', 'i')
|
|
||||||
->innerJoin('i.dolor', 'd'),
|
|
||||||
'ipsum',
|
|
||||||
'i',
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
(new QueryBuilder($entityManager))
|
|
||||||
->from('lorem', 'l')
|
|
||||||
->leftJoin('l.ipsum', 'i')
|
|
||||||
->innerJoin('i.dolor', 'd'),
|
|
||||||
'dolor',
|
|
||||||
'd',
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Provides query builder and criteria used in WHERE clause
|
|
||||||
*
|
|
||||||
* @return Generator
|
|
||||||
*/
|
|
||||||
public function provideQueryBuilderAndCriteria()
|
|
||||||
{
|
|
||||||
$entityManager = $this->getMock(EntityManager::class, ['getExpressionBuilder'], [], '', false);
|
|
||||||
|
|
||||||
$entityManager
|
|
||||||
->expects(static::any())
|
|
||||||
->method('getExpressionBuilder')
|
|
||||||
->willReturn(new Expr());
|
|
||||||
|
|
||||||
yield[
|
|
||||||
(new QueryBuilder($entityManager))->from('lorem_ipsum', 'lm'),
|
|
||||||
[
|
|
||||||
'lorem' => 11,
|
|
||||||
'ipsum' => 22,
|
|
||||||
'dolor' => null,
|
|
||||||
],
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
(new QueryBuilder($entityManager))->from('lorem_ipsum', 'lm'),
|
|
||||||
[
|
|
||||||
'lorem' => [
|
|
||||||
11,
|
|
||||||
'>=',
|
|
||||||
],
|
|
||||||
'ipsum' => [
|
|
||||||
22,
|
|
||||||
'<',
|
|
||||||
],
|
|
||||||
'dolor' => null,
|
|
||||||
],
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Provides query builder and parameters to add to given query builder
|
|
||||||
*
|
|
||||||
* @return Generator
|
|
||||||
*/
|
|
||||||
public function provideQueryBuilderAndParameters()
|
|
||||||
{
|
|
||||||
$entityManager = $this->getMock(EntityManagerInterface::class);
|
|
||||||
|
|
||||||
yield[
|
|
||||||
new QueryBuilder($entityManager),
|
|
||||||
[],
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
new QueryBuilder($entityManager),
|
|
||||||
new ArrayCollection(),
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
new QueryBuilder($entityManager),
|
|
||||||
[
|
|
||||||
'lorem' => 11,
|
|
||||||
'ipsum' => 22,
|
|
||||||
],
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
new QueryBuilder($entityManager),
|
|
||||||
new ArrayCollection([
|
|
||||||
'lorem' => 11,
|
|
||||||
'ipsum' => 22,
|
|
||||||
]),
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
new QueryBuilder($entityManager),
|
|
||||||
[
|
|
||||||
new Parameter('lorem', 11),
|
|
||||||
new Parameter('ipsum', 22),
|
|
||||||
],
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
new QueryBuilder($entityManager),
|
|
||||||
new ArrayCollection([
|
|
||||||
new Parameter('lorem', 11),
|
|
||||||
new Parameter('ipsum', 22),
|
|
||||||
]),
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -15,7 +15,7 @@ namespace Meritoo\Common\Test\Utilities\Reflection;
|
|||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo.pl
|
||||||
*/
|
*/
|
||||||
class B extends A implements I
|
class B extends A
|
||||||
{
|
{
|
||||||
protected $name = 'Lorem Ipsum';
|
protected $name = 'Lorem Ipsum';
|
||||||
|
|
||||||
|
|||||||
@@ -1,27 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* (c) Meritoo.pl, http://www.meritoo.pl
|
|
||||||
* For the full copyright and license information, please view the LICENSE
|
|
||||||
* file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Meritoo\Common\Test\Utilities\Reflection;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The H class.
|
|
||||||
* Used for testing the Reflection class.
|
|
||||||
*
|
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
|
||||||
* @copyright Meritoo.pl
|
|
||||||
*/
|
|
||||||
class H
|
|
||||||
{
|
|
||||||
const DOLOR = 'sit';
|
|
||||||
|
|
||||||
const LOREM = 'ipsum';
|
|
||||||
|
|
||||||
const MAX_USERS = 5;
|
|
||||||
|
|
||||||
const MIN_USERS = 2;
|
|
||||||
}
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* (c) Meritoo.pl, http://www.meritoo.pl
|
|
||||||
* For the full copyright and license information, please view the LICENSE
|
|
||||||
* file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Meritoo\Common\Test\Utilities\Reflection;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The H interface.
|
|
||||||
* Used for testing the Reflection class.
|
|
||||||
*
|
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
|
||||||
* @copyright Meritoo.pl
|
|
||||||
*/
|
|
||||||
interface I
|
|
||||||
{
|
|
||||||
}
|
|
||||||
@@ -22,8 +22,6 @@ use Meritoo\Common\Test\Utilities\Reflection\D;
|
|||||||
use Meritoo\Common\Test\Utilities\Reflection\E;
|
use Meritoo\Common\Test\Utilities\Reflection\E;
|
||||||
use Meritoo\Common\Test\Utilities\Reflection\F;
|
use Meritoo\Common\Test\Utilities\Reflection\F;
|
||||||
use Meritoo\Common\Test\Utilities\Reflection\G;
|
use Meritoo\Common\Test\Utilities\Reflection\G;
|
||||||
use Meritoo\Common\Test\Utilities\Reflection\H;
|
|
||||||
use Meritoo\Common\Test\Utilities\Reflection\I;
|
|
||||||
use Meritoo\Common\Utilities\Reflection;
|
use Meritoo\Common\Utilities\Reflection;
|
||||||
use ReflectionProperty;
|
use ReflectionProperty;
|
||||||
|
|
||||||
@@ -381,99 +379,6 @@ class ReflectionTest extends BaseTestCase
|
|||||||
self::assertEquals($expected, Reflection::getPropertyValues($collection, 'gInstance.firstName', true));
|
self::assertEquals($expected, Reflection::getPropertyValues($collection, 'gInstance.firstName', true));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetMaxNumberConstantUsingClassWithoutConstants()
|
|
||||||
{
|
|
||||||
static::assertNull(Reflection::getMaxNumberConstant(A::class));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGetMaxNumberConstant()
|
|
||||||
{
|
|
||||||
static::assertEquals(5, Reflection::getMaxNumberConstant(H::class));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testHasMethodUsingClassWithoutMethod()
|
|
||||||
{
|
|
||||||
static::assertFalse(Reflection::hasMethod(A::class, 'getUser'));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testHasMethod()
|
|
||||||
{
|
|
||||||
static::assertTrue(Reflection::hasMethod(A::class, 'getCount'));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testHasPropertyUsingClassWithoutProperty()
|
|
||||||
{
|
|
||||||
static::assertFalse(Reflection::hasProperty(A::class, 'users'));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testHasProperty()
|
|
||||||
{
|
|
||||||
static::assertTrue(Reflection::hasProperty(A::class, 'count'));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testHasConstantUsingClassWithoutConstant()
|
|
||||||
{
|
|
||||||
static::assertFalse(Reflection::hasConstant(H::class, 'users'));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testHasConstant()
|
|
||||||
{
|
|
||||||
static::assertTrue(Reflection::hasConstant(H::class, 'LOREM'));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGetConstantValueUsingClassWithoutConstant()
|
|
||||||
{
|
|
||||||
static::assertNull(Reflection::getConstantValue(H::class, 'users'));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGetConstantValue()
|
|
||||||
{
|
|
||||||
static::assertEquals(H::LOREM, Reflection::getConstantValue(H::class, 'LOREM'));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testIsInterfaceImplementedUsingClassWithoutInterface()
|
|
||||||
{
|
|
||||||
static::assertFalse(Reflection::isInterfaceImplemented(A::class, I::class));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testIsInterfaceImplemented()
|
|
||||||
{
|
|
||||||
static::assertTrue(Reflection::isInterfaceImplemented(B::class, I::class));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testIsChildOfClassUsingClassWithoutChildClass()
|
|
||||||
{
|
|
||||||
static::assertFalse(Reflection::isChildOfClass(A::class, B::class));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testIsChildOfClass()
|
|
||||||
{
|
|
||||||
static::assertTrue(Reflection::isChildOfClass(B::class, A::class));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGetPropertyUsingClassWithoutProperty()
|
|
||||||
{
|
|
||||||
static::assertNull(Reflection::getProperty(A::class, 'lorem'));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGetPropertyUsingClassWithPrivateProperty()
|
|
||||||
{
|
|
||||||
$property = Reflection::getProperty(A::class, 'count', ReflectionProperty::IS_PRIVATE);
|
|
||||||
|
|
||||||
static::assertInstanceOf(ReflectionProperty::class, $property);
|
|
||||||
static::assertTrue($property->isPrivate());
|
|
||||||
static::assertEquals('count', $property->getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGetPropertyUsingClassWithProtectedProperty()
|
|
||||||
{
|
|
||||||
$property = Reflection::getProperty(B::class, 'name', ReflectionProperty::IS_PROTECTED);
|
|
||||||
|
|
||||||
static::assertInstanceOf(ReflectionProperty::class, $property);
|
|
||||||
static::assertTrue($property->isProtected());
|
|
||||||
static::assertEquals('name', $property->getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides invalid class and trait
|
* Provides invalid class and trait
|
||||||
*
|
*
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,66 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* (c) Meritoo.pl, http://www.meritoo.pl
|
|
||||||
* For the full copyright and license information, please view the LICENSE
|
|
||||||
* file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Meritoo\Common\Test\Utilities\Repository;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sortable object/entity.
|
|
||||||
* Used for testing the Repository class.
|
|
||||||
*
|
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
|
||||||
* @copyright Meritoo.pl
|
|
||||||
*/
|
|
||||||
class Sortable
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Position used while sorting
|
|
||||||
*
|
|
||||||
* @var int
|
|
||||||
*/
|
|
||||||
private $position;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class constructor
|
|
||||||
*
|
|
||||||
* @param int $position (optional) Position used while sorting
|
|
||||||
*/
|
|
||||||
public function __construct($position = null)
|
|
||||||
{
|
|
||||||
$this->position = $position;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns position used while sorting
|
|
||||||
*
|
|
||||||
* @return int
|
|
||||||
*/
|
|
||||||
public function getPosition()
|
|
||||||
{
|
|
||||||
return $this->position;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets position used while sorting
|
|
||||||
*
|
|
||||||
* @param int $position Position used while sorting
|
|
||||||
*/
|
|
||||||
public function setPosition($position)
|
|
||||||
{
|
|
||||||
$this->position = $position;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns representation of object as string
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function __toString()
|
|
||||||
{
|
|
||||||
return sprintf('%s (position: %d)', self::class, $this->getPosition());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,602 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* (c) Meritoo.pl, http://www.meritoo.pl
|
|
||||||
* For the full copyright and license information, please view the LICENSE
|
|
||||||
* file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Meritoo\Common\Test\Utilities;
|
|
||||||
|
|
||||||
use Generator;
|
|
||||||
use Meritoo\Common\Test\Base\BaseTestCase;
|
|
||||||
use Meritoo\Common\Test\Utilities\Repository\Sortable;
|
|
||||||
use Meritoo\Common\Utilities\Repository;
|
|
||||||
use stdClass;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Test case of the useful methods for repository
|
|
||||||
*
|
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
|
||||||
* @copyright Meritoo.pl
|
|
||||||
*/
|
|
||||||
class RepositoryTest extends BaseTestCase
|
|
||||||
{
|
|
||||||
public function testConstructor()
|
|
||||||
{
|
|
||||||
static::assertHasNoConstructor(Repository::class);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testReplenishPositionsWithoutItems()
|
|
||||||
{
|
|
||||||
$items = [];
|
|
||||||
Repository::replenishPositions($items);
|
|
||||||
|
|
||||||
static::assertEquals([], $items);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testReplenishPositionsUsingNotSortableObjects()
|
|
||||||
{
|
|
||||||
$before = [
|
|
||||||
new stdClass(),
|
|
||||||
new stdClass(),
|
|
||||||
new stdClass(),
|
|
||||||
];
|
|
||||||
|
|
||||||
$after = [
|
|
||||||
new stdClass(),
|
|
||||||
new stdClass(),
|
|
||||||
new stdClass(),
|
|
||||||
];
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Using defaults
|
|
||||||
*/
|
|
||||||
Repository::replenishPositions($before);
|
|
||||||
static::assertEquals($before, $after);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Place items at the top
|
|
||||||
*/
|
|
||||||
Repository::replenishPositions($before, false);
|
|
||||||
static::assertEquals($before, $after);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Set positions even there is no extreme position (at the end)
|
|
||||||
*/
|
|
||||||
Repository::replenishPositions($before, true, true);
|
|
||||||
static::assertEquals($before, $after);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Set positions even there is no extreme position (at the top)
|
|
||||||
*/
|
|
||||||
Repository::replenishPositions($before, false, true);
|
|
||||||
static::assertEquals($before, $after);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param array $items Objects who have "getPosition()" and "setPosition()" methods or arrays
|
|
||||||
* @dataProvider provideArraysWithoutExtremePosition
|
|
||||||
*/
|
|
||||||
public function testReplenishPositionsUsingArraysWithoutExtremePosition(array $items)
|
|
||||||
{
|
|
||||||
Repository::replenishPositions($items);
|
|
||||||
static::assertEquals($items, $items);
|
|
||||||
|
|
||||||
Repository::replenishPositions($items, false);
|
|
||||||
static::assertEquals($items, $items);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param array $items Objects who have "getPosition()" and "setPosition()" methods or arrays
|
|
||||||
* @param bool $asLast If is set to true, items are placed at the end (default behaviour). Otherwise - at top.
|
|
||||||
* @param array $expected Items with replenished positions
|
|
||||||
*
|
|
||||||
* @dataProvider provideArraysWithoutExtremePosition
|
|
||||||
*/
|
|
||||||
public function testReplenishPositionsUsingArraysWithoutExtremePositionForce(array $items, $asLast, array $expected)
|
|
||||||
{
|
|
||||||
Repository::replenishPositions($items, $asLast, true);
|
|
||||||
static::assertEquals($expected, $items);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param array $items Objects who have "getPosition()" and "setPosition()" methods or arrays
|
|
||||||
* @param bool $asLast If is set to true, items are placed at the end (default behaviour). Otherwise - at top.
|
|
||||||
* @param array $expected Items with replenished positions
|
|
||||||
*
|
|
||||||
* @dataProvider provideArraysWithExtremePosition
|
|
||||||
*/
|
|
||||||
public function testReplenishPositionsUsingArraysWithExtremePositionForce(array $items, $asLast, array $expected)
|
|
||||||
{
|
|
||||||
Repository::replenishPositions($items, $asLast, true);
|
|
||||||
static::assertEquals($expected, $items);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param array $items Objects who have "getPosition()" and "setPosition()" methods or arrays
|
|
||||||
* @dataProvider provideObjectsWithoutExtremePosition
|
|
||||||
*/
|
|
||||||
public function testReplenishPositionsUsingObjectsWithoutExtremePosition(array $items)
|
|
||||||
{
|
|
||||||
Repository::replenishPositions($items);
|
|
||||||
static::assertEquals($items, $items);
|
|
||||||
|
|
||||||
Repository::replenishPositions($items, false);
|
|
||||||
static::assertEquals($items, $items);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param array $items Objects who have "getPosition()" and "setPosition()" methods or arrays
|
|
||||||
* @param bool $asLast If is set to true, items are placed at the end (default behaviour). Otherwise - at top.
|
|
||||||
* @param array $expected Items with replenished positions
|
|
||||||
*
|
|
||||||
* @dataProvider provideObjectsWithoutExtremePosition
|
|
||||||
*/
|
|
||||||
public function testReplenishPositionsUsingObjectsWithoutExtremePositionForce(array $items, $asLast, array $expected)
|
|
||||||
{
|
|
||||||
Repository::replenishPositions($items, $asLast, true);
|
|
||||||
static::assertEquals($expected, $items);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param array $items Objects who have "getPosition()" and "setPosition()" methods or arrays
|
|
||||||
* @param bool $asLast If is set to true, items are placed at the end (default behaviour). Otherwise - at top.
|
|
||||||
* @param array $expected Items with replenished positions
|
|
||||||
*
|
|
||||||
* @dataProvider provideObjectsWithExtremePosition
|
|
||||||
*/
|
|
||||||
public function testReplenishPositionsUsingObjectsWithExtremePositionForce(array $items, $asLast, array $expected)
|
|
||||||
{
|
|
||||||
Repository::replenishPositions($items, $asLast, true);
|
|
||||||
static::assertEquals($expected, $items);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGetExtremePositionWithoutItems()
|
|
||||||
{
|
|
||||||
static::assertNull(Repository::getExtremePosition([]));
|
|
||||||
static::assertNull(Repository::getExtremePosition([], false));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param array $items Objects who have "getPosition()" and "setPosition()" methods or arrays
|
|
||||||
* @param bool $max (optional) If is set to true, maximum value is returned. Otherwise - minimum.
|
|
||||||
* @param int $expected Extreme position (max or min) of given items
|
|
||||||
*
|
|
||||||
* @dataProvider provideArraysWithoutExtremePositionToGetExtremePosition
|
|
||||||
*/
|
|
||||||
public function testGetExtremePositionUsingArraysWithoutExtremePosition(array $items, $max, $expected)
|
|
||||||
{
|
|
||||||
static::assertEquals($expected, Repository::getExtremePosition($items, $max));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGetExtremePositionUsingObjects()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGetEntityOrderedQueryBuilder()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Provides arrays without extreme position used to replenish positions of them
|
|
||||||
*
|
|
||||||
* @return Generator
|
|
||||||
*/
|
|
||||||
public function provideArraysWithoutExtremePosition()
|
|
||||||
{
|
|
||||||
yield[
|
|
||||||
[
|
|
||||||
[],
|
|
||||||
[],
|
|
||||||
],
|
|
||||||
true,
|
|
||||||
[
|
|
||||||
[
|
|
||||||
Repository::POSITION_KEY => 1,
|
|
||||||
],
|
|
||||||
[
|
|
||||||
Repository::POSITION_KEY => 2,
|
|
||||||
],
|
|
||||||
],
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
[
|
|
||||||
[],
|
|
||||||
[],
|
|
||||||
],
|
|
||||||
false,
|
|
||||||
[
|
|
||||||
[
|
|
||||||
Repository::POSITION_KEY => -1,
|
|
||||||
],
|
|
||||||
[
|
|
||||||
Repository::POSITION_KEY => -2,
|
|
||||||
],
|
|
||||||
],
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
[
|
|
||||||
[
|
|
||||||
'lorem' => 'ipsum',
|
|
||||||
'dolor',
|
|
||||||
'sit' => 1,
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'abc' => 'def',
|
|
||||||
'ghi' => null,
|
|
||||||
'jkl' => 10,
|
|
||||||
],
|
|
||||||
],
|
|
||||||
true,
|
|
||||||
[
|
|
||||||
[
|
|
||||||
'lorem' => 'ipsum',
|
|
||||||
'dolor',
|
|
||||||
'sit' => 1,
|
|
||||||
Repository::POSITION_KEY => 1,
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'abc' => 'def',
|
|
||||||
'ghi' => null,
|
|
||||||
'jkl' => 10,
|
|
||||||
Repository::POSITION_KEY => 2,
|
|
||||||
],
|
|
||||||
],
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
[
|
|
||||||
[
|
|
||||||
'lorem' => 'ipsum',
|
|
||||||
'dolor',
|
|
||||||
'sit' => 1,
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'abc' => 'def',
|
|
||||||
'ghi' => null,
|
|
||||||
'jkl' => 10,
|
|
||||||
],
|
|
||||||
],
|
|
||||||
false,
|
|
||||||
[
|
|
||||||
[
|
|
||||||
'lorem' => 'ipsum',
|
|
||||||
'dolor',
|
|
||||||
'sit' => 1,
|
|
||||||
Repository::POSITION_KEY => -1,
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'abc' => 'def',
|
|
||||||
'ghi' => null,
|
|
||||||
'jkl' => 10,
|
|
||||||
Repository::POSITION_KEY => -2,
|
|
||||||
],
|
|
||||||
],
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Provides arrays with extreme position used to replenish positions of them
|
|
||||||
*
|
|
||||||
* @return Generator
|
|
||||||
*/
|
|
||||||
public function provideArraysWithExtremePosition()
|
|
||||||
{
|
|
||||||
yield[
|
|
||||||
[
|
|
||||||
[
|
|
||||||
Repository::POSITION_KEY => 1,
|
|
||||||
],
|
|
||||||
[],
|
|
||||||
[],
|
|
||||||
],
|
|
||||||
true,
|
|
||||||
[
|
|
||||||
[
|
|
||||||
Repository::POSITION_KEY => 1,
|
|
||||||
],
|
|
||||||
[
|
|
||||||
Repository::POSITION_KEY => 2,
|
|
||||||
],
|
|
||||||
[
|
|
||||||
Repository::POSITION_KEY => 3,
|
|
||||||
],
|
|
||||||
],
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
[
|
|
||||||
[],
|
|
||||||
[],
|
|
||||||
[
|
|
||||||
Repository::POSITION_KEY => 1,
|
|
||||||
],
|
|
||||||
],
|
|
||||||
true,
|
|
||||||
[
|
|
||||||
[
|
|
||||||
Repository::POSITION_KEY => 2,
|
|
||||||
],
|
|
||||||
[
|
|
||||||
Repository::POSITION_KEY => 3,
|
|
||||||
],
|
|
||||||
[
|
|
||||||
Repository::POSITION_KEY => 1,
|
|
||||||
],
|
|
||||||
],
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
[
|
|
||||||
[
|
|
||||||
Repository::POSITION_KEY => 1,
|
|
||||||
],
|
|
||||||
[],
|
|
||||||
[],
|
|
||||||
],
|
|
||||||
false,
|
|
||||||
[
|
|
||||||
[
|
|
||||||
Repository::POSITION_KEY => 1,
|
|
||||||
],
|
|
||||||
[
|
|
||||||
Repository::POSITION_KEY => 0,
|
|
||||||
],
|
|
||||||
[
|
|
||||||
Repository::POSITION_KEY => -1,
|
|
||||||
],
|
|
||||||
],
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
[
|
|
||||||
[],
|
|
||||||
[],
|
|
||||||
[
|
|
||||||
Repository::POSITION_KEY => 1,
|
|
||||||
],
|
|
||||||
],
|
|
||||||
false,
|
|
||||||
[
|
|
||||||
[
|
|
||||||
Repository::POSITION_KEY => 0,
|
|
||||||
],
|
|
||||||
[
|
|
||||||
Repository::POSITION_KEY => -1,
|
|
||||||
],
|
|
||||||
[
|
|
||||||
Repository::POSITION_KEY => 1,
|
|
||||||
],
|
|
||||||
],
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Provides objects without extreme position used to replenish positions of them
|
|
||||||
*
|
|
||||||
* @return Generator
|
|
||||||
*/
|
|
||||||
public function provideObjectsWithoutExtremePosition()
|
|
||||||
{
|
|
||||||
yield[
|
|
||||||
[
|
|
||||||
new Sortable(),
|
|
||||||
new Sortable(),
|
|
||||||
new Sortable(),
|
|
||||||
],
|
|
||||||
true,
|
|
||||||
[
|
|
||||||
new Sortable(1),
|
|
||||||
new Sortable(2),
|
|
||||||
new Sortable(3),
|
|
||||||
],
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
[
|
|
||||||
new Sortable(),
|
|
||||||
new Sortable(),
|
|
||||||
new Sortable(),
|
|
||||||
],
|
|
||||||
false,
|
|
||||||
[
|
|
||||||
new Sortable(-1),
|
|
||||||
new Sortable(-2),
|
|
||||||
new Sortable(-3),
|
|
||||||
],
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Provides objects with extreme position used to replenish positions of them
|
|
||||||
*
|
|
||||||
* @return Generator
|
|
||||||
*/
|
|
||||||
public function provideObjectsWithExtremePosition()
|
|
||||||
{
|
|
||||||
yield[
|
|
||||||
[
|
|
||||||
new Sortable(1),
|
|
||||||
new Sortable(),
|
|
||||||
new Sortable(),
|
|
||||||
],
|
|
||||||
true,
|
|
||||||
[
|
|
||||||
new Sortable(1),
|
|
||||||
new Sortable(2),
|
|
||||||
new Sortable(3),
|
|
||||||
],
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
[
|
|
||||||
new Sortable(),
|
|
||||||
new Sortable(1),
|
|
||||||
new Sortable(),
|
|
||||||
],
|
|
||||||
true,
|
|
||||||
[
|
|
||||||
new Sortable(2),
|
|
||||||
new Sortable(1),
|
|
||||||
new Sortable(3),
|
|
||||||
],
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
[
|
|
||||||
new Sortable(1),
|
|
||||||
new Sortable(),
|
|
||||||
new Sortable(),
|
|
||||||
],
|
|
||||||
false,
|
|
||||||
[
|
|
||||||
new Sortable(1),
|
|
||||||
new Sortable(0),
|
|
||||||
new Sortable(-1),
|
|
||||||
],
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Provides arrays without extreme position used to get extreme position
|
|
||||||
*
|
|
||||||
* @return Generator
|
|
||||||
*/
|
|
||||||
public function provideArraysWithoutExtremePositionToGetExtremePosition()
|
|
||||||
{
|
|
||||||
yield[
|
|
||||||
[],
|
|
||||||
false,
|
|
||||||
null,
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
[],
|
|
||||||
true,
|
|
||||||
null,
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
[
|
|
||||||
[
|
|
||||||
'lorem' => 'ipsum',
|
|
||||||
'dolor',
|
|
||||||
'sit' => 1,
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'abc' => 'def',
|
|
||||||
'ghi' => null,
|
|
||||||
'jkl' => 10,
|
|
||||||
],
|
|
||||||
],
|
|
||||||
true,
|
|
||||||
null,
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
[
|
|
||||||
[
|
|
||||||
'lorem' => 'ipsum',
|
|
||||||
'dolor',
|
|
||||||
'sit' => 1,
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'abc' => 'def',
|
|
||||||
'ghi' => null,
|
|
||||||
'jkl' => 10,
|
|
||||||
],
|
|
||||||
],
|
|
||||||
false,
|
|
||||||
null,
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Provides arrays with extreme position used to get extreme position
|
|
||||||
*
|
|
||||||
* @return Generator
|
|
||||||
*/
|
|
||||||
public function provideArraysWithExtremePositionToGetExtremePosition()
|
|
||||||
{
|
|
||||||
yield[
|
|
||||||
[
|
|
||||||
[
|
|
||||||
Repository::POSITION_KEY => 1,
|
|
||||||
],
|
|
||||||
[],
|
|
||||||
[],
|
|
||||||
],
|
|
||||||
true,
|
|
||||||
1,
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
[
|
|
||||||
[
|
|
||||||
Repository::POSITION_KEY => 1,
|
|
||||||
],
|
|
||||||
[],
|
|
||||||
[],
|
|
||||||
],
|
|
||||||
false,
|
|
||||||
1,
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
[
|
|
||||||
[],
|
|
||||||
[],
|
|
||||||
[
|
|
||||||
Repository::POSITION_KEY => 1,
|
|
||||||
],
|
|
||||||
],
|
|
||||||
true,
|
|
||||||
1,
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
[
|
|
||||||
[],
|
|
||||||
[],
|
|
||||||
[
|
|
||||||
Repository::POSITION_KEY => 1,
|
|
||||||
],
|
|
||||||
],
|
|
||||||
false,
|
|
||||||
1,
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
[
|
|
||||||
[
|
|
||||||
Repository::POSITION_KEY => 1,
|
|
||||||
],
|
|
||||||
[],
|
|
||||||
[
|
|
||||||
Repository::POSITION_KEY => 2,
|
|
||||||
],
|
|
||||||
[],
|
|
||||||
],
|
|
||||||
true,
|
|
||||||
1,
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
[
|
|
||||||
[
|
|
||||||
Repository::POSITION_KEY => 1,
|
|
||||||
],
|
|
||||||
[],
|
|
||||||
[
|
|
||||||
Repository::POSITION_KEY => 2,
|
|
||||||
],
|
|
||||||
[],
|
|
||||||
],
|
|
||||||
false,
|
|
||||||
2,
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -8,7 +8,6 @@
|
|||||||
|
|
||||||
namespace Meritoo\Common\Test\Utilities;
|
namespace Meritoo\Common\Test\Utilities;
|
||||||
|
|
||||||
use Generator;
|
|
||||||
use Meritoo\Common\Test\Base\BaseTestCase;
|
use Meritoo\Common\Test\Base\BaseTestCase;
|
||||||
use Meritoo\Common\Utilities\Uri;
|
use Meritoo\Common\Utilities\Uri;
|
||||||
|
|
||||||
@@ -56,199 +55,19 @@ class UriTest extends BaseTestCase
|
|||||||
* @param string $protocol (optional) The protocol which is replenished. If is empty, protocol of current request
|
* @param string $protocol (optional) The protocol which is replenished. If is empty, protocol of current request
|
||||||
* is used.
|
* is used.
|
||||||
*
|
*
|
||||||
* @dataProvider provideUrlToReplenishProtocol
|
* @dataProvider provideUrlsToReplenishProtocol
|
||||||
*/
|
*/
|
||||||
public function testReplenishProtocol($expected, $url, $protocol = '')
|
public function testReplenishProtocol($expected, $url, $protocol = '')
|
||||||
{
|
{
|
||||||
self::assertSame($expected, Uri::replenishProtocol($url, $protocol));
|
self::assertSame($expected, Uri::replenishProtocol($url, $protocol));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetServerNameOrIpWithoutProtocol()
|
|
||||||
{
|
|
||||||
$_SERVER['HTTP_HOST'] = '';
|
|
||||||
self::assertEquals('', Uri::getServerNameOrIp());
|
|
||||||
|
|
||||||
$host = 'lorem.com';
|
|
||||||
$_SERVER['HTTP_HOST'] = $host;
|
|
||||||
|
|
||||||
self::assertEquals($host, Uri::getServerNameOrIp());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGetServerNameOrIpWithProtocol()
|
|
||||||
{
|
|
||||||
$_SERVER['HTTP_HOST'] = '';
|
|
||||||
$_SERVER['SERVER_PROTOCOL'] = '';
|
|
||||||
|
|
||||||
self::assertEquals('', Uri::getServerNameOrIp(true));
|
|
||||||
|
|
||||||
$host = 'lorem.com';
|
|
||||||
$protocol = 'HTTP/1.1';
|
|
||||||
|
|
||||||
$_SERVER['HTTP_HOST'] = $host;
|
|
||||||
$_SERVER['SERVER_PROTOCOL'] = $protocol;
|
|
||||||
|
|
||||||
self::assertEquals(sprintf('http://%s', $host), Uri::getServerNameOrIp(true));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGetFullUriWithHost()
|
|
||||||
{
|
|
||||||
$_SERVER['HTTP_HOST'] = '';
|
|
||||||
$_SERVER['SERVER_PROTOCOL'] = '';
|
|
||||||
$_SERVER['REQUEST_URI'] = '';
|
|
||||||
|
|
||||||
self::assertEquals('', Uri::getFullUri());
|
|
||||||
|
|
||||||
$host = 'lorem.com';
|
|
||||||
$protocol = 'HTTP/1.1';
|
|
||||||
$requestedUrl = '/test/123';
|
|
||||||
|
|
||||||
$_SERVER['HTTP_HOST'] = $host;
|
|
||||||
$_SERVER['SERVER_PROTOCOL'] = $protocol;
|
|
||||||
$_SERVER['REQUEST_URI'] = $requestedUrl;
|
|
||||||
|
|
||||||
self::assertEquals(sprintf('http://%s%s', $host, $requestedUrl), Uri::getFullUri());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGetFullUriWithoutHost()
|
|
||||||
{
|
|
||||||
$_SERVER['HTTP_HOST'] = '';
|
|
||||||
$_SERVER['SERVER_PROTOCOL'] = '';
|
|
||||||
$_SERVER['REQUEST_URI'] = '';
|
|
||||||
|
|
||||||
self::assertEquals('', Uri::getFullUri(true));
|
|
||||||
|
|
||||||
$requestedUrl = '/test/123';
|
|
||||||
$_SERVER['REQUEST_URI'] = $requestedUrl;
|
|
||||||
|
|
||||||
self::assertEquals($requestedUrl, Uri::getFullUri(true));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGetProtocolName()
|
|
||||||
{
|
|
||||||
$_SERVER['SERVER_PROTOCOL'] = '';
|
|
||||||
self::assertEquals('', Uri::getProtocolName());
|
|
||||||
|
|
||||||
$protocol = 'HTTP/1.1';
|
|
||||||
$_SERVER['SERVER_PROTOCOL'] = $protocol;
|
|
||||||
|
|
||||||
self::assertEquals('http', Uri::getProtocolName());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGetRefererUri()
|
|
||||||
{
|
|
||||||
$_SERVER['HTTP_REFERER'] = '';
|
|
||||||
self::assertEquals('', Uri::getRefererUri());
|
|
||||||
|
|
||||||
$refererUrl = 'http://lorem.com/test/123';
|
|
||||||
$_SERVER['HTTP_REFERER'] = $refererUrl;
|
|
||||||
|
|
||||||
self::assertEquals($refererUrl, Uri::getRefererUri());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGetUserAddressIp()
|
|
||||||
{
|
|
||||||
$_SERVER['REMOTE_ADDR'] = '';
|
|
||||||
self::assertEquals('', Uri::getUserAddressIp());
|
|
||||||
|
|
||||||
$userAddressIp = '1.2.3.4';
|
|
||||||
$_SERVER['REMOTE_ADDR'] = $userAddressIp;
|
|
||||||
|
|
||||||
self::assertEquals($userAddressIp, Uri::getUserAddressIp());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGetUserWebBrowserInfo()
|
|
||||||
{
|
|
||||||
$_SERVER['HTTP_USER_AGENT'] = '';
|
|
||||||
self::assertEquals('', Uri::getUserWebBrowserInfo());
|
|
||||||
|
|
||||||
$browserInfo = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.2.5 (KHTML, like Gecko)'
|
|
||||||
. ' Version/8.0.2 Safari/600.2.5';
|
|
||||||
|
|
||||||
$_SERVER['HTTP_USER_AGENT'] = $browserInfo;
|
|
||||||
self::assertEquals($browserInfo, Uri::getUserWebBrowserInfo());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGetUserWebBrowserNameWithoutVersion()
|
|
||||||
{
|
|
||||||
$_SERVER['HTTP_USER_AGENT'] = '';
|
|
||||||
self::assertEquals('', Uri::getUserWebBrowserName());
|
|
||||||
|
|
||||||
$_SERVER['HTTP_USER_AGENT'] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.2.5 (KHTML, like'
|
|
||||||
. ' Gecko) Version/8.0.2 Safari/600.2.5';
|
|
||||||
|
|
||||||
self::assertEquals('Apple Safari', Uri::getUserWebBrowserName());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGetUserWebBrowserNameWithVersion()
|
|
||||||
{
|
|
||||||
$_SERVER['HTTP_USER_AGENT'] = '';
|
|
||||||
self::assertEquals('', Uri::getUserWebBrowserName(true));
|
|
||||||
|
|
||||||
$_SERVER['HTTP_USER_AGENT'] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.2.5 (KHTML, like'
|
|
||||||
. ' Gecko) Version/8.0.2 Safari/600.2.5';
|
|
||||||
|
|
||||||
self::assertEquals('Apple Safari 600.2.5', Uri::getUserWebBrowserName(true));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGetUserOperatingSystemName()
|
|
||||||
{
|
|
||||||
$_SERVER['HTTP_USER_AGENT'] = '';
|
|
||||||
self::assertEquals('', Uri::getUserOperatingSystemName());
|
|
||||||
|
|
||||||
$_SERVER['HTTP_USER_AGENT'] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.2.5 (KHTML, like'
|
|
||||||
. ' Gecko) Version/8.0.2 Safari/600.2.5';
|
|
||||||
|
|
||||||
self::assertEquals('Mac OS', Uri::getUserOperatingSystemName());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testIsServerLocalhost()
|
|
||||||
{
|
|
||||||
$_SERVER['HTTP_HOST'] = '';
|
|
||||||
self::assertFalse(Uri::isServerLocalhost());
|
|
||||||
|
|
||||||
$_SERVER['HTTP_HOST'] = '127.0.0.1';
|
|
||||||
self::assertTrue(Uri::isServerLocalhost());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $url The url to check
|
* Provides urls to replenish protocol
|
||||||
* @param bool $expected Information if verified url is external
|
|
||||||
*
|
*
|
||||||
* @dataProvider provideUrlToVerifyIfIsExternal
|
* @return \Generator
|
||||||
*/
|
*/
|
||||||
public function testIsExternalUrl($url, $expected)
|
public function provideUrlsToReplenishProtocol()
|
||||||
{
|
|
||||||
$host = 'lorem.com';
|
|
||||||
$protocol = 'HTTP/1.1';
|
|
||||||
|
|
||||||
$_SERVER['HTTP_HOST'] = $host;
|
|
||||||
$_SERVER['SERVER_PROTOCOL'] = $protocol;
|
|
||||||
|
|
||||||
self::assertEquals($expected, Uri::isExternalUrl($url));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $url A path / url to some resource, e.g. page, image, css file
|
|
||||||
* @param string $user User name used to log in
|
|
||||||
* @param string $password User password used to log in
|
|
||||||
* @param string $expectedUrl Expected, secured url
|
|
||||||
*
|
|
||||||
* @dataProvider provideDataForSecuredUrl
|
|
||||||
*/
|
|
||||||
public function testGetSecuredUrl($url, $user, $password, $expectedUrl)
|
|
||||||
{
|
|
||||||
$_SERVER['SERVER_PROTOCOL'] = 'HTTP/1.1';
|
|
||||||
$_SERVER['HTTP_HOST'] = 'lorem.com';
|
|
||||||
|
|
||||||
self::assertEquals($expectedUrl, Uri::getSecuredUrl($url, $user, $password));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Provides url to replenish protocol
|
|
||||||
*
|
|
||||||
* @return Generator
|
|
||||||
*/
|
|
||||||
public function provideUrlToReplenishProtocol()
|
|
||||||
{
|
{
|
||||||
yield[
|
yield[
|
||||||
'://test',
|
'://test',
|
||||||
@@ -262,102 +81,4 @@ class UriTest extends BaseTestCase
|
|||||||
'ftp',
|
'ftp',
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Provides url used to verify if it's external, from another server / domain
|
|
||||||
*
|
|
||||||
* @return Generator
|
|
||||||
*/
|
|
||||||
public function provideUrlToVerifyIfIsExternal()
|
|
||||||
{
|
|
||||||
yield[
|
|
||||||
'',
|
|
||||||
false,
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
'/',
|
|
||||||
false,
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
'http://something.different/first-page',
|
|
||||||
true,
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
'something.different/first-page',
|
|
||||||
true,
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
'http://lorem.com',
|
|
||||||
false,
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
'http://lorem.com/contact',
|
|
||||||
false,
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
'lorem.com',
|
|
||||||
false,
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
'lorem.com/contact',
|
|
||||||
false,
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Provides data used to build secured url
|
|
||||||
*
|
|
||||||
* @return Generator
|
|
||||||
*/
|
|
||||||
public function provideDataForSecuredUrl()
|
|
||||||
{
|
|
||||||
yield[
|
|
||||||
'',
|
|
||||||
'',
|
|
||||||
'',
|
|
||||||
'',
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
'/',
|
|
||||||
'',
|
|
||||||
'',
|
|
||||||
'http://lorem.com/',
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
'contact',
|
|
||||||
'',
|
|
||||||
'',
|
|
||||||
'http://lorem.com/contact',
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
'contact',
|
|
||||||
'john',
|
|
||||||
'',
|
|
||||||
'http://lorem.com/contact',
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
'contact',
|
|
||||||
'',
|
|
||||||
'pass123',
|
|
||||||
'http://lorem.com/contact',
|
|
||||||
];
|
|
||||||
|
|
||||||
yield[
|
|
||||||
'contact',
|
|
||||||
'john',
|
|
||||||
'pass123',
|
|
||||||
'http://john:pass123@lorem.com/contact',
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user