Compare commits
139 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
aecdda3557 | ||
|
|
2119b757b1 | ||
|
|
27087a0e0e | ||
|
|
2b689b666a | ||
|
|
63aeebdee0 | ||
|
|
51e700cd10 | ||
|
|
71a431d5aa | ||
|
|
6970e6221b | ||
|
|
831f3be1a8 | ||
|
|
f2aba8c466 | ||
|
|
f085ccaa38 | ||
|
|
6c3c1a908d | ||
|
|
388b90913a | ||
|
|
07aea9d7b2 | ||
|
|
edcdbee523 | ||
|
|
43b51895f0 | ||
|
|
d0e294ecf5 | ||
|
|
3c35341e8b | ||
|
|
daf1f9263c | ||
|
|
805c695d68 | ||
|
|
ffdd45e32a | ||
|
|
316ca106fd | ||
|
|
fd9b201346 | ||
|
|
667dc4de8e | ||
|
|
fed67e990d | ||
|
|
c181a83b48 | ||
|
|
c830a32962 | ||
|
|
82bc99b181 | ||
|
|
556cabca38 | ||
|
|
6f4c5e36e6 | ||
|
|
a3c49e408a | ||
|
|
cc77d7e031 | ||
|
|
d553c1364f | ||
|
|
3f374a2cd7 | ||
|
|
9e99275db5 | ||
|
|
330e2baf39 | ||
|
|
5a81626e8c | ||
|
|
41cff5e3c6 | ||
|
|
e463f48ad4 | ||
|
|
f8ee6044f9 | ||
|
|
4b0e9b44c3 | ||
|
|
e5309b5dbc | ||
|
|
aad2e9b11b | ||
|
|
d6baf58231 | ||
|
|
c464a7d884 | ||
|
|
60613bf311 | ||
|
|
2a583e525c | ||
|
|
04b0476b4d | ||
|
|
13fb22385b | ||
|
|
b7f594e683 | ||
|
|
023ab6811d | ||
|
|
35a7229158 | ||
|
|
b075ee3dc5 | ||
|
|
dfbc2fee29 | ||
|
|
b13f84b7ed | ||
|
|
7d1d795b29 | ||
|
|
105e0d69a1 | ||
|
|
38903020fb | ||
|
|
40edbe271d | ||
|
|
a833b26322 | ||
|
|
3881a2a83d | ||
|
|
cf49bf72fa | ||
|
|
e3cf55efe5 | ||
|
|
a0a7389d3b | ||
|
|
42b961f35e | ||
|
|
fe13c24a13 | ||
|
|
714311cf85 | ||
|
|
9d79dd4af4 | ||
|
|
cae6d4c372 | ||
|
|
aafca0153f | ||
|
|
7a902b5681 | ||
|
|
780fdedcfd | ||
|
|
51a0276268 | ||
|
|
0dc57564c5 | ||
|
|
c8d7b308b3 | ||
|
|
f2c0ba737a | ||
|
|
de1cdfdd40 | ||
|
|
8267bcd8b8 | ||
|
|
0109a67b20 | ||
|
|
c584af8393 | ||
|
|
03f0de5026 | ||
|
|
6a139d3b7c | ||
|
|
2a697817fd | ||
|
|
f4e72dd7b1 | ||
|
|
974c0fb92f | ||
|
|
9a5f1d43cf | ||
|
|
33766e1e2d | ||
|
|
4a51f841c5 | ||
|
|
ad39a5b21f | ||
|
|
1bd45d8a8a | ||
|
|
13c0fcd869 | ||
|
|
cb63a3eaa9 | ||
|
|
4363f289fc | ||
|
|
7fd5062064 | ||
|
|
5452bffdb4 | ||
|
|
4bac10bb42 | ||
|
|
6001934d9c | ||
|
|
f622d59ed9 | ||
|
|
6147d28b37 | ||
|
|
f9072f64f1 | ||
|
|
0f38cb4f89 | ||
|
|
08bbc913a9 | ||
|
|
4c859ada01 | ||
|
|
58e61b8902 | ||
|
|
edfbe476c4 | ||
|
|
0907325a38 | ||
|
|
60b6fae33a | ||
|
|
0b7dba5e2f | ||
|
|
c1212d8116 | ||
|
|
5230cbf5d3 | ||
|
|
a6b42f243f | ||
|
|
736f822363 | ||
|
|
ffd1a86dcc | ||
|
|
b3d783bf63 | ||
|
|
e0cc766cc7 | ||
|
|
f151509bfe | ||
|
|
e252a76c4c | ||
|
|
7005e07f4c | ||
|
|
a86ae3efc3 | ||
|
|
8577345799 | ||
|
|
4779e4ccbe | ||
|
|
c1240c0614 | ||
|
|
6722468bdb | ||
|
|
11daac6d23 | ||
|
|
678aa7460e | ||
|
|
76e0c0ac06 | ||
|
|
3512fa73ee | ||
|
|
0a80b28553 | ||
|
|
2c5fcd973f | ||
|
|
4515a5fdd1 | ||
|
|
f04487d553 | ||
|
|
d068aaeed7 | ||
|
|
b628331a9b | ||
|
|
3035287b5c | ||
|
|
cb17b553b0 | ||
|
|
448b54f5c1 | ||
|
|
e80915cd5c | ||
|
|
4ae1c2bde0 | ||
|
|
ee6e0581da |
@@ -1,7 +1,5 @@
|
||||
<?php
|
||||
|
||||
use Phan\Config;
|
||||
|
||||
/**
|
||||
* This configuration will be read and overlaid on top of the
|
||||
* default configuration. Command line arguments will be applied
|
||||
@@ -24,7 +22,12 @@ use Phan\Config;
|
||||
* of the phan executable or a path passed in via the CLI
|
||||
* '-d' flag.
|
||||
*/
|
||||
|
||||
use Phan\Config;
|
||||
|
||||
return [
|
||||
// turn color on (-C)
|
||||
"color_issue_messages_if_supported" => true,
|
||||
// If true, missing properties will be created when
|
||||
// they are first seen. If false, we'll report an
|
||||
// error message.
|
||||
@@ -35,7 +38,7 @@ return [
|
||||
"null_casts_as_any_type" => false,
|
||||
|
||||
// Backwards Compatibility Checking
|
||||
'backward_compatibility_checks' => true,
|
||||
'backward_compatibility_checks' => false,
|
||||
|
||||
// Run a quick version of checks that takes less
|
||||
// time
|
||||
@@ -45,6 +48,12 @@ return [
|
||||
// (0 is low severity, 5 is normal severity, 10 is critical)
|
||||
"minimum_severity" => 0,
|
||||
|
||||
// enable for dead code check
|
||||
// this will spill out errors for all methods never called
|
||||
// use after all is OK to try to find unused code blocks
|
||||
// ignore recommended: PhanUnreferencedPublicMethod
|
||||
// "dead_code_detection" => true,
|
||||
|
||||
// default false for include path check
|
||||
"enable_include_path_checks" => true,
|
||||
"include_paths" => [
|
||||
@@ -69,14 +78,14 @@ return [
|
||||
// Thus, both first-party and third-party code being used by
|
||||
// your application should be included in this list.
|
||||
'directory_list' => [
|
||||
// Change this to include the folders you wish to analyze
|
||||
// (and the folders of their dependencies)
|
||||
'www',
|
||||
// To speed up analysis, we recommend going back later and
|
||||
// limiting this to only the vendor/ subdirectories your
|
||||
// project depends on.
|
||||
// `phan --init` will generate a list of folders for you
|
||||
//'www/vendor',
|
||||
// Change this to include the folders you wish to analyze
|
||||
// (and the folders of their dependencies)
|
||||
'www',
|
||||
// To speed up analysis, we recommend going back later and
|
||||
// limiting this to only the vendor/ subdirectories your
|
||||
// project depends on.
|
||||
// `phan --init` will generate a list of folders for you
|
||||
//'www/vendor',
|
||||
],
|
||||
|
||||
|
||||
@@ -84,11 +93,9 @@ return [
|
||||
// to parse, but not analyze
|
||||
"exclude_analysis_directory_list" => [
|
||||
'www/vendor',
|
||||
// 'www/lib/FileUpload',
|
||||
'www/lib/pChart',
|
||||
'www/lib/pChart2.1.4',
|
||||
'www/tests',
|
||||
'www/lib/Smarty',
|
||||
'www/lib/smarty-3.1.30',
|
||||
'www/lib/smarty-4.1.0',
|
||||
'www/templates_c',
|
||||
'www/log',
|
||||
'www/tmp',
|
||||
@@ -110,14 +117,20 @@ return [
|
||||
'www/admin/qq_file_upload_front.php',
|
||||
'www/admin/qq_file_upload_ajax.php',
|
||||
// symlink ignore
|
||||
'www/lib/smarty-3.1.30/SmartyBC.class.php',
|
||||
'www/lib/htmlMimeMail-2.5.1/HtmlMimeMailCreate.php',
|
||||
'www/lib/smarty-4.1.0/libs/Smarty.class.php'
|
||||
],
|
||||
|
||||
// what not to show as problem
|
||||
'suppress_issue_types' => [
|
||||
// 'PhanUndeclaredMethod',
|
||||
'PhanEmptyFile',
|
||||
// ignore unreferences public methods, etc here (for dead code check)
|
||||
'PhanUnreferencedPublicMethod',
|
||||
'PhanUnreferencedClass',
|
||||
'PhanWriteOnlyPublicProperty',
|
||||
'PhanUnreferencedConstant',
|
||||
'PhanWriteOnlyPublicProperty',
|
||||
'PhanReadOnlyPublicProperty'
|
||||
],
|
||||
|
||||
// Override to hardcode existence and types of (non-builtin) globals in the global scope.
|
||||
|
||||
14
4dev/bin/create_mo.sh
Executable file
14
4dev/bin/create_mo.sh
Executable file
@@ -0,0 +1,14 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
base_folder='/var/www/html/developers/clemens/core_data/php_libraries/trunk/www/';
|
||||
|
||||
# locale gettext po to mo translator master
|
||||
for file in $(ls -1 ${base_folder}../4dev/locale/*.po); do
|
||||
file=$(basename $file .po);
|
||||
echo "Translate language ${file}";
|
||||
locale=$(echo "${file}" | cut -d "-" -f 1);
|
||||
domain=$(echo "${file}" | cut -d "-" -f 2);
|
||||
msgfmt -o ${base_folder}/includes/locale/${locale}/LC_MESSAGES/${domain}.mo ${base_folder}../4dev/locale/${locale}-${domain}.po;
|
||||
done;
|
||||
|
||||
# __END__
|
||||
3
4dev/checking/phan.sh
Executable file
3
4dev/checking/phan.sh
Executable file
@@ -0,0 +1,3 @@
|
||||
base="/storage/var/www/html/developers/clemens/core_data/php_libraries/trunk/";
|
||||
# must be run in ${base}www/
|
||||
phan --progress-bar -C --analyze-twice
|
||||
3
4dev/checking/phpstan.sh
Executable file
3
4dev/checking/phpstan.sh
Executable file
@@ -0,0 +1,3 @@
|
||||
base="/storage/var/www/html/developers/clemens/core_data/php_libraries/trunk/";
|
||||
# must be run in ${base}www/
|
||||
phpstan
|
||||
42
4dev/checking/phpunit.sh
Executable file
42
4dev/checking/phpunit.sh
Executable file
@@ -0,0 +1,42 @@
|
||||
base="/storage/var/www/html/developers/clemens/core_data/php_libraries/trunk/";
|
||||
# -c phpunit.xml
|
||||
# --testdox
|
||||
# call with "t" to give verbose testdox output
|
||||
# SUPPORTED: https://www.php.net/supported-versions.php
|
||||
# call with 7.3, 7.4, 8.0, 8.1 to force a certain php version
|
||||
|
||||
opt_testdox="";
|
||||
if [ "${1}" = "t" ] || [ "${2}" = "t" ]; then
|
||||
opt_testdox="--testdox";
|
||||
fi;
|
||||
php_bin="";
|
||||
if [ ! -z "${1}" ]; then
|
||||
case "${1}" in
|
||||
# "7.3") php_bin="/usr/bin/php7.3 "; ;;
|
||||
"7.4") php_bin="/usr/bin/php7.4 "; ;;
|
||||
"8.0") php_bin="/usr/bin/php8.0 "; ;;
|
||||
"8.1") php_bin="/usr/bin/php8.1 "; ;;
|
||||
*) echo "Not support PHP: ${1}"; exit; ;;
|
||||
esac;
|
||||
fi;
|
||||
if [ ! -z "${2}" ] && [ -z "${php_bin}" ]; then
|
||||
case "${2}" in
|
||||
# "7.3") php_bin="/usr/bin/php7.3 "; ;;
|
||||
"7.4") php_bin="/usr/bin/php7.4 "; ;;
|
||||
"8.0") php_bin="/usr/bin/php8.0 "; ;;
|
||||
"8.1") php_bin="/usr/bin/php8.1 "; ;;
|
||||
*) echo "Not support PHP: ${1}"; exit; ;;
|
||||
esac;
|
||||
fi;
|
||||
|
||||
phpunit_call="${php_bin}${base}www/vendor/bin/phpunit ${opt_testdox} -c ${base}phpunit.xml ${base}4dev/tests/";
|
||||
|
||||
${phpunit_call};
|
||||
|
||||
if [ ! -z "${php_bin}" ]; then
|
||||
echo "CALLED WITH PHP: ${php_bin}"$(${php_bin} --version);
|
||||
else
|
||||
echo "Default PHP used: "$(php --version);
|
||||
fi;
|
||||
|
||||
# __END__
|
||||
@@ -1,21 +1,27 @@
|
||||
Install composer:
|
||||
curl -sS https://getcomposer.org/installer | /usr/local/php-7.3-httpd-2.4/bin/php
|
||||
# old
|
||||
curl -sS https://getcomposer.org/installer | /usr/local/php-8.0-httpd-2.4/bin/php
|
||||
# new (4 steps) https://getcomposer.org/download/
|
||||
/usr/local/php-8.0-httpd-2.4/bin/php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
|
||||
/usr/local/php-8.0-httpd-2.4/bin/php -r "if (hash_file('sha384', 'composer-setup.php') === '906a84df04cea2aa72f40b5f787e49f22d4c2f19492ac310e8cba5b96ac8b64115ac402c8cd292b8a03482574915d1a8') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
|
||||
/usr/local/php-8.0-httpd-2.4/bin/php composer-setup.php
|
||||
/usr/local/php-8.0-httpd-2.4/bin/php -r "unlink('composer-setup.php');
|
||||
|
||||
Update composer phar file
|
||||
/usr/local/php-7.3-httpd-2.4/bin/php composer.phar selfupdate
|
||||
/usr/local/php-8.0-httpd-2.4/bin/php composer.phar selfupdate
|
||||
|
||||
Install something:
|
||||
/usr/local/php-7.3-httpd-2.4/bin/php composer.phar require something/something
|
||||
/usr/local/php-8.0-httpd-2.4/bin/php composer.phar require something/something
|
||||
|
||||
Update all installed:
|
||||
/usr/local/php-7.3-httpd-2.4/bin/php composer.phar update
|
||||
/usr/local/php-8.0-httpd-2.4/bin/php composer.phar update
|
||||
|
||||
Or update only one package:
|
||||
/usr/local/php-7.3-httpd-2.4/bin/php composer.phar something/something
|
||||
/usr/local/php-8.0-httpd-2.4/bin/php composer.phar something/something
|
||||
|
||||
Install AWS SDK:
|
||||
/usr/local/php-7.3-httpd-2.4/bin/php -d memory_limit=-1 composer.phar require aws/aws-sdk-php
|
||||
/usr/local/php-8.0-httpd-2.4/bin/php -d memory_limit=-1 composer.phar require aws/aws-sdk-php
|
||||
|
||||
Install zipStream:
|
||||
/usr/local/php-7.3-httpd-2.4/bin/php composer.phar require maennchen/zipstream-php
|
||||
/usr/local/php-8.0-httpd-2.4/bin/php composer.phar require maennchen/zipstream-php
|
||||
|
||||
|
||||
@@ -68,9 +68,10 @@ INSERT INTO edit_scheme (name, header_color, enabled) VALUES ('Visitor', 'B0C4B3
|
||||
INSERT INTO edit_scheme (name, header_color, enabled) VALUES ('User', '1E789E', 1);
|
||||
|
||||
-- edit language
|
||||
-- iso_name = encoding
|
||||
DELETE FROM edit_language;
|
||||
INSERT INTO edit_language (short_name, long_name, iso_name, order_number, enabled, lang_default) VALUES ('en', 'English', 'UTF-8', 1, 1, 1);
|
||||
INSERT INTO edit_language (short_name, long_name, iso_name, order_number, enabled, lang_default) VALUES ('ja', 'Japanese', 'UTF-8', 2, 1, 0);
|
||||
INSERT INTO edit_language (long_name, short_name, iso_name, order_number, enabled, lang_default) VALUES ('English', 'en_US', 'UTF-8', 1, 1, 1);
|
||||
INSERT INTO edit_language (long_name, short_name, long_name, iso_name, order_number, enabled, lang_default) VALUES ('Japanese', 'ja_JP', 'UTF-8', 2, 1, 0);
|
||||
|
||||
-- edit group
|
||||
DELETE FROM edit_group;
|
||||
|
||||
@@ -147,4 +147,4 @@ BEGIN
|
||||
RETURN NULL;
|
||||
END
|
||||
$$
|
||||
LANGUAGE 'plpgsql'
|
||||
LANGUAGE 'plpgsql';
|
||||
|
||||
@@ -12,7 +12,7 @@ CREATE TABLE edit_language (
|
||||
enabled SMALLINT NOT NULL DEFAULT 0,
|
||||
lang_default SMALLINT NOT NULL DEFAULT 0,
|
||||
long_name VARCHAR,
|
||||
short_name VARCHAR,
|
||||
iso_name VARCHAR,
|
||||
short_name VARCHAR, -- en_US, en or en_US@latin without encoding
|
||||
iso_name VARCHAR, -- should actually be encoding
|
||||
order_number INT
|
||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||
|
||||
55
4dev/locale/Readme.md
Normal file
55
4dev/locale/Readme.md
Normal file
@@ -0,0 +1,55 @@
|
||||
# Translation files
|
||||
|
||||
## Source file name convetion
|
||||
|
||||
Locale Name . Domain . Encoding .po
|
||||
|
||||
## Name parte explenations
|
||||
|
||||
### Locale Name Examples
|
||||
|
||||
If underscore in name the long version is checked first, then the short version:
|
||||
en_US@latin -> en_US -> en
|
||||
|
||||
* en
|
||||
* en_US
|
||||
* en_US.UTF-8
|
||||
* en_US@latin
|
||||
|
||||
### Domain
|
||||
|
||||
For current case auto set CONTENT_PATH is used
|
||||
|
||||
* admin
|
||||
* frontend
|
||||
|
||||
### Encoding
|
||||
|
||||
if not set UTF-8 is assumed. Any other utf8 encoding is changed to UTF-8
|
||||
|
||||
* UTF-8
|
||||
* SJIS
|
||||
* EUC
|
||||
|
||||
## File name example source
|
||||
|
||||
`ja-admin.po`
|
||||
|
||||
First part is LOCALE, second part is domain. Separator is `-`
|
||||
|
||||
## Folder layout
|
||||
|
||||
`includes/locale/ja/LC_MESSAGES/frontend.mo`
|
||||
|
||||
ALTERNATE LOCALE NAMES:
|
||||
* ja
|
||||
* ja_JP
|
||||
* ja.UTF-8
|
||||
* ja_JP.UTF-8
|
||||
|
||||
ja_JP.UTF-8: Locale Name
|
||||
frontend: dmain (CONTENT_PATH)
|
||||
|
||||
## command
|
||||
|
||||
`msgfmt -o www/includes/locale/ja/LC_MESSAGES/frontend.mo 4dev/lang/ja.admin.po`
|
||||
56
4dev/locale/en-admin.po
Normal file
56
4dev/locale/en-admin.po
Normal file
@@ -0,0 +1,56 @@
|
||||
# ********************************************************************
|
||||
# AUTHOR: Clemens Schwaighofer
|
||||
# CREATED: 2005/08/09
|
||||
# SHORT DESCRIPTION:
|
||||
# Backend English Messages file for gettext
|
||||
# ********************************************************************/
|
||||
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: en.UTF-8 LC_MESSAGES admin\n"
|
||||
"Report-Msgid-Bugs-To: clemens.schwaighofer@egplusww.com\n"
|
||||
"POT-Creation-Date: 2018-03-28 10:40+0900\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: clemens.schwaighofer@egplusww.co\n"
|
||||
"Language-Team: E-GRAPHICS COMMUNICATIONS Japan <info.jp@egplusww.com>\n"
|
||||
"Language: en\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
|
||||
msgid "Year"
|
||||
msgstr "Year"
|
||||
|
||||
msgid "Month"
|
||||
msgstr "Month"
|
||||
|
||||
msgid "INPUT TEST"
|
||||
msgstr "OUTPUT TEST ADMIN EN"
|
||||
|
||||
# testing multi
|
||||
msgid "single"
|
||||
msgid_plural "multi"
|
||||
msgstr[0] "Multi Admin en 0"
|
||||
msgstr[1] "Multi Admin en 1"
|
||||
msgstr[2] "Multi Admin en 2"
|
||||
|
||||
msgctxt "month name"
|
||||
msgid "May"
|
||||
msgstr "May Admin en"
|
||||
|
||||
msgctxt "month name"
|
||||
msgid "single"
|
||||
msgid_plural "multi"
|
||||
msgstr[0] "Multi Admin month en 0"
|
||||
msgstr[1] "Multi Admin month en 1"
|
||||
msgstr[2] "Multi Admin month en 2"
|
||||
|
||||
msgid "I should be translated"
|
||||
msgstr "I should be translated: I WAS TRANSLATED"
|
||||
|
||||
msgid "Are we translated?"
|
||||
msgstr "Are we translated? Yes, we are!"
|
||||
|
||||
msgid "Original with string: %1"
|
||||
msgstr "Translated with: %1"
|
||||
@@ -2,28 +2,28 @@
|
||||
# AUTHOR: Clemens Schwaighofer
|
||||
# CREATED: 2005/08/09
|
||||
# SHORT DESCRIPTION:
|
||||
# Backned English Messages file for gettext
|
||||
# to craete: msgfmt -o ja.mo messages_en.po
|
||||
# HISTORY:
|
||||
# Frontend English Messages file for gettext
|
||||
# ********************************************************************/
|
||||
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Project Version\n"
|
||||
"Project-Id-Version: en.UTF-8 LC_MESSAGES frontend\n"
|
||||
"Report-Msgid-Bugs-To: clemens.schwaighofer@egplusww.com\n"
|
||||
"POT-Creation-Date: 2018-03-28 10:40+0900\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: \n"
|
||||
"Last-Translator: clemens.schwaighofer@egplusww.co\n"
|
||||
"Language-Team: E-GRAPHICS COMMUNICATIONS Japan <info.jp@egplusww.com>\n"
|
||||
"Language: en\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
msgid "Year"
|
||||
msgstr "Year"
|
||||
|
||||
msgid "Month"
|
||||
msgstr "Month"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
|
||||
msgid "INPUT TEST"
|
||||
msgstr "OUTPUT TEST EN"
|
||||
msgstr "OUTPUT TEST FRONTEND EN"
|
||||
|
||||
msgid "single"
|
||||
msgid_plural "multi"
|
||||
msgstr[0] "Multi frontend en 0"
|
||||
msgstr[1] "Multi frontend en 1"
|
||||
msgstr[2] "Multi frontend en 2"
|
||||
@@ -2,22 +2,22 @@
|
||||
# AUTHOR: Clemens Schwaighofer
|
||||
# CREATED: 2018/03/28
|
||||
# SHORT DESCRIPTION:
|
||||
# Backend Japanese Messages file for gettext
|
||||
# to craete: msgfmt -o ja.mo messages_ja.po
|
||||
# HISTORY:
|
||||
# Backend Japanese Messages file for gettext>
|
||||
# ********************************************************************/
|
||||
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Project Version\n"
|
||||
"Project-Id-Version: ja.UTF-8 LC_MESSAGES admin\n"
|
||||
"Report-Msgid-Bugs-To: clemens.schwaighofer@egplusww.com\n"
|
||||
"POT-Creation-Date: 2018-03-28 10:40+0900\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: \n"
|
||||
"Last-Translator: clemens.schwaighofer@egplusww.com\n"
|
||||
"Language-Team: E-GRAPHICS COMMUNICATIONS Japan <info.jp@egplusww.com>\n"
|
||||
"Language: ja\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "はい"
|
||||
@@ -63,7 +63,25 @@ msgid "Sun"
|
||||
msgstr "日"
|
||||
|
||||
msgid "INPUT TEST"
|
||||
msgstr "OUTPUT TEST JA"
|
||||
msgstr "OUTPUT TEST ADMIN JA"
|
||||
|
||||
# testing multi
|
||||
msgid "single"
|
||||
msgid_plural "multi"
|
||||
msgstr[0] "Multi Admin ja 0"
|
||||
msgstr[1] "Multi Admin ja 1"
|
||||
msgstr[2] "Multi Admin ja 2"
|
||||
|
||||
msgctxt "month name"
|
||||
msgid "May"
|
||||
msgstr "May Admin ja"
|
||||
|
||||
msgctxt "month name"
|
||||
msgid "single"
|
||||
msgid_plural "multi"
|
||||
msgstr[0] "Multi Admin month ja 0"
|
||||
msgstr[1] "Multi Admin month ja 1"
|
||||
msgstr[2] "Multi Admin month ja 2"
|
||||
|
||||
# login string
|
||||
msgid "Hello %s"
|
||||
@@ -75,3 +93,5 @@ msgstr "「スマーティー」これは正しいです"
|
||||
msgid "Are we translated?"
|
||||
msgstr "「クラス」これは翻訳です?"
|
||||
|
||||
msgid "Original with string: %1"
|
||||
msgstr "%1と翻訳した"
|
||||
29
4dev/locale/ja-frontend.po
Normal file
29
4dev/locale/ja-frontend.po
Normal file
@@ -0,0 +1,29 @@
|
||||
# ********************************************************************
|
||||
# AUTHOR: Clemens Schwaighofer
|
||||
# CREATED: 2005/08/09
|
||||
# SHORT DESCRIPTION:
|
||||
# Frontend Japanese Messages file for gettext
|
||||
# ********************************************************************/
|
||||
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: ja.UTF-8 LC_MESSAGES frontend\n"
|
||||
"Report-Msgid-Bugs-To: clemens.schwaighofer@egplusww.com\n"
|
||||
"POT-Creation-Date: 2018-03-28 10:40+0900\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: clemens.schwaighofer@egplusww.com\n"
|
||||
"Language-Team: E-GRAPHICS COMMUNICATIONS Japan <info.jp@egplusww.com>\n"
|
||||
"Language: ja\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||
|
||||
msgid "INPUT TEST"
|
||||
msgstr "OUTPUT TEST FRONTEND JA"
|
||||
|
||||
msgid "single"
|
||||
msgid_plural "multi"
|
||||
msgstr[0] "Multi frontend ja 0"
|
||||
msgstr[1] "Multi frontend ja 1"
|
||||
msgstr[2] "Multi frontend ja 2"
|
||||
@@ -10,6 +10,9 @@ TARGET_HOST_WEB="<user>@<host>";
|
||||
TMP_DIR=$LOCAL_BASE_DIR"/4dev/tmp/";
|
||||
tmpf_web=$TMP_DIR"sync.exclude.tmp";
|
||||
|
||||
# if vendor be sure group folder is +x
|
||||
chmod -R ug+rX ${LOCAL_DIR}/vender/
|
||||
|
||||
# for web (ika)
|
||||
rm -f $tmpf_web;
|
||||
echo ".*.swp" >> $tmpf_web;
|
||||
@@ -35,20 +38,19 @@ cat $tmpf_web;
|
||||
|
||||
echo "($1) Syncing from $LOCAL_DIR/* to $TARGET_HOST_WEB:$REMOTE_WEB";
|
||||
echo "You hav 5 seconds to abort (<ctrl> + c)";
|
||||
#c=0;until [ $c -eq 10 ];do echo -n "#"; sleep 1; c=`expr $c + 1`;done;
|
||||
for ((i=5;i>=1;i--));
|
||||
do
|
||||
echo -n $i" ";
|
||||
sleep 1;
|
||||
echo -n $i" ";
|
||||
sleep 1;
|
||||
done;
|
||||
|
||||
if [ "$1" = "live" ];
|
||||
then
|
||||
# ika sync
|
||||
rsync -Plzvrupt --stats --include ".htaccess" --exclude-from=$tmpf_web --delete -e ssh $LOCAL_DIR/* $TARGET_HOST_WEB:$REMOTE_WEB
|
||||
# live sync
|
||||
rsync -Plzvrupt --stats --include ".htaccess" --exclude-from=$tmpf_web --delete -e ssh $LOCAL_DIR/* $TARGET_HOST_WEB:$REMOTE_WEB
|
||||
else
|
||||
# ika sync
|
||||
rsync -n -Plzvrupt --stats --include ".htaccess" --exclude-from=$tmpf_web --delete -e ssh $LOCAL_DIR/* $TARGET_HOST_WEB:$REMOTE_WEB
|
||||
# test sync
|
||||
rsync -n -Plzvrupt --stats --include ".htaccess" --exclude-from=$tmpf_web --delete -e ssh $LOCAL_DIR/* $TARGET_HOST_WEB:$REMOTE_WEB
|
||||
fi;
|
||||
|
||||
# END
|
||||
|
||||
103
4dev/tests/CoreLibsACLLoginTest.php
Normal file
103
4dev/tests/CoreLibsACLLoginTest.php
Normal file
@@ -0,0 +1,103 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* Test class for ACL\Login
|
||||
* @coversDefaultClass \CoreLibs\ACL\Login
|
||||
* @testdox \CoreLibs\ACL\Login method tests
|
||||
*/
|
||||
final class CoreLibsACLLoginTest extends TestCase
|
||||
{
|
||||
private static $db;
|
||||
private static $log;
|
||||
|
||||
/**
|
||||
* start DB conneciton, setup DB, etc
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public static function setUpBeforeClass(): void
|
||||
{
|
||||
if (!extension_loaded('pgsql')) {
|
||||
self::markTestSkipped(
|
||||
'The PgSQL extension is not available.'
|
||||
);
|
||||
}
|
||||
// logger is always needed
|
||||
// define basic connection set valid and one invalid
|
||||
self::$log = new \CoreLibs\Debug\Logging([
|
||||
// 'log_folder' => __DIR__ . DIRECTORY_SEPARATOR . 'log',
|
||||
'log_folder' => DIRECTORY_SEPARATOR . 'tmp',
|
||||
'file_id' => 'CoreLibs-ACL-Login-Test',
|
||||
'debug_all' => false,
|
||||
'echo_all' => false,
|
||||
'print_all' => false,
|
||||
]);
|
||||
// if we do have pgsql, we need to create a test DB or check that one
|
||||
// exists and clean the table to zero state
|
||||
self::$db = new \CoreLibs\DB\IO(
|
||||
[
|
||||
'db_name' => 'corelibs_acl_login_test',
|
||||
'db_user' => 'corelibs_acl_login_test',
|
||||
'db_pass' => 'corelibs_acl_login_test',
|
||||
'db_host' => 'localhost',
|
||||
'db_port' => 5432,
|
||||
'db_schema' => 'public',
|
||||
'db_type' => 'pgsql',
|
||||
'db_encoding' => '',
|
||||
'db_ssl' => 'allow', // allow, disable, require, prefer
|
||||
'db_debug' => true,
|
||||
],
|
||||
self::$log
|
||||
);
|
||||
if (!self::$db->dbGetConnectionStatus()) {
|
||||
self::markTestSkipped(
|
||||
'Cannot connect to valid Test DB for ACL\Login test.'
|
||||
);
|
||||
}
|
||||
/*
|
||||
// check if they already exist, drop them
|
||||
if ($db->dbShowTableMetaData('table_with_primary_key') !== false) {
|
||||
$db->dbExec("DROP TABLE table_with_primary_key");
|
||||
$db->dbExec("DROP TABLE table_without_primary_key");
|
||||
$db->dbExec("DROP TABLE test_meta");
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
/**
|
||||
* close db
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public static function tearDownAfterClass(): void
|
||||
{
|
||||
if (self::$db->dbGetConnectionStatus()) {
|
||||
self::$db->dbClose();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @testdox ACL\Login Class tests
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testACLLogin()
|
||||
{
|
||||
$this->assertTrue(true, 'ACL Login Tests not implemented');
|
||||
$this->markTestIncomplete(
|
||||
'ACL\Login Tests have not yet been implemented'
|
||||
);
|
||||
|
||||
$login = new \CoreLibs\ACL\Login(self::$db, self::$log);
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
47
4dev/tests/CoreLibsAdminBackendTest.php
Normal file
47
4dev/tests/CoreLibsAdminBackendTest.php
Normal file
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* Test class for Admin\Backend
|
||||
* @coversDefaultClass \CoreLibs\Admin\Backend
|
||||
* @testdox \CoreLibs\Admin\Backend method tests
|
||||
*/
|
||||
final class CoreLibsAdminBackendTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function setUp(): void
|
||||
{
|
||||
if (!extension_loaded('pgsql')) {
|
||||
$this->markTestSkipped(
|
||||
'The PgSQL extension is not available.'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @testdox Admin\Backend Class tests
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testAdminBackend()
|
||||
{
|
||||
/* $this->assertTrue(true, 'ACL Login Tests not implemented');
|
||||
$this->markTestIncomplete(
|
||||
'ACL\Login Tests have not yet been implemented'
|
||||
); */
|
||||
$this->markTestSkipped('No implementation for Admin\Backend at the moment');
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
381
4dev/tests/CoreLibsCheckEmailTest.php
Normal file
381
4dev/tests/CoreLibsCheckEmailTest.php
Normal file
@@ -0,0 +1,381 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* Undocumented class
|
||||
* @coversDefaultClass \CoreLibs\Check\Email
|
||||
* @testdox \CoreLibs\Check\Email method tests
|
||||
*/
|
||||
final class CoreLibsCheckEmailTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* Array position to regex
|
||||
*
|
||||
* @return array<mixed>
|
||||
*/
|
||||
public function emailRegexProvider(): array
|
||||
{
|
||||
return [
|
||||
'get email regex invalid -1, will be 0' => [
|
||||
-1,
|
||||
"^[A-Za-z0-9!#$%&'*+\-\/=?^_`{|}~][A-Za-z0-9!#$%:\(\)&'*+\-\/=?^_`{|}~\.]{0,63}@"
|
||||
. "[a-zA-Z0-9\-]+(\.[a-zA-Z0-9\-]{1,})*\.([a-zA-Z]{2,}){1}$"
|
||||
],
|
||||
'get email regex invalid 10, will be 0' => [
|
||||
10,
|
||||
"^[A-Za-z0-9!#$%&'*+\-\/=?^_`{|}~][A-Za-z0-9!#$%:\(\)&'*+\-\/=?^_`{|}~\.]{0,63}@"
|
||||
. "[a-zA-Z0-9\-]+(\.[a-zA-Z0-9\-]{1,})*\.([a-zA-Z]{2,}){1}$"
|
||||
],
|
||||
'get email regex valid 1, will be 1' => [
|
||||
1,
|
||||
"@(.*)@(.*)"
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Test regex level return
|
||||
*
|
||||
* @covers ::getEmailRegex
|
||||
* @dataProvider emailRegexProvider
|
||||
* @testdox getEmailRegex $input will be $expected [$_dataName]
|
||||
*
|
||||
* @param int $input
|
||||
* @param string $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testGetEmailRegexReturn(int $input, string $expected): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Check\Email::getEmailRegex($input)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* provides data for emailCheckProvider and emailCheckFullProvider
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function emailCheckList(): array
|
||||
{
|
||||
return [
|
||||
'valid email' => ['test@test.com', true, []],
|
||||
'invalid empty email' => ['', false, [0, 2, 3, 4, 5]],
|
||||
'invalid email' => ['-@-', false, [0, 3, 4, 5]],
|
||||
'invalid email leading dot' => ['.test@test.com', false, [0, 2]],
|
||||
'invalid email invalid domain' => ['test@t_est.com', false, [0, 3, 4]],
|
||||
'invalid email double @' => ['test@@test.com', false, [0, 1]],
|
||||
'invalid email double dot' => ['test@test..com', false, [0, 3, 6]],
|
||||
'invalid email end with dot' => ['test@test.', false, [0, 3, 5, 7]],
|
||||
'invalid email bad top level' => ['test@test.j', false, [0, 3, 5]],
|
||||
'invalid email double @ and double dot' => ['test@@test..com', false, [0, 1, 3, 6]],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Valids or not valid email address
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function emailCheckProvider(): array
|
||||
{
|
||||
$list = [];
|
||||
foreach ($this->emailCheckList() as $key => $data) {
|
||||
$list[$key] = [$data[0], $data[1]];
|
||||
}
|
||||
return $list;
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::checkEmail
|
||||
* @dataProvider emailCheckProvider
|
||||
* @testdox checkEmail $input will be $expected [$_dataName]
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testCheckEmail(string $input, bool $expected): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Check\Email::checkEmail($input)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* this is like emailCheckProvider but it has the full detail errors
|
||||
* All errors should be tetsed in testGetEmailRegexErrorMessage
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function emailCheckFullProvider(): array
|
||||
{
|
||||
$list = [];
|
||||
foreach ($this->emailCheckList() as $key => $data) {
|
||||
$list[$key] = [$data[0], $data[2]];
|
||||
}
|
||||
return $list;
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::checkEmailFull
|
||||
* @dataProvider emailCheckFullProvider
|
||||
* @testdox checkEmailFull $input will be $expected [$_dataName]
|
||||
*
|
||||
* @param string $input
|
||||
* @param array $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testCheckEmailFull(string $input, array $expected): void
|
||||
{
|
||||
$this->assertEqualsCanonicalizing(
|
||||
$expected,
|
||||
\CoreLibs\Check\Email::checkEmailFull($input, true)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* error data returned for each error position
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function emailRegexErrorProvider(): array
|
||||
{
|
||||
return [
|
||||
'error 0 will return general' => [
|
||||
0,
|
||||
[
|
||||
'error' => 0,
|
||||
'message' => 'Invalid email address',
|
||||
'regex' => "^[A-Za-z0-9!#$%&'*+\-\/=?^_`{|}~][A-Za-z0-9!#$%:\(\)&'*+\-\/=?^_`{|}~\.]{0,63}@"
|
||||
. "[a-zA-Z0-9\-]+(\.[a-zA-Z0-9\-]{1,})*\.([a-zA-Z]{2,}){1}$"
|
||||
]
|
||||
],
|
||||
'error 1 will return double @ error' => [
|
||||
1,
|
||||
[
|
||||
'error' => 1,
|
||||
'message' => 'Double @ mark in email address',
|
||||
'regex' => "@(.*)@(.*)"
|
||||
]
|
||||
],
|
||||
'error 2 will be invalid before @' => [
|
||||
2,
|
||||
[
|
||||
'error' => 2,
|
||||
'message' => 'Invalid email part before @ sign',
|
||||
'regex' => "^[A-Za-z0-9!#$%&'*+\-\/=?^_`{|}~][A-Za-z0-9!#$%:\(\)&'*+\-\/=?^_`{|}~\.]{0,63}@"
|
||||
]
|
||||
],
|
||||
'error 3 will be invalid domain and top level' => [
|
||||
3,
|
||||
[
|
||||
'error' => 3,
|
||||
'message' => 'Invalid domain part after @ sign',
|
||||
'regex' => "@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]{1,})*\.([a-zA-Z]{2,}){1}$"
|
||||
]
|
||||
],
|
||||
'error 4 will be invalid domain' => [
|
||||
4,
|
||||
[
|
||||
'error' => 4,
|
||||
'message' => 'Invalid domain name part',
|
||||
'regex' => "@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]{1,})*\."
|
||||
]
|
||||
],
|
||||
'error 5 will be invalid domain top level only' => [
|
||||
5,
|
||||
[
|
||||
'error' => 5,
|
||||
'message' => 'Wrong domain top level part',
|
||||
'regex' => "\.([a-zA-Z]{2,6}){1}$"
|
||||
]
|
||||
],
|
||||
'error 6 will be domain double dot' => [
|
||||
6,
|
||||
[
|
||||
'error' => 6,
|
||||
'message' => 'Double consecutive dots in domain name (..)',
|
||||
'regex' => "@(.*)\.{2,}"
|
||||
]
|
||||
],
|
||||
'error 7 will domain ends with dot' => [
|
||||
7,
|
||||
[
|
||||
'error' => 7,
|
||||
'message' => 'Domain ends with a dot or is missing top level part',
|
||||
'regex' => "@.*\.$"
|
||||
]
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::getEmailRegexErrorMessage
|
||||
* @dataProvider emailRegexErrorProvider
|
||||
* @testdox getEmailRegexErrorMessage $input will be $expected [$_dataName]
|
||||
*
|
||||
* @param integer $input
|
||||
* @param array $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testGetEmailRegexErrorMessage(int $input, array $expected): void
|
||||
{
|
||||
$this->assertEqualsCanonicalizing(
|
||||
$expected,
|
||||
\CoreLibs\Check\Email::getEmailRegexErrorMessage($input)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* This holds all email type checks normal and short
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function emailTypeProvider(): array
|
||||
{
|
||||
return [
|
||||
['test@test.com', 'pc_html', 'pc'],
|
||||
['test@docomo.ne.jp', 'keitai_docomo', 'docomo'],
|
||||
['test@softbank.ne.jp', 'keitai_softbank', 'softbank'],
|
||||
['test@i.softbank.ne.jp', 'smartphone_softbank_iphone', 'iphone'],
|
||||
// TODO: add more test emails here
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns only normal email type checks
|
||||
*
|
||||
* @return array<mixed>
|
||||
*/
|
||||
public function emailTypeProviderLong(): array
|
||||
{
|
||||
$list = [];
|
||||
foreach ($this->emailTypeProvider() as $set) {
|
||||
$list['email ' . $set[0] . ' is valid and matches normal ' . $set[1]] = [$set[0], $set[1]];
|
||||
}
|
||||
$list['email is empty and not valid normal'] = ['', 'invalid'];
|
||||
return $list;
|
||||
}
|
||||
|
||||
/**
|
||||
* only short email type list
|
||||
*
|
||||
* @return array<mixed>
|
||||
*/
|
||||
public function emailTypeProviderShort(): array
|
||||
{
|
||||
$list = [];
|
||||
foreach ($this->emailTypeProvider() as $set) {
|
||||
$list['email ' . $set[0] . ' is valid and matches short ' . $set[2]] = [$set[0], $set[2]];
|
||||
}
|
||||
$list['email is empty and not valid short'] = ['', 'invalid'];
|
||||
return $list;
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::getEmailType
|
||||
* @dataProvider emailTypeProviderLong
|
||||
* @testdox getEmailType $input will be normal $expected [$_dataName]
|
||||
*
|
||||
* @param string $input
|
||||
* @param string $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testGetEmailTypeNormal(string $input, string $expected)
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Check\Email::getEmailType($input, false)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::getEmailType
|
||||
* @dataProvider emailTypeProviderShort
|
||||
* @testdox getEmailType $input will be short $expected [$_dataName]
|
||||
*
|
||||
* @param string $input
|
||||
* @param string $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testGetEmailTypeShort(string $input, string $expected)
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Check\Email::getEmailType($input, true)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function emailProviderTypeLongToShort(): array
|
||||
{
|
||||
$mobile_email_type_short = [
|
||||
'keitai_docomo' => 'docomo',
|
||||
'keitai_kddi_ezweb' => 'kddi',
|
||||
'keitai_kddi' => 'kddi',
|
||||
'keitai_kddi_tu-ka' => 'kddi',
|
||||
'keitai_kddi_sky' => 'kddi',
|
||||
'keitai_softbank' => 'softbank',
|
||||
'smartphone_softbank_iphone' => 'iphone',
|
||||
'keitai_softbank_disney' => 'softbank',
|
||||
'keitai_softbank_vodafone' => 'softbank',
|
||||
'keitai_softbank_j-phone' => 'softbank',
|
||||
'keitai_willcom' => 'willcom',
|
||||
'keitai_willcom_pdx' => 'willcom',
|
||||
'keitai_willcom_bandai' => 'willcom',
|
||||
'keitai_willcom_pipopa' => 'willcom',
|
||||
'keitai_willcom_ymobile' => 'willcom',
|
||||
'keitai_willcom_emnet' => 'willcom',
|
||||
'pc_html' => 'pc',
|
||||
];
|
||||
$list = [];
|
||||
// use the static one
|
||||
foreach ($mobile_email_type_short as $long => $short) {
|
||||
$list[$long . ' matches to ' . $short] = [$long, $short];
|
||||
}
|
||||
// add invalid check
|
||||
$list['Not found will be bool false'] = ['invalid', false];
|
||||
return $list;
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::getShortEmailType
|
||||
* @dataProvider emailProviderTypeLongToShort
|
||||
* @testdox getShortEmailType $input will be $expected [$_dataName]
|
||||
*
|
||||
* @param string $input
|
||||
* @param string|bool $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testGetShortEmailType(string $input, $expected)
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Check\Email::getShortEmailType($input)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
117
4dev/tests/CoreLibsCheckEncodingTest.php
Normal file
117
4dev/tests/CoreLibsCheckEncodingTest.php
Normal file
@@ -0,0 +1,117 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* Test class for Check\Encoding
|
||||
* @coversDefaultClass \CoreLibs\Check\Encoding
|
||||
* @testdox \CoreLibs\Check\Encoding method tests
|
||||
*/
|
||||
final class CoreLibsCheckEncodingTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function checkConvertEncodingProvider(): array
|
||||
{
|
||||
return [
|
||||
// 0: string to test
|
||||
// 1: source encoding
|
||||
// 2: target encoding
|
||||
// 3: substitue character
|
||||
// 4: false for ok, array with error list
|
||||
'valid test UTF-8 to SJIS (default)' => [
|
||||
'日本語',
|
||||
'UTF-8',
|
||||
'SJIS',
|
||||
null,
|
||||
false
|
||||
],
|
||||
'invalid test UTF-8 to SJIS (dots as code point)' => [
|
||||
'❶',
|
||||
'UTF-8',
|
||||
'SJIS',
|
||||
0x2234,
|
||||
['❶']
|
||||
],
|
||||
'invalid test UTF-8 to SJIS (dots as string)' => [
|
||||
'❶',
|
||||
'UTF-8',
|
||||
'SJIS',
|
||||
'∴',
|
||||
['❶']
|
||||
],
|
||||
'invalid test UTF-8 to SJIS (none)' => [
|
||||
'❶',
|
||||
'UTF-8',
|
||||
'SJIS',
|
||||
'none',
|
||||
['❶']
|
||||
],
|
||||
'invalid test UTF-8 to SJIS (long)' => [
|
||||
'❶',
|
||||
'UTF-8',
|
||||
'SJIS',
|
||||
'long',
|
||||
['❶']
|
||||
],
|
||||
'invalid test UTF-8 to SJIS (entity)' => [
|
||||
'❶',
|
||||
'UTF-8',
|
||||
'SJIS',
|
||||
'entity',
|
||||
['❶']
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::checkConvertEncoding
|
||||
* @dataProvider checkConvertEncodingProvider
|
||||
* @testdox check encoding convert from $from_encoding to $to_encoding [$_dataName]
|
||||
*
|
||||
* @param string $input
|
||||
* @param string $from_encoding
|
||||
* @param string $to_encoding
|
||||
* @param string|int|null $error_char
|
||||
* @param array|bool $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testCheckConvertEncoding(
|
||||
string $input,
|
||||
string $from_encoding,
|
||||
string $to_encoding,
|
||||
$error_char,
|
||||
$expected
|
||||
): void {
|
||||
if ($error_char !== null) {
|
||||
\CoreLibs\Check\Encoding::setErrorChar($error_char);
|
||||
if (!in_array($error_char, ['none', 'long', 'entity'])) {
|
||||
$this->assertEquals(
|
||||
\IntlChar::chr($error_char),
|
||||
\CoreLibs\Check\Encoding::getErrorChar()
|
||||
);
|
||||
} else {
|
||||
$this->assertEquals(
|
||||
$error_char,
|
||||
\CoreLibs\Check\Encoding::getErrorChar()
|
||||
);
|
||||
}
|
||||
}
|
||||
$return = \CoreLibs\Check\Encoding::checkConvertEncoding($input, $from_encoding, $to_encoding);
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
$return
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
120
4dev/tests/CoreLibsCheckFileTest.php
Normal file
120
4dev/tests/CoreLibsCheckFileTest.php
Normal file
@@ -0,0 +1,120 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* Test class for Check\File
|
||||
* @coversDefaultClass \CoreLibs\Check\File
|
||||
* @testdox \CoreLibs\Check\File method tests
|
||||
*/
|
||||
final class CoreLibsCheckFileTest extends TestCase
|
||||
{
|
||||
/** @var array<mixed> */
|
||||
// private $files_list = [];
|
||||
/** @var string */
|
||||
private $base_folder = DIRECTORY_SEPARATOR . 'tmp' . DIRECTORY_SEPARATOR;
|
||||
|
||||
/**
|
||||
* main file list + data provider
|
||||
*
|
||||
* filename, file extension matching, lines in file, -1 for nothing
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function filesList(): array
|
||||
{
|
||||
return [
|
||||
['filename.txt', 'txt', 5],
|
||||
['filename.csv', 'csv', 15],
|
||||
['filename.tsv', 'tsv', 0],
|
||||
['file_does_not_exits', '', -1],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function filesExtensionProvider(): array
|
||||
{
|
||||
$list = [];
|
||||
foreach ($this->filesList() as $row) {
|
||||
$list[$row[0] . ' must be extension ' . $row[1]] = [$row[0], $row[1]];
|
||||
}
|
||||
return $list;
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function filesLinesProvider(): array
|
||||
{
|
||||
$list = [];
|
||||
foreach ($this->filesList() as $row) {
|
||||
$list[$row[0] . ' must have ' . $row[2] . ' lines'] = [$row[0], $row[2]];
|
||||
}
|
||||
return $list;
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests if file extension matches
|
||||
*
|
||||
* @covers ::getFilenameEnding
|
||||
* @dataProvider filesExtensionProvider
|
||||
* @testdox getFilenameEnding $input must be extension $expected [$_dataName]
|
||||
*
|
||||
* @param string $input
|
||||
* @param string $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testGetFilenameEnding(string $input, string $expected): void
|
||||
{
|
||||
// getFilenameEnding
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Check\File::getFilenameEnding($input)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the file line read
|
||||
*
|
||||
* @covers ::getLinesFromFile
|
||||
* @dataProvider filesLinesProvider
|
||||
* @testdox getLinesFromFile $input must have $expected lines [$_dataName]
|
||||
*
|
||||
* @param string $input file name
|
||||
* @param int $expected lines in file
|
||||
* @return void
|
||||
*/
|
||||
public function testGetLinesFromFile(string $input, int $expected): void
|
||||
{
|
||||
// create file
|
||||
if ($expected > -1) {
|
||||
$file = $this->base_folder . $input;
|
||||
$fp = fopen($file, 'w');
|
||||
for ($i = 0; $i < $expected; $i++) {
|
||||
fwrite($fp, 'This is row ' . ($i + 1) . PHP_EOL);
|
||||
}
|
||||
fclose($fp);
|
||||
}
|
||||
// test
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Check\File::getLinesFromFile($this->base_folder . $input)
|
||||
);
|
||||
// unlink file
|
||||
if (is_file($this->base_folder . $input)) {
|
||||
unlink($this->base_folder . $input);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
73
4dev/tests/CoreLibsCheckPasswordTest.php
Normal file
73
4dev/tests/CoreLibsCheckPasswordTest.php
Normal file
@@ -0,0 +1,73 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* Test class for Check\Password
|
||||
* @coversDefaultClass \CoreLibs\Check\Password
|
||||
* @testdox \CoreLibs\Check\Password method tests
|
||||
*/
|
||||
final class CoreLibsCheckPasswordTest extends TestCase
|
||||
{
|
||||
public function passwordProvider(): array
|
||||
{
|
||||
return [
|
||||
'matching password' => ['test', 'test', true],
|
||||
'not matching password' => ['test', 'not_test', false],
|
||||
];
|
||||
}
|
||||
|
||||
public function passwordRehashProvider(): array
|
||||
{
|
||||
return [
|
||||
'no rehash needed' => ['$2y$10$EgWJ2WE73DWi.hIyFRCdpejLXTvHbmTK3LEOclO1tAvXAXUNuUS4W', false],
|
||||
'rehash needed' => ['9c42a1346e333a770904b2a2b37fa7d3', true],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::passwordVerify
|
||||
* @covers ::passwordSet
|
||||
* @dataProvider passwordProvider
|
||||
* @testdox passwordSet $input compare to $input_hash: passwordVerify $expected [$_dataName]
|
||||
*
|
||||
* @param string $input
|
||||
* @param string $input_hash
|
||||
* @param boolean $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testPasswordSetVerify(string $input, string $input_hash, bool $expected): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Check\Password::passwordVerify($input, \CoreLibs\Check\Password::passwordSet($input_hash))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::passwordRehashCheck
|
||||
* @dataProvider passwordRehashProvider
|
||||
* @testdox passwordRehashCheck $input will be $expected [$_dataName]
|
||||
*
|
||||
* @param string $input
|
||||
* @param boolean $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testPasswordRehashCheck(string $input, bool $expected): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Check\Password::passwordRehashCheck($input)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
73
4dev/tests/CoreLibsCheckPhpVersionTest.php
Normal file
73
4dev/tests/CoreLibsCheckPhpVersionTest.php
Normal file
@@ -0,0 +1,73 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* Test class for Check\PHPVersion
|
||||
* @coversDefaultClass \CoreLibs\Check\PHPVersion
|
||||
* @testdox \CoreLibs\Check\PHPVersion method tests
|
||||
*/
|
||||
final class CoreLibsCheckPhpVersionTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* NOTE: The checks must be adapted to the PHP version or they will fail
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function phpVersionProvider(): array
|
||||
{
|
||||
return [
|
||||
// min
|
||||
'min 7' => ['7', '', true],
|
||||
'min 7.4' => ['7.4', '', true],
|
||||
'min 7.4.1' => ['7.4.1', '', true],
|
||||
// NOTE: update if php version bigger than 10
|
||||
'min 10' => ['10', '', false],
|
||||
'min 10.0' => ['10.0', '', false],
|
||||
'min 10.0.0' => ['10.0.0', '', false],
|
||||
// min/max version, NOTE: update if php version bigger than 10
|
||||
'min 7/max 10' => ['7', '10', true],
|
||||
'min 7/max 10.0' => ['7', '10.0', true],
|
||||
'min 7/max 10.0.0' => ['7', '10.0.0', true],
|
||||
// min/max version
|
||||
'min 5/max 7' => ['5', '7', false],
|
||||
'min 5/max 7.4' => ['5', '7.4', false],
|
||||
'min 5/max 7.4.1' => ['5', '7.4.1', false],
|
||||
// max only
|
||||
'max 7' => ['', '7', false],
|
||||
'max 7.4' => ['', '7.4', false],
|
||||
'max 7.4.1' => ['', '7.4.1', false],
|
||||
// max over
|
||||
'max 10' => ['', '10', true],
|
||||
'max 10.0' => ['', '10.0', true],
|
||||
'max 10.0.0' => ['', '10.0.0', true],
|
||||
// TODO: add null tests
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::checkPHPVersion
|
||||
* @dataProvider phpVersionProvider
|
||||
* @testdox checkPHPVersion $input_min and $input_max will be $expected [$_dataName]
|
||||
*
|
||||
* @param string $input_min
|
||||
* @param string $input_max
|
||||
* @param string $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testCheckPHPVersion(string $input_min, string $input_max, bool $expected): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Check\PhpVersion::checkPHPVersion($input_min, $input_max)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
862
4dev/tests/CoreLibsCombinedArrayHandlerTest.php
Normal file
862
4dev/tests/CoreLibsCombinedArrayHandlerTest.php
Normal file
@@ -0,0 +1,862 @@
|
||||
<?php
|
||||
|
||||
// because we have long testdox lines
|
||||
// phpcs:disable Generic.Files.LineLength
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace tests;
|
||||
|
||||
use Exception;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* Test class for Combined\ArrayHandler
|
||||
* @coversDefaultClass \CoreLibs\Combined\ArrayHandler
|
||||
* @testdox \CoreLibs\Combined\ArrayHandler method tests
|
||||
*/
|
||||
final class CoreLibsCombinedArrayHandlerTest extends TestCase
|
||||
{
|
||||
// we use that for all
|
||||
public static $array = [
|
||||
'a' => [
|
||||
'b' => 'bar',
|
||||
'c' => 'foo',
|
||||
'same' => 'same',
|
||||
3 => 'foobar',
|
||||
'foobar' => 4,
|
||||
'true' => true,
|
||||
],
|
||||
'd',
|
||||
4,
|
||||
'b',
|
||||
'c' => 'test',
|
||||
'same' => 'same',
|
||||
'deep' => [
|
||||
'sub' => [
|
||||
'nested' => 'bar',
|
||||
'same' => 'same',
|
||||
'more' => 'test'
|
||||
]
|
||||
]
|
||||
];
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function arraySearchRecursiveProvider(): array
|
||||
{
|
||||
return [
|
||||
'find value' => [
|
||||
0 => 'bar',
|
||||
1 => self::$array,
|
||||
2 => null,
|
||||
3 => ['a', 'b'],
|
||||
],
|
||||
'find value with key' => [
|
||||
0 => 'bar',
|
||||
1 => self::$array,
|
||||
2 => 'nested',
|
||||
3 => ['deep', 'sub', 'nested']
|
||||
],
|
||||
'not existing value' => [
|
||||
0 => 'not exists',
|
||||
1 => self::$array,
|
||||
2 => null,
|
||||
3 => [],
|
||||
],
|
||||
'find value int' => [
|
||||
0 => 4,
|
||||
1 => self::$array,
|
||||
2 => null,
|
||||
3 => ['a', 'foobar']
|
||||
],
|
||||
'find value int as string' => [
|
||||
0 => '4',
|
||||
1 => self::$array,
|
||||
2 => null,
|
||||
3 => []
|
||||
],
|
||||
'find value int as string with key' => [
|
||||
0 => '4',
|
||||
1 => self::$array,
|
||||
2 => 'foobar',
|
||||
3 => []
|
||||
],
|
||||
'first level value' => [
|
||||
0 => 'd',
|
||||
1 => self::$array,
|
||||
2 => null,
|
||||
4 => [0]
|
||||
],
|
||||
'find value, return int key' => [
|
||||
0 => 'foobar',
|
||||
1 => self::$array,
|
||||
2 => null,
|
||||
3 => ['a', 3]
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function arraySearchRecursiveAllProvider(): array
|
||||
{
|
||||
return [
|
||||
'find value' => [
|
||||
0 => 'bar',
|
||||
1 => self::$array,
|
||||
2 => null,
|
||||
3 => true,
|
||||
4 => [
|
||||
'level' => -1,
|
||||
'work' => [],
|
||||
'found' => [
|
||||
0 => ['a', 'b'],
|
||||
1 => ['deep', 'sub', 'nested']
|
||||
]
|
||||
]
|
||||
],
|
||||
'find value, new type' => [
|
||||
0 => 'bar',
|
||||
1 => self::$array,
|
||||
2 => null,
|
||||
3 => false,
|
||||
4 => [
|
||||
0 => ['a', 'b'],
|
||||
1 => ['deep', 'sub', 'nested']
|
||||
]
|
||||
],
|
||||
'find value with key' => [
|
||||
0 => 'bar',
|
||||
1 => self::$array,
|
||||
2 => 'nested',
|
||||
3 => true,
|
||||
4 => [
|
||||
'level' => -1,
|
||||
'work' => [],
|
||||
'found' => [
|
||||
0 => ['deep', 'sub', 'nested']
|
||||
]
|
||||
]
|
||||
],
|
||||
'not existing value' => [
|
||||
0 => 'not exists',
|
||||
1 => self::$array,
|
||||
2 => null,
|
||||
3 => true,
|
||||
4 => [
|
||||
'level' => -1,
|
||||
'work' => [],
|
||||
],
|
||||
],
|
||||
'not existing value, new type' => [
|
||||
0 => 'not exists',
|
||||
1 => self::$array,
|
||||
2 => null,
|
||||
3 => false,
|
||||
4 => [],
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function arraySearchSimpleProvider(): array
|
||||
{
|
||||
return [
|
||||
'key/value exist' => [
|
||||
0 => self::$array,
|
||||
1 => 'c',
|
||||
2 => 'foo',
|
||||
3 => false,
|
||||
4 => true,
|
||||
],
|
||||
'key/value exists twice' => [
|
||||
0 => self::$array,
|
||||
1 => 'same',
|
||||
2 => 'same',
|
||||
3 => false,
|
||||
4 => true,
|
||||
],
|
||||
'key/value not found' => [
|
||||
0 => self::$array,
|
||||
1 => 'not exists',
|
||||
2 => 'not exists',
|
||||
3 => false,
|
||||
4 => false,
|
||||
],
|
||||
'key exists, value not' => [
|
||||
0 => self::$array,
|
||||
1 => 'b',
|
||||
2 => 'not exists',
|
||||
3 => false,
|
||||
4 => false,
|
||||
],
|
||||
'key not, value exists' => [
|
||||
0 => self::$array,
|
||||
1 => 'not exists',
|
||||
2 => 'bar',
|
||||
3 => false,
|
||||
4 => false,
|
||||
],
|
||||
'numeric key, value exists' => [
|
||||
0 => self::$array,
|
||||
1 => 0,
|
||||
2 => 'd',
|
||||
3 => false,
|
||||
4 => true,
|
||||
],
|
||||
'numeric key as string, value exists' => [
|
||||
0 => self::$array,
|
||||
1 => '0',
|
||||
2 => 'd',
|
||||
3 => false,
|
||||
4 => true,
|
||||
],
|
||||
'numeric key as string, value exists, strinct' => [
|
||||
0 => self::$array,
|
||||
1 => '0',
|
||||
2 => 'd',
|
||||
3 => true,
|
||||
4 => false,
|
||||
],
|
||||
'key exists, value numeric' => [
|
||||
0 => self::$array,
|
||||
1 => 'foobar',
|
||||
2 => 4,
|
||||
3 => false,
|
||||
4 => true,
|
||||
],
|
||||
'key exists, value numeric as string' => [
|
||||
0 => self::$array,
|
||||
1 => 'foobar',
|
||||
2 => '4',
|
||||
3 => false,
|
||||
4 => true,
|
||||
],
|
||||
'key exists, value numeric as string, strict' => [
|
||||
0 => self::$array,
|
||||
1 => 'foobar',
|
||||
2 => '4',
|
||||
3 => true,
|
||||
4 => false,
|
||||
],
|
||||
'key exists, value bool' => [
|
||||
0 => self::$array,
|
||||
1 => 'true',
|
||||
2 => true,
|
||||
3 => false,
|
||||
4 => true,
|
||||
],
|
||||
'key exists, value bool as string' => [
|
||||
0 => self::$array,
|
||||
1 => 'true',
|
||||
2 => 'true',
|
||||
3 => false,
|
||||
4 => true,
|
||||
],
|
||||
'key exists, value bool as string, strict' => [
|
||||
0 => self::$array,
|
||||
1 => 'true',
|
||||
2 => 'true',
|
||||
3 => true,
|
||||
4 => false,
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* provides array listing for the merge test
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function arrayMergeRecursiveProvider(): array
|
||||
{
|
||||
return [
|
||||
// 0: expected
|
||||
// 1..n: to merge arrays
|
||||
// n+1: trigger for handle keys as string
|
||||
'two arrays' => [
|
||||
['a' => 1, 'b' => 2, 'c' => 3],
|
||||
['a' => 1, 'b' => 2],
|
||||
['b' => 2, 'c' => 3],
|
||||
],
|
||||
'two arrays, string flag' => [
|
||||
['a' => 1, 'b' => 2, 'c' => 3],
|
||||
['a' => 1, 'b' => 2],
|
||||
['b' => 2, 'c' => 3],
|
||||
true,
|
||||
],
|
||||
// non hash arrays
|
||||
'non hash array merge, no string flag' => [
|
||||
[3, 4, 5],
|
||||
[1, 2, 3],
|
||||
[3, 4, 5],
|
||||
],
|
||||
'non hash array merge, string flag' => [
|
||||
[1, 2, 3, 3, 4, 5],
|
||||
[1, 2, 3],
|
||||
[3, 4, 5],
|
||||
true
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* for warning checks
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function arrayMergeRecursiveProviderWarning(): array
|
||||
{
|
||||
return [
|
||||
// error <2 arguments
|
||||
'too view arguments' => [
|
||||
'arrayMergeRecursive needs two or more array arguments',
|
||||
[1]
|
||||
],
|
||||
// error <2 arrays
|
||||
'only one array' => [
|
||||
'arrayMergeRecursive needs two or more array arguments',
|
||||
[1],
|
||||
true,
|
||||
],
|
||||
// error element is not array
|
||||
'non array between array' => [
|
||||
'arrayMergeRecursive encountered a non array argument',
|
||||
[1],
|
||||
'string',
|
||||
[2]
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function arrayCompareProvider(): array
|
||||
{
|
||||
return [
|
||||
'one matching' => [
|
||||
['a', 'b', 'c'],
|
||||
['c', 'd', 'e'],
|
||||
['a', 'b', 'd', 'e']
|
||||
],
|
||||
'all the same' => [
|
||||
['a', 'b', 'c'],
|
||||
['a', 'b', 'c'],
|
||||
[]
|
||||
],
|
||||
'all different' => [
|
||||
['a', 'b'],
|
||||
['c', 'd'],
|
||||
['a', 'b', 'c', 'd']
|
||||
],
|
||||
'empty arrays' => [
|
||||
[],
|
||||
[],
|
||||
[]
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function inArrayAnyProvider(): array
|
||||
{
|
||||
return [
|
||||
'all exist in haystack' => [
|
||||
[1],
|
||||
[1, 2, 3, 4],
|
||||
[1]
|
||||
],
|
||||
'not all exist in haystack' => [
|
||||
[1, 5],
|
||||
[1, 2, 3, 4],
|
||||
[1]
|
||||
],
|
||||
'none exist in haystack' => [
|
||||
[5],
|
||||
[1, 2, 3, 4],
|
||||
false
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
public function genAssocArrayProvider(): array
|
||||
{
|
||||
return [
|
||||
'non set' => [
|
||||
[
|
||||
0 => ['a' => 'a1', 'b' => 2],
|
||||
1 => ['a' => 'a2', 'b' => 3],
|
||||
2 => ['a' => '', 'b' => null],
|
||||
],
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
[],
|
||||
],
|
||||
'key set' => [
|
||||
[
|
||||
0 => ['a' => 'a1', 'b' => 2],
|
||||
1 => ['a' => 'a2', 'b' => 3],
|
||||
2 => ['a' => '', 'b' => null],
|
||||
],
|
||||
'a',
|
||||
false,
|
||||
false,
|
||||
['a1' => 0, 'a2' => 1],
|
||||
],
|
||||
'value set' => [
|
||||
[
|
||||
0 => ['a' => 'a1', 'b' => 2],
|
||||
1 => ['a' => 'a2', 'b' => 3],
|
||||
2 => ['a' => '', 'b' => null],
|
||||
],
|
||||
false,
|
||||
'a',
|
||||
false,
|
||||
[0 => 'a1', 1 => 'a2', 2 => ''],
|
||||
],
|
||||
'key and value set, add empty, null' => [
|
||||
[
|
||||
0 => ['a' => 'a1', 'b' => 2],
|
||||
1 => ['a' => 'a2', 'b' => 3],
|
||||
2 => ['a' => '', 'b' => null],
|
||||
],
|
||||
'a',
|
||||
'b',
|
||||
false,
|
||||
['a1' => 2, 'a2' => 3],
|
||||
],
|
||||
'key and value set, add empty' => [
|
||||
[
|
||||
0 => ['a' => 'a1', 'b' => 2],
|
||||
1 => ['a' => 'a2', 'b' => 3],
|
||||
2 => ['a' => '', 'b' => ''],
|
||||
3 => ['a' => 'a4', 'b' => ''],
|
||||
],
|
||||
'a',
|
||||
'b',
|
||||
false,
|
||||
['a1' => 2, 'a2' => 3, 'a4' => ''],
|
||||
],
|
||||
'key/value set, skip empty' => [
|
||||
[
|
||||
0 => ['a' => 'a1', 'b' => 2],
|
||||
1 => ['a' => 'a2', 'b' => 3],
|
||||
2 => ['a' => '', 'b' => null],
|
||||
],
|
||||
'a',
|
||||
'b',
|
||||
true,
|
||||
['a1' => 2, 'a2' => 3],
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function flattenArrayProvider(): array
|
||||
{
|
||||
return [
|
||||
'array key/value, single' => [
|
||||
0 => ['a' => 'foo', 1 => 'bar', 'c' => 2],
|
||||
1 => ['foo', 'bar', 2],
|
||||
2 => ['a', 1, 'c'],
|
||||
3 => ['a', 1, 'c'],
|
||||
],
|
||||
'array values, single' => [
|
||||
0 => ['foo', 'bar', 2],
|
||||
1 => ['foo', 'bar', 2],
|
||||
2 => [0, 1, 2],
|
||||
3 => [0, 1, 2],
|
||||
],
|
||||
'array key/value, multi' => [
|
||||
0 => [
|
||||
'a' => ['a1' => 'a1foo', 'a2' => 'a1bar'],
|
||||
1 => 'bar',
|
||||
'c' => [2, 3, 4],
|
||||
'd' => [
|
||||
'e' => [
|
||||
'de1' => 'subfoo', 'de2' => 'subbar', 'a2' => 'a1bar'
|
||||
]
|
||||
]
|
||||
],
|
||||
1 => ['a1foo', 'a1bar', 'bar', 2, 3, 4, 'subfoo', 'subbar', 'a1bar'],
|
||||
2 => ['a', 'a1', 'a2', 1, 'c', 0, 1, 2, 'd', 'e', 'de1', 'de2', 'a2'],
|
||||
3 => ['a1', 'a2', 1, 0, 1, 2, 'de1', 'de2', 'a2'],
|
||||
],
|
||||
'array with double values' => [
|
||||
0 => ['a', 'a', 'b'],
|
||||
1 => ['a', 'a', 'b'],
|
||||
2 => [0, 1, 2],
|
||||
3 => [0, 1, 2],
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* use the flattenArrayProvider and replace 1 with 2 array pos
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function flattenArrayKeyProvider(): array
|
||||
{
|
||||
$list = [];
|
||||
foreach ($this->flattenArrayProvider() as $key => $row) {
|
||||
$list[$key] = [
|
||||
$row[0],
|
||||
$row[2],
|
||||
];
|
||||
}
|
||||
return $list;
|
||||
}
|
||||
|
||||
/**
|
||||
* use the flattenArrayProvider and replace 1 with 3 array pos
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function flattenArrayKeyLeavesOnlyProvider(): array
|
||||
{
|
||||
$list = [];
|
||||
foreach ($this->flattenArrayProvider() as $key => $row) {
|
||||
$list[$key] = [
|
||||
$row[0],
|
||||
$row[3],
|
||||
];
|
||||
}
|
||||
return $list;
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function arrayFlatForKeyProvider(): array
|
||||
{
|
||||
return [
|
||||
'all present, single level' => [
|
||||
0 => [
|
||||
'a' => ['b1' => 'foo', 'a2' => 'a-foo'],
|
||||
'b' => ['b1' => 'bar', 'a2' => 'b-foo'],
|
||||
'c' => ['b1' => 'foobar', 'a2' => 'c-foo'],
|
||||
],
|
||||
1 => 'a2',
|
||||
2 => [
|
||||
'a' => 'a-foo',
|
||||
'b' => 'b-foo',
|
||||
'c' => 'c-foo',
|
||||
],
|
||||
],
|
||||
'no sub arrays' => [
|
||||
0 => ['a', 'b', 'c'],
|
||||
1 => 'a',
|
||||
2 => ['a', 'b', 'c'],
|
||||
],
|
||||
'sub arrays with missing' => [
|
||||
0 => [
|
||||
'a' => ['b1' => 'foo', 'a2' => 'a-foo'],
|
||||
'b' => ['b1' => 'bar'],
|
||||
'c' => ['b1' => 'foobar', 'a2' => 'c-foo'],
|
||||
],
|
||||
1 => 'a2',
|
||||
2 => [
|
||||
'a' => 'a-foo',
|
||||
'b' => ['b1' => 'bar'],
|
||||
'c' => 'c-foo',
|
||||
],
|
||||
],
|
||||
'deep nested sub arrays' => [
|
||||
0 => [
|
||||
'a' => [
|
||||
'b1' => 'foo',
|
||||
'a2' => [
|
||||
'text' => ['a-foo', 'a-bar'],
|
||||
],
|
||||
],
|
||||
'b' => [
|
||||
'b1' => 'bar',
|
||||
'a2' => [
|
||||
'text' => 'b-foo',
|
||||
],
|
||||
],
|
||||
],
|
||||
1 => 'a2',
|
||||
2 => [
|
||||
'a' => [
|
||||
'text' => ['a-foo', 'a-bar'],
|
||||
],
|
||||
'b' => [
|
||||
'text' => 'b-foo',
|
||||
],
|
||||
],
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::arraySearchRecursive
|
||||
* @dataProvider arraySearchRecursiveProvider
|
||||
* @testdox arraySearchRecursive $needle (key $key_search_for) in $input and will be $expected [$_dataName]
|
||||
*
|
||||
* @param string|null $needle
|
||||
* @param array $input
|
||||
* @param string|null $key_search_for
|
||||
* @return void
|
||||
*/
|
||||
public function testArraySearchRecursive($needle, array $input, ?string $key_search_for, array $expected): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Combined\ArrayHandler::arraySearchRecursive($needle, $input, $key_search_for)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::arraySearchRecursiveAll
|
||||
* @dataProvider arraySearchRecursiveAllProvider
|
||||
* @testdox arraySearchRecursiveAll $needle (key $key_search_for) in $input and will be $expected (old: $flag) [$_dataName]
|
||||
*
|
||||
* @param string|null $needle
|
||||
* @param array $input
|
||||
* @param string|null $key_search_for
|
||||
* @param bool $flag
|
||||
* @return void
|
||||
*/
|
||||
public function testArraySearchRecursiveAll($needle, array $input, ?string $key_search_for, bool $flag, array $expected): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Combined\ArrayHandler::arraySearchRecursiveAll($needle, $input, $key_search_for, $flag)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::arraySearchSimple
|
||||
* @dataProvider arraySearchSimpleProvider
|
||||
* @testdox arraySearchSimple $input searched with key: $key / value: $value (strict: $flag) will be $expected [$_dataName]
|
||||
*
|
||||
* @param array $input
|
||||
* @param string|int $key
|
||||
* @param string|int $value
|
||||
* @param bool $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testArraySearchSimple(array $input, $key, $value, bool $flag, bool $expected): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Combined\ArrayHandler::arraySearchSimple($input, $key, $value, $flag)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::arrayMergeRecursive
|
||||
* @dataProvider arrayMergeRecursiveProvider
|
||||
* @testdox arrayMergeRecursive ... [$_dataName]
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
*/
|
||||
public function testArrayMergeRecursive(): void
|
||||
{
|
||||
$arrays = func_get_args();
|
||||
// first is expected array, always
|
||||
$expected = array_shift($arrays);
|
||||
$output = \CoreLibs\Combined\ArrayHandler::arrayMergeRecursive(
|
||||
...$arrays
|
||||
);
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
$output
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::arrayMergeRecursive
|
||||
* @dataProvider arrayMergeRecursiveProviderWarning
|
||||
* @testdox arrayMergeRecursive with E_USER_WARNING [$_dataName]
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testArrayMergeRecursiveWarningA(): void
|
||||
{
|
||||
$arrays = func_get_args();
|
||||
// first is expected warning
|
||||
$warning = array_shift($arrays);
|
||||
$this->expectWarning();
|
||||
$this->expectWarningMessage($warning);
|
||||
\CoreLibs\Combined\ArrayHandler::arrayMergeRecursive(...$arrays);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::arrayDiff
|
||||
* @dataProvider arrayCompareProvider
|
||||
* @testdox arrayDiff $input_a diff $input_b will be $expected [$_dataName]
|
||||
*
|
||||
* @param array $input_a
|
||||
* @param array $input_b
|
||||
* @param array $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testArrayDiff(array $input_a, array $input_b, array $expected): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Combined\ArrayHandler::arrayDiff($input_a, $input_b)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::inArrayAny
|
||||
* @dataProvider inArrayAnyProvider
|
||||
* @testdox inArrayAny needle $input_a in haystack $input_b will be $expected [$_dataName]
|
||||
*
|
||||
* @param array $input_a
|
||||
* @param array $input_b
|
||||
* @param array|bool $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testInArrayAny(array $input_a, array $input_b, $expected): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Combined\ArrayHandler::inArrayAny($input_a, $input_b)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::genAssocArray
|
||||
* @dataProvider genAssocArrayProvider
|
||||
* @testdox genAssocArray array $input with $key or $value and flag set only $flag will be $expected [$_dataName]
|
||||
*
|
||||
* @param array $input
|
||||
* @param string|int|bool $key
|
||||
* @param string|int|bool $value
|
||||
* @param bool $flag
|
||||
* @param array $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testGenAssocArray(array $input, $key, $value, bool $flag, array $expected): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Combined\ArrayHandler::genAssocArray($input, $key, $value, $flag)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::flattenArray
|
||||
* @dataProvider flattenArrayProvider
|
||||
* @testdox testFlattenArray array $input will be $expected [$_dataName]
|
||||
*
|
||||
* @param array $input
|
||||
* @param array $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testFlattenyArray(array $input, array $expected): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Combined\ArrayHandler::flattenArray($input)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::flattenArrayKey
|
||||
* @dataProvider flattenArrayKeyProvider
|
||||
* @testdox flattenArrayKey array $input will be $expected [$_dataName]
|
||||
*
|
||||
* @param array $input
|
||||
* @param array $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testFlattenArrayKey(array $input, array $expected): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Combined\ArrayHandler::flattenArrayKey($input)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::flattenArrayKeyLeavesOnly
|
||||
* @dataProvider flattenArrayKeyLeavesOnlyProvider
|
||||
* @testdox flattenArrayKeyLeavesOnly array $input will be $expected [$_dataName]
|
||||
*
|
||||
* @param array $input
|
||||
* @param array $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testFlattenArrayKeyLeavesOnly(array $input, array $expected): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Combined\ArrayHandler::flattenArrayKeyLeavesOnly($input)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::arrayFlatForKey
|
||||
* @dataProvider arrayFlatForKeyProvider
|
||||
* @testdox arrayFlatForKey array $input will be $expected [$_dataName]
|
||||
*
|
||||
* @param array $input
|
||||
* @param array $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testArrayFlatForKey(array $input, $search, array $expected): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Combined\ArrayHandler::arrayFlatForKey($input, $search)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
630
4dev/tests/CoreLibsCombinedDateTimeTest.php
Normal file
630
4dev/tests/CoreLibsCombinedDateTimeTest.php
Normal file
@@ -0,0 +1,630 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* Test class for Combined\DateTime
|
||||
* @coversDefaultClass \CoreLibs\Combined\DateTime
|
||||
* @testdox \CoreLibs\Combined\DateTime method tests
|
||||
*/
|
||||
final class CoreLibsCombinedDateTimeTest extends TestCase
|
||||
{
|
||||
|
||||
/**
|
||||
* timestamps
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function timestampProvider(): array
|
||||
{
|
||||
return [
|
||||
'valid timestamp no microtime' => [
|
||||
1641515890,
|
||||
false,
|
||||
false,
|
||||
'2022-01-07 09:38:10',
|
||||
],
|
||||
'valid timestamp with microtime' => [
|
||||
1641515890,
|
||||
true,
|
||||
false,
|
||||
'2022-01-07 09:38:10',
|
||||
],
|
||||
'valid timestamp with microtime float' => [
|
||||
1641515890,
|
||||
true,
|
||||
true,
|
||||
'2022-01-07 09:38:10',
|
||||
],
|
||||
'valid micro timestamp with microtime' => [
|
||||
1641515890.123456,
|
||||
true,
|
||||
false,
|
||||
'2022-01-07 09:38:10 1235ms',
|
||||
],
|
||||
'valid micro timestamp with microtime float' => [
|
||||
1641515890.123456,
|
||||
true,
|
||||
true,
|
||||
'2022-01-07 09:38:10.1235',
|
||||
],
|
||||
'valid micro timestamp no microtime' => [
|
||||
1641515890.123456,
|
||||
false,
|
||||
false,
|
||||
'2022-01-07 09:38:10',
|
||||
],
|
||||
'invalid timestamp' => [
|
||||
-123123,
|
||||
false,
|
||||
false,
|
||||
'1969-12-30 22:47:57',
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* interval for both directions
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function intervalProvider(): array
|
||||
{
|
||||
return [
|
||||
'interval no microtime' => [
|
||||
1641515890,
|
||||
false,
|
||||
'18999d 0h 38m 10s',
|
||||
],
|
||||
'interval with microtime' => [
|
||||
1641515890,
|
||||
true,
|
||||
'18999d 0h 38m 10s',
|
||||
],
|
||||
'micro interval no microtime' => [
|
||||
1641515890.123456,
|
||||
false,
|
||||
'18999d 0h 38m 10s',
|
||||
],
|
||||
'micro interval with microtime' => [
|
||||
1641515890.123456,
|
||||
true,
|
||||
'18999d 0h 38m 10s 1235ms',
|
||||
],
|
||||
'negative interval no microtime' => [
|
||||
-1641515890,
|
||||
false,
|
||||
'-18999d 0h 38m 10s',
|
||||
],
|
||||
// short for mini tests
|
||||
'microtime only' => [
|
||||
0.123456,
|
||||
true,
|
||||
'0s 1235ms',
|
||||
],
|
||||
'seconds only' => [
|
||||
30.123456,
|
||||
true,
|
||||
'30s 1235ms',
|
||||
],
|
||||
'minutes only' => [
|
||||
90.123456,
|
||||
true,
|
||||
'1m 30s 1235ms',
|
||||
],
|
||||
'hours only' => [
|
||||
3690.123456,
|
||||
true,
|
||||
'1h 1m 30s 1235ms',
|
||||
],
|
||||
'days only' => [
|
||||
90090.123456,
|
||||
true,
|
||||
'1d 1h 1m 30s 1235ms',
|
||||
],
|
||||
'already set' => [
|
||||
'1d 1h 1m 30s 1235ms',
|
||||
true,
|
||||
'1d 1h 1m 30s 1235ms',
|
||||
],
|
||||
'invalid data' => [
|
||||
'xyz',
|
||||
true,
|
||||
'0s',
|
||||
],
|
||||
'out of bounds timestamp' => [
|
||||
999999999999999,
|
||||
false,
|
||||
'1s'
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function reverseIntervalProvider(): array
|
||||
{
|
||||
return [
|
||||
'interval no microtime' => [
|
||||
'18999d 0h 38m 10s',
|
||||
1641515890,
|
||||
],
|
||||
'micro interval with microtime' => [
|
||||
'18999d 0h 38m 10s 1235ms',
|
||||
1641515890.1235,
|
||||
],
|
||||
'micro interval with microtime' => [
|
||||
'18999d 0h 38m 10s 1234567890ms',
|
||||
1641515890.1234567,
|
||||
],
|
||||
'negative interval no microtime' => [
|
||||
'-18999d 0h 38m 10s',
|
||||
-1641515890,
|
||||
],
|
||||
// short for mini tests
|
||||
'microtime only' => [
|
||||
'0s 1235ms',
|
||||
0.1235,
|
||||
],
|
||||
'seconds only' => [
|
||||
'30s 1235ms',
|
||||
30.1235,
|
||||
],
|
||||
'minutes only' => [
|
||||
'1m 30s 1235ms',
|
||||
90.1235,
|
||||
],
|
||||
'hours only' => [
|
||||
'1h 1m 30s 1235ms',
|
||||
3690.1235,
|
||||
],
|
||||
'days only' => [
|
||||
'1d 1h 1m 30s 1235ms',
|
||||
90090.1235,
|
||||
],
|
||||
'already set' => [
|
||||
1641515890,
|
||||
1641515890,
|
||||
],
|
||||
'invalid data' => [
|
||||
'xyz',
|
||||
'xyz',
|
||||
],
|
||||
'out of bound data' => [
|
||||
'99999999999999999999d',
|
||||
8.64E+24
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function dateProvider(): array
|
||||
{
|
||||
return [
|
||||
'valid date with -' => [
|
||||
'2021-12-12',
|
||||
true,
|
||||
],
|
||||
'valid date with /' => [
|
||||
'2021/12/12',
|
||||
true,
|
||||
],
|
||||
'valid date time with -' => [
|
||||
'2021-12-12 12:12:12',
|
||||
true,
|
||||
],
|
||||
'invalid date' => [
|
||||
'2021-31-31',
|
||||
false,
|
||||
],
|
||||
'invalid date string' => [
|
||||
'xyz',
|
||||
false,
|
||||
],
|
||||
'out of bound date' => [
|
||||
'9999-12-31',
|
||||
true
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function dateTimeProvider(): array
|
||||
{
|
||||
return [
|
||||
'valid date time with -' => [
|
||||
'2021-12-12 12:12:12',
|
||||
true,
|
||||
],
|
||||
'valid date time with /' => [
|
||||
'2021/12/12 12:12:12',
|
||||
true,
|
||||
],
|
||||
'vald date time with hour/min' => [
|
||||
'2021/12/12 12:12',
|
||||
true,
|
||||
],
|
||||
'valid date missing time' => [
|
||||
'2021-12-12',
|
||||
false,
|
||||
],
|
||||
'valid date invalid time string' => [
|
||||
'2021-12-12 ab:cd',
|
||||
false,
|
||||
],
|
||||
'invalid hour +' => [
|
||||
'2021-12-12 35:12',
|
||||
false,
|
||||
],
|
||||
'invalid hour -' => [
|
||||
'2021-12-12 -12:12',
|
||||
false,
|
||||
],
|
||||
'invalid minute +' => [
|
||||
'2021-12-12 23:65:12',
|
||||
false,
|
||||
],
|
||||
'invalid minute -' => [
|
||||
'2021-12-12 23:-12:12',
|
||||
false,
|
||||
],
|
||||
'invalid seconds +' => [
|
||||
'2021-12-12 23:12:99',
|
||||
false,
|
||||
],
|
||||
'invalid seconds -' => [
|
||||
'2021-12-12 23:12:-12',
|
||||
false,
|
||||
],
|
||||
'invalid seconds string' => [
|
||||
'2021-12-12 23:12:ss',
|
||||
false,
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function dateCompareProvider(): array
|
||||
{
|
||||
return [
|
||||
'first date smaller' => [
|
||||
'2020-12-12',
|
||||
'2021-12-12',
|
||||
-1,
|
||||
],
|
||||
'dates equal' => [
|
||||
'2020-12-12',
|
||||
'2020-12-12',
|
||||
0,
|
||||
],
|
||||
'second date smaller' => [
|
||||
'2021-12-12',
|
||||
'2020-12-12',
|
||||
1
|
||||
],
|
||||
'dates equal with different time' => [
|
||||
'2020-12-12 12:12:12',
|
||||
'2020-12-12 13:13:13',
|
||||
0,
|
||||
],
|
||||
'invalid dates --' => [
|
||||
'--',
|
||||
'--',
|
||||
false
|
||||
],
|
||||
'empty dates' => [
|
||||
'',
|
||||
'',
|
||||
false
|
||||
],
|
||||
'invalid dates' => [
|
||||
'not a date',
|
||||
'not a date either',
|
||||
false,
|
||||
],
|
||||
'out of bound dates' => [
|
||||
'1900-1-1',
|
||||
'9999-12-31',
|
||||
-1
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
public function dateTimeCompareProvider(): array
|
||||
{
|
||||
return [
|
||||
'first date smaller no time' => [
|
||||
'2020-12-12',
|
||||
'2021-12-12',
|
||||
-1,
|
||||
],
|
||||
'dates equal no timestamp' => [
|
||||
'2020-12-12',
|
||||
'2020-12-12',
|
||||
0,
|
||||
],
|
||||
'second date smaller no timestamp' => [
|
||||
'2021-12-12',
|
||||
'2020-12-12',
|
||||
1
|
||||
],
|
||||
'date equal first time smaller' => [
|
||||
'2020-12-12 12:12:12',
|
||||
'2020-12-12 13:13:13',
|
||||
-1,
|
||||
],
|
||||
'date equal time equal' => [
|
||||
'2020-12-12 12:12:12',
|
||||
'2020-12-12 12:12:12',
|
||||
0,
|
||||
],
|
||||
'date equal second time smaller' => [
|
||||
'2020-12-12 13:13:13',
|
||||
'2020-12-12 12:12:12',
|
||||
1,
|
||||
],
|
||||
'valid date invalid time' => [
|
||||
'2020-12-12 13:99:13',
|
||||
'2020-12-12 12:12:99',
|
||||
false,
|
||||
],
|
||||
'invalid datetimes --' => [
|
||||
'--',
|
||||
'--',
|
||||
false,
|
||||
],
|
||||
'empty datetimess' => [
|
||||
'',
|
||||
'',
|
||||
false,
|
||||
],
|
||||
'invalid datetimes' => [
|
||||
'not a date',
|
||||
'not a date either',
|
||||
false,
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function daysIntervalProvider(): array
|
||||
{
|
||||
return [
|
||||
'valid interval /, not named array' => [
|
||||
'2020/1/1',
|
||||
'2020/1/30',
|
||||
false,
|
||||
[29, 22, 8],
|
||||
],
|
||||
'valid interval /, named array' => [
|
||||
'2020/1/1',
|
||||
'2020/1/30',
|
||||
true,
|
||||
['overall' => 29, 'weekday' => 22, 'weekend' => 8],
|
||||
],
|
||||
'valid interval -' => [
|
||||
'2020-1-1',
|
||||
'2020-1-30',
|
||||
false,
|
||||
[29, 22, 8],
|
||||
],
|
||||
'valid interval switched' => [
|
||||
'2020/1/30',
|
||||
'2020/1/1',
|
||||
false,
|
||||
[28, 0, 0],
|
||||
],
|
||||
'valid interval with time' => [
|
||||
'2020/1/1 12:12:12',
|
||||
'2020/1/30 13:13:13',
|
||||
false,
|
||||
[28, 21, 8],
|
||||
],
|
||||
'invalid dates' => [
|
||||
'abc',
|
||||
'xyz',
|
||||
false,
|
||||
[0, 0, 0]
|
||||
],
|
||||
// this test will take a long imte
|
||||
'out of bound dates' => [
|
||||
'1900-1-1',
|
||||
'9999-12-31',
|
||||
false,
|
||||
[2958463,2113189,845274],
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* date string convert test
|
||||
*
|
||||
* @covers ::dateStringFormat
|
||||
* @dataProvider timestampProvider
|
||||
* @testdox dateStringFormat $input (microtime $flag) will be $expected [$_dataName]
|
||||
*
|
||||
* @param int|float $input
|
||||
* @param bool $flag
|
||||
* @param string $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testDateStringFormat(
|
||||
$input,
|
||||
bool $flag_show_micro,
|
||||
bool $flag_micro_as_float,
|
||||
string $expected
|
||||
): void {
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Combined\DateTime::dateStringFormat(
|
||||
$input,
|
||||
$flag_show_micro,
|
||||
$flag_micro_as_float
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* interval convert test
|
||||
*
|
||||
* @covers ::timeStringFormat
|
||||
* @dataProvider intervalProvider
|
||||
* @testdox timeStringFormat $input (microtime $flag) will be $expected [$_dataName]
|
||||
*
|
||||
* @param int|float $input
|
||||
* @param bool $flag
|
||||
* @param string $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testTimeStringFormat($input, bool $flag, string $expected): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Combined\DateTime::timeStringFormat($input, $flag)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::stringToTime
|
||||
* @dataProvider reverseIntervalProvider
|
||||
* @testdox stringToTime $input will be $expected [$_dataName]
|
||||
*
|
||||
* @param string|int|float $input
|
||||
* @param string|int|float $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testStringToTime($input, $expected): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Combined\DateTime::stringToTime($input)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::checkDate
|
||||
* @dataProvider dateProvider
|
||||
* @testdox checkDate $input will be $expected [$_dataName]
|
||||
*
|
||||
* @param string $input
|
||||
* @param bool $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testCheckDate(string $input, bool $expected): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Combined\DateTime::checkDate($input)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::checkDateTime
|
||||
* @dataProvider dateTimeProvider
|
||||
* @testdox checkDateTime $input will be $expected [$_dataName]
|
||||
*
|
||||
* @param string $input
|
||||
* @param bool $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testCheckDateTime(string $input, bool $expected): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Combined\DateTime::checkDateTime($input)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::compareDate
|
||||
* @dataProvider dateCompareProvider
|
||||
* @testdox compareDate $input_a compared to $input_b will be $expected [$_dataName]
|
||||
*
|
||||
* @param string $input_a
|
||||
* @param string $input_b
|
||||
* @param int|bool $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testCompareDate(string $input_a, string $input_b, $expected): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Combined\DateTime::compareDate($input_a, $input_b)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::compareDateTime
|
||||
* @dataProvider dateTimeCompareProvider
|
||||
* @testdox compareDateTime $input_a compared to $input_b will be $expected [$_dataName]
|
||||
*
|
||||
* @param string $input_a
|
||||
* @param string $input_b
|
||||
* @param int|bool $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testCompareDateTime(string $input_a, string $input_b, $expected): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Combined\DateTime::compareDateTime($input_a, $input_b)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::calcDaysInterval
|
||||
* @dataProvider daysIntervalProvider
|
||||
* @testdox calcDaysInterval $input_a compared to $input_b will be $expected [$_dataName]
|
||||
* @medium
|
||||
*
|
||||
* @param string $input_a
|
||||
* @param string $input_b
|
||||
* @param bool $flag
|
||||
* @param array $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testCalcDaysInterval(string $input_a, string $input_b, bool $flag, $expected): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Combined\DateTime::calcDaysInterval($input_a, $input_b, $flag)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
222
4dev/tests/CoreLibsConvertByteTest.php
Normal file
222
4dev/tests/CoreLibsConvertByteTest.php
Normal file
@@ -0,0 +1,222 @@
|
||||
<?php
|
||||
|
||||
// because we have long testdox lines
|
||||
// phpcs:disable Generic.Files.LineLength
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* Test class for Convert\Byte
|
||||
* @coversDefaultClass \CoreLibs\Convert\Byte
|
||||
* @testdox \CoreLibs\Convert\Byte method tests
|
||||
*/
|
||||
final class CoreLibsConvertByteTest extends TestCase
|
||||
{
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function byteProvider(): array
|
||||
{
|
||||
return [
|
||||
'negative number' => [
|
||||
0 => -123123123,
|
||||
1 => '-117.42 MB',
|
||||
2 => '-123.12 MiB',
|
||||
3 => '-117.42MB',
|
||||
4 => '-117.42 MB',
|
||||
5 => '-123.12MiB',
|
||||
],
|
||||
'kilobyte minus one' => [
|
||||
0 => 999999, // KB-1
|
||||
1 => '976.56 KB',
|
||||
2 => '1 MiB',
|
||||
3 => '976.56KB',
|
||||
4 => '976.56 KB',
|
||||
5 => '1MiB',
|
||||
],
|
||||
'megabyte minus one' => [
|
||||
0 => 999999999, // MB-1
|
||||
1 => '953.67 MB',
|
||||
2 => '1 GiB',
|
||||
3 => '953.67MB',
|
||||
4 => '953.67 MB',
|
||||
5 => '1GiB',
|
||||
],
|
||||
'megabyte' => [
|
||||
0 => 254779258,
|
||||
1 => '242.98 MB',
|
||||
2 => '254.78 MiB',
|
||||
3 => '242.98MB',
|
||||
4 => '242.98 MB',
|
||||
5 => '254.78MiB',
|
||||
],
|
||||
'terabyte minus one' => [
|
||||
0 => 999999999999999, // TB-1
|
||||
1 => '909.49 TB',
|
||||
2 => '1 PiB',
|
||||
3 => '909.49TB',
|
||||
4 => '909.49 TB',
|
||||
5 => '1PiB',
|
||||
],
|
||||
'terabyte' => [
|
||||
0 => 588795544887632, // TB-n
|
||||
1 => '535.51 TB',
|
||||
2 => '588.8 TiB',
|
||||
3 => '535.51TB',
|
||||
4 => '535.51 TB',
|
||||
5 => '588.8TiB',
|
||||
],
|
||||
'petabyte minus one' => [
|
||||
0 => 999999999999999999, // PB-1
|
||||
1 => '888.18 PB',
|
||||
2 => '1 EiB',
|
||||
3 => '888.18PB',
|
||||
4 => '888.18 PB',
|
||||
5 => '1EiB',
|
||||
],
|
||||
'max int value' => [
|
||||
0 => 9223372036854775807, // MAX INT
|
||||
1 => '8 EB',
|
||||
2 => '9.22 EiB',
|
||||
3 => '8EB',
|
||||
4 => '8.00 EB',
|
||||
5 => '9.22EiB',
|
||||
],
|
||||
'exabyte minus 1' => [
|
||||
0 => 999999999999999999999, // EB-1
|
||||
1 => '867.36 EB',
|
||||
2 => '1000 EiB',
|
||||
3 => '867.36EB',
|
||||
4 => '867.36 EB',
|
||||
5 => '1000EiB',
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function byteStringProvider(): array
|
||||
{
|
||||
return [
|
||||
'negative number' => [
|
||||
0 => '-117.42 MB',
|
||||
1 => -123123794,
|
||||
2 => -117420000,
|
||||
],
|
||||
'megabyte' => [
|
||||
0 => '242.98 MB',
|
||||
1 => 254782996,
|
||||
2 => 242980000
|
||||
],
|
||||
'megabyte si' => [
|
||||
0 => '254.78 MiB',
|
||||
1 => 267156193,
|
||||
2 => 254780000
|
||||
],
|
||||
'petabyte' => [
|
||||
0 => '1 EiB',
|
||||
1 => 1152921504606846976,
|
||||
2 => 1000000000000000000,
|
||||
],
|
||||
'max int' => [
|
||||
0 => '8 EB',
|
||||
1 => -9223372036854775807 - 1,
|
||||
2 => 8000000000000000000,
|
||||
],
|
||||
'exabyte, overflow' => [
|
||||
0 => '867.36EB',
|
||||
1 => 3873816255479021568,
|
||||
2 => 363028535651074048,
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::humanReadableByteFormat
|
||||
* @dataProvider byteProvider
|
||||
* @testdox humanReadableByteFormat $input will be $expected, $expected_si SI, $expected_no_space no space, $expected_adjust adjust, $expected_si_no_space SI/no space [$_dataName]
|
||||
*
|
||||
* @param string|int|float $input
|
||||
* @param string $expected
|
||||
* @param string $expected_si
|
||||
* @param string $expected_no_space
|
||||
* @param string $expected_adjust
|
||||
* @param string $expected_si_no_space
|
||||
* @return void
|
||||
*/
|
||||
public function testHumanReadableByteFormat(
|
||||
$input,
|
||||
string $expected,
|
||||
string $expected_si,
|
||||
string $expected_no_space,
|
||||
string $expected_adjust,
|
||||
string $expected_si_no_space
|
||||
): void {
|
||||
// 1024
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Convert\Byte::humanReadableByteFormat($input)
|
||||
);
|
||||
// 1000
|
||||
$this->assertEquals(
|
||||
$expected_si,
|
||||
\CoreLibs\Convert\Byte::humanReadableByteFormat($input, \CoreLibs\Convert\Byte::BYTE_FORMAT_SI)
|
||||
);
|
||||
// no space
|
||||
$this->assertEquals(
|
||||
$expected_no_space,
|
||||
\CoreLibs\Convert\Byte::humanReadableByteFormat($input, \CoreLibs\Convert\Byte::BYTE_FORMAT_NOSPACE)
|
||||
);
|
||||
// always 2 decimals
|
||||
$this->assertEquals(
|
||||
$expected_adjust,
|
||||
\CoreLibs\Convert\Byte::humanReadableByteFormat($input, \CoreLibs\Convert\Byte::BYTE_FORMAT_ADJUST)
|
||||
);
|
||||
// combined si + no space
|
||||
$this->assertEquals(
|
||||
$expected_si_no_space,
|
||||
\CoreLibs\Convert\Byte::humanReadableByteFormat(
|
||||
$input,
|
||||
\CoreLibs\Convert\Byte::BYTE_FORMAT_SI | \CoreLibs\Convert\Byte::BYTE_FORMAT_NOSPACE
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::stringByteFormat
|
||||
* @dataProvider byteStringProvider
|
||||
* @testdox stringByteFormat $input will be $expected and $expected_si SI [$_dataName]
|
||||
*
|
||||
* @param string|int|float $input
|
||||
* @param string|int|float $expected
|
||||
* @param string|int|float $expected_si
|
||||
* @return void
|
||||
*/
|
||||
public function testStringByteFormat($input, $expected, $expected_si): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Convert\Byte::stringByteFormat($input)
|
||||
);
|
||||
$this->assertEquals(
|
||||
$expected_si,
|
||||
\CoreLibs\Convert\Byte::stringByteFormat($input, \CoreLibs\Convert\Byte::BYTE_FORMAT_SI)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
387
4dev/tests/CoreLibsConvertColorsTest.php
Normal file
387
4dev/tests/CoreLibsConvertColorsTest.php
Normal file
@@ -0,0 +1,387 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* Test class for Convert\Colors
|
||||
* @coversDefaultClass \CoreLibs\Convert\Colors
|
||||
* @testdox \CoreLibs\Convert\Colors method tests
|
||||
*/
|
||||
final class CoreLibsConvertColorsTest extends TestCase
|
||||
{
|
||||
// convert list
|
||||
public static $colors = [];
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function rgb2hexColorProvider(): array
|
||||
{
|
||||
return [
|
||||
'color' => [
|
||||
0 => 10,
|
||||
1 => 100,
|
||||
2 => 200,
|
||||
3 => '#0a64c8',
|
||||
4 => '0a64c8'
|
||||
],
|
||||
'gray' => [
|
||||
0 => 12,
|
||||
1 => 12,
|
||||
2 => 12,
|
||||
3 => '#0c0c0c',
|
||||
4 => '0c0c0c',
|
||||
],
|
||||
'black' => [
|
||||
0 => 0,
|
||||
1 => 0,
|
||||
2 => 0,
|
||||
3 => '#000000',
|
||||
4 => '000000',
|
||||
],
|
||||
'white' => [
|
||||
0 => 255,
|
||||
1 => 255,
|
||||
2 => 255,
|
||||
3 => '#ffffff',
|
||||
4 => 'ffffff',
|
||||
],
|
||||
'invalid color red & green' => [
|
||||
0 => -12,
|
||||
1 => 300,
|
||||
2 => 12,
|
||||
3 => false,
|
||||
4 => false
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function hex2rgbColorProvider(): array
|
||||
{
|
||||
return [
|
||||
'color' => [
|
||||
0 => '#0a64c8',
|
||||
1 => ['r' => 10, 'g' => 100, 'b' => 200],
|
||||
2 => '10,100,200',
|
||||
3 => ';',
|
||||
4 => '10;100;200',
|
||||
],
|
||||
'gray, long' => [
|
||||
0 => '0c0c0c',
|
||||
1 => ['r' => 12, 'g' => 12, 'b' => 12],
|
||||
2 => '12,12,12',
|
||||
3 => ';',
|
||||
4 => '12;12;12',
|
||||
],
|
||||
'gray, short' => [
|
||||
0 => 'ccc',
|
||||
1 => ['r' => 204, 'g' => 204, 'b' => 204],
|
||||
2 => '204,204,204',
|
||||
3 => ';',
|
||||
4 => '204;204;204',
|
||||
],
|
||||
'hex string with #' => [
|
||||
0 => '#0c0c0c',
|
||||
1 => ['r' => 12, 'g' => 12, 'b' => 12],
|
||||
2 => '12,12,12',
|
||||
3 => ';',
|
||||
4 => '12;12;12',
|
||||
],
|
||||
'a too long hex string' => [
|
||||
0 => '#0c0c0c0c',
|
||||
1 => false,
|
||||
2 => false,
|
||||
3 => ';',
|
||||
4 => false,
|
||||
],
|
||||
'a too short hex string' => [
|
||||
0 => '0c0c',
|
||||
1 => false,
|
||||
2 => false,
|
||||
3 => ';',
|
||||
4 => false,
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function rgb2hslAndhsbList(): array
|
||||
{
|
||||
return [
|
||||
'valid gray' => [
|
||||
'rgb' => [12, 12, 12],
|
||||
'hsb' => [0, 0, 5],
|
||||
'hsb_rgb' => [13, 13, 13], // should be rgb, but rounding in this
|
||||
'hsl' => [0.0, 0.0, 4.7],
|
||||
'valid' => true,
|
||||
],
|
||||
'valid color' => [
|
||||
'rgb' => [10, 100, 200],
|
||||
'hsb' => [212, 95, 78.0],
|
||||
'hsb_rgb' => [10, 98, 199], // should be rgb, but rounding error
|
||||
'hsl' => [211.6, 90.5, 41.2],
|
||||
'valid' => true,
|
||||
],
|
||||
// invalid values
|
||||
'invalid color' => [
|
||||
'rgb' => [-12, 300, 12],
|
||||
'hsb' => [-12, 300, 12],
|
||||
'hsl' => [-12, 300, 12],
|
||||
'valid' => false,
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function rgb2hsbColorProvider(): array
|
||||
{
|
||||
$list = [];
|
||||
foreach ($this->rgb2hslAndhsbList() as $name => $values) {
|
||||
$list[$name . ', rgb to hsb'] = [
|
||||
0 => $values['rgb'][0],
|
||||
1 => $values['rgb'][1],
|
||||
2 => $values['rgb'][2],
|
||||
3 => $values['valid'] ? $values['hsb'] : false
|
||||
];
|
||||
}
|
||||
return $list;
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function hsb2rgbColorProvider(): array
|
||||
{
|
||||
$list = [];
|
||||
foreach ($this->rgb2hslAndhsbList() as $name => $values) {
|
||||
$list[$name . ', hsb to rgb'] = [
|
||||
0 => $values['hsb'][0],
|
||||
1 => $values['hsb'][1],
|
||||
2 => $values['hsb'][2],
|
||||
3 => $values['valid'] ? $values['hsb_rgb'] : false
|
||||
];
|
||||
}
|
||||
return $list;
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function rgb2hslColorProvider(): array
|
||||
{
|
||||
$list = [];
|
||||
foreach ($this->rgb2hslAndhsbList() as $name => $values) {
|
||||
$list[$name . ', rgb to hsl'] = [
|
||||
0 => $values['rgb'][0],
|
||||
1 => $values['rgb'][1],
|
||||
2 => $values['rgb'][2],
|
||||
3 => $values['valid'] ? $values['hsl'] : false
|
||||
];
|
||||
}
|
||||
return $list;
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function hsl2rgbColorProvider(): array
|
||||
{
|
||||
$list = [];
|
||||
foreach ($this->rgb2hslAndhsbList() as $name => $values) {
|
||||
$list[$name . ', hsl to rgb'] = [
|
||||
0 => $values['hsl'][0],
|
||||
1 => $values['hsl'][1],
|
||||
2 => $values['hsl'][2],
|
||||
3 => $values['valid'] ? $values['rgb'] : false
|
||||
];
|
||||
}
|
||||
return $list;
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
* TODO: add cross convert check
|
||||
*
|
||||
* @covers ::rgb2hex
|
||||
* @dataProvider rgb2hexColorProvider
|
||||
* @testdox rgb2hex $input_r,$input_g,$input_b will be $expected [$_dataName]
|
||||
*
|
||||
* @param int $input_r
|
||||
* @param int $input_g
|
||||
* @param int $input_b
|
||||
* @param string|bool $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testRgb2hex(int $input_r, int $input_g, int $input_b, $expected_hash, $expected)
|
||||
{
|
||||
// with #
|
||||
$this->assertEquals(
|
||||
$expected_hash,
|
||||
\CoreLibs\Convert\Colors::rgb2hex($input_r, $input_g, $input_b)
|
||||
);
|
||||
// without #
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Convert\Colors::rgb2hex($input_r, $input_g, $input_b, false)
|
||||
);
|
||||
// cross convert must match
|
||||
// $rgb = \CoreLibs\Convert\Colors::hex2rgb($expected_hash);
|
||||
// if ($rgb === false) {
|
||||
// $rgb = [
|
||||
// 'r' => $input_r,
|
||||
// 'g' => $input_g,
|
||||
// 'b' => $input_b,
|
||||
// ];
|
||||
// }
|
||||
// $this->assertEquals(
|
||||
// $expected_hash,
|
||||
// \CoreLibs\Convert\Colors::rgb2hex($rgb['r'], $rgb['g'], $rgb['b'])
|
||||
// );
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::hex2rgb
|
||||
* @dataProvider hex2rgbColorProvider
|
||||
* @testdox hex2rgb $input will be $expected, $expected_str str[,], $expected_str_sep str[$separator] [$_dataName]
|
||||
*
|
||||
* @param string $input
|
||||
* @param array|bool $expected
|
||||
* @param string|bool $expected_str
|
||||
* @param string $separator
|
||||
* @param string|bool $expected_str_sep
|
||||
* @return void
|
||||
*/
|
||||
public function testHex2rgb(
|
||||
string $input,
|
||||
$expected,
|
||||
$expected_str,
|
||||
string $separator,
|
||||
$expected_str_sep
|
||||
): void {
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Convert\Colors::hex2rgb($input)
|
||||
);
|
||||
$this->assertEquals(
|
||||
$expected_str,
|
||||
\CoreLibs\Convert\Colors::hex2rgb($input, true)
|
||||
);
|
||||
$this->assertEquals(
|
||||
$expected_str_sep,
|
||||
\CoreLibs\Convert\Colors::hex2rgb($input, true, $separator)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::rgb2hsb
|
||||
* @dataProvider rgb2hsbColorProvider
|
||||
* @testdox rgb2hsb $input_r,$input_g,$input_b will be $expected [$_dataName]
|
||||
*
|
||||
* @param integer $input_r
|
||||
* @param integer $input_g
|
||||
* @param integer $input_b
|
||||
* @param array|bool $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testRgb2hsb(int $input_r, int $input_g, int $input_b, $expected): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Convert\Colors::rgb2hsb($input_r, $input_g, $input_b)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::hsb2rgb
|
||||
* @dataProvider hsb2rgbColorProvider
|
||||
* @testdox hsb2rgb $input_h,$input_s,$input_b will be $expected [$_dataName]
|
||||
*
|
||||
* @param float $input_h
|
||||
* @param float $input_s
|
||||
* @param float $input_b
|
||||
* @param array|bool $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testHsb2rgb(float $input_h, float $input_s, float $input_b, $expected): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Convert\Colors::hsb2rgb($input_h, $input_s, $input_b)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::rgb2hsl
|
||||
* @dataProvider rgb2hslColorProvider
|
||||
* @testdox rgb2hsl $input_r,$input_g,$input_b will be $expected [$_dataName]
|
||||
*
|
||||
* @param integer $input_r
|
||||
* @param integer $input_g
|
||||
* @param integer $input_b
|
||||
* @param array|bool $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testRgb2hsl(int $input_r, int $input_g, int $input_b, $expected): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Convert\Colors::rgb2hsl($input_r, $input_g, $input_b)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::hsl2rgb
|
||||
* @dataProvider hsl2rgbColorProvider
|
||||
* @testdox hsl2rgb $input_h,$input_s,$input_l will be $expected [$_dataName]
|
||||
*
|
||||
* @param integer|float $input_h
|
||||
* @param integer $input_s
|
||||
* @param integer $input_l
|
||||
* @param array|bool $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testHsl2rgb($input_h, float $input_s, float $input_l, $expected): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Convert\Colors::hsl2rgb($input_h, $input_s, $input_l)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
102
4dev/tests/CoreLibsConvertEncodingTest.php
Normal file
102
4dev/tests/CoreLibsConvertEncodingTest.php
Normal file
@@ -0,0 +1,102 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* Test class for Convert\Encoding
|
||||
* @coversDefaultClass \CoreLibs\Convert\Encoding
|
||||
* @testdox \CoreLibs\Convert\Encoding method tests
|
||||
*/
|
||||
final class CoreLibsConvertEncodingTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function convertEncodingProvider(): array
|
||||
{
|
||||
return [
|
||||
// 0: original string
|
||||
// 1: target encoding
|
||||
// 2: optional source encoding
|
||||
// 3: auto check (not used)
|
||||
// 4: expected string
|
||||
// 5: expected string encoding
|
||||
'simple from UTF-8 to SJIS' => [
|
||||
'input string',
|
||||
'SJIS',
|
||||
null,
|
||||
null,
|
||||
'input string',
|
||||
'SJIS'
|
||||
],
|
||||
'kanji from UTF-8 to SJIS' => [
|
||||
'日本語',
|
||||
'SJIS',
|
||||
null,
|
||||
null,
|
||||
'日本語',
|
||||
'SJIS'
|
||||
],
|
||||
'kanji from UTF-8 to SJIS with source' => [
|
||||
'日本語',
|
||||
'SJIS',
|
||||
'UTF-8',
|
||||
null,
|
||||
'日本語',
|
||||
'SJIS'
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::convertEncoding
|
||||
* @dataProvider convertEncodingProvider
|
||||
* @testdox convert encoding $target_encoding, source: $source_encoding, auto: $auto_check [$_dataName]
|
||||
*
|
||||
* @param string $input
|
||||
* @param string $target_encoding
|
||||
* @param string $source_encoding
|
||||
* @param bool $auto_check
|
||||
* @param string $expected
|
||||
* @param string $expected_encoding
|
||||
* @return void
|
||||
*/
|
||||
public function testConvertEncoding(
|
||||
string $input,
|
||||
string $target_encoding,
|
||||
?string $source_encoding,
|
||||
?bool $auto_check,
|
||||
string $expected,
|
||||
string $expected_encoding
|
||||
): void {
|
||||
if ($source_encoding === null and $auto_check === null) {
|
||||
$string = \CoreLibs\Convert\Encoding::convertEncoding($input, $target_encoding);
|
||||
} elseif ($auto_check === null) {
|
||||
$string = \CoreLibs\Convert\Encoding::convertEncoding($input, $target_encoding, $source_encoding);
|
||||
} else {
|
||||
$string = \CoreLibs\Convert\Encoding::convertEncoding(
|
||||
$input,
|
||||
$target_encoding,
|
||||
$source_encoding,
|
||||
$auto_check
|
||||
);
|
||||
}
|
||||
// because we can't store encoding in here anyway
|
||||
$target = mb_convert_encoding($expected, $expected_encoding, 'UTF-8');
|
||||
// print "IN: $input, $target_encoding\n";
|
||||
$this->assertEquals(
|
||||
$target,
|
||||
$string
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
188
4dev/tests/CoreLibsConvertHtmlTest.php
Normal file
188
4dev/tests/CoreLibsConvertHtmlTest.php
Normal file
@@ -0,0 +1,188 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* Test class for Convert\Html
|
||||
* @coversDefaultClass \CoreLibs\Convert\Html
|
||||
* @testdox \CoreLibs\Convert\Html method tests
|
||||
*/
|
||||
final class CoreLibsConvertHtmlTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function htmlentProvider(): array
|
||||
{
|
||||
return [
|
||||
'no conversion' => [
|
||||
0 => 'I am some string',
|
||||
1 => 'I am some string',
|
||||
],
|
||||
'conversion' => [
|
||||
0 => 'I have special <> inside',
|
||||
1 => 'I have special <> inside',
|
||||
],
|
||||
'skip number' => [
|
||||
0 => 1234,
|
||||
1 => 1234,
|
||||
],
|
||||
'utf8' => [
|
||||
0 => '日本語 <>',
|
||||
1 => '日本語 <>'
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function removeLBProvider(): array
|
||||
{
|
||||
return [
|
||||
'nothing replaced, default' => [
|
||||
0 => 'I am some string',
|
||||
1 => null,
|
||||
2 => 'I am some string',
|
||||
],
|
||||
'string with \n replace -' => [
|
||||
0 => "I am\nsome string",
|
||||
1 => '-',
|
||||
2 => 'I am-some string',
|
||||
],
|
||||
'string with \r replace _' => [
|
||||
0 => "I am\rsome string",
|
||||
1 => '_',
|
||||
2 => 'I am_some string',
|
||||
],
|
||||
'string with \n\r, default' => [
|
||||
0 => "I am\n\rsome string",
|
||||
1 => null,
|
||||
2 => 'I am some string',
|
||||
],
|
||||
'string with \n\r replae ##BR##' => [
|
||||
0 => "I am\n\rsome string",
|
||||
1 => '##BR##',
|
||||
2 => 'I am##BR##some string',
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function checkedProvider(): array
|
||||
{
|
||||
return [
|
||||
'haystack is a string and matching selected' => [
|
||||
0 => 'string',
|
||||
1 => 'string',
|
||||
2 => \CoreLibs\Convert\Html::SELECTED,
|
||||
3 => 'selected'
|
||||
],
|
||||
'haystack is a string and matching checked' => [
|
||||
0 => 'string',
|
||||
1 => 'string',
|
||||
2 => \CoreLibs\Convert\Html::CHECKED,
|
||||
3 => 'checked'
|
||||
],
|
||||
'haystack is a string and not matching' => [
|
||||
0 => 'string',
|
||||
1 => 'not matching',
|
||||
2 => \CoreLibs\Convert\Html::CHECKED,
|
||||
3 => null
|
||||
],
|
||||
'haystack is array and matching' => [
|
||||
0 => ['a', 'b', 'c'],
|
||||
1 => 'a',
|
||||
2 => \CoreLibs\Convert\Html::SELECTED,
|
||||
3 => 'selected'
|
||||
],
|
||||
'haystack is array and not matching' => [
|
||||
0 => ['a', 'b', 'c'],
|
||||
1 => 'not matching',
|
||||
2 => \CoreLibs\Convert\Html::SELECTED,
|
||||
3 => null
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::htmlent
|
||||
* @dataProvider htmlentProvider
|
||||
* @testdox htmlent $input will be $expected [$_dataName]
|
||||
*
|
||||
* @param mixed $input
|
||||
* @param mixed $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testHtmlent($input, $expected): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Convert\Html::htmlent($input)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::removeLB
|
||||
* @dataProvider removeLBProvider
|
||||
* @testdox removeLB $input with replace $replace will be $expected [$_dataName]
|
||||
*
|
||||
* @param string $input
|
||||
* @param string|null $replace
|
||||
* @param string $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testRemoveLB(string $input, ?string $replace, string $expected): void
|
||||
{
|
||||
if ($replace !== null) {
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Convert\Html::removeLB($input, $replace)
|
||||
);
|
||||
} else {
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Convert\Html::removeLB($input)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::checked
|
||||
* @dataProvider checkedProvider
|
||||
* @testdox checked find $needle in $haystack and return $type will be $expected [$_dataName]
|
||||
*
|
||||
* @param array<mixed>|string $haystack
|
||||
* @param string $needle
|
||||
* @param integer $type
|
||||
* @param string|null $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testChecked($haystack, string $needle, int $type, ?string $expected): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Convert\Html::checked($haystack, $needle, $type)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
167
4dev/tests/CoreLibsConvertJsonTest.php
Normal file
167
4dev/tests/CoreLibsConvertJsonTest.php
Normal file
@@ -0,0 +1,167 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* Test class for Check\Json
|
||||
* @coversDefaultClass \CoreLibs\Convert\Json
|
||||
* @testdox \CoreLibs\Convert\Json method tests
|
||||
*/
|
||||
final class CoreLibsConvertJsonTest extends TestCase
|
||||
{
|
||||
|
||||
/**
|
||||
* test list for json convert tests
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function jsonProvider(): array
|
||||
{
|
||||
return [
|
||||
'valid json' => [
|
||||
'{"m":2,"f":"sub_2"}',
|
||||
false,
|
||||
[
|
||||
'm' => 2,
|
||||
'f' => 'sub_2'
|
||||
]
|
||||
],
|
||||
'empty json' => [
|
||||
'',
|
||||
false,
|
||||
[]
|
||||
],
|
||||
'invalid json override' => [
|
||||
'not valid',
|
||||
true,
|
||||
[
|
||||
'not valid'
|
||||
]
|
||||
],
|
||||
'invalid json' => [
|
||||
'not valid',
|
||||
false,
|
||||
[]
|
||||
],
|
||||
'null json' => [
|
||||
null,
|
||||
false,
|
||||
[]
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* json error list
|
||||
*
|
||||
* @return array JSON error list
|
||||
*/
|
||||
public function jsonErrorProvider(): array
|
||||
{
|
||||
return [
|
||||
'no error' => [
|
||||
'{}',
|
||||
JSON_ERROR_NONE, ''
|
||||
],
|
||||
'depth error' => [
|
||||
'[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[['
|
||||
. '[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[['
|
||||
. '[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[['
|
||||
. '[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[['
|
||||
. '[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[['
|
||||
. '[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[['
|
||||
. '[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[['
|
||||
. '[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[['
|
||||
. '[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]'
|
||||
. ']]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]'
|
||||
. ']]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]'
|
||||
. ']]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]'
|
||||
. ']]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]'
|
||||
. ']]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]'
|
||||
. ']]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]'
|
||||
. ']]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]'
|
||||
. ']]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]'
|
||||
. ']]]]',
|
||||
JSON_ERROR_DEPTH, 'Maximum stack depth exceeded'
|
||||
],
|
||||
// 'state mismatch error' => [
|
||||
// '{foo:}',
|
||||
// JSON_ERROR_STATE_MISMATCH, 'Underflow or the modes mismatch'
|
||||
// ],
|
||||
// 'ctrl char error' => [
|
||||
// ' {"data":"data","data":"data","data":"data","data":"data"}',
|
||||
// JSON_ERROR_CTRL_CHAR, 'Unexpected control character found'
|
||||
// ],
|
||||
'syntax error' => [
|
||||
'not valid',
|
||||
JSON_ERROR_SYNTAX, 'Syntax error, malformed JSON'
|
||||
],
|
||||
// 'utf8 error' => [
|
||||
// '{"invalid":"\xB1\x31"}',
|
||||
// JSON_ERROR_UTF8, 'Malformed UTF-8 characters, possibly incorrectly encoded'
|
||||
// ],
|
||||
// 'invalid property' => [
|
||||
// '{"\u0000":"abc"}',
|
||||
// JSON_ERROR_INVALID_PROPERTY_NAME, 'A key starting with \u0000 character was in the string'
|
||||
// ],
|
||||
// 'utf-16 error' => [
|
||||
// '',
|
||||
// JSON_ERROR_UTF16, 'Single unpaired UTF-16 surrogate in unicode escape'
|
||||
// ],
|
||||
// 'unknown error' => [
|
||||
// '',
|
||||
// -999999, 'Unknown error'
|
||||
// ]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* test json convert states
|
||||
*
|
||||
* @covers ::jsonConvertToArray
|
||||
* @dataProvider jsonProvider
|
||||
* @testdox jsonConvertToArray $input (Override: $flag) will be $expected [$_dataName]
|
||||
*
|
||||
* @param string|null $input
|
||||
* @param bool $flag
|
||||
* @param array $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testJsonConvertToArray(?string $input, bool $flag, array $expected): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Convert\Json::jsonConvertToArray($input, $flag)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* test json error states
|
||||
*
|
||||
* @covers ::jsonGetLastError
|
||||
* @dataProvider jsonErrorProvider
|
||||
* @testdox jsonGetLastError $input will be $expected_i/$expected_s [$_dataName]
|
||||
*
|
||||
* @param string|null $input
|
||||
* @param string $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testJsonGetLastError(?string $input, int $expected_i, string $expected_s): void
|
||||
{
|
||||
\CoreLibs\Convert\Json::jsonConvertToArray($input);
|
||||
$this->assertEquals(
|
||||
$expected_i,
|
||||
\CoreLibs\Convert\Json::jsonGetLastError()
|
||||
);
|
||||
$this->assertEquals(
|
||||
$expected_s,
|
||||
\CoreLibs\Convert\Json::jsonGetLastError(true)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
118
4dev/tests/CoreLibsConvertMathTest.php
Normal file
118
4dev/tests/CoreLibsConvertMathTest.php
Normal file
@@ -0,0 +1,118 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* Undocumented class
|
||||
* @coversDefaultClass \CoreLibs\Convert\Math
|
||||
* @testdox \CoreLibs\Convert\Math method tests
|
||||
*/
|
||||
final class CoreLibsConvertMathTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array<mixed>
|
||||
*/
|
||||
public function fceilProvider(): array
|
||||
{
|
||||
return [
|
||||
'5.5 must be 6' => [5.5, 6],
|
||||
'5.1234567890 with 5 must be 6' => [5.1234567890, 6],
|
||||
'6 must be 6' => [6, 6]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::fceil
|
||||
* @dataProvider fceilProvider
|
||||
* @testdox fceil: Input $input must be $expected
|
||||
*
|
||||
* @param float $input
|
||||
* @param int $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testMathFceilValue(float $input, int $expected): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Convert\Math::fceil($input)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array<mixed>
|
||||
*/
|
||||
public function floorProvider(): array
|
||||
{
|
||||
return [
|
||||
'5123456 with -3 must be 5123000' => [5123456, -3, 5123000],
|
||||
'5123456 with -10 must be 5000000' => [5123456, -10, 5000000]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::floorp
|
||||
* @dataProvider floorProvider
|
||||
* @testdox floor: Input $input with cutoff $cutoff must be $expected
|
||||
*
|
||||
* @param int $input
|
||||
* @param int $cutoff
|
||||
* @param int $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testMathFloorValue(int $input, int $cutoff, int $expected): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Convert\Math::floorp($input, $cutoff)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array<mixed>
|
||||
*/
|
||||
public function initNumericProvider(): array
|
||||
{
|
||||
return [
|
||||
'5 must be 5' => [5, 5, 'int'],
|
||||
'5.123 must be 5.123' => [5.123, 5.123, 'float'],
|
||||
"'5' must be 5" => ['5', 5, 'string'],
|
||||
"'5.123' must be 5.123" => ['5.123', 5.123, 'string'],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::initNumeric
|
||||
* @dataProvider initNumericProvider
|
||||
* @testdox initNumeric: Input $info $input must match $expected [$_dataName]
|
||||
*
|
||||
* @param int|float|string $input
|
||||
* @param float $expected
|
||||
* @param string $info
|
||||
* @return void
|
||||
*/
|
||||
public function testMathInitNumericValue($input, float $expected, string $info): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Convert\Math::initNumeric($input)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
60
4dev/tests/CoreLibsConvertMimeAppNameTest.php
Normal file
60
4dev/tests/CoreLibsConvertMimeAppNameTest.php
Normal file
@@ -0,0 +1,60 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* Test class for Convert\MimeAppName
|
||||
* @coversDefaultClass \CoreLibs\Convert\MimeAppName
|
||||
* @testdox \CoreLibs\Convert\MimeAppName method tests
|
||||
*/
|
||||
final class CoreLibsConvertMimeAppNameTest extends TestCase
|
||||
{
|
||||
|
||||
public function mimeProvider(): array
|
||||
{
|
||||
return [
|
||||
'find matching app' => [
|
||||
0 => 'foo/bar',
|
||||
1 => 'FooBar Application',
|
||||
2 => 'FooBar Application',
|
||||
],
|
||||
'try to set empty mime type' => [
|
||||
0 => '',
|
||||
1 => 'Some app',
|
||||
2 => 'Other file'
|
||||
],
|
||||
'try to set empty app name' => [
|
||||
0 => 'some/app',
|
||||
1 => '',
|
||||
2 => 'Other file'
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::mimeGetAppName
|
||||
* @covers ::mimeSetAppName
|
||||
* @dataProvider mimeProvider
|
||||
* @testdox mimeSetAppName set $mime with $app and will be $expected [$_dataName]
|
||||
*
|
||||
* @param string $mime
|
||||
* @param string $app
|
||||
* @return void
|
||||
*/
|
||||
public function testMimeSetAppName(string $mime, string $app, string $expected): void
|
||||
{
|
||||
\CoreLibs\Convert\MimeAppName::mimeSetAppName($mime, $app);
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Convert\MimeAppName::mimeGetAppName($mime)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
101
4dev/tests/CoreLibsConvertMimeEncodeTest.php
Normal file
101
4dev/tests/CoreLibsConvertMimeEncodeTest.php
Normal file
@@ -0,0 +1,101 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* Test class for Convert\MimeEncode
|
||||
* @coversDefaultClass \CoreLibs\Convert\MimeEncode
|
||||
* @testdox \CoreLibs\Convert\MimeEncode method tests
|
||||
*/
|
||||
final class CoreLibsConvertMimeEncodeTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function mbMimeEncodeProvider(): array
|
||||
{
|
||||
return [
|
||||
// 0: input string
|
||||
// 1: encoding
|
||||
// 2: expected
|
||||
'standard UTF-8' => [
|
||||
'Test string',
|
||||
'UTF-8',
|
||||
'Test string'
|
||||
],
|
||||
'long text UTF-8' => [
|
||||
'The quick brown fox jumps over the lazy sheep that sleeps in the ravine '
|
||||
. 'and has no idea what is going on here',
|
||||
'UTF-8',
|
||||
'The quick brown fox jumps over the lazy sheep that sleeps in the ravine '
|
||||
. 'and has no idea what is going on here'
|
||||
],
|
||||
'standard with special chars UTF-8' => [
|
||||
'This is ümläßtと漢字もカタカナ!!^$%&',
|
||||
'UTF-8',
|
||||
'This is =?UTF-8?B?w7xtbMOkw59044Go5ryi5a2X44KC44Kr44K/44Kr44OK77yBIV4k?='
|
||||
. "\r\n"
|
||||
. ' =?UTF-8?B?JQ==?=&'
|
||||
],
|
||||
'35 chars and space at the end UTF-8' => [
|
||||
'12345678901234567890123456789012345 '
|
||||
. 'is there a space?',
|
||||
'UTF-8',
|
||||
'12345678901234567890123456789012345 '
|
||||
. 'is there a =?UTF-8?B?c3BhY2U/?='
|
||||
],
|
||||
'36 chars and space at the end UTF-8' => [
|
||||
'123456789012345678901234567890123456 '
|
||||
. 'is there a space?',
|
||||
'UTF-8',
|
||||
'123456789012345678901234567890123456 '
|
||||
. 'is there a =?UTF-8?B?c3BhY2U/?='
|
||||
],
|
||||
'36 kanji and space UTF-8' => [
|
||||
'カタカナカタカナかなカタカナカタカナかなカタカナカタカナかなカタカナカタ '
|
||||
. 'is there a space?',
|
||||
'UTF-8',
|
||||
"=?UTF-8?B?44Kr44K/44Kr44OK44Kr44K/44Kr44OK44GL44Gq44Kr44K/44Kr44OK44Kr?=\r\n"
|
||||
. " =?UTF-8?B?44K/44Kr44OK?=\r\n"
|
||||
. " =?UTF-8?B?44GL44Gq44Kr44K/44Kr44OK44Kr44K/44Kr44OK44GL44Gq44Kr44K/44Kr?=\r\n"
|
||||
. " =?UTF-8?B?44OK44Kr44K/?= is there a =?UTF-8?B?c3BhY2U/?="
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* mb mime header encoding test
|
||||
*
|
||||
* @covers ::__mbMimeEncode
|
||||
* @dataProvider mbMimeEncodeProvider
|
||||
* @testdox mb encoding target $encoding [$_dataName]
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testUuMbMimeEncode(string $input, string $encoding, string $expected): void
|
||||
{
|
||||
// encode string first
|
||||
$encoded = \CoreLibs\Convert\MimeEncode::__mbMimeEncode($input, $encoding);
|
||||
// print "MIME: -" . $encoded . "-\n";
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
$encoded
|
||||
);
|
||||
$decoded = mb_decode_mimeheader($encoded);
|
||||
// print "INPUT : " . $input . "\n";
|
||||
// print "DECODED: " . $decoded . "\n";
|
||||
// back compare decoded
|
||||
$this->assertEquals(
|
||||
$input,
|
||||
$decoded
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
208
4dev/tests/CoreLibsCreateHashTest.php
Normal file
208
4dev/tests/CoreLibsCreateHashTest.php
Normal file
@@ -0,0 +1,208 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* Test class for Create\Hash
|
||||
* @coversDefaultClass \CoreLibs\Create\Hash
|
||||
* @testdox \CoreLibs\Create\Hash method tests
|
||||
*/
|
||||
final class CoreLibsCreateHashTest extends TestCase
|
||||
{
|
||||
|
||||
public function hashData(): array
|
||||
{
|
||||
return [
|
||||
'any string' => [
|
||||
'text' => 'Some String Text',
|
||||
'crc32b_reverse' => 'c5c21d91', // crc32b (in revere)
|
||||
'sha1Short' => '4d2bc9ba0', // sha1Short
|
||||
// via hash
|
||||
'crc32b' => '911dc2c5', // hash: crc32b
|
||||
'adler32' => '31aa05f1', // hash: alder32
|
||||
'fnv132' => '9df444f9', // hash: fnv132
|
||||
'fnv1a32' => '2c5f91b9', // hash: fnv1a32
|
||||
'joaat' => '50dab846', // hash: joaat
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function crc32bProvider(): array
|
||||
{
|
||||
$list = [];
|
||||
foreach ($this->hashData() as $name => $values) {
|
||||
$list[$name . ' to crc32b reverse'] = [
|
||||
0 => $values['text'],
|
||||
1 => $values['crc32b_reverse'],
|
||||
];
|
||||
}
|
||||
return $list;
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function sha1ShortProvider(): array
|
||||
{
|
||||
$list = [];
|
||||
foreach ($this->hashData() as $name => $values) {
|
||||
$list[$name . ' to sha1 short'] = [
|
||||
0 => $values['text'],
|
||||
1 => $values['crc32b_reverse'],
|
||||
2 => $values['sha1Short'],
|
||||
];
|
||||
}
|
||||
return $list;
|
||||
}
|
||||
|
||||
/**
|
||||
* test all hash functions
|
||||
* NOTE: if we add new hash functions in the __hash method
|
||||
* they need to be added here too (and in the master hashData array too)
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function hashProvider(): array
|
||||
{
|
||||
$list = [];
|
||||
foreach ($this->hashData() as $name => $values) {
|
||||
foreach ([null, 'crc32b', 'adler32', 'fnv132', 'fnv1a32', 'joaat'] as $_hash_type) {
|
||||
// default value test
|
||||
if ($_hash_type === null) {
|
||||
$hash_type = \CoreLibs\Create\Hash::STANDARD_HASH_SHORT;
|
||||
} else {
|
||||
$hash_type = $_hash_type;
|
||||
}
|
||||
$list[$name . ' to ' . $hash_type] = [
|
||||
0 => $values['text'],
|
||||
1 => $_hash_type,
|
||||
2 => $values[$hash_type]
|
||||
];
|
||||
}
|
||||
}
|
||||
return $list;
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function hashLongProvider(): array
|
||||
{
|
||||
$hash_source = 'Some String Text';
|
||||
return [
|
||||
'Long Hash check: ' . \CoreLibs\Create\Hash::STANDARD_HASH_LONG => [
|
||||
$hash_source,
|
||||
hash(\CoreLibs\Create\Hash::STANDARD_HASH_LONG, $hash_source)
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::__crc32b
|
||||
* @dataProvider crc32bProvider
|
||||
* @testdox __crc32b $input will be $expected [$_dataName]
|
||||
*
|
||||
* @param string $input
|
||||
* @param string $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testCrc32b(string $input, string $expected): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Create\Hash::__crc32b($input)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::__sha1Short
|
||||
* @dataProvider sha1ShortProvider
|
||||
* @testdox __sha1Short $input will be $expected (crc32b) and $expected_sha1 (sha1 short) [$_dataName]
|
||||
*
|
||||
* @param string $input
|
||||
* @param string $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testSha1Short(string $input, string $expected, string $expected_sha1): void
|
||||
{
|
||||
// uses crc32b
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Create\Hash::__sha1Short($input)
|
||||
);
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Create\Hash::__sha1Short($input, false)
|
||||
);
|
||||
// sha1 type
|
||||
$this->assertEquals(
|
||||
$expected_sha1,
|
||||
\CoreLibs\Create\Hash::__sha1Short($input, true)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::__hash
|
||||
* @dataProvider hashProvider
|
||||
* @testdox __hash $input with $hash_type will be $expected [$_dataName]
|
||||
*
|
||||
* @param string $input
|
||||
* @param string|null $hash_type
|
||||
* @param string $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testHash(string $input, ?string $hash_type, string $expected): void
|
||||
{
|
||||
if ($hash_type === null) {
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Create\Hash::__hash($input)
|
||||
);
|
||||
} else {
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Create\Hash::__hash($input, $hash_type)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::__hashLong
|
||||
* @dataProvider hashLongProvider
|
||||
* @testdox __hashLong $input will be $expected [$_dataName]
|
||||
*
|
||||
* @param string $input
|
||||
* @param string $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testHashLong(string $input, string $expected): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Create\Hash::__hashLong($input)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
205
4dev/tests/CoreLibsCreateRandomKeyTest.php
Normal file
205
4dev/tests/CoreLibsCreateRandomKeyTest.php
Normal file
@@ -0,0 +1,205 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* Test class for Create\RandomKey
|
||||
* @coversDefaultClass \CoreLibs\Create\RandomKey
|
||||
* @testdox \CoreLibs\Create\RandomKey method tests
|
||||
*/
|
||||
final class CoreLibsCreateRandomKeyTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function keyLenghtProvider(): array
|
||||
{
|
||||
return [
|
||||
'valid key length' => [
|
||||
0 => 6,
|
||||
1 => true,
|
||||
2 => 6,
|
||||
],
|
||||
'negative key length' => [
|
||||
0 => -1,
|
||||
1 => false,
|
||||
2 => 4,
|
||||
],
|
||||
'tpp big key length' => [
|
||||
0 => 300,
|
||||
1 => false,
|
||||
2 => 4,
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function randomKeyGenProvider(): array
|
||||
{
|
||||
return [
|
||||
'default key length' => [
|
||||
0 => null,
|
||||
1 => 4
|
||||
],
|
||||
'set -1 key length default' => [
|
||||
0 => -1,
|
||||
1 => 4,
|
||||
],
|
||||
'set too large key length' => [
|
||||
0 => 300,
|
||||
1 => 4,
|
||||
],
|
||||
'set override key lenght' => [
|
||||
0 => 6,
|
||||
1 => 6,
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* 1
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function keepKeyLengthProvider(): array
|
||||
{
|
||||
return [
|
||||
'set too large' => [
|
||||
0 => 6,
|
||||
1 => 300,
|
||||
2 => 6,
|
||||
],
|
||||
'set too small' => [
|
||||
0 => 8,
|
||||
1 => -2,
|
||||
2 => 8,
|
||||
],
|
||||
'change valid' => [
|
||||
0 => 10,
|
||||
1 => 6,
|
||||
2 => 6,
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* run before each test and reset to default 4
|
||||
*
|
||||
* @before
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function resetKeyLength(): void
|
||||
{
|
||||
\CoreLibs\Create\RandomKey::setRandomKeyLength(4);
|
||||
}
|
||||
|
||||
/**
|
||||
* check that first length is 4
|
||||
*
|
||||
* @covers ::getRandomKeyLength
|
||||
* @testWith [4]
|
||||
* @testdox getRandomKeyLength on init will be $expected [$_dataName]
|
||||
*
|
||||
* @param integer $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testGetRandomKeyLengthInit(int $expected): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Create\RandomKey::getRandomKeyLength()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::setRandomKeyLength
|
||||
* @covers ::getRandomKeyLength
|
||||
* @dataProvider keyLenghtProvider
|
||||
* @testdox setRandomKeyLength $input will be $expected, compare to $compare [$_dataName]
|
||||
*
|
||||
* @param integer $input
|
||||
* @param boolean $expected
|
||||
* @param integer $compare
|
||||
* @return void
|
||||
*/
|
||||
public function testSetRandomKeyLength(int $input, bool $expected, int $compare): void
|
||||
{
|
||||
// set
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Create\RandomKey::setRandomKeyLength($input)
|
||||
);
|
||||
// read test, if false, use compare check
|
||||
if ($expected === false) {
|
||||
$input = $compare;
|
||||
}
|
||||
$this->assertEquals(
|
||||
$input,
|
||||
\CoreLibs\Create\RandomKey::getRandomKeyLength()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::randomKeyGeyn
|
||||
* @dataProvider randomKeyGenProvider
|
||||
* @testdox randomKeyGen use $input key length $expected [$_dataName]
|
||||
*
|
||||
* @param integer|null $input
|
||||
* @param integer $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testRandomKeyGen(?int $input, int $expected): void
|
||||
{
|
||||
if ($input === null) {
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
strlen(\CoreLibs\Create\RandomKey::randomKeyGen())
|
||||
);
|
||||
} else {
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
strlen(\CoreLibs\Create\RandomKey::randomKeyGen($input))
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check that if set to n and then invalid, it keeps the previous one
|
||||
* or if second change valid, second will be shown
|
||||
*
|
||||
* @covers ::setRandomKeyLength
|
||||
* @dataProvider keepKeyLengthProvider
|
||||
* @testdox keep setRandomKeyLength set with $input_valid and then $input_invalid will be $expected [$_dataName]
|
||||
*
|
||||
* @param integer $input_valid
|
||||
* @param integer $input_invalid
|
||||
* @param integer $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testKeepKeyLength(int $input_valid, int $input_invalid, int $expected): void
|
||||
{
|
||||
\CoreLibs\Create\RandomKey::setRandomKeyLength($input_valid);
|
||||
\CoreLibs\Create\RandomKey::setRandomKeyLength($input_invalid);
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Create\RandomKey::getRandomKeyLength()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
106
4dev/tests/CoreLibsCreateSessionTest.php
Normal file
106
4dev/tests/CoreLibsCreateSessionTest.php
Normal file
@@ -0,0 +1,106 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* Test class for Create\Session
|
||||
* @coversDefaultClass \CoreLibs\Create\Session
|
||||
* @testdox \CoreLibs\Create\Session method tests
|
||||
*/
|
||||
final class CoreLibsCreateSessionTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function sessionProvider(): array
|
||||
{
|
||||
return [
|
||||
'session parameter' => [
|
||||
'sessionNameParameter',
|
||||
'p',
|
||||
'sessionNameParameter',
|
||||
'/^\w+$/'
|
||||
],
|
||||
'session globals' => [
|
||||
'sessionNameGlobals',
|
||||
'g',
|
||||
'sessionNameGlobals',
|
||||
'/^\w+$/'
|
||||
],
|
||||
'session constant' => [
|
||||
'sessionNameConstant',
|
||||
'c',
|
||||
'sessionNameConstant',
|
||||
'/^\w+$/'
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function setUp(): void
|
||||
{
|
||||
if (session_id()) {
|
||||
session_destroy();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @dataProvider sessionProvider
|
||||
* @testdox startSession $input name for $type will be $expected_n with $expected_i [$_dataName]
|
||||
*
|
||||
* @param string $input
|
||||
* @param string $type
|
||||
* @param string|bool $expected_n
|
||||
* @param string|bool $expected_i
|
||||
* @return void
|
||||
*/
|
||||
public function testStartSession(string $input, string $type, $expected_n, $expected_i): void
|
||||
{
|
||||
// NEEDS MOCKING
|
||||
/* $session_id = '';
|
||||
switch ($type) {
|
||||
case 'p':
|
||||
$session_id = \CoreLibs\Create\Session::startSession($input);
|
||||
break;
|
||||
case 'g':
|
||||
$GLOBALS['SET_SESSION_NAME'] = $input;
|
||||
$session_id = \CoreLibs\Create\Session::startSession();
|
||||
break;
|
||||
case 'c':
|
||||
define('SET_SESSION_NAME', $input);
|
||||
$session_id = \CoreLibs\Create\Session::startSession();
|
||||
break;
|
||||
}
|
||||
$this->assertMatchesRegularExpression(
|
||||
$expected_i,
|
||||
(string)$session_id
|
||||
);
|
||||
$this->assertMatchesRegularExpression(
|
||||
$expected_i,
|
||||
(string)\CoreLibs\Create\Session::getSessionId()
|
||||
);
|
||||
$this->assertEquals(
|
||||
$expected_n,
|
||||
\CoreLibs\Create\Session::getSessionName()
|
||||
);
|
||||
if ($type == 'g') {
|
||||
unset($GLOBALS['SET_SESSION_NAME']);
|
||||
} */
|
||||
$this->markTestSkipped('[CoreLibsCreateSessionTest] No implementation '
|
||||
. 'for Create\Session. Cannot run session_start in CLI');
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
186
4dev/tests/CoreLibsCreateUidsTest.php
Normal file
186
4dev/tests/CoreLibsCreateUidsTest.php
Normal file
@@ -0,0 +1,186 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* Test class for Create\Uids
|
||||
* @coversDefaultClass \CoreLibs\Create\Uids
|
||||
* @testdox \CoreLibs\Create\Uids method tests
|
||||
*/
|
||||
final class CoreLibsCreateUidsTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function uniqIdProvider(): array
|
||||
{
|
||||
return [
|
||||
'md5 hash' => [
|
||||
0 => 'md5',
|
||||
1 => 32,
|
||||
],
|
||||
'sha256 hash' => [
|
||||
0 => 'sha256',
|
||||
1 => 64
|
||||
],
|
||||
'ripemd160 hash' => [
|
||||
0 => 'ripemd160',
|
||||
1 => 40
|
||||
],
|
||||
'adler32 hash' => [
|
||||
0 => 'adler32',
|
||||
1 => 8
|
||||
],
|
||||
'not in list hash but valid' => [
|
||||
0 => 'sha3-512',
|
||||
1 => strlen(hash('sha3-512', 'A'))
|
||||
],
|
||||
'default hash not set' => [
|
||||
0 => null,
|
||||
1 => 64,
|
||||
],
|
||||
'invalid name' => [
|
||||
0 => 'iamnotavalidhash',
|
||||
1 => 64,
|
||||
],
|
||||
'auto: ' . \CoreLibs\Create\Uids::DEFAULT_HASH => [
|
||||
0 => \CoreLibs\Create\Uids::DEFAULT_HASH,
|
||||
1 => strlen(hash(\CoreLibs\Create\Uids::DEFAULT_HASH, 'A'))
|
||||
],
|
||||
'auto: ' . \CoreLibs\Create\Uids::STANDARD_HASH_LONG => [
|
||||
0 => \CoreLibs\Create\Uids::STANDARD_HASH_LONG,
|
||||
1 => strlen(hash(\CoreLibs\Create\Uids::STANDARD_HASH_LONG, 'A'))
|
||||
],
|
||||
'auto: ' . \CoreLibs\Create\Uids::STANDARD_HASH_SHORT => [
|
||||
0 => \CoreLibs\Create\Uids::STANDARD_HASH_SHORT,
|
||||
1 => strlen(hash(\CoreLibs\Create\Uids::STANDARD_HASH_SHORT, 'A'))
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function uniqIdLongProvider(): array
|
||||
{
|
||||
return [
|
||||
'uniq id long: ' . \CoreLibs\Create\Uids::STANDARD_HASH_LONG => [
|
||||
strlen(hash(\CoreLibs\Create\Uids::STANDARD_HASH_LONG, 'A'))
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* must match 7e78fe0d-59b8-4637-af7f-e88d221a7d1e
|
||||
*
|
||||
* @covers ::uuidv4
|
||||
* @testdox uuidv4 check that return is matching regex [$_dataName]
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testUuidv4(): void
|
||||
{
|
||||
$uuid = \CoreLibs\Create\Uids::uuidv4();
|
||||
$this->assertMatchesRegularExpression(
|
||||
'/^[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}$/',
|
||||
$uuid
|
||||
);
|
||||
// $this->assertStringMatchesFormat(
|
||||
// '%4s%4s-%4s-%4s-%4s-%4s%4s%4s',
|
||||
// $uuid
|
||||
// );
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::uniqId
|
||||
* @dataProvider uniqIdProvider
|
||||
* @testdox uniqId $input will be length $expected [$_dataName]
|
||||
*
|
||||
* @param string|null $input
|
||||
* @param string $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testUniqId(?string $input, int $expected): void
|
||||
{
|
||||
if ($input === null) {
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
strlen(\CoreLibs\Create\Uids::uniqId())
|
||||
);
|
||||
} else {
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
strlen(\CoreLibs\Create\Uids::uniqId($input))
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Because we set a constant here, we can only run one test
|
||||
* so we test invalid one to force check
|
||||
*
|
||||
* @covers ::uniqId
|
||||
* @#dataProvider uniqIdProvider
|
||||
* @testWith ["invalidhash", 64]
|
||||
* @testdox uniqId use DEFAULT_HASH set $input with length $expected [$_dataName]
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testUnidIdDefaultHash(string $input, int $expected): void
|
||||
{
|
||||
define('DEFAULT_HASH', $input);
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
strlen(\CoreLibs\Create\Uids::uniqId())
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Short id, always 8 in length
|
||||
*
|
||||
* @covers ::uniqIdShort
|
||||
* @testWith [8]
|
||||
* @testdox uniqIdShort will be length $expected [$_dataName]
|
||||
*
|
||||
* @param integer $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testUniqIdShort(int $expected): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
strlen(\CoreLibs\Create\Uids::uniqIdShort())
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Long Id, length can change
|
||||
*
|
||||
* @covers ::uniqIdLong
|
||||
* @dataProvider uniqIdLongProvider
|
||||
* @testdox uniqIdLong will be length $expected [$_dataName]
|
||||
*
|
||||
* @param integer $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testUniqIdLong(int $expected): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
strlen(\CoreLibs\Create\Uids::uniqIdLong())
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
48
4dev/tests/CoreLibsDBExtendedArrayIOTest.php
Normal file
48
4dev/tests/CoreLibsDBExtendedArrayIOTest.php
Normal file
@@ -0,0 +1,48 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* Test class for DB\Extended\ArrayIO
|
||||
* This will only test the PgSQL parts
|
||||
* @coversDefaultClass \CoreLibs\DB\Extended\ArrayIO
|
||||
* @coversDefaultClass \CoreLibs\DB\Extended\ArrayIO
|
||||
* @testdox \CoreLibs\Extended\ArrayIO method tests for extended DB interface
|
||||
*/
|
||||
final class CoreLibsDBExtendedArrayIOTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function setUp(): void
|
||||
{
|
||||
if (!extension_loaded('pgsql')) {
|
||||
$this->markTestSkipped(
|
||||
'The PgSQL extension is not available.'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @testdox DB\Extended\ArrayIO Class tests
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testDBIO()
|
||||
{
|
||||
$this->assertTrue(true, 'DB Extended ArrayIO Tests not implemented');
|
||||
$this->markTestIncomplete(
|
||||
'DB\Extended\ArrayIO Tests have not yet been implemented'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
3617
4dev/tests/CoreLibsDBIOTest.php
Normal file
3617
4dev/tests/CoreLibsDBIOTest.php
Normal file
File diff suppressed because it is too large
Load Diff
176
4dev/tests/CoreLibsDebugFileWriterTest.php
Normal file
176
4dev/tests/CoreLibsDebugFileWriterTest.php
Normal file
@@ -0,0 +1,176 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* Test class for Debug\FileWriter
|
||||
* @coversDefaultClass \CoreLibs\Debug\FileWriter
|
||||
* @testdox \CoreLibs\Debug\FileWriter method tests
|
||||
*/
|
||||
final class CoreLibsDebugFileWriterTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function fsetFolderProvider(): array
|
||||
{
|
||||
return [
|
||||
'valid log folder name' => [
|
||||
0 => '/tmp/',
|
||||
1 => true,
|
||||
],
|
||||
'invalid log folder name' => [
|
||||
0 => 'some name',
|
||||
1 => false,
|
||||
],
|
||||
'not writeable log folder name' => [
|
||||
0 => '/opt',
|
||||
1 => false,
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function fsetFilenameProvider(): array
|
||||
{
|
||||
return [
|
||||
'valid log file name' => [
|
||||
0 => 'some_valid_name.log',
|
||||
1 => true,
|
||||
],
|
||||
'file name contains path' => [
|
||||
0 => 'log/debug.log',
|
||||
1 => false,
|
||||
],
|
||||
'invalid log file name' => [
|
||||
0 => 'invalid name',
|
||||
1 => false,
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function fdebugProvider(): array
|
||||
{
|
||||
return [
|
||||
'debug with default enter' => [
|
||||
0 => 'test string',
|
||||
1 => null,
|
||||
2 => true,
|
||||
3 => 'test string' . "\n"
|
||||
],
|
||||
'debug with no enter' => [
|
||||
0 => 'test string',
|
||||
1 => false,
|
||||
2 => true,
|
||||
3 => 'test string'
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @dataProvider fsetFolderProvider
|
||||
* @testdox fsetFolder $input will match $expected [$_dataName]
|
||||
*
|
||||
* @param string $input
|
||||
* @param boolean $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testFsetFolder(string $input, bool $expected): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Debug\FileWriter::fsetFolder($input)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @dataProvider fsetFilenameProvider
|
||||
* @testdox fsetFilename $input will match $expected [$_dataName]
|
||||
*
|
||||
* @param string $input
|
||||
* @param boolean $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testFsetFilename(string $input, bool $expected): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Debug\FileWriter::fsetFilename($input)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @dataProvider fdebugProvider
|
||||
* @testdox fdebug write $input with enter $enter and will be $expected and written $expected_log [$_dataName]
|
||||
*
|
||||
* @param string $input
|
||||
* @param boolean|null $enter
|
||||
* @param boolean $expected
|
||||
* @param string $expected_log
|
||||
* @return void
|
||||
*/
|
||||
public function testFdebug(string $input, ?bool $enter, bool $expected, string $expected_log): void
|
||||
{
|
||||
// set debug log folder
|
||||
$file = 'FileWriterTest.log';
|
||||
$folder = '/tmp';
|
||||
$debug_file = $folder . DIRECTORY_SEPARATOR . $file;
|
||||
$valid_folder = \CoreLibs\Debug\FileWriter::fsetFolder($folder);
|
||||
$this->assertTrue(
|
||||
$valid_folder
|
||||
);
|
||||
$valid_file = \CoreLibs\Debug\FileWriter::fsetFilename($file);
|
||||
$this->assertTrue(
|
||||
$valid_file
|
||||
);
|
||||
// write the log line
|
||||
if ($enter === null) {
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Debug\FileWriter::fdebug($input)
|
||||
);
|
||||
} else {
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Debug\FileWriter::fdebug($input, $enter)
|
||||
);
|
||||
}
|
||||
if (is_file($debug_file)) {
|
||||
// open file, load data, compre to expected_log
|
||||
$log_data = file_get_contents($debug_file);
|
||||
if ($log_data === false) {
|
||||
$this->fail('fdebug file not readable or not data: ' . $debug_file);
|
||||
}
|
||||
$this->assertStringEndsWith(
|
||||
$expected_log,
|
||||
$log_data
|
||||
);
|
||||
unlink($debug_file);
|
||||
} else {
|
||||
$this->fail('fdebug file not found: ' . $debug_file);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
840
4dev/tests/CoreLibsDebugLoggingTest.php
Normal file
840
4dev/tests/CoreLibsDebugLoggingTest.php
Normal file
@@ -0,0 +1,840 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
// TODO: setLogPer test log file written matches pattern
|
||||
|
||||
/**
|
||||
* Test class for Debug\Logging
|
||||
* @coversDefaultClass \CoreLibs\Debug\Logging
|
||||
* @testdox \CoreLibs\Debug\Logging method tests
|
||||
*/
|
||||
final class CoreLibsDebugLoggingTest extends TestCase
|
||||
{
|
||||
public $log;
|
||||
|
||||
/**
|
||||
* test set for options BASIC
|
||||
*
|
||||
* 0: options
|
||||
* - null for NOT set
|
||||
* 1: expected
|
||||
* 2: override
|
||||
* override:
|
||||
* - constant for COSNTANTS
|
||||
* - global for _GLOBALS
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function optionsProvider(): array
|
||||
{
|
||||
return [
|
||||
'log folder set' => [
|
||||
[
|
||||
'log_folder' => '/tmp'
|
||||
],
|
||||
[
|
||||
'log_folder' => '/tmp/',
|
||||
'debug_all' => false,
|
||||
'print_all' => false,
|
||||
],
|
||||
[]
|
||||
],
|
||||
'nothing set' => [
|
||||
null,
|
||||
[
|
||||
'log_folder' => getcwd() . DIRECTORY_SEPARATOR,
|
||||
'debug_all' => false,
|
||||
'print_all' => false,
|
||||
],
|
||||
[]
|
||||
],
|
||||
'no options set, constant set' => [
|
||||
null,
|
||||
[
|
||||
'log_folder' => str_replace('/configs', '', __DIR__)
|
||||
. DIRECTORY_SEPARATOR . 'log/',
|
||||
'debug_all' => false,
|
||||
'print_all' => false,
|
||||
],
|
||||
[
|
||||
'constant' => [
|
||||
'BASE' => str_replace('/configs', '', __DIR__)
|
||||
. DIRECTORY_SEPARATOR,
|
||||
'LOG' => 'log/'
|
||||
]
|
||||
]
|
||||
],
|
||||
'standard test set' => [
|
||||
[
|
||||
'log_folder' => '/tmp',
|
||||
'debug_all' => true,
|
||||
'print_all' => true,
|
||||
],
|
||||
[
|
||||
'log_folder' => '/tmp/',
|
||||
'debug_all' => true,
|
||||
'print_all' => true,
|
||||
],
|
||||
[]
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* adds log ID settings based on basic options
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function logIdOptionsProvider(): array
|
||||
{
|
||||
// 0: options
|
||||
// 1: expected
|
||||
// 2: override
|
||||
return [
|
||||
'no log id set' => [
|
||||
null,
|
||||
[
|
||||
'log_file_id' => ''
|
||||
],
|
||||
[]
|
||||
],
|
||||
// set log id manually afterwards
|
||||
'set log id manually' => [
|
||||
null,
|
||||
[
|
||||
'log_file_id' => '',
|
||||
'set_log_file_id' => 'abc123',
|
||||
],
|
||||
[
|
||||
// set post launch
|
||||
'values' => [
|
||||
'log_file_id' => 'abc123'
|
||||
]
|
||||
]
|
||||
],
|
||||
// set log id from options
|
||||
'set log id via options' => [
|
||||
[
|
||||
'file_id' => 'abc456',
|
||||
],
|
||||
[
|
||||
'log_file_id' => 'abc456'
|
||||
],
|
||||
[]
|
||||
],
|
||||
// set log id from GLOBALS [DEPRECATED]
|
||||
'set log id via globals' => [
|
||||
null,
|
||||
[
|
||||
'log_file_id' => 'def123'
|
||||
],
|
||||
[
|
||||
'globals' => [
|
||||
'LOG_FILE_ID' => 'def123'
|
||||
]
|
||||
]
|
||||
],
|
||||
// set log id from CONSTANT [DEPRECATED]
|
||||
'set log id via constant' => [
|
||||
null,
|
||||
[
|
||||
'log_file_id' => 'ghi123'
|
||||
],
|
||||
[
|
||||
// reset global
|
||||
'globals' => [
|
||||
'LOG_FILE_ID' => null
|
||||
],
|
||||
'constant' => [
|
||||
'LOG_FILE_ID' => 'ghi123'
|
||||
]
|
||||
]
|
||||
],
|
||||
// invalid, keep previous set
|
||||
'invalid log id' => [
|
||||
[
|
||||
'file_id' => 'jkl456'
|
||||
],
|
||||
[
|
||||
'log_file_id' => 'jkl456',
|
||||
'set_log_file_id' => 'jkl456',
|
||||
],
|
||||
[
|
||||
'values' => [
|
||||
'log_file_id' => './#'
|
||||
]
|
||||
]
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function logLevelAllProvider(): array
|
||||
{
|
||||
return [
|
||||
'debug all true' => [
|
||||
'debug',
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
],
|
||||
'echo all true' => [
|
||||
'echo',
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
],
|
||||
'print all true' => [
|
||||
'print',
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
],
|
||||
'set invalid level' => [
|
||||
'invalud',
|
||||
true,
|
||||
false,
|
||||
false,
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function logLevelProvider(): array
|
||||
{
|
||||
return [
|
||||
'set debug on for level A,B,C and check full set' => [
|
||||
'debug',
|
||||
'on',
|
||||
['A', 'B', 'C'],
|
||||
true,
|
||||
null,
|
||||
[
|
||||
'A' => true,
|
||||
'B' => true,
|
||||
'C' => true,
|
||||
]
|
||||
],
|
||||
'set debug off for level A,B,C and check A' => [
|
||||
'debug',
|
||||
'off',
|
||||
['A', 'B', 'C'],
|
||||
true,
|
||||
'A',
|
||||
true,
|
||||
],
|
||||
// set one to false
|
||||
'set debug off for level A, B to false and check all' => [
|
||||
'debug',
|
||||
'off',
|
||||
['A', 'B' => false],
|
||||
true,
|
||||
null,
|
||||
[
|
||||
'A' => true,
|
||||
'B' => false,
|
||||
],
|
||||
],
|
||||
// set invalid type
|
||||
'set invalid level' => [
|
||||
'invalid',
|
||||
'',
|
||||
[],
|
||||
false,
|
||||
null,
|
||||
false
|
||||
],
|
||||
// set invalid flag
|
||||
'set invalid on flag' => [
|
||||
'print',
|
||||
'invalid',
|
||||
[],
|
||||
false,
|
||||
null,
|
||||
false
|
||||
],
|
||||
// missing debug array set
|
||||
'missing debug level array' => [
|
||||
'print',
|
||||
'off',
|
||||
[],
|
||||
false,
|
||||
null,
|
||||
[]
|
||||
],
|
||||
// set but check no existing
|
||||
'set level but check no exisitng' => [
|
||||
'print',
|
||||
'on',
|
||||
['A'],
|
||||
true,
|
||||
'C',
|
||||
false
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function logPerProvider(): array
|
||||
{
|
||||
return [
|
||||
'level set true' => [
|
||||
'level',
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
],
|
||||
'class set true' => [
|
||||
'class',
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
],
|
||||
'page set true' => [
|
||||
'page',
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
],
|
||||
'run set true' => [
|
||||
'run',
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
],
|
||||
'set invalid type' => [
|
||||
'invalid',
|
||||
true,
|
||||
false,
|
||||
false,
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function prArProvider(): array
|
||||
{
|
||||
return [
|
||||
'simple array' => [
|
||||
[
|
||||
'A' => 'foobar'
|
||||
],
|
||||
"##HTMLPRE##Array\n(\n"
|
||||
. " [A] => foobar\n"
|
||||
. ")\n"
|
||||
. "##/HTMLPRE##"
|
||||
],
|
||||
'empty array' => [
|
||||
[],
|
||||
"##HTMLPRE##Array\n(\n"
|
||||
. ")\n"
|
||||
. "##/HTMLPRE##"
|
||||
],
|
||||
'nested array' => [
|
||||
[
|
||||
'A' => [
|
||||
'B' => 'bar'
|
||||
]
|
||||
],
|
||||
"##HTMLPRE##Array\n(\n"
|
||||
. " [A] => Array\n"
|
||||
. " (\n"
|
||||
. " [B] => bar\n"
|
||||
. " )\n"
|
||||
. "\n"
|
||||
. ")\n"
|
||||
. "##/HTMLPRE##"
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* 0: array $options
|
||||
* 1: array $debug_msg
|
||||
* 2: boolean $expected_debug
|
||||
* 3: string $expected_file
|
||||
* 4: string $expected_string_start
|
||||
* 5: string $expected_string_contains
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function debugProvider(): array
|
||||
{
|
||||
// error message to pass in
|
||||
$error_msg['A'] = [
|
||||
'level' => 'A',
|
||||
'string' => 'error msg',
|
||||
'strip' => false,
|
||||
'prefix' => '',
|
||||
];
|
||||
// file content to check
|
||||
$file_msg['A'] = "{PHPUnit\TextUI\Command} <A> - error msg\n";
|
||||
// string messages to check
|
||||
$string_msg['A'] = [
|
||||
's' => '<div style="text-align: left; padding: 5px; font-size: 10px; '
|
||||
. 'font-family: sans-serif; border-top: 1px solid black; '
|
||||
. 'border-bottom: 1px solid black; margin: 10px 0 10px 0; '
|
||||
. 'background-color: white; color: black;">'
|
||||
. '<div style="font-size: 12px;">{<span style="font-style: '
|
||||
. 'italic; color: #928100;">PHPUnit\TextUI\Command</span>}'
|
||||
. '</div><div style="font-size: 12px;">[<span style="font-style: '
|
||||
. 'italic; color: #c56c00;">A</span>] </div><div>[<span '
|
||||
. 'style="font-weight: bold; color: #5e8600;">',
|
||||
'c' => 'PHPUnit\TextUI\Command</span>} - error msg</div><!--#BR#-->',
|
||||
];
|
||||
// array provider
|
||||
return [
|
||||
'A debug: on, print: on, echo: on' => [
|
||||
[
|
||||
'debug_all' => true,
|
||||
'print_all' => true,
|
||||
'echo_all' => true,
|
||||
],
|
||||
$error_msg['A'],
|
||||
true,
|
||||
$file_msg['A'],
|
||||
$string_msg['A']['s'],
|
||||
$string_msg['A']['c'],
|
||||
],
|
||||
'B debug: on, print: off, echo: on' => [
|
||||
[
|
||||
'debug_all' => true,
|
||||
'print_all' => false,
|
||||
'echo_all' => true,
|
||||
],
|
||||
$error_msg['A'],
|
||||
true,
|
||||
'',
|
||||
$string_msg['A']['s'],
|
||||
$string_msg['A']['c'],
|
||||
],
|
||||
'C debug: on, print: on, echo: off' => [
|
||||
[
|
||||
'debug_all' => true,
|
||||
'print_all' => true,
|
||||
'echo_all' => false,
|
||||
],
|
||||
$error_msg['A'],
|
||||
true,
|
||||
$file_msg['A'],
|
||||
'',
|
||||
'',
|
||||
],
|
||||
'D debug: on, print: off, echo: off' => [
|
||||
[
|
||||
'debug_all' => true,
|
||||
'print_all' => false,
|
||||
'echo_all' => false,
|
||||
],
|
||||
$error_msg['A'],
|
||||
false,
|
||||
'',
|
||||
'',
|
||||
''
|
||||
],
|
||||
'E debug: off, print: off, echo: off' => [
|
||||
[
|
||||
'debug_all' => false,
|
||||
'print_all' => false,
|
||||
'echo_all' => false,
|
||||
],
|
||||
$error_msg['A'],
|
||||
false,
|
||||
'',
|
||||
'',
|
||||
''
|
||||
]
|
||||
// TODO more tests with different error messages
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* init logging class
|
||||
*
|
||||
* @dataProvider optionsProvider
|
||||
* @testdox init test [$_dataName]
|
||||
*
|
||||
* @param array|null $options
|
||||
* @param array $expected
|
||||
* @param array $override
|
||||
* @return void
|
||||
*/
|
||||
public function testClassInit(?array $options, array $expected, array $override): void
|
||||
{
|
||||
if (!empty($override['constant'])) {
|
||||
foreach ($override['constant'] as $var => $value) {
|
||||
define($var, $value);
|
||||
}
|
||||
}
|
||||
if ($options === null) {
|
||||
$this->log = new \CoreLibs\Debug\Logging();
|
||||
} else {
|
||||
$this->log = new \CoreLibs\Debug\Logging($options);
|
||||
}
|
||||
// check that settings match
|
||||
$this->assertEquals(
|
||||
$expected['log_folder'],
|
||||
$this->log->getSetting('log_folder')
|
||||
);
|
||||
$this->assertEquals(
|
||||
$expected['debug_all'],
|
||||
$this->log->getSetting('debug_output_all')
|
||||
);
|
||||
$this->assertEquals(
|
||||
$expected['print_all'],
|
||||
$this->log->getSetting('print_output_all')
|
||||
);
|
||||
// print "LOG: " . $this->log->getSetting('log_folder') . "\n";
|
||||
// print "DEBUG: " . $this->log->getSetting('debug_output_all') . "\n";
|
||||
// print "PRINT: " . $this->log->getSetting('print_output_all') . "\n";
|
||||
}
|
||||
|
||||
/**
|
||||
* test the setting and getting of LogId
|
||||
*
|
||||
* @covers ::setLogId
|
||||
* @dataProvider logIdOptionsProvider
|
||||
* @testdox log id set/get tests [$_dataName]
|
||||
*
|
||||
* @param array|null $options
|
||||
* @param array $expected
|
||||
* @param array $override
|
||||
* @return void
|
||||
*/
|
||||
public function testLogId(?array $options, array $expected, array $override): void
|
||||
{
|
||||
// we need to set with file_id option, globals LOG_FILE_ID, constant LOG_FILE_ID
|
||||
if (!empty($override['constant'])) {
|
||||
foreach ($override['constant'] as $var => $value) {
|
||||
define($var, $value);
|
||||
}
|
||||
}
|
||||
if (!empty($override['globals'])) {
|
||||
foreach ($override['globals'] as $var => $value) {
|
||||
$GLOBALS[$var] = $value;
|
||||
}
|
||||
}
|
||||
if ($options === null) {
|
||||
$this->log = new \CoreLibs\Debug\Logging();
|
||||
} else {
|
||||
$this->log = new \CoreLibs\Debug\Logging($options);
|
||||
}
|
||||
// check current
|
||||
$this->assertEquals(
|
||||
$this->log->getLogId(),
|
||||
$expected['log_file_id']
|
||||
);
|
||||
// we need to override now too
|
||||
if (!empty($override['values'])) {
|
||||
// check if we have values, set them post and assert
|
||||
$this->log->basicSetLogId($override['values']['log_file_id']);
|
||||
$this->assertEquals(
|
||||
$this->log->getLogId(),
|
||||
$expected['set_log_file_id']
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* check set/get for log level all flag
|
||||
*
|
||||
* @dataProvider logLevelAllProvider
|
||||
* @testdox set/get all log level $type with flag $flag [$_dataName]
|
||||
*
|
||||
* @param string $type
|
||||
* @param bool $flag
|
||||
* @param bool $expected_set
|
||||
* @param bool $expected_get
|
||||
* @return void
|
||||
*/
|
||||
public function testSetGetLogLevelAll(
|
||||
string $type,
|
||||
bool $flag,
|
||||
bool $expected_set,
|
||||
bool $expected_get
|
||||
): void {
|
||||
// neutral start with default
|
||||
$this->log = new \CoreLibs\Debug\Logging();
|
||||
// set and check
|
||||
$this->assertEquals(
|
||||
$this->log->setLogLevelAll($type, $flag),
|
||||
$expected_set
|
||||
);
|
||||
// get and check
|
||||
$this->assertEquals(
|
||||
$this->log->getLogLevelAll($type),
|
||||
$expected_get
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* checks setting for per log info level
|
||||
*
|
||||
* @covers ::setLogLevel
|
||||
* @dataProvider logLevelProvider
|
||||
* @testdox set/get log level $type to $flag check with $level [$_dataName]
|
||||
*
|
||||
* @param string $type
|
||||
* @param string $flag
|
||||
* @param array $debug_on
|
||||
* @param bool $expected_set
|
||||
* @param string|null $level
|
||||
* @param bool|array<mixed> $expected_get
|
||||
* @return void
|
||||
*/
|
||||
public function testSetGetLogLevel(
|
||||
string $type,
|
||||
string $flag,
|
||||
array $debug_on,
|
||||
bool $expected_set,
|
||||
?string $level,
|
||||
$expected_get
|
||||
): void {
|
||||
// neutral start with default
|
||||
$this->log = new \CoreLibs\Debug\Logging();
|
||||
// set
|
||||
$this->assertEquals(
|
||||
$this->log->setLogLevel($type, $flag, $debug_on),
|
||||
$expected_set
|
||||
);
|
||||
// get, if level is null compare to?
|
||||
$this->assertEquals(
|
||||
$this->log->getLogLevel($type, $flag, $level),
|
||||
$expected_get
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* set and get per log
|
||||
* for level/class/page/run flags
|
||||
*
|
||||
* @covers ::setLogPer
|
||||
* @dataProvider logPerProvider
|
||||
* @testdox set/get log per $type with $set [$_dataName]
|
||||
*
|
||||
* @param string $type
|
||||
* @param boolean $set
|
||||
* @param boolean $expected_set
|
||||
* @param boolean $expected_get
|
||||
* @return void
|
||||
*/
|
||||
public function testSetGetLogPer(
|
||||
string $type,
|
||||
bool $set,
|
||||
bool $expected_set,
|
||||
bool $expected_get
|
||||
): void {
|
||||
// neutral start with default
|
||||
$this->log = new \CoreLibs\Debug\Logging();
|
||||
// set and check
|
||||
$this->assertEquals(
|
||||
$this->log->setLogPer($type, $set),
|
||||
$expected_set
|
||||
);
|
||||
// get and check
|
||||
$this->assertEquals(
|
||||
$this->log->getLogPer($type),
|
||||
$expected_get
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* set the print log file date part
|
||||
*
|
||||
* @covers ::setGetLogPrintFileDate
|
||||
* @testWith [true, true, true]
|
||||
* [false, false, false]
|
||||
* @testdox set/get log file date to $input [$_dataName]
|
||||
*
|
||||
* @param boolean $input
|
||||
* @param boolean $expected_set
|
||||
* @param boolean $expected_get
|
||||
* @return void
|
||||
*/
|
||||
public function testSetGetLogPrintFileDate(bool $input, bool $expected_set, bool $expected_get): void
|
||||
{
|
||||
// neutral start with default
|
||||
$this->log = new \CoreLibs\Debug\Logging();
|
||||
// set and check
|
||||
$this->assertEquals(
|
||||
$this->log->setGetLogPrintFileDate($input),
|
||||
$expected_set
|
||||
);
|
||||
$this->assertEquals(
|
||||
$this->log->setGetLogPrintFileDate(),
|
||||
$expected_get
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* convert array to string with ## pre replace space holders
|
||||
*
|
||||
* @covers ::prAr
|
||||
* @dataProvider prArProvider
|
||||
* @testdox check prAr array to string conversion [$_dataName]
|
||||
*
|
||||
* @param array $input
|
||||
* @param string $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testPrAr(array $input, string $expected): void
|
||||
{
|
||||
$this->log = new \CoreLibs\Debug\Logging();
|
||||
$this->assertEquals(
|
||||
$this->log->prAr($input),
|
||||
$expected
|
||||
);
|
||||
}
|
||||
|
||||
// from here are complex debug tests
|
||||
|
||||
/**
|
||||
* Test debug flow
|
||||
*
|
||||
* @covers ::debug
|
||||
* @dataProvider debugProvider
|
||||
* @testdox check debug flow: $expected_debug [$_dataName]
|
||||
*
|
||||
* @param array $options
|
||||
* @param array $debug_msg
|
||||
* @param boolean $expected_debug
|
||||
* @param string $expected_file
|
||||
* @param string $expected_string_start
|
||||
* @param string $expected_string_contains
|
||||
* @return void
|
||||
*/
|
||||
public function testDebug(
|
||||
array $options,
|
||||
array $debug_msg,
|
||||
bool $expected_debug,
|
||||
string $expected_file,
|
||||
string $expected_string_start,
|
||||
string $expected_string_contains
|
||||
): void {
|
||||
// must run with below matrix
|
||||
// level | debug | print | echo | debug() | printErrorMsg() | file
|
||||
// A 1/1/1 | on | on | on | true | 'string' | on
|
||||
// B 1/0/1 | on | off | on | true | 'string' | off
|
||||
// C 1/1/0 | on | on | off | true | '' | on
|
||||
// D 1/0/0 | on | off | off | false | '' | off
|
||||
// E 0/1/1 | off | on | on | false | '' | off
|
||||
// F 0/0/1 | off | off | on | false | '' | off
|
||||
// G 0/1/0 | off | on | off | false | '' | off
|
||||
// H 0/0/0 | off | off | off | false | '' | off
|
||||
|
||||
|
||||
// * debug off
|
||||
// return false on debug(),
|
||||
// return false on writeErrorMsg()
|
||||
// empty string on printErrorMsg
|
||||
// * print off
|
||||
// return true on debug(),
|
||||
// return false on writeErrorMsg()
|
||||
// empty string on printErrorMsg
|
||||
// * echo off
|
||||
// return true on debug(),
|
||||
// empty string on printErrorMsg
|
||||
// fillxed error_msg array
|
||||
|
||||
// overwrite any previous set from test
|
||||
$options['file_id'] = 'TestDebug';
|
||||
// set log folder to temp
|
||||
$options['log_folder'] = '/tmp/';
|
||||
// remove any files named /tmp/error_log_TestDebug*.log
|
||||
array_map('unlink', glob($options['log_folder'] . 'error_msg_' . $options['file_id'] . '*.log'));
|
||||
// init logger
|
||||
$this->log = new \CoreLibs\Debug\Logging($options);
|
||||
// * debug (A/B)
|
||||
// NULL check for strip/prefix
|
||||
$this->assertEquals(
|
||||
$this->log->debug(
|
||||
$debug_msg['level'],
|
||||
$debug_msg['string'],
|
||||
$debug_msg['strip'],
|
||||
$debug_msg['prefix'],
|
||||
),
|
||||
$expected_debug
|
||||
);
|
||||
// * if print check data in log file
|
||||
$log_file = $this->log->getLogFileName();
|
||||
if (!empty($options['debug_all']) && !empty($options['print_all'])) {
|
||||
// file name matching
|
||||
$this->assertStringStartsWith(
|
||||
$options['log_folder'] . 'error_msg_' . $options['file_id'],
|
||||
$log_file,
|
||||
);
|
||||
// cotents check
|
||||
if (!is_file($log_file)) {
|
||||
$this->fail('error msg file not found: ' . $log_file);
|
||||
} else {
|
||||
$log_data = file_get_contents($log_file);
|
||||
if ($log_data === null) {
|
||||
$this->fail('error msg file not readable or not data: ' . $log_file);
|
||||
}
|
||||
// file content matching
|
||||
$this->assertStringEndsWith(
|
||||
$expected_file,
|
||||
$log_data,
|
||||
);
|
||||
}
|
||||
} else {
|
||||
// there should be no file there
|
||||
$this->assertEquals(
|
||||
$log_file,
|
||||
''
|
||||
);
|
||||
}
|
||||
// ** ECHO ON
|
||||
$log_string = $this->log->printErrorMsg();
|
||||
// * print
|
||||
if (!empty($options['debug_all']) && !empty($options['echo_all'])) {
|
||||
// print $this->log->printErrorMsg() . "\n";
|
||||
// echo string must start with
|
||||
$this->assertStringStartsWith(
|
||||
$expected_string_start,
|
||||
$log_string
|
||||
);
|
||||
// echo string must containt
|
||||
$this->assertStringContainsString(
|
||||
$expected_string_contains,
|
||||
$log_string
|
||||
);
|
||||
// TODO: as printing directly is not really done anymore tests below are todo
|
||||
// * get error msg (getErrorMsg)
|
||||
// * merge error msg (mergeErrors)
|
||||
// * print merged (printErrorMsg)
|
||||
// * reset A (resetErrorMsg)
|
||||
// * reset ALL (resetErrorMsg)
|
||||
} else {
|
||||
$this->assertEquals(
|
||||
$log_string,
|
||||
''
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
129
4dev/tests/CoreLibsDebugRunningTimeTest.php
Normal file
129
4dev/tests/CoreLibsDebugRunningTimeTest.php
Normal file
@@ -0,0 +1,129 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* Test class for Debug\RunningTime
|
||||
* @coversDefaultClass \CoreLibs\Debug\RunningTime
|
||||
* @testdox \CoreLibs\Debug\RunningTime method tests
|
||||
*/
|
||||
final class CoreLibsDebugRunningTimeTest extends TestCase
|
||||
{
|
||||
public function hrRunningTimeProvider(): array
|
||||
{
|
||||
return [
|
||||
'default time' => [
|
||||
0 => null,
|
||||
1 => '/^\d{4}\.\d{1,}$/'
|
||||
],
|
||||
'nanoseconds' => [
|
||||
0 => 'ns',
|
||||
1 => '/^\d{10}$/'
|
||||
],
|
||||
'microseconds' => [
|
||||
0 => 'ys',
|
||||
1 => '/^\d{7}\.\d{1,}$/'
|
||||
],
|
||||
'milliseconds' => [
|
||||
0 => 'ms',
|
||||
1 => '/^\d{4}\.\d{1,}$/'
|
||||
],
|
||||
'seconds' => [
|
||||
0 => 's',
|
||||
1 => '/^\d{1}\.\d{4,}$/'
|
||||
],
|
||||
'invalid fallback to ms' => [
|
||||
0 => 'invalid',
|
||||
1 => '/^\d{4}\.\d{1,}$/'
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
public function runningTimeProvider(): array
|
||||
{
|
||||
return [
|
||||
'run time test' => [
|
||||
0 => '/^\d{1,}\.\d{1,}$/',
|
||||
1 => '/^Start: \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} 0\.\d{8}, $/',
|
||||
2 => '/^Start: \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} 0\.\d{8}, '
|
||||
. 'End: \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} 0\.\d{8}, '
|
||||
. 'Run: \d{1,}\.\d{1,} s$/'
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @cover ::hrRunningTime
|
||||
* @dataProvider hrRunningTimeProvider
|
||||
* @testdox hrRunningTime with $out_time matching $expected [$_dataName]
|
||||
*
|
||||
* @param string|null $out_time
|
||||
* @param string $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testHrRunningTime(?string $out_time, string $expected): void
|
||||
{
|
||||
$start = \CoreLibs\Debug\RunningTime::hrRunningTime();
|
||||
$this->assertEquals(
|
||||
0,
|
||||
$start
|
||||
);
|
||||
time_nanosleep(1, 500);
|
||||
if ($out_time === null) {
|
||||
$end = \CoreLibs\Debug\RunningTime::hrRunningTime();
|
||||
} else {
|
||||
$end = \CoreLibs\Debug\RunningTime::hrRunningTime($out_time);
|
||||
}
|
||||
// print "E: " . $end . "\n";
|
||||
$this->assertMatchesRegularExpression(
|
||||
$expected,
|
||||
(string)$end
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @dataProvider runningTimeProvider
|
||||
* @testdox runningTime matching return $expected_number and start $expected_start end $expected_end [$_dataName]
|
||||
*
|
||||
* @param string $expected_number
|
||||
* @param string $expected_start
|
||||
* @param string $expected_end
|
||||
* @return void
|
||||
*/
|
||||
public function testRunningTime(string $expected_number, string $expected_start, string $expected_end): void
|
||||
{
|
||||
$start = \CoreLibs\Debug\RunningTime::runningTime(true);
|
||||
// print "Start: " . $start . "\n";
|
||||
$this->assertEquals(
|
||||
0,
|
||||
$start
|
||||
);
|
||||
// print "STRING: " . \CoreLibs\Debug\RunningTime::runningTimeString() . "\n";
|
||||
$this->assertMatchesRegularExpression(
|
||||
$expected_start,
|
||||
\CoreLibs\Debug\RunningTime::runningTimeString()
|
||||
);
|
||||
time_nanosleep(1, 500);
|
||||
$end = \CoreLibs\Debug\RunningTime::runningTime(true);
|
||||
// print "Start: " . $end . "\n";
|
||||
$this->assertMatchesRegularExpression(
|
||||
$expected_number,
|
||||
(string)$end
|
||||
);
|
||||
// print "STRING: " . \CoreLibs\Debug\RunningTime::runningTimeString() . "\n";
|
||||
$this->assertMatchesRegularExpression(
|
||||
$expected_end,
|
||||
\CoreLibs\Debug\RunningTime::runningTimeString()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
326
4dev/tests/CoreLibsDebugSupportTest.php
Normal file
326
4dev/tests/CoreLibsDebugSupportTest.php
Normal file
@@ -0,0 +1,326 @@
|
||||
<?php // phpcs:disable Generic.Files.LineLength
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* Test class for Debug\Support
|
||||
* @coversDefaultClass \CoreLibs\Debug\Support
|
||||
* @testdox \CoreLibs\Debug\Support method tests
|
||||
*/
|
||||
final class CoreLibsDebugSupportTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function printTimeProvider(): array
|
||||
{
|
||||
return [
|
||||
'default microtime' => [
|
||||
0 => null,
|
||||
1 => "/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.\d{8}$/",
|
||||
],
|
||||
'microtime -1' => [
|
||||
0 => -1,
|
||||
1 => "/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.\d{8}$/",
|
||||
],
|
||||
'microtime 0' => [
|
||||
0 => 0,
|
||||
1 => "/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/",
|
||||
],
|
||||
'microtime 4' => [
|
||||
0 => 4,
|
||||
1 => "/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.\d{4}$/",
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function printArProvider(): array
|
||||
{
|
||||
return [
|
||||
'empty array' => [
|
||||
0 => [],
|
||||
1 => "<pre>Array\n(\n)\n</pre>"
|
||||
],
|
||||
'simple array' => [
|
||||
0 => ['a', 'b'],
|
||||
1 => "<pre>Array\n(\n"
|
||||
. " [0] => a\n"
|
||||
. " [1] => b\n"
|
||||
. ")\n</pre>"
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function printToStringProvider(): array
|
||||
{
|
||||
return [
|
||||
'string' => [
|
||||
'a string',
|
||||
null,
|
||||
'a string',
|
||||
],
|
||||
'a number' => [
|
||||
1234,
|
||||
null,
|
||||
'1234',
|
||||
],
|
||||
'a float number' => [
|
||||
1234.5678,
|
||||
null,
|
||||
'1234.5678',
|
||||
],
|
||||
'bool true' => [
|
||||
true,
|
||||
null,
|
||||
'TRUE',
|
||||
],
|
||||
'bool false' => [
|
||||
false,
|
||||
null,
|
||||
'FALSE',
|
||||
],
|
||||
'an array default' => [
|
||||
['a', 'b'],
|
||||
null,
|
||||
"<pre>Array\n(\n"
|
||||
. " [0] => a\n"
|
||||
. " [1] => b\n"
|
||||
. ")\n</pre>",
|
||||
],
|
||||
'an array, no html' => [
|
||||
['a', 'b'],
|
||||
true,
|
||||
"##HTMLPRE##"
|
||||
. "Array\n(\n"
|
||||
. " [0] => a\n"
|
||||
. " [1] => b\n"
|
||||
. ")\n"
|
||||
. "##/HTMLPRE##",
|
||||
],
|
||||
// resource
|
||||
'a resource' => [
|
||||
tmpfile(),
|
||||
null,
|
||||
'/^Resource id #\d+$/',
|
||||
],
|
||||
// object
|
||||
'an object' => [
|
||||
new \CoreLibs\Debug\Support(),
|
||||
null,
|
||||
'CoreLibs\Debug\Support',
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function debugStringProvider(): array
|
||||
{
|
||||
return [
|
||||
'null string, default' => [
|
||||
0 => null,
|
||||
1 => null,
|
||||
2 => '-'
|
||||
],
|
||||
'empty string, ... replace' => [
|
||||
0 => '',
|
||||
1 => '...',
|
||||
2 => '...'
|
||||
],
|
||||
'filled string' => [
|
||||
0 => 'some string',
|
||||
1 => null,
|
||||
2 => 'some string'
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @cover ::printTime
|
||||
* @dataProvider printTimeProvider
|
||||
* @testdox printTime test with $microtime and match to regex [$_dataName]
|
||||
*
|
||||
* @param int|null $mircrotime
|
||||
* @param string $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testPrintTime(?int $microtime, string $regex): void
|
||||
{
|
||||
if ($microtime === null) {
|
||||
$this->assertMatchesRegularExpression(
|
||||
$regex,
|
||||
\CoreLibs\Debug\Support::printTime()
|
||||
);
|
||||
} else {
|
||||
$this->assertMatchesRegularExpression(
|
||||
$regex,
|
||||
\CoreLibs\Debug\Support::printTime($microtime)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @cover ::printAr
|
||||
* @dataProvider printArProvider
|
||||
* @testdox printAr $input will be $expected [$_dataName]
|
||||
*
|
||||
* @param array $input
|
||||
* @param string $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testPrintAr(array $input, string $expected): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Debug\Support::printAr($input)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @cover ::printToString
|
||||
* @dataProvider printToStringProvider
|
||||
* @testdox printToString $input with $flag will be $expected [$_dataName]
|
||||
*
|
||||
* @param mixed $input
|
||||
* @param boolean|null $flag
|
||||
* @param string $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testPrintToString($input, ?bool $flag, string $expected): void
|
||||
{
|
||||
if ($flag === null) {
|
||||
// if expected starts with / and ends with / then this is a regex compare
|
||||
if (substr($expected, 0, 1) == '/' && substr($expected, -1, 1) == '/') {
|
||||
$this->assertMatchesRegularExpression(
|
||||
$expected,
|
||||
\CoreLibs\Debug\Support::printToString($input)
|
||||
);
|
||||
} else {
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Debug\Support::printToString($input)
|
||||
);
|
||||
}
|
||||
} else {
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Debug\Support::printToString($input, $flag)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @cover ::getCallerMethod
|
||||
* @testWith ["testGetCallerMethod"]
|
||||
* @testdox getCallerMethod check if it returns $expected [$_dataName]
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testGetCallerMethod(string $expected): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Debug\Support::getCallerMethod()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @cover ::getCallerMethodList
|
||||
* @testWith [["main", "run", "run", "run", "run", "run", "run", "runBare", "runTest", "testGetCallerMethodList"],["main", "run", "run", "run", "run", "run", "run", "run", "runBare", "runTest", "testGetCallerMethodList"]]
|
||||
* @testdox getCallerMethodList check if it returns $expected [$_dataName]
|
||||
*
|
||||
* @param array $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testGetCallerMethodList(array $expected, array $expected_group): void
|
||||
{
|
||||
$compare = \CoreLibs\Debug\Support::getCallerMethodList();
|
||||
// if we direct call we have 10, if we call as folder we get 11
|
||||
if (count($compare) == 10) {
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Debug\Support::getCallerMethodList()
|
||||
);
|
||||
} else {
|
||||
$this->assertEquals(
|
||||
$expected_group,
|
||||
\CoreLibs\Debug\Support::getCallerMethodList()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @cover ::getCallerClass
|
||||
* @testWith ["PHPUnit\\TextUI\\Command"]
|
||||
* @testdox getCallerClass check if it returns $expected [$_dataName]
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testGetCallerClass(string $expected): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Debug\Support::getCallerClass()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @cover ::debugString
|
||||
* @dataProvider debugStringProvider
|
||||
* @testdox debugString $input with replace $replace will be $expected [$_dataName]
|
||||
*
|
||||
* @param string|null $input
|
||||
* @param string|null $replace
|
||||
* @param string $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testDebugString(?string $input, ?string $replace, string $expected)
|
||||
{
|
||||
if ($replace === null) {
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Debug\Support::debugString($input)
|
||||
);
|
||||
} else {
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Debug\Support::debugString($input, $replace)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
221
4dev/tests/CoreLibsGetSystemTest.php
Normal file
221
4dev/tests/CoreLibsGetSystemTest.php
Normal file
@@ -0,0 +1,221 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* Test class for Get\System
|
||||
* @coversDefaultClass \CoreLibs\Get\System
|
||||
* @testdox \CoreLibs\Get\System method tests
|
||||
*/
|
||||
final class CoreLibsGetSystemTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function fileUploadErrorMessageProvider(): array
|
||||
{
|
||||
return [
|
||||
'upload err init size' => [
|
||||
0 => UPLOAD_ERR_INI_SIZE,
|
||||
1 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini',
|
||||
],
|
||||
'upload err from size' => [
|
||||
0 => UPLOAD_ERR_FORM_SIZE,
|
||||
1 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form'
|
||||
],
|
||||
'upload err partial' => [
|
||||
0 => UPLOAD_ERR_PARTIAL,
|
||||
1 => 'The uploaded file was only partially uploaded'
|
||||
],
|
||||
'upload err no file' => [
|
||||
0 => UPLOAD_ERR_NO_FILE,
|
||||
1 => 'No file was uploaded'
|
||||
],
|
||||
'upload err no tmp dir' => [
|
||||
0 => UPLOAD_ERR_NO_TMP_DIR,
|
||||
1 => 'Missing a temporary folder'
|
||||
],
|
||||
'upload err cant write' => [
|
||||
0 => UPLOAD_ERR_CANT_WRITE,
|
||||
1 => 'Failed to write file to disk'
|
||||
],
|
||||
'upload err extension' => [
|
||||
0 => UPLOAD_ERR_EXTENSION,
|
||||
1 => 'File upload stopped by extension'
|
||||
],
|
||||
'unkown error' => [
|
||||
0 => 99999,
|
||||
1 => 'Unknown upload error'
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getHostNameProvider(): array
|
||||
{
|
||||
return [
|
||||
'original set' => [
|
||||
0 => null,
|
||||
1 => 'NOHOST',
|
||||
2 => 'NOPORT',
|
||||
],
|
||||
'override set no port' => [
|
||||
0 => 'foo.org',
|
||||
1 => 'foo.org',
|
||||
2 => '80'
|
||||
],
|
||||
'override set with port' => [
|
||||
0 => 'foo.org:443',
|
||||
1 => 'foo.org',
|
||||
2 => '443'
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getPageNameProvider(): array
|
||||
{
|
||||
return [
|
||||
// 0: input
|
||||
// 1: expected default/WITH_EXTENSION
|
||||
// 2: expected NO_EXTENSION
|
||||
// 3: expected FULL_PATH, if first and last character are / use regex
|
||||
'original set' => [
|
||||
0 => null,
|
||||
1 => 'phpunit',
|
||||
2 => 'phpunit',
|
||||
// NOTE: this can change, so it is a regex check
|
||||
3 => "/^(\/?.*\/?)?www\/vendor\/bin\/phpunit$/",
|
||||
],
|
||||
'some path with extension' => [
|
||||
0 => '/some/path/to/file.txt',
|
||||
1 => 'file.txt',
|
||||
2 => 'file',
|
||||
3 => '/some/path/to/file.txt',
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::fileUploadErrorMessage
|
||||
* @dataProvider fileUploadErrorMessageProvider
|
||||
* @testdox fileUploadErrorMessage $input error matches $expected [$_dataName]
|
||||
*
|
||||
* @param integer $input
|
||||
* @param string $expected
|
||||
* @return void
|
||||
*/
|
||||
public function testFileUploadErrorMessage(int $input, string $expected): void
|
||||
{
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
\CoreLibs\Get\System::fileUploadErrorMessage($input)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::getHostName
|
||||
* @dataProvider getHostNameProvider
|
||||
* @testdox getHostName $input must match $expected_host:$expected_port [$_dataName]
|
||||
*
|
||||
* @param string|null $input
|
||||
* @param string $expected_host
|
||||
* @param string $expected_port
|
||||
* @return void
|
||||
*/
|
||||
public function testGetHostNanme(?string $input, string $expected_host, string $expected_port): void
|
||||
{
|
||||
// print "HOSTNAME: " . $_SERVER['HTTP_HOST'] . "<br>";
|
||||
// print "SERVER: " . print_r($_SERVER, true) . "\n";
|
||||
// print "SELF: " . $_SERVER['PHP_SELF'] . "\n";
|
||||
if ($input !== null) {
|
||||
$_SERVER['HTTP_HOST'] = $input;
|
||||
}
|
||||
list ($host, $port) = \CoreLibs\Get\System::getHostName();
|
||||
$this->assertEquals(
|
||||
$expected_host,
|
||||
$host,
|
||||
'failed expected host assert'
|
||||
);
|
||||
$this->assertEquals(
|
||||
$expected_port,
|
||||
$port,
|
||||
'faile expected port assert'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::getPageName
|
||||
* @dataProvider getPageNameProvider
|
||||
* @testdox getPageName $input will match 0: $expected_0, 1: $expected_1, 2: $expected_2 [$_dataName]
|
||||
*
|
||||
* @param string|null $input
|
||||
* @param string $expected_0 default with extension
|
||||
* @param string $expected_1 no extension
|
||||
* @param string $expected_2 full path
|
||||
* @return void
|
||||
*/
|
||||
public function testGetPageName(?string $input, string $expected_0, string $expected_1, string $expected_2)
|
||||
{
|
||||
if ($input !== null) {
|
||||
$_SERVER['PHP_SELF'] = $input;
|
||||
}
|
||||
// default 0,
|
||||
$this->assertEquals(
|
||||
$expected_0,
|
||||
\CoreLibs\Get\System::getPageName(),
|
||||
'failed default assert'
|
||||
);
|
||||
$this->assertEquals(
|
||||
$expected_0,
|
||||
\CoreLibs\Get\System::getPageName(\CoreLibs\Get\System::WITH_EXTENSION),
|
||||
'failed WITH_EXTESION assert'
|
||||
);
|
||||
$this->assertEquals(
|
||||
$expected_1,
|
||||
\CoreLibs\Get\System::getPageName(\CoreLibs\Get\System::NO_EXTENSION),
|
||||
'failed NO_EXTENSION assert'
|
||||
);
|
||||
// FULL PATH check can be equals or regex
|
||||
$page_name_full_path = \CoreLibs\Get\System::getPageName(\CoreLibs\Get\System::FULL_PATH);
|
||||
if (
|
||||
substr($expected_2, 0, 1) == '/' &&
|
||||
substr($expected_2, -1, 1) == '/'
|
||||
) {
|
||||
// this is regex
|
||||
$this->assertMatchesRegularExpression(
|
||||
$expected_2,
|
||||
$page_name_full_path,
|
||||
'failed FULL_PATH assert regex'
|
||||
);
|
||||
} else {
|
||||
$this->assertEquals(
|
||||
$expected_2,
|
||||
$page_name_full_path,
|
||||
'failed FULL_PATH assert equals'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
310
4dev/tests/CoreLibsLanguageGetLocaleTest.php
Normal file
310
4dev/tests/CoreLibsLanguageGetLocaleTest.php
Normal file
@@ -0,0 +1,310 @@
|
||||
<?php // phpcs:disable Generic.Files.LineLength
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* Test class for Language\GetLocale
|
||||
*
|
||||
* @coversDefaultClass \CoreLibs\Language\GetLocale
|
||||
* @testdox \CoreLibs\Language\GetLocale method tests
|
||||
*/
|
||||
final class CoreLibsLanguageGetLocaleTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* set all constant variables that must be set before call
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public static function setUpBeforeClass(): void
|
||||
{
|
||||
// default web page encoding setting
|
||||
if (!defined('DEFAULT_ENCODING')) {
|
||||
define('DEFAULT_ENCODING', 'UTF-8');
|
||||
}
|
||||
if (!defined('DEFAULT_LOCALE')) {
|
||||
// default lang + encoding
|
||||
define('DEFAULT_LOCALE', 'en_US.UTF-8');
|
||||
}
|
||||
// site
|
||||
if (!defined('SITE_ENCODING')) {
|
||||
define('SITE_ENCODING', DEFAULT_ENCODING);
|
||||
}
|
||||
if (!defined('SITE_LOCALE')) {
|
||||
define('SITE_LOCALE', DEFAULT_LOCALE);
|
||||
}
|
||||
// just set
|
||||
if (!defined('BASE')) {
|
||||
define('BASE', str_replace('/configs', '', __DIR__) . DIRECTORY_SEPARATOR);
|
||||
}
|
||||
if (!defined('INCLUDES')) {
|
||||
define('INCLUDES', 'includes' . DIRECTORY_SEPARATOR);
|
||||
}
|
||||
if (!defined('LANG')) {
|
||||
define('LANG', 'lang' . DIRECTORY_SEPARATOR);
|
||||
}
|
||||
if (!defined('LOCALE')) {
|
||||
define('LOCALE', 'locale' . DIRECTORY_SEPARATOR);
|
||||
}
|
||||
if (!defined('CONTENT_PATH')) {
|
||||
define('CONTENT_PATH', 'frontend' . DIRECTORY_SEPARATOR);
|
||||
}
|
||||
// array session
|
||||
$_SESSION = [];
|
||||
global $_SESSION;
|
||||
}
|
||||
|
||||
/**
|
||||
* all the test data
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function setLocaleProvider(): array
|
||||
{
|
||||
return [
|
||||
// 0: locale
|
||||
// 1: domain
|
||||
// 2: encoding
|
||||
// 3: path
|
||||
// 4: SESSION: DEFAULT_LOCALE
|
||||
// 5: SESSION: DEFAULT_CHARSET
|
||||
// 6: expected array
|
||||
'no params, all default constants' => [
|
||||
// lang, domain, encoding, path
|
||||
null, null, null, null,
|
||||
// SESSION DEFAULT_LOCALE, SESSION: DEFAULT_CHARSET
|
||||
null, null,
|
||||
// return array
|
||||
[
|
||||
'locale' => 'en_US.UTF-8',
|
||||
'lang' => 'en_US',
|
||||
'domain' => 'frontend',
|
||||
'encoding' => 'UTF-8',
|
||||
'path' => "/^\/(.*\/)?includes\/locale\/$/",
|
||||
],
|
||||
],
|
||||
'no params, session charset and lang' => [
|
||||
// lang, domain, encoding, path
|
||||
null, null, null, null,
|
||||
// SESSION DEFAULT_LOCALE, SESSION: DEFAULT_CHARSET
|
||||
'ja_JP', 'UTF-8',
|
||||
// return array
|
||||
[
|
||||
'locale' => 'ja_JP',
|
||||
'lang' => 'ja_JP',
|
||||
'domain' => 'frontend',
|
||||
'encoding' => 'UTF-8',
|
||||
'path' => "/^\/(.*\/)?includes\/locale\/$/",
|
||||
],
|
||||
],
|
||||
'no params, session charset and lang short' => [
|
||||
// lang, domain, encoding, path
|
||||
null, null, null, null,
|
||||
// SESSION DEFAULT_LOCALE, SESSION: DEFAULT_CHARSET
|
||||
'ja', 'UTF-8',
|
||||
// return array
|
||||
[
|
||||
'locale' => 'ja',
|
||||
'lang' => 'ja',
|
||||
'domain' => 'frontend',
|
||||
'encoding' => 'UTF-8',
|
||||
'path' => "/^\/(.*\/)?includes\/locale\/$/",
|
||||
],
|
||||
],
|
||||
// param lang (no sessions)
|
||||
'locale param only, no sessions' => [
|
||||
// lang, domain, encoding, path
|
||||
'ja.UTF-8', null, null, null,
|
||||
// SESSION DEFAULT_LOCALE, SESSION: DEFAULT_CHARSET
|
||||
null, null,
|
||||
// return array
|
||||
[
|
||||
'locale' => 'ja.UTF-8',
|
||||
'lang' => 'ja',
|
||||
'domain' => 'frontend',
|
||||
'encoding' => 'UTF-8',
|
||||
'path' => "/^\/(.*\/)?includes\/locale\/$/",
|
||||
],
|
||||
],
|
||||
// different locale setting
|
||||
'locale complex param only, no sessions' => [
|
||||
// lang, domain, encoding, path
|
||||
'ja_JP.SJIS', null, null, null,
|
||||
// SESSION DEFAULT_LOCALE, SESSION: DEFAULT_CHARSET
|
||||
null, null,
|
||||
// return array
|
||||
[
|
||||
'locale' => 'ja_JP.SJIS',
|
||||
'lang' => 'ja_JP',
|
||||
'domain' => 'frontend',
|
||||
'encoding' => 'SJIS',
|
||||
'path' => "/^\/(.*\/)?includes\/locale\/$/",
|
||||
],
|
||||
],
|
||||
// param lang and domain (no override)
|
||||
'locale, domain params, no sessions' => [
|
||||
// lang, domain, encoding, path
|
||||
'ja.UTF-8', 'admin', null, null,
|
||||
// SESSION DEFAULT_LOCALE, SESSION: DEFAULT_CHARSET
|
||||
null, null,
|
||||
// return array
|
||||
[
|
||||
'locale' => 'ja.UTF-8',
|
||||
'lang' => 'ja',
|
||||
'domain' => 'admin',
|
||||
'encoding' => 'UTF-8',
|
||||
'path' => "/^\/(.*\/)?includes\/locale\/$/",
|
||||
],
|
||||
],
|
||||
// param lang and domain (no override)
|
||||
'locale, domain, encoding params, no sessions' => [
|
||||
// lang, domain, encoding, path
|
||||
'ja.UTF-8', 'admin', 'UTF-8', null,
|
||||
// SESSION DEFAULT_LOCALE, SESSION: DEFAULT_CHARSET
|
||||
null, null,
|
||||
// return array
|
||||
[
|
||||
'locale' => 'ja.UTF-8',
|
||||
'lang' => 'ja',
|
||||
'domain' => 'admin',
|
||||
'encoding' => 'UTF-8',
|
||||
'path' => "/^\/(.*\/)?includes\/locale\/$/",
|
||||
],
|
||||
],
|
||||
// lang, domain, path (no override)
|
||||
'locale, domain and path, no sessions' => [
|
||||
// lang, domain, encoding, path
|
||||
'ja.UTF-8', 'admin', '', __DIR__ . '/locale_other/',
|
||||
// SESSION DEFAULT_LOCALE, SESSION: DEFAULT_CHARSET
|
||||
null, null,
|
||||
// return array
|
||||
[
|
||||
'locale' => 'ja.UTF-8',
|
||||
'lang' => 'ja',
|
||||
'domain' => 'admin',
|
||||
'encoding' => 'UTF-8',
|
||||
'path' => "/^\/(.*\/)?locale_other\/$/",
|
||||
],
|
||||
],
|
||||
// all params set (no override)
|
||||
'all parameter, no sessions' => [
|
||||
// lang, domain, encoding, path
|
||||
'ja', 'admin', 'UTF-8', __DIR__ . '/locale_other/',
|
||||
// SESSION DEFAULT_LOCALE, SESSION: DEFAULT_CHARSET
|
||||
null, null,
|
||||
// return array
|
||||
[
|
||||
'locale' => 'ja',
|
||||
'lang' => 'ja',
|
||||
'domain' => 'admin',
|
||||
'encoding' => 'UTF-8',
|
||||
'path' => "/^\/(.*\/)?locale_other\/$/",
|
||||
],
|
||||
],
|
||||
// param lang and domain (no override)
|
||||
'long locale, domain, encoding params, no sessions' => [
|
||||
// lang, domain, encoding, path
|
||||
'de_CH.UTF-8@euro', 'admin', 'UTF-8', null,
|
||||
// SESSION DEFAULT_LOCALE, SESSION: DEFAULT_CHARSET
|
||||
null, null,
|
||||
// return array
|
||||
[
|
||||
'locale' => 'de_CH.UTF-8@euro',
|
||||
'lang' => 'de_CH',
|
||||
'domain' => 'admin',
|
||||
'encoding' => 'UTF-8',
|
||||
'path' => "/^\/(.*\/)?includes\/locale\/$/",
|
||||
],
|
||||
],
|
||||
// TODO invalid params (bad path) (no override)
|
||||
// TODO param calls, but with override set
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::setLocale
|
||||
* @dataProvider setLocaleProvider
|
||||
* @testdox lang settings lang $language, domain $domain, encoding $encoding, path $path; session lang: $SESSION_DEFAULT_LOCALE, session char: $SESSION_DEFAULT_CHARSET [$_dataName]
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testsetLocale(
|
||||
?string $language,
|
||||
?string $domain,
|
||||
?string $encoding,
|
||||
?string $path,
|
||||
?string $SESSION_DEFAULT_LOCALE,
|
||||
?string $SESSION_DEFAULT_CHARSET,
|
||||
array $expected
|
||||
): void {
|
||||
$return_lang_settings = [];
|
||||
global $_SESSION;
|
||||
// set override
|
||||
if ($SESSION_DEFAULT_LOCALE !== null) {
|
||||
$_SESSION['DEFAULT_LOCALE'] = $SESSION_DEFAULT_LOCALE;
|
||||
}
|
||||
if ($SESSION_DEFAULT_CHARSET !== null) {
|
||||
$_SESSION['DEFAULT_CHARSET'] = $SESSION_DEFAULT_CHARSET;
|
||||
}
|
||||
// function call
|
||||
if ($language === null && $domain === null && $encoding === null && $path === null) {
|
||||
$return_lang_settings = \CoreLibs\Language\GetLocale::setLocale();
|
||||
} elseif ($language !== null && $domain === null && $encoding === null && $path === null) {
|
||||
$return_lang_settings = \CoreLibs\Language\GetLocale::setLocale(
|
||||
$language
|
||||
);
|
||||
} elseif ($language !== null && $domain !== null && $encoding === null && $path === null) {
|
||||
$return_lang_settings = \CoreLibs\Language\GetLocale::setLocale(
|
||||
$language,
|
||||
$domain
|
||||
);
|
||||
} elseif ($language !== null && $domain !== null && $encoding !== null && $path === null) {
|
||||
$return_lang_settings = \CoreLibs\Language\GetLocale::setLocale(
|
||||
$language,
|
||||
$domain,
|
||||
$encoding
|
||||
);
|
||||
} else {
|
||||
$return_lang_settings = \CoreLibs\Language\GetLocale::setLocale(
|
||||
$language,
|
||||
$domain,
|
||||
$encoding,
|
||||
$path
|
||||
);
|
||||
}
|
||||
// print "RETURN: " . print_r($return_lang_settings, true) . "\n";
|
||||
|
||||
foreach (
|
||||
[
|
||||
'locale', 'lang', 'domain', 'encoding', 'path'
|
||||
] as $key
|
||||
) {
|
||||
$value = $expected[$key];
|
||||
if (strpos($value, "/") === 0) {
|
||||
// this is regex
|
||||
$this->assertMatchesRegularExpression(
|
||||
$value,
|
||||
$return_lang_settings[$key],
|
||||
'assert regex failed for ' . $key
|
||||
);
|
||||
} else {
|
||||
// assert equal
|
||||
$this->assertEquals(
|
||||
$value,
|
||||
$return_lang_settings[$key],
|
||||
'assert equal failed for ' . $key
|
||||
);
|
||||
}
|
||||
}
|
||||
// unset all vars
|
||||
$_SESSION = [];
|
||||
unset($GLOBALS['OVERRIDE_LANG']);
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
1046
4dev/tests/CoreLibsLanguageL10nTest.php
Normal file
1046
4dev/tests/CoreLibsLanguageL10nTest.php
Normal file
File diff suppressed because it is too large
Load Diff
33
4dev/tests/CoreLibsOutputFormElementsTest.php
Normal file
33
4dev/tests/CoreLibsOutputFormElementsTest.php
Normal file
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* Test class for Output\Form\Elements
|
||||
* @coversDefaultClass \CoreLibs\Output\Form\Elements
|
||||
* @testdox \CoreLibs\Output\Form\Elements method tests
|
||||
*/
|
||||
final class CoreLibsOutputFormElementsTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @testdox Output\Form\Elements Class tests
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testOutputFormElements()
|
||||
{
|
||||
$this->assertTrue(true, 'Output Form Elements Tests not implemented');
|
||||
$this->markTestIncomplete(
|
||||
'Output\Form\Elements Tests have not yet been implemented'
|
||||
);
|
||||
// $this->markTestSkipped('No implementation for Output\Form\Elements at the moment');
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
33
4dev/tests/CoreLibsOutputFormGenerateTest.php
Normal file
33
4dev/tests/CoreLibsOutputFormGenerateTest.php
Normal file
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* Test class for Output\Form\Generate
|
||||
* @coversDefaultClass \CoreLibs\Output\Form\Generate
|
||||
* @testdox \CoreLibs\Output\Form\Generate method tests
|
||||
*/
|
||||
final class CoreLibsOutputFormGenerateTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @testdox Output\Form\Generate Class tests
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testOutputFormGenerate()
|
||||
{
|
||||
/* $this->assertTrue(true, 'Output Form Generate Tests not implemented');
|
||||
$this->markTestIncomplete(
|
||||
'Output\Form\Generate Tests have not yet been implemented'
|
||||
); */
|
||||
$this->markTestSkipped('No implementation for Output\Form\Generate at the moment');
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
33
4dev/tests/CoreLibsOutputFormTokenTest.php
Normal file
33
4dev/tests/CoreLibsOutputFormTokenTest.php
Normal file
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* Test class for Output\Form\Token
|
||||
* @coversDefaultClass \CoreLibs\Output\Form\Token
|
||||
* @testdox \CoreLibs\Output\Form\Token method tests
|
||||
*/
|
||||
final class CoreLibsOutputFormTokenTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @testdox Output\Form\Token Class tests
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testOutputFormToken()
|
||||
{
|
||||
$this->assertTrue(true, 'Output Form Token Tests not implemented');
|
||||
$this->markTestIncomplete(
|
||||
'Output\Form\Token Tests have not yet been implemented'
|
||||
);
|
||||
// $this->markTestSkipped('No implementation for Output\Form\Token at the moment');
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
33
4dev/tests/CoreLibsOutputImageTest.php
Normal file
33
4dev/tests/CoreLibsOutputImageTest.php
Normal file
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* Test class for Output\Image
|
||||
* @coversDefaultClass \CoreLibs\Output\Image
|
||||
* @testdox \CoreLibs\Output\Image method tests
|
||||
*/
|
||||
final class CoreLibsOutputImageTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @testdox Output\Image Class tests
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testOutputImage()
|
||||
{
|
||||
$this->assertTrue(true, 'Output Image Tests not implemented');
|
||||
$this->markTestIncomplete(
|
||||
'Output\Image Tests have not yet been implemented'
|
||||
);
|
||||
// $this->markTestSkipped('No implementation for Output\Image at the moment');
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
33
4dev/tests/CoreLibsOutputProgressbarTest.php
Normal file
33
4dev/tests/CoreLibsOutputProgressbarTest.php
Normal file
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* Test class for Output\Progressbar
|
||||
* @coversDefaultClass \CoreLibs\Output\Progressbar
|
||||
* @testdox \CoreLibs\Output\Progressbar method tests
|
||||
*/
|
||||
final class CoreLibsOutputProgressbarTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @testdox Output\Progressbar Class tests
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testOutputProgressbar()
|
||||
{
|
||||
/* $this->assertTrue(true, 'Output Progressbar Tests not implemented');
|
||||
$this->markTestIncomplete(
|
||||
'Output\Progressbar Tests have not yet been implemented'
|
||||
); */
|
||||
$this->markTestSkipped('No implementation for Output\Progressbar at the moment');
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
16
4dev/tests/includes/create_po.sh
Executable file
16
4dev/tests/includes/create_po.sh
Executable file
@@ -0,0 +1,16 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# if we don't have one base file we are in the wrong folder
|
||||
if [ ! -f "locale/en_US/LC_MESSAGES/admin.mo" ]; then
|
||||
echo "Locale file is missing, wrong base folder?"
|
||||
echo "Should be: 4dev/tests/includes/"
|
||||
exit;
|
||||
fi;
|
||||
|
||||
for file in $(ls -1 locale/*.po); do
|
||||
echo $file;
|
||||
file=$(basename $file .po);
|
||||
locale=$(echo "${file}" | cut -d "-" -f 1);
|
||||
domain=$(echo "${file}" | cut -d "-" -f 2);
|
||||
msgfmt -o locale/${locale}/LC_MESSAGES/${domain}.mo locale/${locale}-${domain}.po;
|
||||
done;
|
||||
34
4dev/tests/includes/locale/en_US-admin.po
Normal file
34
4dev/tests/includes/locale/en_US-admin.po
Normal file
@@ -0,0 +1,34 @@
|
||||
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: en_US.UTF-8 LC_MESSAGES admin\n"
|
||||
"Report-Msgid-Bugs-To: clemens.schwaighofer@egplusww.com\n"
|
||||
"POT-Creation-Date: 2018-03-28 10:40+0900\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: clemens.schwaighofer@egplusww.co\n"
|
||||
"Language-Team: E-GRAPHICS COMMUNICATIONS Japan <info.jp@egplusww.com>\n"
|
||||
"Language: en_US\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
|
||||
msgid "Original"
|
||||
msgstr "Translated admin en_US"
|
||||
|
||||
msgid "single"
|
||||
msgid_plural "multi"
|
||||
msgstr[0] "Multi admin en_US 0"
|
||||
msgstr[1] "Multi admin en_US 1"
|
||||
msgstr[2] "Multi admin en_US 2"
|
||||
|
||||
msgctxt "context"
|
||||
msgid "Original"
|
||||
msgstr "Original context admin en_US"
|
||||
|
||||
msgctxt "context"
|
||||
msgid "single"
|
||||
msgid_plural "multi"
|
||||
msgstr[0] "Multi context admin en_US 0"
|
||||
msgstr[1] "Multi context admin en_US 1"
|
||||
msgstr[2] "Multi context admin en_US 2"
|
||||
34
4dev/tests/includes/locale/en_US-frontend.po
Normal file
34
4dev/tests/includes/locale/en_US-frontend.po
Normal file
@@ -0,0 +1,34 @@
|
||||
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: en_US.UTF-8 LC_MESSAGES frontend\n"
|
||||
"Report-Msgid-Bugs-To: clemens.schwaighofer@egplusww.com\n"
|
||||
"POT-Creation-Date: 2018-03-28 10:40+0900\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: clemens.schwaighofer@egplusww.co\n"
|
||||
"Language-Team: E-GRAPHICS COMMUNICATIONS Japan <info.jp@egplusww.com>\n"
|
||||
"Language: en_US\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
|
||||
msgid "Original"
|
||||
msgstr "Translated frontend en_US"
|
||||
|
||||
msgid "single"
|
||||
msgid_plural "multi"
|
||||
msgstr[0] "Multi frontend en_US 0"
|
||||
msgstr[1] "Multi frontend en_US 1"
|
||||
msgstr[2] "Multi frontend en_US 2"
|
||||
|
||||
msgctxt "context"
|
||||
msgid "Original"
|
||||
msgstr "Original context frontend en_US"
|
||||
|
||||
msgctxt "context"
|
||||
msgid "single"
|
||||
msgid_plural "multi"
|
||||
msgstr[0] "Multi context frontend en_US 0"
|
||||
msgstr[1] "Multi context frontend en_US 1"
|
||||
msgstr[2] "Multi context frontend en_US 2"
|
||||
BIN
4dev/tests/includes/locale/en_US/LC_MESSAGES/admin.mo
Normal file
BIN
4dev/tests/includes/locale/en_US/LC_MESSAGES/admin.mo
Normal file
Binary file not shown.
BIN
4dev/tests/includes/locale/en_US/LC_MESSAGES/frontend.mo
Normal file
BIN
4dev/tests/includes/locale/en_US/LC_MESSAGES/frontend.mo
Normal file
Binary file not shown.
35
4dev/tests/includes/locale/ja_JP-admin.po
Normal file
35
4dev/tests/includes/locale/ja_JP-admin.po
Normal file
@@ -0,0 +1,35 @@
|
||||
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: ja_JP.UTF-8 LC_MESSAGES admin\n"
|
||||
"Report-Msgid-Bugs-To: clemens.schwaighofer@egplusww.com\n"
|
||||
"POT-Creation-Date: 2018-03-28 10:40+0900\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: clemens.schwaighofer@egplusww.co\n"
|
||||
"Language-Team: E-GRAPHICS COMMUNICATIONS Japan <info.jp@egplusww.com>\n"
|
||||
"Language: ja\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;\n"
|
||||
# 0, 1, 2 plural
|
||||
|
||||
msgid "Original"
|
||||
msgstr "Translated admin ja_JP"
|
||||
|
||||
msgid "single"
|
||||
msgid_plural "multi"
|
||||
msgstr[0] "Multi admin ja_JP 0"
|
||||
msgstr[1] "Multi admin ja_JP 1"
|
||||
msgstr[2] "Multi admin ja_JP 2"
|
||||
|
||||
msgctxt "context"
|
||||
msgid "Original"
|
||||
msgstr "Original context admin ja_JP"
|
||||
|
||||
msgctxt "context"
|
||||
msgid "single"
|
||||
msgid_plural "multi"
|
||||
msgstr[0] "Multi context admin ja_JP 0"
|
||||
msgstr[1] "Multi context admin ja_JP 1"
|
||||
msgstr[2] "Multi context admin ja_JP 2"
|
||||
35
4dev/tests/includes/locale/ja_JP-frontend.po
Normal file
35
4dev/tests/includes/locale/ja_JP-frontend.po
Normal file
@@ -0,0 +1,35 @@
|
||||
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: ja_JP.UTF-8 LC_MESSAGES frontend\n"
|
||||
"Report-Msgid-Bugs-To: clemens.schwaighofer@egplusww.com\n"
|
||||
"POT-Creation-Date: 2018-03-28 10:40+0900\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: clemens.schwaighofer@egplusww.co\n"
|
||||
"Language-Team: E-GRAPHICS COMMUNICATIONS Japan <info.jp@egplusww.com>\n"
|
||||
"Language: ja\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;\n"
|
||||
# 0, 1, 2 plural
|
||||
|
||||
msgid "Original"
|
||||
msgstr "Translated frontend ja_JP"
|
||||
|
||||
msgid "single"
|
||||
msgid_plural "multi"
|
||||
msgstr[0] "Multi frontend ja_JP 0"
|
||||
msgstr[1] "Multi frontend ja_JP 1"
|
||||
msgstr[2] "Multi frontend ja_JP 2"
|
||||
|
||||
msgctxt "context"
|
||||
msgid "Original"
|
||||
msgstr "Original context frontend ja_JP"
|
||||
|
||||
msgctxt "context"
|
||||
msgid "single"
|
||||
msgid_plural "multi"
|
||||
msgstr[0] "Multi context frontend ja_JP 0"
|
||||
msgstr[1] "Multi context frontend ja_JP 1"
|
||||
msgstr[2] "Multi context frontend ja_JP 2"
|
||||
BIN
4dev/tests/includes/locale/ja_JP/LC_MESSAGES/admin.mo
Normal file
BIN
4dev/tests/includes/locale/ja_JP/LC_MESSAGES/admin.mo
Normal file
Binary file not shown.
BIN
4dev/tests/includes/locale/ja_JP/LC_MESSAGES/frontend.mo
Normal file
BIN
4dev/tests/includes/locale/ja_JP/LC_MESSAGES/frontend.mo
Normal file
Binary file not shown.
3
4dev/tests/log/.gitignore
vendored
Normal file
3
4dev/tests/log/.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
*log
|
||||
*LOG
|
||||
!.gitignore
|
||||
168
README.V6-Upgrade.md
Normal file
168
README.V6-Upgrade.md
Normal file
@@ -0,0 +1,168 @@
|
||||
# Upgrade to Version 6
|
||||
|
||||
* remove old `lib/CoreLibs` and copy the new over
|
||||
* copy `config/config.php`
|
||||
* install composer if not installed `composer init` and `composer install`
|
||||
* update composer.json
|
||||
```json
|
||||
"autoload": {
|
||||
"classmap": [
|
||||
"lib/"
|
||||
]
|
||||
},
|
||||
```
|
||||
Run to update autoloader list
|
||||
```sh
|
||||
composer dump-autoload
|
||||
```
|
||||
|
||||
* copy `includes/edit_base.inc`
|
||||
* add session start in the top header block where the `header()` calls are
|
||||
```php
|
||||
// start session
|
||||
CoreLibs\Create\Session::startSession();
|
||||
```
|
||||
* update all header calls if needed to add new log type call
|
||||
```php
|
||||
// create logger
|
||||
$log = new CoreLibs\Debug\Logging([
|
||||
'log_folder' => BASE . LOG,
|
||||
'file_id' => LOG_FILE_ID,
|
||||
'print_file_date' => true,
|
||||
'debug_all' => $DEBUG_ALL ?? false,
|
||||
'echo_all' => $ECHO_ALL ?? false,
|
||||
'print_all' => $PRINT_ALL ?? false,
|
||||
]);
|
||||
```
|
||||
* add a db class
|
||||
```php
|
||||
// db config with logger
|
||||
$db = new CoreLibs\DB\IO(DB_CONFIG, $log);
|
||||
```
|
||||
* login class needs to have db and logger added
|
||||
```php
|
||||
// login & page access check
|
||||
$login = new CoreLibs\ACL\Login($db, $log);
|
||||
```
|
||||
* update language class
|
||||
```php
|
||||
// pre auto detect language after login
|
||||
$locale = \CoreLibs\Language\GetLocale::setLocale();
|
||||
// set lang and pass to smarty/backend
|
||||
$l10n = new \CoreLibs\Language\L10n(
|
||||
$locale['locale'],
|
||||
$locale['domain'],
|
||||
$locale['path'],
|
||||
);
|
||||
```
|
||||
* smarty needs language
|
||||
```php
|
||||
$smarty = new CoreLibs\Template\SmartyExtend($l10n, $locale);
|
||||
```
|
||||
* admin backend also needs logger
|
||||
```php
|
||||
$cms = new CoreLibs\Admin\Backend($db, $log, $l10n, $locale);
|
||||
```
|
||||
* update and `$cms` or similar calls so db is in `$cms->db->...` and log are in `$cms->log->...`
|
||||
* update all `config.*.php` files where needed
|
||||
* check config.master.php for `BASE_NAME` and `G_TITLE` and set them in the `.env` file so the `config.master.php` can be copied as os
|
||||
* If not doable, see changed below in `config.master.php` must remove old auto loder and `FLASH` constant at least
|
||||
**REMOVE:**
|
||||
```php
|
||||
/************* AUTO LOADER *******************/
|
||||
// read auto loader
|
||||
require BASE . LIB . 'autoloader.php';
|
||||
```
|
||||
**UPDATE:**
|
||||
```php
|
||||
// po langs [DEPRECAED: use LOCALE]
|
||||
define('LANG', 'lang' . DIRECTORY_SEPARATOR);
|
||||
// po locale file
|
||||
define('LOCALE', 'locale' . DIRECTORY_SEPARATOR);
|
||||
```
|
||||
```php
|
||||
// SSL host name
|
||||
// define('SSL_HOST', $_ENV['SSL_HOST'] ?? '');
|
||||
```
|
||||
```php
|
||||
// define full regex
|
||||
define('PASSWORD_REGEX', "/^"
|
||||
. (defined('PASSWORD_LOWER') ? PASSWORD_LOWER : '')
|
||||
. (defined('PASSWORD_UPPER') ? PASSWORD_UPPER : '')
|
||||
. (defined('PASSWORD_NUMBER') ? PASSWORD_NUMBER : '')
|
||||
. (defined('PASSWORD_SPECIAL') ? PASSWORD_SPECIAL : '')
|
||||
. "[A-Za-z\d" . PASSWORD_SPECIAL_RANGE . "]{" . PASSWORD_MIN_LENGTH . "," . PASSWORD_MAX_LENGTH . "}$/");
|
||||
```
|
||||
```php
|
||||
/************* LAYOUT WIDTHS *************/
|
||||
define('PAGE_WIDTH', '100%');
|
||||
define('CONTENT_WIDTH', '100%');
|
||||
```
|
||||
```php
|
||||
/************* OVERALL CONTROL NAMES *************/
|
||||
// BELOW has HAS to be changed
|
||||
// base name for all session and log names
|
||||
// only alphanumeric characters, strip all others
|
||||
define('BASE_NAME', preg_replace('/[^A-Za-z0-9]/', '', $_ENV['BASE_NAME'] ?? ''));
|
||||
```
|
||||
```php
|
||||
/************* LANGUAGE / ENCODING *******/
|
||||
// default lang + encoding
|
||||
define('DEFAULT_LOCALE', 'en_US.UTF-8');
|
||||
// default web page encoding setting
|
||||
define('DEFAULT_ENCODING', 'UTF-8');
|
||||
```
|
||||
```php
|
||||
// BAIL ON MISSING DB CONFIG:
|
||||
// we have either no db selction for this host but have db config entries
|
||||
// or we have a db selection but no db config as array or empty
|
||||
// or we have a selection but no matching db config entry
|
||||
if (
|
||||
(!isset($SITE_CONFIG[HOST_NAME]['db_host']) && count($DB_CONFIG)) ||
|
||||
(isset($SITE_CONFIG[HOST_NAME]['db_host']) &&
|
||||
// missing DB CONFIG
|
||||
((is_array($DB_CONFIG) && !count($DB_CONFIG)) ||
|
||||
!is_array($DB_CONFIG) ||
|
||||
// has DB CONFIG but no match
|
||||
empty($DB_CONFIG[$SITE_CONFIG[HOST_NAME]['db_host']]))
|
||||
)
|
||||
) {
|
||||
echo 'No matching DB config found for: "' . HOST_NAME . '". Contact Administrator';
|
||||
exit;
|
||||
}
|
||||
```
|
||||
```php
|
||||
// remove SITE_LANG
|
||||
define('SITE_LOCALE', $SITE_CONFIG[HOST_NAME]['site_locale'] ?? DEFAULT_LOCALE);
|
||||
define('SITE_ENCODING', $SITE_CONFIG[HOST_NAME]['site_encoding'] ?? DEFAULT_ENCODING);
|
||||
```
|
||||
```php
|
||||
/************* GENERAL PAGE TITLE ********/
|
||||
define('G_TITLE', $_ENV['G_TITLE'] ?? '');
|
||||
```
|
||||
* move all login passweords into the `.env` file in the `configs/` folder
|
||||
in the `.env` file
|
||||
```
|
||||
DB_NAME.TEST=some_database
|
||||
...
|
||||
```
|
||||
In the config then
|
||||
```php
|
||||
'db_name' => $_ENV['DB_NAME.TEST'] ?? '',
|
||||
```
|
||||
* config.host.php update
|
||||
must add site_locale (site_lang + site_encoding)
|
||||
remove site_lang
|
||||
```php
|
||||
// lang + encoding
|
||||
'site_locale' => 'en_US.UTF-8',
|
||||
// site language
|
||||
'site_encoding' => 'UTF-8',
|
||||
```
|
||||
* copy `layout/admin/javascript/edit.jq.js`
|
||||
* check other javacsript files if needed (`edit.jq.js`)
|
||||
|
||||
## IMPORTANT NOTE
|
||||
|
||||
If no upgrade to V5 was done all calls that refered to `CoreLibs\Basic` will now fail and no longer be warned as deprected
|
||||
See the old file for all methods and where they have moved
|
||||
65
README.md
65
README.md
@@ -1,5 +1,13 @@
|
||||
# PHP Core Library
|
||||
|
||||
## Code Standard
|
||||
|
||||
* Uses PSR-12
|
||||
* tab indent instead of 4 spaces indent
|
||||
* Warning at 120 character length, error at 240 character length
|
||||
|
||||
## General information
|
||||
|
||||
Base PHP class files to setup any project
|
||||
* login
|
||||
* database wrapper
|
||||
@@ -14,7 +22,8 @@ There are three branches:
|
||||
|
||||
### master
|
||||
|
||||
The active branch, which is the namespace branch
|
||||
The active branch, which is the namespace branch.
|
||||
Currently compatible with PHP 7.4 and 8.0
|
||||
|
||||
### legacy
|
||||
|
||||
@@ -22,6 +31,56 @@ The old non namepsace format layout.
|
||||
This is fully deprecated and will no longer be maintaned.
|
||||
last tested PHP 5.6 and PHP 7.0
|
||||
|
||||
### namespace
|
||||
### development
|
||||
|
||||
The new namespace branch. This is the development area for the master branch
|
||||
Any current development is done here
|
||||
|
||||
## Static checks
|
||||
|
||||
With phpstan (`4dev/checking/phpstan.sh`)
|
||||
`phpstan`
|
||||
|
||||
With phan (`4dev/checking/phan.sh`)
|
||||
`phan --progress-bar -C --analyze-twice`
|
||||
|
||||
pslam is setup but not configured
|
||||
|
||||
## Unit tests
|
||||
|
||||
With phpunit (`4dev/checking/phpunit.sh`)
|
||||
`phpunit -c $phpunit.xml 4dev/tests/`
|
||||
|
||||
|
||||
## Other Notes
|
||||
|
||||
### Session used
|
||||
|
||||
The following classes use _SESSION
|
||||
The main one is ACL\Login, this class will fail without a session started
|
||||
|
||||
* \CoreLibs\ACL\Login
|
||||
* \CoreLibs\Admin\Backend
|
||||
* \CoreLibs\Output\Form\Generate
|
||||
* \CoreLibs\Output\Form\Token
|
||||
* \CoreLibs\Template\SmartyExtend
|
||||
|
||||
### Class extends
|
||||
|
||||
The following classes extend these classes
|
||||
|
||||
* \CoreLibs\ACL\Login extends \CoreLibs\DB\IO
|
||||
* \CoreLibs\Admin\Backend extends \CoreLibs\DB\IO
|
||||
* \CoreLibs\DB\Extended\ArrayIO extends \CoreLibs\DB\IO
|
||||
* \CoreLibs\Output\Form\Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
* \CoreLibs\Template\SmartyExtend extends SmartyBC
|
||||
|
||||
### Class used
|
||||
|
||||
The following classes use the following classes
|
||||
|
||||
* \CoreLibs\ACL\Login uses \CoreLibs\Debug\Logger, \CoreLibs\Language\L10n
|
||||
* \CoreLibs\DB\IO uses \CoreLibs\Debug\Logger, \CoreLibs\DB\SQL\PgSQL
|
||||
* \CoreLibs\Admin\Backend uses \CoreLibs\Debug\Logger, \CoreLibs\Language\L10n
|
||||
* \CoreLibs\Output\Form\Generate uses \CoreLibs\Debug\Logger, \CoreLibs\Language\L10n
|
||||
* \CoreLibs\Template\SmartyExtend uses \CoreLibs\Language\L10n
|
||||
* \CoreLibs\Language\L10n uses FileReader, GetTextReader
|
||||
|
||||
72
phpstan-baseline.neon
Normal file
72
phpstan-baseline.neon
Normal file
@@ -0,0 +1,72 @@
|
||||
parameters:
|
||||
ignoreErrors:
|
||||
-
|
||||
message: "#^Parameter \\#1 \\$connection of function pg_connection_busy expects PgSql\\\\Connection, object\\|resource given\\.$#"
|
||||
count: 3
|
||||
path: www/lib/CoreLibs/DB/SQL/PgSQL.php
|
||||
|
||||
-
|
||||
message: "#^Parameter \\#1 \\$connection of function pg_connection_status expects PgSql\\\\Connection, object\\|resource given\\.$#"
|
||||
count: 1
|
||||
path: www/lib/CoreLibs/DB/SQL/PgSQL.php
|
||||
|
||||
-
|
||||
message: "#^Parameter \\#1 \\$connection of function pg_get_result expects PgSql\\\\Connection, object\\|resource given\\.$#"
|
||||
count: 2
|
||||
path: www/lib/CoreLibs/DB/SQL/PgSQL.php
|
||||
|
||||
-
|
||||
message: "#^Parameter \\#1 \\$connection of function pg_meta_data expects PgSql\\\\Connection, object\\|resource given\\.$#"
|
||||
count: 1
|
||||
path: www/lib/CoreLibs/DB/SQL/PgSQL.php
|
||||
|
||||
-
|
||||
message: "#^Parameter \\#1 \\$connection of function pg_send_query expects PgSql\\\\Connection, object\\|resource given\\.$#"
|
||||
count: 2
|
||||
path: www/lib/CoreLibs/DB/SQL/PgSQL.php
|
||||
|
||||
-
|
||||
message: "#^Parameter \\#1 \\$connection of function pg_socket expects PgSql\\\\Connection, object\\|resource given\\.$#"
|
||||
count: 1
|
||||
path: www/lib/CoreLibs/DB/SQL/PgSQL.php
|
||||
|
||||
-
|
||||
message: "#^Parameter \\#1 \\$connection of function pg_version expects PgSql\\\\Connection\\|null, object\\|resource given\\.$#"
|
||||
count: 2
|
||||
path: www/lib/CoreLibs/DB/SQL/PgSQL.php
|
||||
|
||||
-
|
||||
message: "#^Parameter \\#1 \\$result of function pg_affected_rows expects PgSql\\\\Result, object\\|resource given\\.$#"
|
||||
count: 1
|
||||
path: www/lib/CoreLibs/DB/SQL/PgSQL.php
|
||||
|
||||
-
|
||||
message: "#^Parameter \\#1 \\$result of function pg_fetch_all expects PgSql\\\\Result, object\\|resource given\\.$#"
|
||||
count: 1
|
||||
path: www/lib/CoreLibs/DB/SQL/PgSQL.php
|
||||
|
||||
-
|
||||
message: "#^Parameter \\#1 \\$result of function pg_fetch_array expects PgSql\\\\Result, object\\|resource given\\.$#"
|
||||
count: 1
|
||||
path: www/lib/CoreLibs/DB/SQL/PgSQL.php
|
||||
|
||||
-
|
||||
message: "#^Parameter \\#1 \\$result of function pg_field_name expects PgSql\\\\Result, object\\|resource given\\.$#"
|
||||
count: 1
|
||||
path: www/lib/CoreLibs/DB/SQL/PgSQL.php
|
||||
|
||||
-
|
||||
message: "#^Parameter \\#1 \\$result of function pg_num_fields expects PgSql\\\\Result, object\\|resource given\\.$#"
|
||||
count: 1
|
||||
path: www/lib/CoreLibs/DB/SQL/PgSQL.php
|
||||
|
||||
-
|
||||
message: "#^Parameter \\#1 \\$result of function pg_num_rows expects PgSql\\\\Result, object\\|resource given\\.$#"
|
||||
count: 1
|
||||
path: www/lib/CoreLibs/DB/SQL/PgSQL.php
|
||||
|
||||
-
|
||||
message: "#^Parameter \\#1 \\$result of function pg_result_error expects PgSql\\\\Result, object\\|resource given\\.$#"
|
||||
count: 1
|
||||
path: www/lib/CoreLibs/DB/SQL/PgSQL.php
|
||||
|
||||
@@ -1,6 +1,12 @@
|
||||
<?php
|
||||
<?php // phpcs:ignore PSR1.Files.SideEffects
|
||||
|
||||
// Boostrap file for PHPstand
|
||||
// sets the _SERVER['HTTP_HOST'] var so we can have DB detection
|
||||
$_SERVER['HTTP_HOST'] = 'soba.tokyo.tequila.jp';
|
||||
// so www/includes/edit_base.php works
|
||||
// require_once('www/lib/Smarty/SmartyBC.class.php');
|
||||
// for whatever reason it does not load that from the confing.master.php
|
||||
// for includes/admin_header.php
|
||||
define('BASE_NAME', '');
|
||||
|
||||
// __END__
|
||||
|
||||
21
phpstan-conditional.php
Normal file
21
phpstan-conditional.php
Normal file
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
// conditional formats for PHP versions
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
$config = [];
|
||||
|
||||
if (PHP_VERSION_ID >= 8_00_00) {
|
||||
// Change of signature in PHP 8.1
|
||||
/* $config['parameters']['ignoreErrors'][] = [
|
||||
'message' => '~Parameter #1 \$(result|connection) of function pg_\w+ '
|
||||
. 'expects resource(\|null)?, object\|resource given\.~',
|
||||
'path' => 'www/lib/CoreLibs/DB/SQL/PgSQL.php',
|
||||
// 'count' => 1,
|
||||
]; */
|
||||
}
|
||||
|
||||
return $config;
|
||||
|
||||
// __END_
|
||||
59
phpstan.neon
59
phpstan.neon
@@ -1,38 +1,39 @@
|
||||
# PHP Stan Config
|
||||
|
||||
includes:
|
||||
- phpstan-conditional.php
|
||||
parameters:
|
||||
tmpDir: /tmp/phpstan-corelibs
|
||||
level: 1
|
||||
level: 8 # max is now 9
|
||||
checkMissingCallableSignature: true
|
||||
paths:
|
||||
- %currentWorkingDirectory%/www
|
||||
bootstrapFiles:
|
||||
- %currentWorkingDirectory%/phpstan-bootstrap.php
|
||||
# - %currentWorkingDirectory%/www/lib/autoloader.php
|
||||
- %currentWorkingDirectory%/www/vendor/autoload.php
|
||||
scanDirectories:
|
||||
- www/lib/Smarty
|
||||
scanFiles:
|
||||
- www/configs/config.php
|
||||
- www/configs/config.master.php
|
||||
- www/lib/autoloader.php
|
||||
# if composer.json autoloader defined, this is not needed
|
||||
# - www/lib/autoloader.php
|
||||
- www/vendor/autoload.php
|
||||
- www/lib/Smarty/Autoloader.php
|
||||
- www/lib/CoreLibs/Template/SmartyExtend.php
|
||||
excludes_analyse:
|
||||
# no check admin
|
||||
- www/admin/qq_file_upload_front.php
|
||||
- www/admin/qq_file_upload_ajax.php
|
||||
excludePaths:
|
||||
# do not check old qq file uploader tests
|
||||
- www/admin/qq_file_upload_*.php
|
||||
# ignore all test files
|
||||
- www/admin/class_test*.php
|
||||
# extra in sub folder
|
||||
- www/admin/subfolder/class_test*.php
|
||||
- www/admin/error_test.php
|
||||
# admin synlink files
|
||||
- www/admin/edit_access.php
|
||||
- www/admin/edit_groups.php
|
||||
- www/admin/edit_languages.php
|
||||
- www/admin/edit_menu_group.php
|
||||
- www/admin/edit_order.php
|
||||
- www/admin/edit_pages.php
|
||||
- www/admin/edit_schemes.php
|
||||
- www/admin/edit_users.php
|
||||
- www/admin/edit_visible_group.php
|
||||
- www/admin/edit_*.php
|
||||
# ignore admin header stuff
|
||||
- www/includes/admin_header.php # ignore the admin include stuff
|
||||
# - www/includes/admin_header.php # ignore the admin include stuff
|
||||
- www/includes/admin_footer.php # ignore the admin include stuff
|
||||
# deprecated files
|
||||
- www/includes/admin_set_paths.php # ignore the admin include stuff
|
||||
- www/includes/admin_smarty.php # ignore the admin include stuff
|
||||
# folders with data no check needed
|
||||
@@ -41,16 +42,24 @@ parameters:
|
||||
- www/log
|
||||
- www/media
|
||||
- www/tmp
|
||||
- www/lib/pChart
|
||||
- www/lib/pChart2.1.4
|
||||
- www/lib/Smarty
|
||||
- www/lib/smarty-3.1.30
|
||||
# external libs are not checked
|
||||
- www/lib/Smarty/
|
||||
- www/lib/smarty-*/
|
||||
# ignore composer
|
||||
- www/vendor
|
||||
# ignore the smartyextend
|
||||
- www/lib/CoreLibs/Template/SmartyExtend.php
|
||||
# ignore errores with
|
||||
# ignoreErrors:
|
||||
ignoreErrors:
|
||||
- # this error is ignore because of the PHP 8.0 to 8.1 change for pg_*, only for 8.0 or lower
|
||||
message: "#^Parameter \\#1 \\$(result|connection) of function pg_\\w+ expects resource(\\|null)?, object\\|resource(\\|bool)? given\\.$#"
|
||||
path: %currentWorkingDirectory%/www/lib/CoreLibs/DB/SQL/PgSQL.php
|
||||
- # this is for 8.1 or newer
|
||||
message: "#^Parameter \\#1 \\$(result|connection) of function pg_\\w+ expects PgSql\\\\(Result|Connection(\\|null)?), object\\|resource given\\.$#"
|
||||
path: %currentWorkingDirectory%/www/lib/CoreLibs/DB/SQL/PgSQL.php
|
||||
# this is ignored for now
|
||||
# - '#Expression in empty\(\) is always falsy.#'
|
||||
# -
|
||||
# message: '#Reflection error: [a-zA-Z0-9\\_]+ not found.#'
|
||||
# path: www/includes/edit_base.php
|
||||
#- 'error regex'
|
||||
#-
|
||||
# message: 'error regex'
|
||||
|
||||
6
phpunit.xml
Normal file
6
phpunit.xml
Normal file
@@ -0,0 +1,6 @@
|
||||
<phpunit
|
||||
cacheResultFile="/tmp/phpunit-corelibs.result.cache"
|
||||
colors="true"
|
||||
verbose="true"
|
||||
>
|
||||
</phpunit>
|
||||
74
www/admin/class_test.admin.backend.php
Normal file
74
www/admin/class_test.admin.backend.php
Normal file
@@ -0,0 +1,74 @@
|
||||
<?php // phpcs:ignore warning
|
||||
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = false; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = true;
|
||||
$PRINT_ALL = true;
|
||||
$DB_DEBUG = true;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', true);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// override ECHO ALL FALSE
|
||||
$ECHO_ALL = true;
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-admin';
|
||||
ob_end_flush();
|
||||
|
||||
$log = new CoreLibs\Debug\Logging([
|
||||
'log_folder' => BASE . LOG,
|
||||
'file_id' => $LOG_FILE_ID,
|
||||
// add file date
|
||||
'print_file_date' => true,
|
||||
// set debug and print flags
|
||||
'debug_all' => $DEBUG_ALL ?? false,
|
||||
'echo_all' => $ECHO_ALL ?? false,
|
||||
'print_all' => $PRINT_ALL ?? false,
|
||||
]);
|
||||
// db config with logger
|
||||
$db = new CoreLibs\DB\IO(DB_CONFIG, $log);
|
||||
$locale = \CoreLibs\Language\GetLocale::setLocale();
|
||||
$l10n = new \CoreLibs\Language\L10n(
|
||||
$locale['locale'],
|
||||
$locale['domain'],
|
||||
$locale['path'],
|
||||
);
|
||||
$backend = new CoreLibs\Admin\Backend($db, $log, $l10n, $locale);
|
||||
|
||||
$PAGE_NAME = 'TEST CLASS: ADMIN BACKEND';
|
||||
print "<!DOCTYPE html>";
|
||||
print "<html><head><title>" . $PAGE_NAME . "</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
||||
|
||||
// set acl, from eg login acl
|
||||
print "SETACL[]: " . $backend->setACL(['EMPTY' => 'EMPTY']) . "<br>";
|
||||
print "ADBEDITLOG: " . $backend->adbEditLog('CLASSTEST-ADMIN', 'Some info stirng') . "<br>";
|
||||
print "ADBTOPMENU(0): " . \CoreLibs\Debug\Support::printAr($backend->adbTopMenu()) . "<br>";
|
||||
print "ADBMSG: " . $backend->adbMsg('info', 'Message: %1$d', [1]) . "<br>";
|
||||
print "Messaes: " . \CoreLibs\Debug\Support::printAr($backend->messages) . "<br>";
|
||||
print "ADBPRINTDATETIME:<br>" . $backend->adbPrintDateTime(2021, 6, 21, 6, 38, '_test') . "<br>";
|
||||
|
||||
// error message
|
||||
print $log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
223
www/admin/class_test.array.php
Normal file
223
www/admin/class_test.array.php
Normal file
@@ -0,0 +1,223 @@
|
||||
<?php // phpcs:ignore warning
|
||||
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-array';
|
||||
ob_end_flush();
|
||||
|
||||
use CoreLibs\Combined\ArrayHandler;
|
||||
use CoreLibs\Debug\Support as DgS;
|
||||
|
||||
$log = new CoreLibs\Debug\Logging([
|
||||
'log_folder' => BASE . LOG,
|
||||
'file_id' => $LOG_FILE_ID,
|
||||
// add file date
|
||||
'print_file_date' => true,
|
||||
// set debug and print flags
|
||||
'debug_all' => $DEBUG_ALL ?? false,
|
||||
'echo_all' => $ECHO_ALL ?? false,
|
||||
'print_all' => $PRINT_ALL ?? false,
|
||||
]);
|
||||
// $_array = new CoreLibs\Combined\ArrayHandler();
|
||||
// $array_class = 'CoreLibs\Combination\ArrayHandler';
|
||||
|
||||
$PAGE_NAME = 'TEST CLASS: ARRAY HANDLER';
|
||||
print "<!DOCTYPE html>";
|
||||
print "<html><head><title>" . $PAGE_NAME . "</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
||||
|
||||
// recursive array search
|
||||
$test_array = [
|
||||
'foo' => 'bar',
|
||||
'input' => [
|
||||
'element_a' => [
|
||||
'type' => 'text'
|
||||
],
|
||||
'element_b' => [
|
||||
'type' => 'email'
|
||||
],
|
||||
'element_c' => [
|
||||
'type' => 'email'
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
echo "SOURCE ARRAY: " . DgS::printAr($test_array) . "<br>";
|
||||
// frist return
|
||||
echo "ARRAYSEARCHRECURSIVE(email, [array], type): "
|
||||
. DgS::printAr(ArrayHandler::arraySearchRecursive('email', $test_array, 'type')) . "<br>";
|
||||
echo "ARRAYSEARCHRECURSIVE(email, [array]['input'], type): "
|
||||
. DgS::printAr(ArrayHandler::arraySearchRecursive('email', $test_array['input'], 'type')) . "<br>";
|
||||
// all return
|
||||
echo "ARRAYSEARCHRECURSIVEALL(email, [array], type): "
|
||||
. Dgs::printAr((array)ArrayHandler::arraySearchRecursiveAll('email', $test_array, 'type')) . "<br>";
|
||||
echo "ARRAYSEARCHRECURSIVEALL(email, [array], type, false): "
|
||||
. Dgs::printAr((array)ArrayHandler::arraySearchRecursiveAll('email', $test_array, 'type', false)) . "<br>";
|
||||
|
||||
// simple search
|
||||
echo "ARRAYSEARCHSIMPLE([array], type, email): "
|
||||
. (string)ArrayHandler::arraySearchSimple($test_array, 'type', 'email') . "<br>";
|
||||
|
||||
$array_1 = [
|
||||
'foo' => 'bar'
|
||||
];
|
||||
$array_2 = [
|
||||
1, 2, 3
|
||||
];
|
||||
$array_3 = [
|
||||
'alpha' => [
|
||||
'beta' => 4
|
||||
]
|
||||
];
|
||||
// recusrice merge
|
||||
print "ARRAYMERGERECURSIVE: " . DgS::printAr(ArrayHandler::arrayMergeRecursive($array_1, $array_2, $array_3)) . "<br>";
|
||||
// array difference
|
||||
$array_left = [
|
||||
'same' => 'data',
|
||||
'left' => 'Has L'
|
||||
];
|
||||
$array_right = [
|
||||
'same' => 'data',
|
||||
'right' => 'has R'
|
||||
];
|
||||
print "ARRAYDIFF: " . DgS::printAr(ArrayHandler::arrayDiff($array_left, $array_right)) . "<br>";
|
||||
// in array check
|
||||
print "INARRAYANY([1,3], [array]): " . DgS::printAr(ArrayHandler::inArrayAny([1, 3], $array_2)) . "<br>";
|
||||
// flatten array
|
||||
print "FLATTENARRAY: " . DgS::printAr(ArrayHandler::flattenArray($test_array)) . "<br>";
|
||||
print "FLATTENARRAYKEY: " . DgS::printAr(ArrayHandler::flattenArrayKey($test_array)) . "<br>";
|
||||
// flatten for key set
|
||||
print "ARRAYFLATFORKEY: " . DgS::printAr(ArrayHandler::arrayFlatForKey($test_array, 'type')) . "<br>";
|
||||
|
||||
/**
|
||||
* attach key/value to an array so it becomes nested
|
||||
*
|
||||
* @param string $pre Attach to new (empty for new root node)
|
||||
* @param string $cur New node
|
||||
* @param array $node Previous created array
|
||||
* @return array Updated array
|
||||
*/
|
||||
function rec(string $pre, string $cur, array $node = [])
|
||||
{
|
||||
if (!is_array($node)) {
|
||||
$node = [];
|
||||
}
|
||||
print "<div style='color: green;'>#### PRE: " . $pre . ", CUR: " . $cur . ", N-c: "
|
||||
. count($node) . " [" . join('|', array_keys($node)) . "]</div>";
|
||||
if (!$pre) {
|
||||
print "** <span style='color: red;'>NEW</span><br>";
|
||||
$node[$cur] = [];
|
||||
} else {
|
||||
if (array_key_exists($pre, $node)) {
|
||||
print "+ <span style='color: orange;'>KEY FOUND:</span> " . $pre . ", add: " . $cur . "<br>";
|
||||
$node[$pre][$cur] = [];
|
||||
} else {
|
||||
print "- NOT FOUND: loop<br>";
|
||||
foreach ($node as $_pre => $_cur) {
|
||||
print "> TRY: " . $_pre . " => " . count($_cur) . " [" . join('|', array_keys($_cur)) . "]<br>";
|
||||
if (count($_cur) > 0) {
|
||||
$node[$_pre] = rec($pre, $cur, $_cur);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return $node;
|
||||
}
|
||||
|
||||
// $test = [
|
||||
// 'A' => [
|
||||
// 'B' => [],
|
||||
// 'C' => [
|
||||
// 'D' => [],
|
||||
// 'E' => [
|
||||
// 'F' => []
|
||||
// ]
|
||||
// ]
|
||||
// ],
|
||||
// '1' => [],
|
||||
// '2' => [],
|
||||
// '3' => [
|
||||
// 'G' => []
|
||||
// ]
|
||||
// ];
|
||||
|
||||
// build a tested array for flatten
|
||||
$test = [];
|
||||
// core
|
||||
$test = rec('', 'A', $test);
|
||||
$test = rec('', '1', $test);
|
||||
$test = rec('', '2', $test);
|
||||
$test = rec('', '3', $test);
|
||||
$test = rec('3', 'G', $test);
|
||||
$test = rec('A', 'B', $test);
|
||||
$test = rec('A', 'C', $test);
|
||||
$test = rec('C', 'D', $test);
|
||||
$test = rec('C', 'E', $test);
|
||||
$test = rec('E', 'F', $test);
|
||||
// new
|
||||
$test = rec('C', 'U', $test);
|
||||
$test = rec('F', 'U', $test);
|
||||
$test = rec('', 'Al', $test);
|
||||
$test = rec('B', 'B1', $test);
|
||||
print "ORIGINAL: " . \CoreLibs\Debug\Support::printAr($test) . "<br>";
|
||||
print "FLATTEN-c: " . \CoreLibs\Debug\Support::printAr(ArrayHandler::flattenArrayKey($test)) . "<br>";
|
||||
|
||||
$test = [
|
||||
'a' => ['a1' => 'a1foo', 'a2' => 'a1bar'],
|
||||
1 => 'bar',
|
||||
'c' => [2, 3, 4],
|
||||
'd' => [
|
||||
'e' => [
|
||||
'de1' => 'subfoo', 'de2' => 'subbar', 'a2' => 'a1bar'
|
||||
]
|
||||
]
|
||||
];
|
||||
print "ORIGINAL: " . \CoreLibs\Debug\Support::printAr($test) . "<br>";
|
||||
print "FLATTEN: " . \CoreLibs\Debug\Support::printAr(ArrayHandler::flattenArrayKey($test)) . "<br>";
|
||||
|
||||
// genAssocArray
|
||||
$db_array = [
|
||||
0 => ['a' => 'a1', 'b' => 2],
|
||||
1 => ['a' => 'a2', 'b' => 3],
|
||||
2 => ['a' => '', 'b' => ''],
|
||||
];
|
||||
// $key = false;
|
||||
$key = 'a';
|
||||
// $value = false;
|
||||
$value = 'b';
|
||||
$flag = false;
|
||||
$output = \CoreLibs\Combined\ArrayHandler::genAssocArray($db_array, $key, $value, $flag);
|
||||
print "OUTPUT: " . \CoreLibs\Debug\Support::printAr($output) . "<br>";
|
||||
|
||||
// error message
|
||||
print $log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
48
www/admin/class_test.autoloader.php
Normal file
48
www/admin/class_test.autoloader.php
Normal file
@@ -0,0 +1,48 @@
|
||||
<?php // phpcs:ignore warning
|
||||
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = false; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = true;
|
||||
$PRINT_ALL = true;
|
||||
$DB_DEBUG = true;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-autoloader';
|
||||
ob_end_flush();
|
||||
|
||||
# Test if composer autoloader works here
|
||||
|
||||
use CoreLibs\Convert\Byte;
|
||||
|
||||
$PAGE_NAME = 'TEST CLASS: AUTOLOADER';
|
||||
print "<!DOCTYPE html>";
|
||||
print "<html><head><title>" . $PAGE_NAME . "</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
||||
|
||||
$bytes = 10242424;
|
||||
$_bytes = Byte::humanReadableByteFormat($bytes);
|
||||
print "BYTES: " . $_bytes . "<br>";
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
117
www/admin/class_test.byte.php
Normal file
117
www/admin/class_test.byte.php
Normal file
@@ -0,0 +1,117 @@
|
||||
<?php // phpcs:ignore warning
|
||||
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-byte';
|
||||
ob_end_flush();
|
||||
|
||||
use CoreLibs\Convert\Byte;
|
||||
|
||||
$log = new CoreLibs\Debug\Logging([
|
||||
'log_folder' => BASE . LOG,
|
||||
'file_id' => $LOG_FILE_ID,
|
||||
// add file date
|
||||
'print_file_date' => true,
|
||||
// set debug and print flags
|
||||
'debug_all' => $DEBUG_ALL ?? false,
|
||||
'echo_all' => $ECHO_ALL ?? false,
|
||||
'print_all' => $PRINT_ALL ?? false,
|
||||
]);
|
||||
$byte_class = 'CoreLibs\Convert\Byte';
|
||||
|
||||
$PAGE_NAME = 'TEST CLASS: BYTE CONVERT';
|
||||
print "<!DOCTYPE html>";
|
||||
print "<html><head><title>" . $PAGE_NAME . "</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
||||
|
||||
// class
|
||||
$byte = 254779258;
|
||||
$string = '242.98 MB';
|
||||
// static
|
||||
print "S::BYTE TO: $byte: " . $byte_class::humanReadableByteFormat($byte) . "<br>";
|
||||
print "S::BYTE TO: $byte: " . $byte_class::humanReadableByteFormat($byte, Byte::BYTE_FORMAT_SI) . "<br>";
|
||||
print "S::BYTE TO: $byte: " . $byte_class::humanReadableByteFormat($byte, Byte::BYTE_FORMAT_ADJUST) . "<br>";
|
||||
print "S::BYTE TO: $byte: " . $byte_class::humanReadableByteFormat($byte, Byte::BYTE_FORMAT_NOSPACE) . "<br>";
|
||||
print "S::BYTE FROM: $string: " . $byte_class::stringByteFormat($string) . "<br>";
|
||||
//
|
||||
$byte = 314572800;
|
||||
$string = '300 MB';
|
||||
print "S::BYTE TO: $byte: " . $byte_class::humanReadableByteFormat($byte) . "<br>";
|
||||
print "S::BYTE TO: $byte: " . $byte_class::humanReadableByteFormat($byte, Byte::BYTE_FORMAT_SI) . "<br>";
|
||||
print "S::BYTE TO: $byte: " . $byte_class::humanReadableByteFormat($byte, Byte::BYTE_FORMAT_ADJUST) . "<br>";
|
||||
print "S::BYTE TO: $byte: "
|
||||
. $byte_class::humanReadableByteFormat($byte, Byte::BYTE_FORMAT_ADJUST | Byte::BYTE_FORMAT_NOSPACE) . "<br>";
|
||||
print "S::BYTE TO: $byte: " . $byte_class::humanReadableByteFormat($byte, Byte::BYTE_FORMAT_NOSPACE) . "<br>";
|
||||
print "S::BYTE FROM: $string: " . $byte_class::stringByteFormat($string) . "<br>";
|
||||
|
||||
// *** BYTES TEST ***
|
||||
$bytes = [
|
||||
-123123123,
|
||||
999999, // KB-1
|
||||
999999999, // MB-1
|
||||
254779258, // MB-n
|
||||
999999999999999, // TB-1
|
||||
588795544887632, // TB-n
|
||||
999999999999999999, // PB-1
|
||||
9223372036854775807, // MAX INT
|
||||
999999999999999999999, // EB-1
|
||||
];
|
||||
print "<b>BYTE FORMAT TESTS</b><br>";
|
||||
foreach ($bytes as $byte) {
|
||||
print '<div style="display: flex; border-bottom: 1px dashed gray;">';
|
||||
//
|
||||
print '<div style="width: 35%; text-align: right; padding-right: 2px;">';
|
||||
print "(" . number_format($byte) . "/" . $byte . ") bytes :";
|
||||
$_bytes = Byte::humanReadableByteFormat($byte);
|
||||
print '</div><div style="width: 10%;">' . $_bytes;
|
||||
print '</div><div style="width: 10%;">';
|
||||
print Byte::stringByteFormat($_bytes);
|
||||
print "</div>";
|
||||
//
|
||||
print "</div>";
|
||||
//
|
||||
print '<div style="display: flex; border-bottom: 1px dotted red;">';
|
||||
//
|
||||
print '<div style="width: 35%; text-align: right; padding-right: 2px;">';
|
||||
print "bytes [si]:";
|
||||
$_bytes = Byte::humanReadableByteFormat($byte, Byte::BYTE_FORMAT_SI);
|
||||
print '</div><div style="width: 10%;">' . $_bytes;
|
||||
print '</div><div style="width: 10%;">';
|
||||
print Byte::stringByteFormat($_bytes);
|
||||
print "</div>";
|
||||
//
|
||||
print "</div>";
|
||||
}
|
||||
|
||||
// error message
|
||||
print $log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
101
www/admin/class_test.colors.php
Normal file
101
www/admin/class_test.colors.php
Normal file
@@ -0,0 +1,101 @@
|
||||
<?php // phpcs:ignore warning
|
||||
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-colors';
|
||||
ob_end_flush();
|
||||
|
||||
use CoreLibs\Convert\Colors;
|
||||
use CoreLibs\Debug\Support as DgS;
|
||||
|
||||
$log = new CoreLibs\Debug\Logging([
|
||||
'log_folder' => BASE . LOG,
|
||||
'file_id' => $LOG_FILE_ID,
|
||||
// add file date
|
||||
'print_file_date' => true,
|
||||
// set debug and print flags
|
||||
'debug_all' => $DEBUG_ALL ?? false,
|
||||
'echo_all' => $ECHO_ALL ?? false,
|
||||
'print_all' => $PRINT_ALL ?? false,
|
||||
]);
|
||||
$color_class = 'CoreLibs\Convert\Colors';
|
||||
|
||||
$PAGE_NAME = 'TEST CLASS: COLORS';
|
||||
print "<!DOCTYPE html>";
|
||||
print "<html><head><title>" . $PAGE_NAME . "</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
||||
|
||||
// define a list of from to color sets for conversion test
|
||||
|
||||
// A(out of bounds)
|
||||
print "C::S/COLOR invalid rgb->hex (gray 125): -1, -1, -1: " . CoreLibs\Convert\Colors::rgb2hex(-1, -1, -1) . "<br>";
|
||||
print "\$C::S/COLOR invalid rgb->hex (gray 125): -1, -1, -1: " . $color_class::rgb2hex(-1, -1, -1) . "<br>";
|
||||
// B(valid)
|
||||
$rgb = [10, 20, 30];
|
||||
$hex = '#0a141e';
|
||||
$hsb = [210, 67, 12];
|
||||
$hsb_f = [210.5, 67.5, 12.5];
|
||||
$hsl = [210, 50, 7.8];
|
||||
print "S::COLOR rgb->hex: $rgb[0], $rgb[1], $rgb[2]: " . Colors::rgb2hex($rgb[0], $rgb[1], $rgb[2]) . "<br>";
|
||||
print "S::COLOR hex->rgb: $hex: " . DgS::printAr(Colors::hex2rgb($hex)) . "<br>";
|
||||
print "C::S/COLOR rgb->hext: $hex: " . DgS::printAr(CoreLibs\Convert\Colors::hex2rgb($hex)) . "<br>";
|
||||
// C(to hsb/hsl)
|
||||
print "S::COLOR rgb->hsb: $rgb[0], $rgb[1], $rgb[2]: "
|
||||
. DgS::printAr(Colors::rgb2hsb($rgb[0], $rgb[1], $rgb[2])) . "<br>";
|
||||
print "S::COLOR rgb->hsl: $rgb[0], $rgb[1], $rgb[2]: "
|
||||
. DgS::printAr(Colors::rgb2hsl($rgb[0], $rgb[1], $rgb[2])) . "<br>";
|
||||
// D(from hsb/hsl) Note that param 2 + 3 is always 0-100 divided
|
||||
print "S::COLOR hsb->rgb: $hsb[0], $hsb[1], $hsb[2]: "
|
||||
. DgS::printAr(Colors::hsb2rgb($hsb[0], $hsb[1], $hsb[2])) . "<br>";
|
||||
print "S::COLOR hsb_f->rgb: $hsb_f[0], $hsb_f[1], $hsb_f[2]: "
|
||||
. DgS::printAr(Colors::hsb2rgb($hsb_f[0], $hsb_f[1], $hsb_f[2])) . "<br>";
|
||||
print "S::COLOR hsl->rgb: $hsl[0], $hsl[1], $hsl[2]: "
|
||||
. DgS::printAr(Colors::hsl2rgb($hsl[0], $hsl[1], $hsl[2])) . "<br>";
|
||||
|
||||
$hsb = [0, 0, 5];
|
||||
print "S::COLOR hsb->rgb: $hsb[0], $hsb[1], $hsb[2]: "
|
||||
. DgS::printAr(Colors::hsb2rgb($hsb[0], $hsb[1], $hsb[2])) . "<br>";
|
||||
|
||||
// Random text
|
||||
$h = rand(0, 359);
|
||||
$s = rand(15, 70);
|
||||
$b = 100;
|
||||
$l = 50;
|
||||
print "RANDOM IN: H: " . $h . ", S: " . $s . ", B/L: " . $b . "/" . $l . "<br>";
|
||||
print "RANDOM hsb->rgb: <pre>" . DgS::printAr(Colors::hsb2rgb($h, $s, $b)) . "</pre><br>";
|
||||
print "RANDOM hsl->rgb: <pre>" . DgS::printAr(Colors::hsl2rgb($h, $s, $l)) . "</pre><br>";
|
||||
|
||||
// TODO: run compare check input must match output
|
||||
|
||||
// error message
|
||||
print $log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
59
www/admin/class_test.config.direct.php
Normal file
59
www/admin/class_test.config.direct.php
Normal file
@@ -0,0 +1,59 @@
|
||||
<?php // phpcs:ignore warning
|
||||
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require '../configs/config.php';
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-config-direct';
|
||||
ob_end_flush();
|
||||
|
||||
$log = new CoreLibs\Debug\Logging([
|
||||
'log_folder' => BASE . LOG,
|
||||
'file_id' => $LOG_FILE_ID,
|
||||
// add file date
|
||||
'print_file_date' => true,
|
||||
// set debug and print flags
|
||||
'debug_all' => $DEBUG_ALL ?? false,
|
||||
'echo_all' => $ECHO_ALL ?? false,
|
||||
'print_all' => $PRINT_ALL ?? false,
|
||||
]);
|
||||
|
||||
$PAGE_NAME = 'TEST CLASS: CONFIG DIRECT';
|
||||
print "<!DOCTYPE html>";
|
||||
print "<html><head><title>" . $PAGE_NAME . "</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
||||
|
||||
print "DIR: " . DIR . "<br>";
|
||||
print "BASE: " . BASE . "<br>";
|
||||
print "ROOT: " . ROOT . "<br>";
|
||||
print "BASE NAME: " . BASE_NAME . "<br>";
|
||||
echo "Config path prefix: " . $CONFIG_PATH_PREFIX . "<br>";
|
||||
print "DB Name: " . DB_CONFIG_NAME . "<br>";
|
||||
print "DB Config: " . \CoreLibs\Debug\Support::printAr(DB_CONFIG) . "<br>";
|
||||
|
||||
// error message
|
||||
print $log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
59
www/admin/class_test.config.link.php
Normal file
59
www/admin/class_test.config.link.php
Normal file
@@ -0,0 +1,59 @@
|
||||
<?php // phpcs:ignore warning
|
||||
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-config-link';
|
||||
ob_end_flush();
|
||||
|
||||
$log = new CoreLibs\Debug\Logging([
|
||||
'log_folder' => BASE . LOG,
|
||||
'file_id' => $LOG_FILE_ID,
|
||||
// add file date
|
||||
'print_file_date' => true,
|
||||
// set debug and print flags
|
||||
'debug_all' => $DEBUG_ALL ?? false,
|
||||
'echo_all' => $ECHO_ALL ?? false,
|
||||
'print_all' => $PRINT_ALL ?? false,
|
||||
]);
|
||||
|
||||
$PAGE_NAME = 'TEST CLASS: CONFIG LINK';
|
||||
print "<!DOCTYPE html>";
|
||||
print "<html><head><title>" . $PAGE_NAME . "</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
||||
|
||||
print "DIR: " . DIR . "<br>";
|
||||
print "BASE: " . BASE . "<br>";
|
||||
print "ROOT: " . ROOT . "<br>";
|
||||
print "BASE NAME: " . BASE_NAME . "<br>";
|
||||
echo "Config path prefix: " . $CONFIG_PATH_PREFIX . "<br>";
|
||||
print "DB Name: " . DB_CONFIG_NAME . "<br>";
|
||||
print "DB Config: " . \CoreLibs\Debug\Support::printAr(DB_CONFIG) . "<br>";
|
||||
|
||||
// error message
|
||||
print $log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
151
www/admin/class_test.datetime.php
Normal file
151
www/admin/class_test.datetime.php
Normal file
@@ -0,0 +1,151 @@
|
||||
<?php // phpcs:ignore warning
|
||||
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-datetime';
|
||||
ob_end_flush();
|
||||
|
||||
use CoreLibs\Combined\DateTime;
|
||||
use CoreLibs\Debug\Support as DgS;
|
||||
|
||||
$log = new CoreLibs\Debug\Logging([
|
||||
'log_folder' => BASE . LOG,
|
||||
'file_id' => $LOG_FILE_ID,
|
||||
// add file date
|
||||
'print_file_date' => true,
|
||||
// set debug and print flags
|
||||
'debug_all' => $DEBUG_ALL ?? false,
|
||||
'echo_all' => $ECHO_ALL ?? false,
|
||||
'print_all' => $PRINT_ALL ?? false,
|
||||
]);
|
||||
$datetime_class = 'CoreLibs\Combined\DateTime';
|
||||
|
||||
$PAGE_NAME = 'TEST CLASS: DATE/TIME';
|
||||
print "<!DOCTYPE html>";
|
||||
print "<html><head><title>" . $PAGE_NAME . "</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
||||
|
||||
// class
|
||||
$timestamp = 1622788315.123456;
|
||||
// static
|
||||
print "S::DATESTRINGFORMAT(sm:0): $timestamp: " . $datetime_class::dateStringFormat($timestamp) . "<br>";
|
||||
|
||||
// time string thest
|
||||
$timestamp = 5887998.33445;
|
||||
$time_string = DateTime::timeStringFormat($timestamp);
|
||||
print "PLANE TIME STRING: " . $timestamp . "<br>";
|
||||
print "TIME STRING TEST: " . $time_string . "<br>";
|
||||
print "REVERSE TIME STRING: " . DateTime::stringToTime($time_string) . "<br>";
|
||||
if (round($timestamp, 4) == DateTime::stringToTime($time_string)) {
|
||||
print "REVERSE TIME STRING MATCH<br>";
|
||||
} else {
|
||||
print "REVERSE TRIME STRING DO NOT MATCH<br>";
|
||||
}
|
||||
print "ZERO TIME STRING: " . DateTime::timeStringFormat(0, true) . "<br>";
|
||||
print "ZERO TIME STRING: " . DateTime::timeStringFormat(0.0, true) . "<br>";
|
||||
print "ZERO TIME STRING: " . DateTime::timeStringFormat(1.005, true) . "<br>";
|
||||
|
||||
$timestamps = [
|
||||
1622788315.123456,
|
||||
-1622788315.456789
|
||||
];
|
||||
foreach ($timestamps as $timestamp) {
|
||||
print "DATESTRINGFORMAT(sm:0:0): $timestamp: " . DateTime::dateStringFormat($timestamp) . "<br>";
|
||||
print "DATESTRINGFORMAT(sm:1:0): $timestamp: " . DateTime::dateStringFormat($timestamp, true) . "<br>";
|
||||
print "DATESTRINGFORMAT(sm:1:1): $timestamp: " . DateTime::dateStringFormat($timestamp, true, true) . "<br>";
|
||||
}
|
||||
$intervals = [
|
||||
788315.123456,
|
||||
-123.456
|
||||
];
|
||||
foreach ($intervals as $interval) {
|
||||
print "TIMESTRINGFORMAT(sm:0): $interval: " . DateTime::timeStringFormat($interval, false) . "<br>";
|
||||
$reverse_interval = DateTime::timeStringFormat($interval);
|
||||
print "TIMESTRINGFORMAT(sm:1): $interval: " . $reverse_interval . "<br>";
|
||||
print "STRINGTOTIME: $reverse_interval: " . DateTime::stringToTime($reverse_interval) . "<br>";
|
||||
}
|
||||
$check_dates = [
|
||||
'2021-05-01',
|
||||
'2021-05-40'
|
||||
];
|
||||
foreach ($check_dates as $check_date) {
|
||||
print "CHECKDATE: $check_date: " . (string)DateTime::checkDate($check_date) . "<br>";
|
||||
}
|
||||
$check_datetimes = [
|
||||
'2021-05-01',
|
||||
'2021-05-40',
|
||||
'2021-05-01 12:13:14',
|
||||
'2021-05-40 12:13:14',
|
||||
'2021-05-01 25:13:14',
|
||||
];
|
||||
foreach ($check_datetimes as $check_datetime) {
|
||||
print "CHECKDATETIME: $check_datetime: " . (string)DateTime::checkDateTime($check_datetime) . "<br>";
|
||||
}
|
||||
$compare_dates = [
|
||||
[ '2021-05-01', '2021-05-02', ],
|
||||
[ '2021-05-02', '2021-05-01', ],
|
||||
[ '2021-05-02', '2021-05-02', ],
|
||||
[ '2017/1/5', '2017-01-05', ],
|
||||
];
|
||||
// compareDate
|
||||
foreach ($compare_dates as $compare_date) {
|
||||
print "COMPAREDATE: $compare_date[0] = $compare_date[1]: "
|
||||
. (string)DateTime::compareDate($compare_date[0], $compare_date[1]) . "<br>";
|
||||
}
|
||||
$compare_datetimes = [
|
||||
[ '2021-05-01', '2021-05-02', ],
|
||||
[ '2021-05-02', '2021-05-01', ],
|
||||
[ '2021-05-02', '2021-05-02', ],
|
||||
[ '2021-05-01 10:00:00', '2021-05-01 11:00:00', ],
|
||||
[ '2021-05-01 11:00:00', '2021-05-01 10:00:00', ],
|
||||
[ '2021-05-01 10:00:00', '2021-05-01 10:00:00', ],
|
||||
];
|
||||
foreach ($compare_datetimes as $compare_datetime) {
|
||||
print "COMPAREDATE: $compare_datetime[0] = $compare_datetime[1]: "
|
||||
. (string)DateTime::compareDateTime($compare_datetime[0], $compare_datetime[1]) . "<br>";
|
||||
}
|
||||
$compare_dates = [
|
||||
[ '2021-05-01', '2021-05-10', ],
|
||||
[ '2021-05-10', '2021-05-01', ],
|
||||
[ '2021-05-02', '2021-05-01', ],
|
||||
[ '2021-05-02', '2021-05-02', ],
|
||||
];
|
||||
foreach ($compare_dates as $compare_date) {
|
||||
print "CALCDAYSINTERVAL: $compare_date[0] = $compare_date[1]: "
|
||||
. DgS::printAr(DateTime::calcDaysInterval($compare_date[0], $compare_date[1])) . "<br>";
|
||||
print "CALCDAYSINTERVAL(named): $compare_date[0] = $compare_date[1]: "
|
||||
. DgS::printAr(DateTime::calcDaysInterval($compare_date[0], $compare_date[1], true)) . "<br>";
|
||||
}
|
||||
|
||||
// error message
|
||||
print $log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
406
www/admin/class_test.db.php
Normal file
406
www/admin/class_test.db.php
Normal file
@@ -0,0 +1,406 @@
|
||||
<?php // phpcs:ignore warning
|
||||
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
// turn on all error reporting
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', true);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// override ECHO ALL FALSE
|
||||
$ECHO_ALL = true;
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-db';
|
||||
ob_end_flush();
|
||||
|
||||
use CoreLibs\Debug\Support as DgS;
|
||||
use CoreLibs\DB\IO as DbIo;
|
||||
use CoreLibs\Debug\Support;
|
||||
|
||||
$log = new CoreLibs\Debug\Logging([
|
||||
'log_folder' => BASE . LOG,
|
||||
'file_id' => $LOG_FILE_ID,
|
||||
// add file date
|
||||
'print_file_date' => true,
|
||||
// set debug and print flags
|
||||
'debug_all' => $DEBUG_ALL ?? false,
|
||||
'echo_all' => $ECHO_ALL ?? false,
|
||||
'print_all' => $PRINT_ALL ?? false,
|
||||
]);
|
||||
// db connection and attach logger
|
||||
$db = new CoreLibs\DB\IO(DB_CONFIG, $log);
|
||||
$db->log->debug('START', '=============================>');
|
||||
|
||||
$PAGE_NAME = 'TEST CLASS: DB';
|
||||
print "<!DOCTYPE html>";
|
||||
print "<html><head><title>" . $PAGE_NAME . "</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
||||
|
||||
print "LOGFILE NAME: " . $db->log->getSetting('log_file_name') . "<br>";
|
||||
print "LOGFILE ID: " . $db->log->getSetting('log_file_id') . "<br>";
|
||||
print "DBINFO: " . $db->dbInfo() . "<br>";
|
||||
echo "DB_CONFIG_SET constant: <pre>" . print_r(DB_CONFIG, true) . "</pre><br>";
|
||||
|
||||
// DB client encoding
|
||||
print "DB client encoding: " . $db->dbGetEncoding() . "<br>";
|
||||
print "DB search path: " . $db->dbGetSchema() . "<br>";
|
||||
|
||||
$to_db_version = '13.6';
|
||||
print "VERSION DB: " . $db->dbVersion() . "<br>";
|
||||
print "VERSION LONG DB: " . $db->dbVersionInfo('server', false) . "<br>";
|
||||
print "VERSION NUMERIC DB: " . $db->dbVersionNumeric() . "<br>";
|
||||
print "SERVER ENCODING: " . $db->dbVersionInfo('server_encoding') . "<br>";
|
||||
print "ALL PG VERSION PARAMETERS: <pre>" . print_r($db->dbVersionInfoParameters(), true) . "</pre><br>";
|
||||
print "ALL OUTPUT [TEST]: <pre>" . print_r(pg_version($db->dbGetDbh()), true) . "</pre><br>";
|
||||
print "DB Version smaller $to_db_version: " . $db->dbCompareVersion('<' . $to_db_version) . "<br>";
|
||||
print "DB Version smaller than $to_db_version: " . $db->dbCompareVersion('<=' . $to_db_version) . "<br>";
|
||||
print "DB Version equal $to_db_version: " . $db->dbCompareVersion('=' . $to_db_version) . "<br>";
|
||||
print "DB Version bigger than $to_db_version: " . $db->dbCompareVersion('>=' . $to_db_version) . "<br>";
|
||||
print "DB Version bigger $to_db_version: " . $db->dbCompareVersion('>' . $to_db_version) . "<br>";
|
||||
|
||||
$db->dbSetEncoding('SJIS');
|
||||
print "ENCODING TEST: " . $db->dbVersionInfo('client_encoding') . "/" . $db->dbGetEncoding() . "<br>";
|
||||
$db->dbResetEncoding();
|
||||
|
||||
$res = $db->dbReturn("SELECT * FROM max_test");
|
||||
print "DB RETURN ROWS: " . $db->dbGetNumRows() . "<br>";
|
||||
|
||||
while (is_array($res = $db->dbReturn("SELECT * FROM max_test", DbIo::USE_CACHE, true))) {
|
||||
print "UUD/TIME: " . $res['uid'] . "/" . $res['time'] . "<br>";
|
||||
}
|
||||
print "CACHED DATA: <pre>" . print_r($db->dbGetCursorExt(), true) . "</pre><br>";
|
||||
while (is_array($res = $db->dbReturn("SELECT * FROM max_test", DbIo::USE_CACHE))) {
|
||||
print "[CACHED] UID/TIME: " . $res['uid'] . "/" . $res['time'] . "<br>";
|
||||
// print "****RES: <pre>" . print_r($res, true) . "</pre><br>";
|
||||
}
|
||||
// print "CACHED REREAD DATA: <pre>" . print_r($db->dbGetCursorExt(), true) . "</pre><br>";
|
||||
while (is_array($res = $db->dbReturn("SELECT * FROM max_test", DbIo::NO_CACHE))) {
|
||||
print "[NO CACHE] UID.TIME: " . $res['uid'] . "/" . $res['time'] . "<br>";
|
||||
// print "****RES: <pre>" . print_r($res, true) . "</pre><br>";
|
||||
}
|
||||
print "NO CACHED DATA: <pre>" . print_r($db->dbGetCursorExt(), true) . "</pre><br>";
|
||||
// alternate check for valid data
|
||||
// while (($res = $db->dbReturn("SELECT * FROM max_test")) !== false) {
|
||||
// print "[CACHED] TIME: " . $res['time'] . "<br>";
|
||||
// }
|
||||
// while (is_array($res = $db->dbReturn("SELECT * FROM max_test", DbIo::USE_CACHE))) {
|
||||
// print "UUD/TIME: " . $res['uid'] . "/" . $res['time'] . "<br>";
|
||||
// }
|
||||
|
||||
print "<pre>";
|
||||
|
||||
print "SOCKET: " . pg_socket($db->dbGetDbh()) . "<br>";
|
||||
|
||||
// truncate test_foo table before testing
|
||||
print "<b>TRUNCATE test_foo</b><br>";
|
||||
$query = "TRUNCATE test_foo";
|
||||
$db->dbExec($query);
|
||||
print "<b>TRUNCATE test_foobar</b><br>";
|
||||
$query = "TRUNCATE test_foobar";
|
||||
$db->dbExec($query);
|
||||
|
||||
$status = $db->dbExec("INSERT INTO test_foo (test) VALUES ('FOO TEST " . time() . "') RETURNING test");
|
||||
print "DIRECT INSERT STATUS: " . Support::printToString($status) . " |<br>"
|
||||
. "QUERY: " . $db->dbGetQuery() . " |<br>"
|
||||
. "DB OBJECT: <pre>" . print_r($status, true) . "</pre>| "
|
||||
. "PRIMARY KEY: " . $db->dbGetInsertPK() . " | "
|
||||
. "RETURNING EXT: " . print_r($db->dbGetReturningExt(), true) . " | "
|
||||
. "RETURNING EXT[test]: " . print_r($db->dbGetReturningExt('test'), true) . " | "
|
||||
. "RETURNING ARRAY: " . print_r($db->dbGetReturningArray(), true) . "<br>";
|
||||
|
||||
// should throw deprecated error
|
||||
// $db->getReturningExt();
|
||||
print "DIRECT INSERT PREVIOUS INSERTED: "
|
||||
. print_r($db->dbReturnRow("SELECT test_foo_id, test FROM test_foo "
|
||||
. "WHERE test_foo_id = " . $db->dbGetInsertPK()), true) . "<br>";
|
||||
|
||||
// PREPARED INSERT
|
||||
$db->dbPrepare("ins_test_foo", "INSERT INTO test_foo (test) VALUES ($1) RETURNING test");
|
||||
$status = $db->dbExecute("ins_test_foo", ['BAR TEST ' . time()]);
|
||||
print "PREPARE INSERT[ins_test_foo] STATUS: " . Support::printToString($status) . " |<br>"
|
||||
. "QUERY: " . $db->dbGetQuery() . " |<br>"
|
||||
. "PRIMARY KEY: " . $db->dbGetInsertPK() . " | "
|
||||
. "RETURNING EXT: " . print_r($db->dbGetReturningExt(), true) . " | "
|
||||
. "RETURNING RETURN: " . print_r($db->dbGetReturningArray(), true) . "<br>";
|
||||
|
||||
print "PREPARE INSERT PREVIOUS INSERTED: "
|
||||
. print_r($db->dbReturnRow("SELECT test_foo_id, test FROM test_foo "
|
||||
. "WHERE test_foo_id = " . $db->dbGetInsertPK()), true) . "<br>";
|
||||
// returning test with multiple entries
|
||||
// $status = $db->db_exec(
|
||||
// "INSERT INTO test_foo (test) VALUES "
|
||||
// . "('BAR 1 " . time() . "'), "
|
||||
// . "('BAR 2 " . time() . "'), "
|
||||
// . "('BAR 3 " . time() . "') "
|
||||
// . "RETURNING test_foo_id"
|
||||
// );
|
||||
$status = $db->dbExec(
|
||||
"INSERT INTO test_foo (test) VALUES "
|
||||
. "('BAR 1 " . time() . "'), "
|
||||
. "('BAR 2 " . time() . "'), "
|
||||
. "('BAR 3 " . time() . "') "
|
||||
. "RETURNING test_foo_id, test"
|
||||
);
|
||||
print "DIRECT MULTIPLE INSERT WITH RETURN STATUS: " . Support::printToString($status) . " |<br>"
|
||||
. "QUERY: " . $db->dbGetQuery() . " |<br>"
|
||||
. "PRIMARY KEYS: " . print_r($db->dbGetInsertPK(), true) . " | "
|
||||
. "RETURNING EXT: " . print_r($db->dbGetReturningExt(), true) . " | "
|
||||
. "RETURNING EXT[test]: " . print_r($db->dbGetReturningExt('test'), true) . " | "
|
||||
. "RETURNING ARRAY: " . print_r($db->dbGetReturningArray(), true) . "<br>";
|
||||
|
||||
// no returning, but not needed ;
|
||||
$status = $db->dbExec("INSERT INTO test_foo (test) VALUES ('FOO; TEST " . time() . "')");
|
||||
print "DIRECT INSERT NO RETURN STATUS: " . Support::printToString($status) . " |<br>"
|
||||
. "QUERY: " . $db->dbGetQuery() . " |<br>"
|
||||
. "PRIMARY KEY: " . $db->dbGetInsertPK() . " | "
|
||||
. "RETURNING EXT: " . print_r($db->dbGetReturningExt(), true) . " | "
|
||||
. "RETURNING ARRAY: " . print_r($db->dbGetReturningArray(), true) . "<br>";
|
||||
$last_insert_pk = $db->dbGetInsertPK();
|
||||
|
||||
// is_array read test
|
||||
$q = "SELECT test_foo_id, test FROM test_foo WHERE test_foo_id = " . $last_insert_pk;
|
||||
if (is_array($s_res = $db->dbReturnRow($q)) && !empty($s_res['test'])) {
|
||||
print "WE HAVE DATA FOR: " . $last_insert_pk . " WITH: " . $s_res['test'] . "<br>";
|
||||
}
|
||||
|
||||
// UPDATE WITH RETURNING
|
||||
$status = $db->dbExec("UPDATE test_foo SET test = 'SOMETHING DIFFERENT' "
|
||||
. "WHERE test_foo_id = " . $last_insert_pk . " RETURNING test");
|
||||
print "UPDATE WITH PK " . $last_insert_pk
|
||||
. " RETURN STATUS: " . Support::printToString($status) . " |<br>"
|
||||
. "QUERY: " . $db->dbGetQuery() . " |<br>"
|
||||
. "RETURNING EXT: " . print_r($db->dbGetReturningExt(), true) . " | "
|
||||
. "RETURNING ARRAY: " . print_r($db->dbGetReturningArray(), true) . "<br>";
|
||||
|
||||
|
||||
// INSERT WITH NO RETURNING
|
||||
$status = $db->dbExec("INSERT INTO test_foobar (type, integer) VALUES ('WITHOUT DATA', 456)");
|
||||
print "INSERT WITH NO PRIMARY KEY NO RETURNING STATUS: " . Support::printToString($status) . " |<br>"
|
||||
. "QUERY: " . $db->dbGetQuery() . " |<br>"
|
||||
. "PRIMARY KEY: " . $db->dbGetInsertPK() . " | "
|
||||
. "RETURNING EXT: " . print_r($db->dbGetReturningExt(), true) . " | "
|
||||
. "RETURNING ARRAY: " . print_r($db->dbGetReturningArray(), true) . "<br>";
|
||||
|
||||
$status = $db->dbExec("INSERT INTO test_foobar (type, integer) VALUES ('WITH DATA', 123) RETURNING type, integer");
|
||||
print "INSERT WITH NO PRIMARY KEY WITH RETURNING STATUS: " . Support::printToString($status) . " |<br>"
|
||||
. "QUERY: " . $db->dbGetQuery() . " |<br>"
|
||||
. "PRIMARY KEY: " . $db->dbGetInsertPK() . " | "
|
||||
. "RETURNING EXT: " . print_r($db->dbGetReturningExt(), true) . " | "
|
||||
. "RETURNING ARRAY: " . print_r($db->dbGetReturningArray(), true) . "<br>";
|
||||
|
||||
print "</pre>";
|
||||
|
||||
// READ PREPARE
|
||||
if (
|
||||
$db->dbPrepare(
|
||||
'sel_test_foo',
|
||||
"SELECT test_foo_id, test, some_bool, string_a, number_a, number_a_numeric, some_time "
|
||||
. "FROM test_foo ORDER BY test_foo_id DESC LIMIT 5"
|
||||
) === false
|
||||
) {
|
||||
print "Error in sel_test_foo prepare<br>";
|
||||
} else {
|
||||
$max_rows = 6;
|
||||
// do not run this in dbFetchArray directly as
|
||||
// dbFetchArray(dbExecute(...))
|
||||
// this will end in an endless loop
|
||||
$cursor = $db->dbExecute('sel_test_foo', []);
|
||||
$i = 1;
|
||||
while (($res = $db->dbFetchArray($cursor, true)) !== false) {
|
||||
print "DB PREP EXEC FETCH ARR: " . $i . ": <pre>" . print_r($res, true) . "</pre><br>";
|
||||
$i++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# db write class test
|
||||
$table = 'test_foo';
|
||||
print "TABLE META DATA: " . DgS::printAr($db->dbShowTableMetaData($table)) . "<br>";
|
||||
// insert first, then use primary key to update
|
||||
$primary_key = ''; # unset
|
||||
$db_write_table = ['test', 'string_a', 'number_a', 'some_bool'];
|
||||
$object_fields_not_touch = [];
|
||||
$object_fields_not_update = [];
|
||||
$data = [
|
||||
'test' => 'dbWriteDataExt: BOOL TEST SOMETHING ' . time(), 'string_a' => 'SOME TEXT', 'number_a' => 5
|
||||
];
|
||||
$primary_key = $db->dbWriteDataExt(
|
||||
$db_write_table,
|
||||
$primary_key,
|
||||
$table,
|
||||
$object_fields_not_touch,
|
||||
$object_fields_not_update,
|
||||
$data
|
||||
);
|
||||
print "Wrote to DB tabel $table with data " . print_r($data, true) . " and got primary key $primary_key<br>";
|
||||
$data = [
|
||||
'test' => 'dbWriteDataExt: BOOL TEST ON ' . time(), 'string_a' => '', 'number_a' => 0, 'some_bool' => 1
|
||||
];
|
||||
$primary_key = $db->dbWriteDataExt(
|
||||
$db_write_table,
|
||||
$primary_key,
|
||||
$table,
|
||||
$object_fields_not_touch,
|
||||
$object_fields_not_update,
|
||||
$data
|
||||
);
|
||||
print "Wrote to DB tabel $table with data " . print_r($data, true) . " and got primary key $primary_key<br>";
|
||||
$data = [
|
||||
'test' => 'dbWriteDataExt: BOOL TEST OFF ' . time(), 'string_a' => null, 'number_a' => null, 'some_bool' => 0
|
||||
];
|
||||
$primary_key = $db->dbWriteDataExt(
|
||||
$db_write_table,
|
||||
$primary_key,
|
||||
$table,
|
||||
$object_fields_not_touch,
|
||||
$object_fields_not_update,
|
||||
$data
|
||||
);
|
||||
print "Wrote to DB tabel $table with data " . print_r($data, true) . " and got primary key $primary_key<br>";
|
||||
$data = [
|
||||
'test' => 'dbWriteDataExt: BOOL TEST UNSET ' . time()
|
||||
];
|
||||
$primary_key = $db->dbWriteDataExt(
|
||||
$db_write_table,
|
||||
$primary_key,
|
||||
$table,
|
||||
$object_fields_not_touch,
|
||||
$object_fields_not_update,
|
||||
$data
|
||||
);
|
||||
print "Wrote to DB tabel $table with data " . print_r($data, true) . " and got primary key $primary_key<br>";
|
||||
|
||||
// return Array Test
|
||||
$query = "SELECT type, sdate, integer FROM foobar";
|
||||
$data = $db->dbReturnArray($query, true);
|
||||
print "Rows: " . $db->dbGetNumRows() . ", Full foobar list: <br><pre>" . print_r($data, true) . "</pre><br>";
|
||||
|
||||
// trigger a warning
|
||||
print "<b>WARNING NEXT</b><br>";
|
||||
// trigger an error
|
||||
print "<b>ERROR NEXT</b><br>";
|
||||
$query = "INSERT invalid FROM invalid";
|
||||
$data = $db->dbReturnArray($query);
|
||||
print "ERROR (INS ON dbExec): "
|
||||
. $db->dbGetLastError() . "/" . $db->dbGetLastWarning() . "/"
|
||||
. "<pre>" . print_r($db->dbGetCombinedErrorHistory(), true) . "</pre><br>";
|
||||
$query = "SELECT invalid FROM invalid";
|
||||
$data = $db->dbReturnArray($query);
|
||||
print "ERROR (HARD ERROR): "
|
||||
. $db->dbGetLastError() . "/" . $db->dbGetLastWarning() . "/"
|
||||
. "<pre>" . print_r($db->dbGetCombinedErrorHistory(), true) . "</pre><br>";
|
||||
// Now a good query will fail
|
||||
$query = "SELECT type, sdate, integer FROM foobar";
|
||||
$data = $db->dbReturnRow($query, true);
|
||||
print "GOOD SELECT AFTER ERROR: "
|
||||
. $db->dbGetLastError() . "/" . $db->dbGetLastWarning() . "/"
|
||||
. "<pre>" . print_r($db->dbGetCombinedErrorHistory(), true) . "</pre><br>";
|
||||
print "GOOD SELECT AFTER ERROR: <br><pre>" . print_r($data, true) . "</pre><br>";
|
||||
|
||||
/*
|
||||
set error id in
|
||||
dbPrepare
|
||||
dbExecute
|
||||
dbExecAsync
|
||||
dbWriteDataExt
|
||||
dbReturnArray
|
||||
dbReturnRow
|
||||
dbFetchArray (?)
|
||||
dbExec (if not set before)
|
||||
dbReturn
|
||||
dbShowTableMetaData
|
||||
*/
|
||||
|
||||
// how to handle HARD errors
|
||||
|
||||
# async test queries
|
||||
/*
|
||||
$db->dbExecAsync(
|
||||
"SELECT test FROM test_foo, (SELECT pg_sleep(10)) as sub "
|
||||
. "WHERE test_foo_id IN (27, 50, 67, 44, 10)"
|
||||
);
|
||||
echo "WAITING FOR ASYNC: ";
|
||||
$chars = ['|', '/', '-', '\\'];
|
||||
while (($ret = $db->dbCheckAsync()) === true) {
|
||||
if ((list($_, $char) = each($chars)) === FALSE) {
|
||||
reset($chars);
|
||||
list($_, $char) = each($chars);
|
||||
}
|
||||
print $char;
|
||||
sleep(1);
|
||||
flush();
|
||||
}
|
||||
print "<br>END STATUS: " . $ret . "<br>";
|
||||
// while ($res = $db->dbFetchArray($ret))
|
||||
while ($res = $db->dbFetchArray()) {
|
||||
echo "RES: " . $res['test'] . "<br>";
|
||||
}
|
||||
# test async insert
|
||||
$db->dbExecAsync("INSERT INTO test_foo (Test) VALUES ('ASYNC TEST " . time() . "')");
|
||||
echo "WAITING FOR ASYNC INSERT: ";
|
||||
while (($ret = $db->dbCheckAsync()) === true) {
|
||||
print " . ";
|
||||
sleep(1);
|
||||
flush();
|
||||
}
|
||||
print "<br>END STATUS: " . $ret . " | PK: " . $db->insert_id . "<br>";
|
||||
print "ASYNC PREVIOUS INSERTED: "
|
||||
. print_r(
|
||||
$db->dbReturnRow("SELECT test_foo_id, test FROM test_foo WHERE test_foo_id = "
|
||||
. $db->insert_id),
|
||||
true
|
||||
) . "<br>";
|
||||
*/
|
||||
|
||||
/*
|
||||
$q = "Select * from test_foo";
|
||||
$test_foo = $db->dbExecAsync($q);
|
||||
print "[ERR] Query: " . $q . "<br>";
|
||||
print "[ERR] RESOURCE: $test_foo<br>";
|
||||
while (($ret = $db->dbCheckAsync()) === true)
|
||||
{
|
||||
print "[ERR]: $ret<br>";
|
||||
sleep(5);
|
||||
}
|
||||
*/
|
||||
|
||||
// search path check
|
||||
$q = "SHOW search_path";
|
||||
$cursor = $db->dbExec($q);
|
||||
$data = $db->dbFetchArray($cursor)['search_path'];
|
||||
print "RETURN DATA FOR search_path: " . $data . "<br>";
|
||||
// print "RETURN DATA FOR search_path: " . DgS::printAr($data) . "<br>";
|
||||
// insert something into test.schema_test and see if we get the PK back
|
||||
$status = $db->dbExec(
|
||||
"INSERT INTO test.schema_test (contents, id) VALUES "
|
||||
. "('TIME: " . time() . "', " . rand(1, 10) . ")"
|
||||
);
|
||||
print "OTHER SCHEMA INSERT STATUS: "
|
||||
. Support::printToString($status)
|
||||
. " | PK NAME: " . $db->dbGetInsertPKName()
|
||||
. ", PRIMARY KEY: " . $db->dbGetInsertPK() . "<br>";
|
||||
|
||||
print "<b>NULL TEST DB READ</b><br>";
|
||||
$q = "SELECT uid, null_varchar, null_int FROM test_null_data WHERE uid = 'A'";
|
||||
$res = $db->dbReturnRow($q);
|
||||
var_dump($res);
|
||||
print "RES: " . DgS::printAr($res) . "<br>";
|
||||
print "ISSET: " . isset($res['null_varchar']) . "<br>";
|
||||
print "EMPTY: " . empty($res['null_varchar']) . "<br>";
|
||||
|
||||
// error message
|
||||
print $log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
192
www/admin/class_test.debug.php
Normal file
192
www/admin/class_test.debug.php
Normal file
@@ -0,0 +1,192 @@
|
||||
<?php // phpcs:ignore warning
|
||||
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
// all the settings are overruled by config
|
||||
$DEBUG_ALL_OVERRIDE = true; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = true;
|
||||
$PRINT_ALL = false;
|
||||
$ECHO_ALL = true;
|
||||
$DB_DEBUG = true;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
$GLOBALS['SET_SESSION_NAME'] = EDIT_SESSION_NAME;
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-debug';
|
||||
ob_end_flush();
|
||||
// override ECHO ALL FALSE
|
||||
$ECHO_ALL = true;
|
||||
|
||||
use CoreLibs\Debug\Support as DebugSupport;
|
||||
use CoreLibs\Debug\FileWriter;
|
||||
|
||||
$debug = new CoreLibs\Debug\Logging([
|
||||
'log_folder' => BASE . LOG,
|
||||
'file_id' => $LOG_FILE_ID,
|
||||
'debug_all' => $DEBUG_ALL,
|
||||
'print_all' => $PRINT_ALL,
|
||||
'echo_all' => $ECHO_ALL,
|
||||
]);
|
||||
$debug_support_class = 'CoreLibs\Debug\Support';
|
||||
$debug_logging_class = 'CoreLibs\Debug\Logging';
|
||||
|
||||
$PAGE_NAME = 'TEST CLASS: DEBUG';
|
||||
print "<!DOCTYPE html>";
|
||||
print "<html><head><title>" . $PAGE_NAME . "</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
||||
|
||||
function test()
|
||||
{
|
||||
return DebugSupport::getCallerMethod(1);
|
||||
}
|
||||
|
||||
function test2()
|
||||
{
|
||||
return DebugSupport::getCallerMethodList(1);
|
||||
}
|
||||
|
||||
print "S::GETCALLERMETHOD: " . DebugSupport::getCallerMethod(0) . "<br>";
|
||||
print "S::GETCALLERMETHOD: " . test() . "<br>";
|
||||
print "S::GETCALLERMETHODLIST: <pre>" . print_r(test2(), true) . "</pre><br>";
|
||||
print "S::PRINTAR: " . DebugSupport::printAr(['Foo', 'Bar']) . "<br>";
|
||||
print "V-S::PRINTAR: " . $debug_support_class::printAr(['Foo', 'Bar']) . "<br>";
|
||||
print "S::DEBUSTRING(s): " . DebugSupport::debugString('SET') . "<br>";
|
||||
print "S::DEBUSTRING(''): " . DebugSupport::debugString('') . "<br>";
|
||||
print "S::DEBUSTRING(,s): " . DebugSupport::debugString(null, '{-}') . "<br>";
|
||||
|
||||
// get test
|
||||
print "LOG FOLDER: " . $debug->getSetting('log_folder') . "<br>";
|
||||
|
||||
// debug
|
||||
print "C->DEBUG: " . $debug->debug('CLASS-TEST-DEBUG', 'Class Test Debug') . "<br>";
|
||||
print "C->DEBUG(html): " . $debug->debug('CLASS-TEST-DEBUG', 'HTML TAG<br><b>BOLD</b>') . "<br>";
|
||||
print "C->DEBUG(html,strip): " . $debug->debug('CLASS-TEST-DEBUG', 'HTML TAG<br><b>BOLD</b>', true) . "<br>";
|
||||
print "C->PRINTERRORMSG: <br>" . $debug->printErrorMsg() . "<br>";
|
||||
|
||||
echo "<b>OPTIONS DEBUG CALL</b><br>";
|
||||
|
||||
// new log type with options
|
||||
$new_log = new CoreLibs\Debug\Logging([
|
||||
'log_folder' => '../log/',
|
||||
'file_id' => 'DebugTestNewLogger',
|
||||
// add file date
|
||||
'print_file_date' => true,
|
||||
// split into level (debug code)
|
||||
'per_level' => false,
|
||||
// per class called
|
||||
'per_class' => false,
|
||||
// per page
|
||||
'per_page' => false,
|
||||
// for each page call
|
||||
'per_run' => false,
|
||||
// set debug and print flags
|
||||
'debug_all' => true,
|
||||
'echo_all' => true,
|
||||
'print_all' => true,
|
||||
]);
|
||||
$new_log->debug('OPTIONS TYPE', 'New Type error');
|
||||
print "OPTIONS LOGGER:<br>" . $new_log->printErrorMsg();
|
||||
$new_log->setLogLevel('debug', 'on', ['A', 'B', 'C' => false]);
|
||||
print "LOG LEVEL: " . DebugSupport::printAr($new_log->getLogLevel('debug', 'on')) . "<br>";
|
||||
|
||||
echo "<b>CLASS DEBUG CALL</b><br>";
|
||||
|
||||
// @codingStandardsIgnoreLine
|
||||
class TestL
|
||||
{
|
||||
public $log;
|
||||
public function __construct()
|
||||
{
|
||||
$this->log = new CoreLibs\Debug\Logging();
|
||||
}
|
||||
public function test(string $ts = null)
|
||||
{
|
||||
print "* GETCALLERCLASS(INSIDE CLASS): " . \CoreLibs\Debug\Support::getCallerClass() . "<br>";
|
||||
$this->log->debug('TESTL', 'Logging in class testL' . ($ts !== null ? ': ' . $ts : ''));
|
||||
$this->log->debug('TESTL', 'Some other message');
|
||||
return true;
|
||||
}
|
||||
}
|
||||
// @codingStandardsIgnoreLine
|
||||
class TestR extends TestL
|
||||
{
|
||||
public $foo;
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
}
|
||||
public function subTest()
|
||||
{
|
||||
print "** GETCALLERCLASS(INSIDE EXTND CLASS): " . \CoreLibs\Debug\Support::getCallerClass() . "<br>";
|
||||
$this->log->debug('TESTR', 'Logging in class testR (extends testL)');
|
||||
$this->test('TESTR INSIDE');
|
||||
$this->log->debug('TESTR', 'Array: '
|
||||
. $this->log->prAr(['a', 'b']) . ', Other: ' . $this->log->prAr(['a', 'b']));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
$tl = new TestL();
|
||||
print "CLASS: LOG ECHO: " . (string)$tl->log->getLogLevelAll('echo') . "<br>";
|
||||
print "CLASS: DEBUG: " . $tl->test() . "<br>";
|
||||
print "CLASS: PRINTERRORMSG: <br>" . $tl->log->printErrorMsg() . "<br>";
|
||||
$tr = new TestR();
|
||||
print "CLASS: LOG ECHO: " . (string)$tr->log->getLogLevelAll('echo') . "<br>";
|
||||
print "CLASS EXTEND: DEBUG/tl: " . $tr->test('TESTR OUTSIDE') . "<br>";
|
||||
print "CLASS EXTEND: DEBUG/tr: " . $tr->subTest() . "<br>";
|
||||
print "CLASS EXTEND: PRINTERRORMSG: <br>" . $tr->log->printErrorMsg() . "<br>";
|
||||
|
||||
// test attaching a logger from outside
|
||||
// @codingStandardsIgnoreLine
|
||||
class AttachOutside
|
||||
{
|
||||
public $log;
|
||||
public function __construct(object $logger_class)
|
||||
{
|
||||
$this->log = $logger_class;
|
||||
}
|
||||
public function test()
|
||||
{
|
||||
$this->log->debug('ATTACHOUTSIDE', 'A test');
|
||||
return get_class($this);
|
||||
}
|
||||
}
|
||||
$ao = new AttachOutside($debug);
|
||||
print "AO-CLASS: DEBUG: " . $ao->test() . "<br>";
|
||||
|
||||
print "GETCALLERCLASS(NON CLASS): " . \CoreLibs\Debug\Support::getCallerClass() . "<br>";
|
||||
|
||||
// fdebug
|
||||
print "S::FSETFILENAME: " . FileWriter::fsetFilename('class_test_debug_file.log') . "<br>";
|
||||
print "S::FDEBUG: " . FileWriter::fdebug('CLASS TEST DEBUG FILE: ' . date('Y-m-d H:i:s')) . "<br>";
|
||||
|
||||
// test per level
|
||||
$debug->setLogPer('level', true);
|
||||
$debug->debug('TEST PER LEVEL', 'Per level test');
|
||||
$debug->debug('()', 'Per level test: invalid chars');
|
||||
$debug->setLogPer('level', false);
|
||||
|
||||
// error message
|
||||
// future DEPRECATED
|
||||
// $debug->debug('BASIC CLASS', 'Debug test');
|
||||
$debug->debug('BASIC CLASS', 'Debug test');
|
||||
print "BASIC PRINTERRORMSG:<br>" . $debug->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
92
www/admin/class_test.email.php
Normal file
92
www/admin/class_test.email.php
Normal file
@@ -0,0 +1,92 @@
|
||||
<?php // phpcs:ignore warning
|
||||
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-email';
|
||||
ob_end_flush();
|
||||
|
||||
use CoreLibs\Check\Email;
|
||||
use CoreLibs\Debug\Support as DgS;
|
||||
|
||||
$log = new CoreLibs\Debug\Logging([
|
||||
'log_folder' => BASE . LOG,
|
||||
'file_id' => $LOG_FILE_ID,
|
||||
// add file date
|
||||
'print_file_date' => true,
|
||||
// set debug and print flags
|
||||
'debug_all' => $DEBUG_ALL ?? false,
|
||||
'echo_all' => $ECHO_ALL ?? false,
|
||||
'print_all' => $PRINT_ALL ?? false,
|
||||
]);
|
||||
|
||||
$PAGE_NAME = 'TEST CLASS: HTML/ELEMENTS';
|
||||
print "<!DOCTYPE html>";
|
||||
print "<html><head><title>" . $PAGE_NAME . "</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
||||
|
||||
// regex get
|
||||
print "S::GETEMAILREGEX(0): " . Email::getEmailRegex(0) . "<br>";
|
||||
print "S::GETEMAILREGEX(2): " . Email::getEmailRegex(2) . "<br>";
|
||||
print "S::GETEMAILREGEX(7): " . Email::getEmailRegex(7) . "<br>";
|
||||
print "S::GETEMAILREGEX(8 invalid): " . Email::getEmailRegex(8) . "<br>";
|
||||
print "S::GETEMAILREGEXCHECK: " . DgS::printAr(Email::getEmailRegexCheck()) . "<br>";
|
||||
print "S::GETEMAILREGEXERRORMESSAGE " . Dgs::printAr(Email::getEmailRegexErrorMessage(1)) . "<br>";
|
||||
|
||||
$email = [
|
||||
'foo@bar.org',
|
||||
'foo@i.softbank.ne.jp'
|
||||
];
|
||||
foreach ($email as $s_email) {
|
||||
print "S::EMAIL: $s_email: " . Email::getEmailType($s_email) . "<br>";
|
||||
print "S::EMAIL SHORT: $s_email: " . Email::getEmailType($s_email, true) . "<br>";
|
||||
}
|
||||
$email = [
|
||||
'test@test.com',
|
||||
'',
|
||||
'-@-',
|
||||
'.test@test.com',
|
||||
'test@t_est.com',
|
||||
'test@@test.com',
|
||||
'test@test..com',
|
||||
'test@@test..com',
|
||||
'test@test.',
|
||||
'test@test.j',
|
||||
];
|
||||
foreach ($email as $s_email) {
|
||||
print "S::CHECKEMAIL: " . $s_email . ": " . (Email::checkEmail($s_email) ? 'Yes' : 'No') . "<br>";
|
||||
print "S::CHECKEMAILFULL: " . $s_email . ": " . Dgs::printAr(Email::checkEmailFull($s_email)) . "<br>";
|
||||
print "S::CHECKEMAILFULL(true): " . $s_email . ": " . Dgs::printAr(Email::checkEmailFull($s_email, true)) . "<br>";
|
||||
}
|
||||
|
||||
// error message
|
||||
print $log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
116
www/admin/class_test.encoding.php
Normal file
116
www/admin/class_test.encoding.php
Normal file
@@ -0,0 +1,116 @@
|
||||
<?php // phpcs:ignore warning
|
||||
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-encoding';
|
||||
ob_end_flush();
|
||||
|
||||
use CoreLibs\Convert\Encoding as ConEnc;
|
||||
use CoreLibs\Check\Encoding as ChkEnc;
|
||||
use CoreLibs\Convert\MimeEncode;
|
||||
|
||||
$log = new CoreLibs\Debug\Logging([
|
||||
'log_folder' => BASE . LOG,
|
||||
'file_id' => $LOG_FILE_ID,
|
||||
// add file date
|
||||
'print_file_date' => true,
|
||||
// set debug and print flags
|
||||
'debug_all' => $DEBUG_ALL ?? false,
|
||||
'echo_all' => $ECHO_ALL ?? false,
|
||||
'print_all' => $PRINT_ALL ?? false,
|
||||
]);
|
||||
// class type
|
||||
$_chk_enc = new CoreLibs\Check\Encoding();
|
||||
$_con_enc = new CoreLibs\Convert\Encoding();
|
||||
$chk_enc = 'CoreLibs\Check\Encoding';
|
||||
|
||||
$PAGE_NAME = 'TEST CLASS: ENCODING (CHECK/CONVERT/MIME)';
|
||||
print "<!DOCTYPE html>";
|
||||
print "<html><head><title>" . $PAGE_NAME . "</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
||||
|
||||
// print "Valid encoding: ".$log->printAr(mb_list_encodings())."<br>";
|
||||
|
||||
$mime_encodes = [
|
||||
['Simple string UTF8', 'UTF-8'],
|
||||
['Simple string ISO-2022-JP-MS', 'ISO-2022-JP-MS'],
|
||||
['日本語ながい', 'UTF-8'],
|
||||
['日本語ながい', 'ISO-2022-JP-MS'],
|
||||
['日本語ながい日本語ながい日本語ながい日本語ながい日本語ながい日本語ながい日本語ながい', 'ISO-2022-JP-MS'],
|
||||
];
|
||||
foreach ($mime_encodes as $mime_encode) {
|
||||
print "__MBMIMEENCODE: $mime_encode[0]: " . MimeEncode::__mbMimeEncode($mime_encode[0], $mime_encode[1]) . "<br>";
|
||||
}
|
||||
echo "<br>";
|
||||
|
||||
$enc_strings = [
|
||||
'Normal Text',
|
||||
'日本語',
|
||||
// bad
|
||||
'❶',
|
||||
// unworkable
|
||||
''
|
||||
];
|
||||
// class
|
||||
$_chk_enc->setErrorChar(0x2234);
|
||||
$_chk_enc->setErrorChar('∴');
|
||||
print "ERROR CHAR: " . $_chk_enc->getErrorChar() . "<br>";
|
||||
foreach ($enc_strings as $_string) {
|
||||
$string = $_chk_enc->checkConvertEncoding($_string, 'UTF-8', 'ISO-2022-JP-MS');
|
||||
print "ENC CHECK: $_string: " . ($string === false ? '<b>-OK-</b>' : print_r($string, true)) . "<br>";
|
||||
print "CONV ENCODING: $_string: " . $_con_enc->convertEncoding($_string, 'ISO-2022-JP') . "<br>";
|
||||
print "CONV ENCODING (s): $_string: " . $_con_enc->convertEncoding($_string, 'ISO-2022-JP', 'UTF-8') . "<br>";
|
||||
print "CONV ENCODING (s,a-false): $_string: "
|
||||
. $_con_enc->convertEncoding($_string, 'ISO-2022-JP', 'UTF-8', false) . "<br>";
|
||||
}
|
||||
echo "<br>";
|
||||
// static
|
||||
// ChkEnc::setErrorChar('∴');
|
||||
ChkEnc::setErrorChar(0x2234);
|
||||
print "S::ERROR CHAR: " . ChkEnc::getErrorChar() . "<br>";
|
||||
foreach ($enc_strings as $_string) {
|
||||
$string = ChkEnc::checkConvertEncoding($_string, 'UTF-8', 'ISO-2022-JP-MS');
|
||||
print "S::ENC CHECK: $_string: " . ($string === false ? '<b>-OK-</b>' : print_r($string, true)) . "<br>";
|
||||
print "S::CONV ENCODING: $_string: " . ConEnc::convertEncoding($_string, 'ISO-2022-JP') . "<br>";
|
||||
print "S::CONV ENCODING (s): $_string: "
|
||||
. ConEnc::convertEncoding($_string, 'ISO-2022-JP', 'UTF-8') . "<br>";
|
||||
print "S::CONV ENCODING (s,a-false): $_string: "
|
||||
. ConEnc::convertEncoding($_string, 'ISO-2022-JP', 'UTF-8', false) . "<br>";
|
||||
}
|
||||
// static use
|
||||
$_string = $enc_strings[1];
|
||||
$string = $chk_enc::checkConvertEncoding($_string, 'UTF-8', 'ISO-2022-JP-MS');
|
||||
print "S::ENC CHECK: $_string: " . ($string === false ? '-OK-' : $string) . "<br>";
|
||||
|
||||
// error message
|
||||
print $log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
62
www/admin/class_test.file.php
Normal file
62
www/admin/class_test.file.php
Normal file
@@ -0,0 +1,62 @@
|
||||
<?php // phpcs:ignore warning
|
||||
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-datetime';
|
||||
ob_end_flush();
|
||||
|
||||
use CoreLibs\Check\File;
|
||||
|
||||
$log = new CoreLibs\Debug\Logging([
|
||||
'log_folder' => BASE . LOG,
|
||||
'file_id' => $LOG_FILE_ID,
|
||||
// add file date
|
||||
'print_file_date' => true,
|
||||
// set debug and print flags
|
||||
'debug_all' => $DEBUG_ALL ?? false,
|
||||
'echo_all' => $ECHO_ALL ?? false,
|
||||
'print_all' => $PRINT_ALL ?? false,
|
||||
]);
|
||||
|
||||
$PAGE_NAME = 'TEST CLASS: FILE';
|
||||
print "<!DOCTYPE html>";
|
||||
print "<html><head><title>" . $PAGE_NAME . "</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
||||
|
||||
$file = '/some/path/to/some/file.txt';
|
||||
print "GETFILENAMEENDING: $file: " . File::getFilenameEnding($file) . "<br>";
|
||||
$file = getcwd() . DIRECTORY_SEPARATOR . 'class_test.file.php';
|
||||
print "GETLINESFROMFILE: $file: " . File::getLinesFromFile($file) . "<br>";
|
||||
|
||||
// error message
|
||||
print $log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
81
www/admin/class_test.hash.php
Normal file
81
www/admin/class_test.hash.php
Normal file
@@ -0,0 +1,81 @@
|
||||
<?php // phpcs:ignore warning
|
||||
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-hash';
|
||||
ob_end_flush();
|
||||
|
||||
use CoreLibs\Create\Hash;
|
||||
|
||||
$log = new CoreLibs\Debug\Logging([
|
||||
'log_folder' => BASE . LOG,
|
||||
'file_id' => $LOG_FILE_ID,
|
||||
// add file date
|
||||
'print_file_date' => true,
|
||||
// set debug and print flags
|
||||
'debug_all' => $DEBUG_ALL ?? false,
|
||||
'echo_all' => $ECHO_ALL ?? false,
|
||||
'print_all' => $PRINT_ALL ?? false,
|
||||
]);
|
||||
$hash_class = 'CoreLibs\Create\Hash';
|
||||
|
||||
// define a list of from to color sets for conversion test
|
||||
|
||||
$PAGE_NAME = 'TEST CLASS: HASH';
|
||||
print "<!DOCTYPE html>";
|
||||
print "<html><head><title>" . $PAGE_NAME . "</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
||||
|
||||
$to_crc = 'Some text block';
|
||||
// static
|
||||
print "S::__CRC32B: $to_crc: " . $hash_class::__crc32b($to_crc) . "<br>";
|
||||
print "S::__SHA1SHORT(off): $to_crc: " . $hash_class::__sha1short($to_crc) . "<br>";
|
||||
print "S::__SHA1SHORT(on): $to_crc: " . $hash_class::__sha1short($to_crc, true) . "<br>";
|
||||
print "S::__hash(d): " . $to_crc . "/"
|
||||
. Hash::STANDARD_HASH_SHORT . ": " . $hash_class::__hash($to_crc) . "<br>";
|
||||
foreach (['adler32', 'fnv132', 'fnv1a32', 'joaat'] as $__hash_c) {
|
||||
print "S::__hash($__hash_c): $to_crc: " . $hash_class::__hash($to_crc, $__hash_c) . "<br>";
|
||||
}
|
||||
// static use
|
||||
print "U-S::__CRC32B: $to_crc: " . Hash::__crc32b($to_crc) . "<br>";
|
||||
|
||||
print "<br>CURRENT STANDARD_HASH_SHORT: " . Hash::STANDARD_HASH_SHORT . "<br>";
|
||||
print "<br>CURRENT STANDARD_HASH_LONG: " . Hash::STANDARD_HASH_LONG . "<br>";
|
||||
print "HASH SHORT: " . $to_crc . ": " . Hash::__hash($to_crc) . "<br>";
|
||||
print "HASH LONG: " . $to_crc . ": " . Hash::__hashLong($to_crc) . "<br>";
|
||||
|
||||
// print "UNIQU ID SHORT : " . Hash::__uniqId() . "<br>";
|
||||
// print "UNIQU ID LONG : " . Hash::__uniqIdLong() . "<br>";
|
||||
|
||||
// error message
|
||||
print $log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
117
www/admin/class_test.html.php
Normal file
117
www/admin/class_test.html.php
Normal file
@@ -0,0 +1,117 @@
|
||||
<?php // phpcs:ignore warning
|
||||
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-html';
|
||||
ob_end_flush();
|
||||
|
||||
use CoreLibs\Convert\Html;
|
||||
use CoreLibs\Output\Form\Elements;
|
||||
|
||||
$log = new CoreLibs\Debug\Logging([
|
||||
'log_folder' => BASE . LOG,
|
||||
'file_id' => $LOG_FILE_ID,
|
||||
// add file date
|
||||
'print_file_date' => true,
|
||||
// set debug and print flags
|
||||
'debug_all' => $DEBUG_ALL ?? false,
|
||||
'echo_all' => $ECHO_ALL ?? false,
|
||||
'print_all' => $PRINT_ALL ?? false,
|
||||
]);
|
||||
$_html = new CoreLibs\Convert\Html();
|
||||
$_elements = new CoreLibs\Output\Form\Elements();
|
||||
$html_class = 'CoreLibs\Convert\Html';
|
||||
$elements_class = 'CoreLibs\Output\Form\Elements';
|
||||
|
||||
// define a list of from to color sets for conversion test
|
||||
|
||||
$PAGE_NAME = 'TEST CLASS: HTML/ELEMENTS';
|
||||
print "<!DOCTYPE html>";
|
||||
print "<html><head><title>" . $PAGE_NAME . "</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
||||
|
||||
$string = "Something < = > Other <br> Next line";
|
||||
print "HTMLENT: " . Html::htmlent($string) . ": " . $_html->htmlent($string) . "<br>";
|
||||
print "REMOVELB: " . Html::htmlent($string) . ": " . $_html->removeLB($string) . "<br>";
|
||||
$date_str = [2021, 5, 1, 11, 10];
|
||||
print "PRINTDATETIME: "
|
||||
. $_elements->printDateTime($date_str[0], $date_str[1], $date_str[2], $date_str[3], $date_str[4]) . "<br>";
|
||||
// STATIC
|
||||
$string = "Something < = > Other <br> Next line";
|
||||
print "S::HTMLENT: " . Html::htmlent($string) . ": " . $html_class::htmlent($string) . "<br>";
|
||||
print "S::REMOVELB: " . Html::htmlent($string) . ": " . $html_class::removeLB($string) . "<br>";
|
||||
$date_str = [2021, 5, 1, 11, 10];
|
||||
print "S::PRINTDATETIME: "
|
||||
. $elements_class::printDateTime($date_str[0], $date_str[1], $date_str[2], $date_str[3], $date_str[4]) . "<br>";
|
||||
|
||||
// STATIC use
|
||||
echo "U-S::HTML ENT INT: " . Html::htmlent(5) . "<br>";
|
||||
echo "U-S::HTML ENT STRING: " . Html::htmlent('5<<>') . "<br>";
|
||||
echo "U-S::HTML ENT NULL: " . Html::htmlent(null) . "<br>";
|
||||
|
||||
// check convert
|
||||
$checked_list = [
|
||||
['foo', 'foo'],
|
||||
['foo', 'bar'],
|
||||
['foo', ['foo', 'bar']],
|
||||
['foo', ['bar']],
|
||||
];
|
||||
foreach ($checked_list as $check) {
|
||||
print "CHECKED(0): $check[0]: " . Html::checked($check[1], $check[0]) . "<br>";
|
||||
print "CHECKED(1): $check[0]: " . Html::checked($check[1], $check[0], Html::CHECKED) . "<br>";
|
||||
}
|
||||
|
||||
// magic link creation test
|
||||
$magic_links = [
|
||||
'mailto:user@bubu.at',
|
||||
'user@bubu.at',
|
||||
'user@bubu.at|Send me email|',
|
||||
'http://www.somelink.com/?with=1234',
|
||||
'http://www.somelink.com/?with=1234|Some Title|',
|
||||
'http://www.somelink.com/?with=1234 <br>Some Title',
|
||||
];
|
||||
foreach ($magic_links as $magic_link) {
|
||||
print "MAGICLINK: " . Html::htmlent($magic_link) . ": " . Html::htmlent(Elements::magicLinks($magic_link)) . "<br>";
|
||||
}
|
||||
|
||||
$text = 'I am some text
|
||||
with some
|
||||
line breaks
|
||||
in there. Theis
|
||||
is sucky';
|
||||
|
||||
print "LB remove: " . \CoreLibs\Convert\Html::removeLB($text) . "<br>";
|
||||
print "LB remove: " . \CoreLibs\Convert\Html::removeLB($text, '##BR##') . "<br>";
|
||||
|
||||
// error message
|
||||
print $log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
122
www/admin/class_test.image.php
Normal file
122
www/admin/class_test.image.php
Normal file
@@ -0,0 +1,122 @@
|
||||
<?php // phpcs:ignore warning
|
||||
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-image';
|
||||
ob_end_flush();
|
||||
|
||||
use CoreLibs\Output\Image;
|
||||
|
||||
$log = new CoreLibs\Debug\Logging([
|
||||
'log_folder' => BASE . LOG,
|
||||
'file_id' => $LOG_FILE_ID,
|
||||
// add file date
|
||||
'print_file_date' => true,
|
||||
// set debug and print flags
|
||||
'debug_all' => $DEBUG_ALL ?? false,
|
||||
'echo_all' => $ECHO_ALL ?? false,
|
||||
'print_all' => $PRINT_ALL ?? false,
|
||||
]);
|
||||
$_image = new CoreLibs\Output\Image();
|
||||
$image_class = 'CoreLibs\Output\Image';
|
||||
|
||||
// define a list of from to color sets for conversion test
|
||||
|
||||
$PAGE_NAME = 'TEST CLASS: IMAGE';
|
||||
print "<!DOCTYPE html>";
|
||||
print "<html><head><title>" . $PAGE_NAME . "</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
||||
|
||||
// thumb sizes
|
||||
$thumb_width = 250;
|
||||
$thumb_height = 300;
|
||||
// class
|
||||
$image = BASE . LAYOUT . CONTENT_PATH . IMAGES . 'no_picture_square.jpg';
|
||||
// rotate image first
|
||||
$_image->correctImageOrientation($image);
|
||||
// thumbnail tests
|
||||
echo "<div>CLASS->CREATETHUMBNAILSIMPLE: "
|
||||
. basename($image) . ": WIDTH: $thumb_width<br><img src="
|
||||
. $_image->createThumbnailSimple($image, $thumb_width) . "></div>";
|
||||
// static
|
||||
$image = BASE . LAYOUT . CONTENT_PATH . IMAGES . 'no_picture.jpg';
|
||||
// rotate image first
|
||||
$image_class::correctImageOrientation($image);
|
||||
// thumbnail tests
|
||||
echo "<div>S::CREATETHUMBNAILSIMPLE: "
|
||||
. basename($image) . ": WIDTH: $thumb_width<br><img src="
|
||||
. $image_class::createThumbnailSimple($image, $thumb_width) . "></div>";
|
||||
|
||||
echo "U-STATIC VARIOUS:<br>";
|
||||
// image thumbnail
|
||||
$images = array(
|
||||
// height bigger
|
||||
// 'no_picture.jpg',
|
||||
// 'no_picture.png',
|
||||
// width bigger
|
||||
// 'no_picture_width_bigger.jpg',
|
||||
// 'no_picture_width_bigger.png',
|
||||
// square
|
||||
// 'no_picture_square.jpg',
|
||||
// 'no_picture_square.png',
|
||||
// other sample images
|
||||
// '5c501af48da6c.jpg',
|
||||
// Apple HEIC files
|
||||
// 'img_2145.heic',
|
||||
// Photoshop
|
||||
'photoshop_test.psd',
|
||||
);
|
||||
// return mime type ala mimetype
|
||||
$finfo = new finfo(FILEINFO_MIME_TYPE);
|
||||
foreach ($images as $image) {
|
||||
$image = BASE . LAYOUT . CONTENT_PATH . IMAGES . $image;
|
||||
list ($height, $width, $img_type) = getimagesize($image);
|
||||
echo "<div><b>IMAGE INFO</b>: " . $height . "x" . $width . ", TYPE: "
|
||||
. $img_type . " [" . $finfo->file($image) . "]</div>";
|
||||
// rotate image first
|
||||
Image::correctImageOrientation($image);
|
||||
// thumbnail tests
|
||||
echo "<div>" . basename($image) . ": WIDTH: $thumb_width<br><img src="
|
||||
. Image::createThumbnailSimple($image, $thumb_width) . "></div>";
|
||||
echo "<div>" . basename($image) . ": HEIGHT: $thumb_height<br><img src="
|
||||
. Image::createThumbnailSimple($image, 0, $thumb_height) . "></div>";
|
||||
echo "<div>" . basename($image) . ": WIDTH/HEIGHT: $thumb_width x $thumb_height<br><img src="
|
||||
. Image::createThumbnailSimple($image, $thumb_width, $thumb_height) . "></div>";
|
||||
// test with dummy
|
||||
echo "<div>" . basename($image) . ": WIDTH/HEIGHT: $thumb_width x $thumb_height (+DUMMY)<br><img src="
|
||||
. Image::createThumbnailSimple($image, $thumb_width, $thumb_height, null, true, false) . "></div>";
|
||||
echo "<hr>";
|
||||
}
|
||||
|
||||
// error message
|
||||
print $log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
87
www/admin/class_test.json.php
Normal file
87
www/admin/class_test.json.php
Normal file
@@ -0,0 +1,87 @@
|
||||
<?php // phpcs:ignore warning
|
||||
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-json';
|
||||
ob_end_flush();
|
||||
|
||||
use CoreLibs\Convert\Json;
|
||||
use CoreLibs\Debug\Support as DgS;
|
||||
|
||||
$log = new CoreLibs\Debug\Logging([
|
||||
'log_folder' => BASE . LOG,
|
||||
'file_id' => $LOG_FILE_ID,
|
||||
// add file date
|
||||
'print_file_date' => true,
|
||||
// set debug and print flags
|
||||
'debug_all' => $DEBUG_ALL ?? false,
|
||||
'echo_all' => $ECHO_ALL ?? false,
|
||||
'print_all' => $PRINT_ALL ?? false,
|
||||
]);
|
||||
$json_class = 'CoreLibs\Convert\Json';
|
||||
|
||||
// define a list of from to color sets for conversion test
|
||||
|
||||
$PAGE_NAME = 'TEST CLASS: JSON';
|
||||
print "<!DOCTYPE html>";
|
||||
print "<html><head><title>" . $PAGE_NAME . "</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
||||
|
||||
$json = '{"foo": "bar"}';
|
||||
$output = Json::jsonConvertToArray($json);
|
||||
print "S::JSON: $json: " . DgS::printAr($output) . "<br>";
|
||||
print "S::JSON ERROR: " . Json::jsonGetLastError() . ": " . Json::jsonGetLastError(true) . "<br>";
|
||||
|
||||
$json = '["f: {b"""ar}]';
|
||||
$output = Json::jsonConvertToArray($json);
|
||||
print "S::E-JSON: $json: " . DgS::printAr($output) . "<br>";
|
||||
print "S::E-JSON ERROR: " . Json::jsonGetLastError() . ": " . Json::jsonGetLastError(true) . "<br>";
|
||||
|
||||
// direct
|
||||
$json = '{"direct": "static function call"}';
|
||||
$output = $json_class::jsonConvertToArray($json);
|
||||
print "J/S::JSON: $json: " . DgS::printAr($output) . "<br>";
|
||||
print "J/S::JSON ERROR: " . $json_class::jsonGetLastError() . ": " . $json_class::jsonGetLastError(true) . "<br>";
|
||||
|
||||
$json = '["f: {b"""ar}]';
|
||||
$output = $json_class::jsonConvertToArray($json);
|
||||
print "J/S::E-JSON: $json: " . DgS::printAr($output) . "<br>";
|
||||
print "J/S::E-JSON ERROR: " . $json_class::jsonGetLastError() . ": " . $json_class::jsonGetLastError(true) . "<br>";
|
||||
|
||||
// $json = '{"foo": "bar"}';
|
||||
// $output = Jason::jsonConvertToArray($json);
|
||||
// print "S::JSON: $json: " . DgS::printAr($output) . "<br>";
|
||||
// print "S::JSON ERROR: " . Jason::jsonGetLastError() . ": " . Jason::jsonGetLastError(true) . "<br>";
|
||||
|
||||
// error message
|
||||
print $log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
187
www/admin/class_test.lang.php
Normal file
187
www/admin/class_test.lang.php
Normal file
@@ -0,0 +1,187 @@
|
||||
<?php // phpcs:ignore warning
|
||||
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-lang';
|
||||
ob_end_flush();
|
||||
|
||||
$PAGE_NAME = 'TEST CLASS: LANG';
|
||||
print "<!DOCTYPE html>";
|
||||
print "<html><head><title>" . $PAGE_NAME . "</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
||||
|
||||
use CoreLibs\Language\L10n;
|
||||
use CoreLibs\Debug\Support;
|
||||
|
||||
echo "<br><b>LIST LOCALES</b><br>";
|
||||
|
||||
$locale = 'en_US.UTF-8';
|
||||
$locales = CoreLibs\Language\L10n::listLocales($locale);
|
||||
print "[" . $locale . "] LOCALES: " . Support::printAr($locales) . "<br>";
|
||||
$locale = 'en.UTF-8';
|
||||
$locales = CoreLibs\Language\L10n::listLocales($locale);
|
||||
print "[" . $locale . "] LOCALES: " . Support::printAr($locales) . "<br>";
|
||||
|
||||
echo "<br><b>LOCALE INFO</b><br>";
|
||||
$locale = 'en_US.UTF-8';
|
||||
$locale_info = CoreLibs\Language\L10n::parseLocale($locale);
|
||||
print "[" . $locale . "] INFO: " . Support::printAr($locale_info) . "<br>";
|
||||
$locale = 'en.UTF-8';
|
||||
$locale_info = CoreLibs\Language\L10n::parseLocale($locale);
|
||||
print "[" . $locale . "] INFO: " . Support::printAr($locale_info) . "<br>";
|
||||
|
||||
echo "<br><b>AUTO DETECT</b><br>";
|
||||
|
||||
$get_locale = \CoreLibs\Language\GetLocale::setLocale();
|
||||
print "[AUTO]: " . Support::printAr($get_locale) . "<br>";
|
||||
$get_locale = \CoreLibs\Language\GetLocale::setLocale('en', 'foo', 'ISO-8895');
|
||||
print "[OVERRIDE]: " . Support::printAr($get_locale) . "<br>";
|
||||
|
||||
// try to load non existing
|
||||
echo "<br><b>NEW TYPE</b><br>";
|
||||
// translate string
|
||||
$string = 'INPUT TEST';
|
||||
// new path test
|
||||
$lang = 'ja';
|
||||
$domain = 'admin';
|
||||
$encoding = 'UTF-8';
|
||||
$path = BASE . INCLUDES . LOCALE;
|
||||
// load direct
|
||||
$l = new CoreLibs\Language\L10n($lang, $domain, $path);
|
||||
echo "*<br>";
|
||||
echo "LANGUAGE WANT/SET: " . $lang . '/' . $l->getLocale() . "<br>";
|
||||
echo "DOMAIN WANT/SET: " . $domain . '/' . $l->getDomain() . "<br>";
|
||||
echo "LANGUAGE FILE: " . $l->getMoFile() . "<br>";
|
||||
echo "CONTENT PATH: " . $l->getBaseContentPath() . "<br>";
|
||||
echo "DOMAIN PATH: " . $l->getTextDomain($domain) . "<br>";
|
||||
echo "BASE PATH: " . $l->getBaseLocalePath() . "<br>";
|
||||
echo "LOAD ERROR: " . $l->getLoadError() . "<br>";
|
||||
echo "INPUT TEST: " . $string . " => " . $l->__($string) . "<br>";
|
||||
echo "TROUGH LOAD: " . $l->getTranslatorClass()->gettext($string) . "<br>";
|
||||
$single_string = 'single';
|
||||
$multi_string = 'multi';
|
||||
for ($n = 0; $n <= 3; $n++) {
|
||||
echo "MULTI TEST $n: " . $single_string . "/" . $multi_string . " => "
|
||||
. $l->__n($single_string, $multi_string, $n) . "<br>";
|
||||
}
|
||||
$context = "month name";
|
||||
$context_string = "May";
|
||||
echo "CONTEXT TRANSLATION: " . $context_string . " => " . $l->__p($context, $context_string) . "<br>";
|
||||
$single_string = 'single';
|
||||
$multi_string = 'multi';
|
||||
for ($n = 0; $n <= 3; $n++) {
|
||||
echo "CONTEXT MULTI TEST $n: " . $single_string . "/" . $multi_string . " => "
|
||||
. $l->__np($context, $single_string, $multi_string, $n) . "<br>";
|
||||
}
|
||||
// change domain
|
||||
$domain = 'frontend';
|
||||
$l->getTranslator('', $domain, $path);
|
||||
echo "*<br>";
|
||||
echo "LANGUAGE WANT/SET: " . $lang . '/' . $l->getLocale() . "<br>";
|
||||
echo "DOMAIN WANT/SET: " . $domain . '/' . $l->getDomain() . "<br>";
|
||||
echo "LANGUAGE FILE: " . $l->getMoFile() . "<br>";
|
||||
echo "CONTENT PATH: " . $l->getBaseContentPath() . "<br>";
|
||||
echo "DOMAIN PATH: " . $l->getTextDomain($domain) . "<br>";
|
||||
echo "BASE PATH: " . $l->getBaseLocalePath() . "<br>";
|
||||
echo "LOAD ERROR: " . $l->getLoadError() . "<br>";
|
||||
echo "INPUT TEST: " . $string . " => " . $l->__($string) . "<br>";
|
||||
echo "TROUGH LOAD: " . $l->getTranslatorClass()->gettext($string) . "<br>";
|
||||
// change language short type
|
||||
$lang = 'en';
|
||||
$domain = 'admin';
|
||||
$l->getTranslator($lang, $domain, $path);
|
||||
echo "*<br>";
|
||||
echo "LANGUAGE WANT/SET: " . $lang . '/' . $l->getLocale() . "<br>";
|
||||
echo "DOMAIN WANT/SET: " . $domain . '/' . $l->getDomain() . "<br>";
|
||||
echo "LANGUAGE FILE: " . $l->getMoFile() . "<br>";
|
||||
echo "CONTENT PATH: " . $l->getBaseContentPath() . "<br>";
|
||||
echo "DOMAIN PATH: " . $l->getTextDomain($domain) . "<br>";
|
||||
echo "BASE PATH: " . $l->getBaseLocalePath() . "<br>";
|
||||
echo "LOAD ERROR: " . $l->getLoadError() . "<br>";
|
||||
echo "INPUT TEST: " . $string . " => " . $l->__($string) . "<br>";
|
||||
echo "TROUGH LOAD: " . $l->getTranslatorClass()->gettext($string) . "<br>";
|
||||
// chang to wrong language
|
||||
$lang = 'tr';
|
||||
$l->getTranslator($lang, $domain, $path);
|
||||
echo "*<br>";
|
||||
echo "LANGUAGE WANT/SET: " . $lang . '/' . $l->getLocale() . "<br>";
|
||||
echo "DOMAIN WANT/SET: " . $domain . '/' . $l->getDomain() . "<br>";
|
||||
echo "LANGUAGE FILE: " . $l->getMoFile() . "<br>";
|
||||
echo "CONTENT PATH: " . $l->getBaseContentPath() . "<br>";
|
||||
echo "DOMAIN PATH: " . $l->getTextDomain($domain) . "<br>";
|
||||
echo "BASE PATH: " . $l->getBaseLocalePath() . "<br>";
|
||||
echo "LOAD ERROR: " . $l->getLoadError() . "<br>";
|
||||
echo "INPUT TEST: " . $string . " => " . $l->__($string) . "<br>";
|
||||
echo "TROUGH LOAD: " . $l->getTranslatorClass()->gettext($string) . "<br>";
|
||||
|
||||
$lang = 'en';
|
||||
$domain = 'admin';
|
||||
echo "<br><b>STATIC TYPE TEST</b><br>";
|
||||
// static tests from l10n_load
|
||||
L10n::getInstance()->setLocale($lang);
|
||||
echo "SET LOCALE: " . L10n::getInstance()->getLocale() . "<br>";
|
||||
L10n::getInstance()->setDomain($domain);
|
||||
echo "SET DOMAIN: " . L10n::getInstance()->getDomain() . "<br>";
|
||||
L10n::getInstance()->setTextDomain($domain, $path);
|
||||
echo "SET TEXT DOMAIN: " . L10n::getInstance()->getTextDomain($domain) . "<br>";
|
||||
// null call __bind_textdomain_codeset
|
||||
echo "INPUT TEST: " . $string . " => " . L10n::getInstance()->getTranslator()->gettext($string) . "<br>";
|
||||
|
||||
echo "<br><b>FUNCTIONS</b><br>";
|
||||
// real statisc test
|
||||
L10n::loadFunctions();
|
||||
$locale = 'ja';
|
||||
_setlocale(LC_MESSAGES, $locale);
|
||||
_textdomain($domain);
|
||||
_bindtextdomain($domain, $path);
|
||||
_bind_textdomain_codeset($domain, $encoding);
|
||||
echo "INPUT TEST $locale: " . $string . " => " . __($string) . "<br>";
|
||||
$single_string = 'single';
|
||||
$multi_string = 'multi';
|
||||
for ($n = 0; $n <= 3; $n++) {
|
||||
echo "MULTI TEST $n: " . $single_string . "/" . $multi_string . " => "
|
||||
. _ngettext($single_string, $multi_string, $n) . "<br>";
|
||||
}
|
||||
|
||||
$locale = 'en_US.UTF-8';
|
||||
_setlocale(LC_MESSAGES, $locale);
|
||||
_textdomain($domain);
|
||||
_bindtextdomain($domain, $path);
|
||||
_bind_textdomain_codeset($domain, $encoding);
|
||||
echo "INPUT TEST $locale: " . $string . " => " . __($string) . "<br>";
|
||||
$single_string = 'single';
|
||||
$multi_string = 'multi';
|
||||
for ($n = 0; $n <= 3; $n++) {
|
||||
echo "MULTI TEST $n: " . $single_string . "/" . $multi_string . " => "
|
||||
. _ngettext($single_string, $multi_string, $n) . "<br>";
|
||||
}
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
63
www/admin/class_test.login.php
Normal file
63
www/admin/class_test.login.php
Normal file
@@ -0,0 +1,63 @@
|
||||
<?php // phpcs:ignore warning
|
||||
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-login';
|
||||
// init login & backend class
|
||||
$log = new CoreLibs\Debug\Logging([
|
||||
'log_folder' => BASE . LOG,
|
||||
'file_id' => $LOG_FILE_ID,
|
||||
// add file date
|
||||
'print_file_date' => true,
|
||||
// set debug and print flags
|
||||
'debug_all' => $DEBUG_ALL ?? false,
|
||||
'echo_all' => $ECHO_ALL ?? false,
|
||||
'print_all' => $PRINT_ALL ?? false,
|
||||
]);
|
||||
$db = new CoreLibs\DB\IO(DB_CONFIG, $log);
|
||||
$login = new CoreLibs\ACL\Login($db, $log);
|
||||
ob_end_flush();
|
||||
|
||||
$PAGE_NAME = 'TEST CLASS: LOGIN';
|
||||
print "<!DOCTYPE html>";
|
||||
print "<html><head><title>" . $PAGE_NAME . "</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
||||
|
||||
echo "CHECK PERMISSION: " . ($login->loginCheckPermissions() ? 'OK' : 'BAD') . "<br>";
|
||||
echo "IS ADMIN: " . ($login->loginIsAdmin() ? 'OK' : 'BAD') . "<br>";
|
||||
echo "MIN ACCESS BASE: " . ($login->loginCheckAccessBase('admin') ? 'OK' : 'BAD') . "<br>";
|
||||
echo "MIN ACCESS PAGE: " . ($login->loginCheckAccessPage('admin') ? 'OK' : 'BAD') . "<br>";
|
||||
|
||||
echo "ACL: " . \CoreLibs\Debug\Support::printAr($login->loginGetAcl()) . "<br>";
|
||||
echo "ACL (MIN): " . \CoreLibs\Debug\Support::printAr($login->loginGetAcl()['min']) . "<br>";
|
||||
|
||||
// error message
|
||||
print $log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
71
www/admin/class_test.math.php
Normal file
71
www/admin/class_test.math.php
Normal file
@@ -0,0 +1,71 @@
|
||||
<?php // phpcs:ignore warning
|
||||
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-math';
|
||||
ob_end_flush();
|
||||
|
||||
$log = new CoreLibs\Debug\Logging([
|
||||
'log_folder' => BASE . LOG,
|
||||
'file_id' => $LOG_FILE_ID,
|
||||
// add file date
|
||||
'print_file_date' => true,
|
||||
// set debug and print flags
|
||||
'debug_all' => $DEBUG_ALL ?? false,
|
||||
'echo_all' => $ECHO_ALL ?? false,
|
||||
'print_all' => $PRINT_ALL ?? false,
|
||||
]);
|
||||
$_math = new CoreLibs\Convert\Math();
|
||||
$math_class = 'CoreLibs\Convert\Math';
|
||||
|
||||
// define a list of from to color sets for conversion test
|
||||
|
||||
$PAGE_NAME = 'TEST CLASS: MATH';
|
||||
print "<!DOCTYPE html>";
|
||||
print "<html><head><title>" . $PAGE_NAME . "</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
||||
|
||||
print "FCEIL: " . $_math->fceil(5.1234567890, 5) . "<br>";
|
||||
print "FLOORP: " . $_math->floorp(5123456, -3) . "<br>";
|
||||
print "FLOORP: " . $_math->floorp(5123456, -10) . "<br>";
|
||||
print "INITNUMERIC: " . $_math->initNumeric('123') . "<br>";
|
||||
|
||||
print "S-FCEIL: " . $math_class::fceil(5.1234567890, 5) . "<br>";
|
||||
print "S-FLOORP: " . $math_class::floorp(5123456, -3) . "<br>";
|
||||
print "S-INITNUMERIC: " . $math_class::initNumeric(123) . "<br>";
|
||||
print "S-INITNUMERIC: " . $math_class::initNumeric(123.456) . "<br>";
|
||||
print "S-INITNUMERIC: " . $math_class::initNumeric('123') . "<br>";
|
||||
print "S-INITNUMERIC: " . $math_class::initNumeric('123.456') . "<br>";
|
||||
|
||||
// error message
|
||||
print $log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
73
www/admin/class_test.mime.php
Normal file
73
www/admin/class_test.mime.php
Normal file
@@ -0,0 +1,73 @@
|
||||
<?php // phpcs:ignore warning
|
||||
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-mime';
|
||||
ob_end_flush();
|
||||
|
||||
$log = new CoreLibs\Debug\Logging([
|
||||
'log_folder' => BASE . LOG,
|
||||
'file_id' => $LOG_FILE_ID,
|
||||
// add file date
|
||||
'print_file_date' => true,
|
||||
// set debug and print flags
|
||||
'debug_all' => $DEBUG_ALL ?? false,
|
||||
'echo_all' => $ECHO_ALL ?? false,
|
||||
'print_all' => $PRINT_ALL ?? false,
|
||||
]);
|
||||
$_mime = new CoreLibs\Convert\MimeAppName();
|
||||
|
||||
$PAGE_NAME = 'TEST CLASS: MIME';
|
||||
print "<!DOCTYPE html>";
|
||||
print "<html><head><title>" . $PAGE_NAME . "</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
||||
|
||||
$mime = 'application/illustrator';
|
||||
print "MIME $mime: " . $_mime->mimeGetAppName($mime) . "<br>";
|
||||
$mime = 'fake/mime';
|
||||
$_mime->mimeSetAppName($mime, 'This is a fake mime');
|
||||
print "MIME $mime: " . $_mime->mimeGetAppName($mime) . "<br>";
|
||||
|
||||
// mime test
|
||||
$mime = 'application/vnd.ms-excel';
|
||||
print "App for mime $mime: " . $_mime->mimeGetAppName($mime) . "<br>";
|
||||
$_mime->mimeSetAppName($mime, 'Microsoft (better) Excel');
|
||||
print "App for mime changed $mime: " . $_mime->mimeGetAppName($mime) . "<br>";
|
||||
|
||||
// static call test
|
||||
$mime = 'application/x-indesign';
|
||||
print "S::App for mime $mime: " . \CoreLibs\Convert\MimeAppName::mimeGetAppName($mime) . "<br>";
|
||||
$mime = 'application/vnd.ms-excel';
|
||||
print "S::App for mime $mime: " . \CoreLibs\Convert\MimeAppName::mimeGetAppName($mime) . "<br>";
|
||||
|
||||
print $log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
88
www/admin/class_test.output.form.php
Normal file
88
www/admin/class_test.output.form.php
Normal file
@@ -0,0 +1,88 @@
|
||||
<?php // phpcs:ignore warning
|
||||
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = false; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = true;
|
||||
$PRINT_ALL = true;
|
||||
$DB_DEBUG = true;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', true);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// override ECHO ALL FALSE
|
||||
$ECHO_ALL = true;
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-form';
|
||||
ob_end_flush();
|
||||
|
||||
// define an array for page use
|
||||
$table_arrays = [];
|
||||
$table_arrays[\CoreLibs\Get\System::getPageName(1)] = [
|
||||
// form fields mtaching up with db fields
|
||||
'table_array' => [
|
||||
],
|
||||
// laod query
|
||||
'load_query' => '',
|
||||
// database table to load from
|
||||
'table_name' => '',
|
||||
// for load dro pdown, format output
|
||||
'show_fields' => [
|
||||
[
|
||||
'name' => 'name'
|
||||
],
|
||||
[
|
||||
'name' => 'enabled',
|
||||
'binary' => ['Yes', 'No'],
|
||||
'before_value' => 'Enabled: '
|
||||
],
|
||||
],
|
||||
// a multi reference entry
|
||||
'element_list' => [
|
||||
]
|
||||
];
|
||||
|
||||
$log = new CoreLibs\Debug\Logging([
|
||||
'log_folder' => BASE . LOG,
|
||||
'file_id' => $LOG_FILE_ID,
|
||||
// add file date
|
||||
'print_file_date' => true,
|
||||
// set debug and print flags
|
||||
'debug_all' => $DEBUG_ALL ?? false,
|
||||
'echo_all' => $ECHO_ALL ?? false,
|
||||
'print_all' => $PRINT_ALL ?? false,
|
||||
]);
|
||||
$form = new CoreLibs\Output\Form\Generate(DB_CONFIG, $log);
|
||||
|
||||
$PAGE_NAME = 'TEST CLASS: FORM GENERATE';
|
||||
print "<!DOCTYPE html>";
|
||||
print "<html><head><title>" . $PAGE_NAME . "</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
||||
|
||||
print "MOBILE PHONE: " . $form->mobile_phone . "<br>";
|
||||
// sets table array to include
|
||||
print "MY PAGE NAME: " . $form->my_page_name . "<br>";
|
||||
|
||||
// error message
|
||||
print $log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
75
www/admin/class_test.password.php
Normal file
75
www/admin/class_test.password.php
Normal file
@@ -0,0 +1,75 @@
|
||||
<?php // phpcs:ignore warning
|
||||
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-pass';
|
||||
ob_end_flush();
|
||||
|
||||
use CoreLibs\Check\Password as PwdChk;
|
||||
|
||||
$log = new CoreLibs\Debug\Logging([
|
||||
'log_folder' => BASE . LOG,
|
||||
'file_id' => $LOG_FILE_ID,
|
||||
// add file date
|
||||
'print_file_date' => true,
|
||||
// set debug and print flags
|
||||
'debug_all' => $DEBUG_ALL ?? false,
|
||||
'echo_all' => $ECHO_ALL ?? false,
|
||||
'print_all' => $PRINT_ALL ?? false,
|
||||
]);
|
||||
$_password = new CoreLibs\Check\Password();
|
||||
$password_class = 'CoreLibs\Check\Password';
|
||||
|
||||
// define a list of from to color sets for conversion test
|
||||
|
||||
$PAGE_NAME = 'TEST CLASS: PASSWORD';
|
||||
print "<!DOCTYPE html>";
|
||||
print "<html><head><title>" . $PAGE_NAME . "</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
||||
|
||||
$password = 'something1234';
|
||||
$enc_password = $_password->passwordSet($password);
|
||||
print "PASSWORD: $password: " . $enc_password . "<br>";
|
||||
print "PASSWORD VERIFY: " . (string)$_password->passwordVerify($password, $enc_password) . "<br>";
|
||||
print "PASSWORD REHASH: " . (string)$_password->passwordRehashCheck($enc_password) . "<br>";
|
||||
// static verify
|
||||
$password = 'othername7890';
|
||||
$enc_password = $password_class::passwordSet($password);
|
||||
print "PASSWORD: $password: " . $enc_password . "<br>";
|
||||
print "S-PASSWORD VERIFY: " . (string)$password_class::passwordVerify($password, $enc_password) . "<br>";
|
||||
print "PASSWORD REHASH: " . (string)$password_class::passwordRehashCheck($enc_password) . "<br>";
|
||||
// direct static
|
||||
print "S::PASSWORD VERFIY: " . (string)PwdChk::passwordVerify($password, $enc_password) . "<br>";
|
||||
|
||||
// error message
|
||||
print $log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
@@ -1,12 +1,15 @@
|
||||
<?php declare(strict_types=1);
|
||||
<?php // phpcs:ignore warning
|
||||
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
declare(strict_types=1);
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = false; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = true;
|
||||
$PRINT_ALL = true;
|
||||
$DB_DEBUG = true;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
@@ -26,375 +29,141 @@ if (!defined('SET_SESSION_NAME')) {
|
||||
$LOG_FILE_ID = 'classTest';
|
||||
|
||||
// init login & backend class
|
||||
$login = new CoreLibs\ACL\Login(DB_CONFIG);
|
||||
$basic = new CoreLibs\Admin\Backend(DB_CONFIG);
|
||||
$basic->dbInfo(true);
|
||||
$log = new CoreLibs\Debug\Logging([
|
||||
'log_folder' => BASE . LOG,
|
||||
'file_id' => $LOG_FILE_ID,
|
||||
// add file date
|
||||
'print_file_date' => true,
|
||||
// set debug and print flags
|
||||
'debug_all' => $DEBUG_ALL ?? false,
|
||||
'echo_all' => $ECHO_ALL ?? false,
|
||||
'print_all' => $PRINT_ALL ?? false,
|
||||
]);
|
||||
$db = new CoreLibs\DB\IO(DB_CONFIG, $log);
|
||||
$login = new CoreLibs\ACL\Login($db, $log);
|
||||
$locale = \CoreLibs\Language\GetLocale::setLocale();
|
||||
$l10n = new \CoreLibs\Language\L10n(
|
||||
$locale['locale'],
|
||||
$locale['domain'],
|
||||
$locale['path'],
|
||||
);
|
||||
$backend = new CoreLibs\Admin\Backend($db, $log, $l10n, $locale);
|
||||
$backend->db->dbInfo(true);
|
||||
ob_end_flush();
|
||||
|
||||
echo "DB_CONFIG_SET constant: <pre>".print_r(DB_CONFIG, true)."</pre><br>";
|
||||
print "<!DOCTYPE html>";
|
||||
print "<html><head><title>TEST CLASS</title><head>";
|
||||
print "<body>";
|
||||
|
||||
$basic->hrRunningTime();
|
||||
$basic->runningTime();
|
||||
echo "RANDOM KEY [50]: ".$basic->randomKeyGen(50)."<br>";
|
||||
echo "TIMED [hr]: ".$basic->hrRunningTime()."<br>";
|
||||
echo "TIMED [def]: ".$basic->runningTime()."<br>";
|
||||
echo "TIMED [string]: ".$basic->runningtime_string."<br>";
|
||||
$basic->hrRunningTime();
|
||||
echo "RANDOM KEY [default]: ".$basic->randomKeyGen()."<br>";
|
||||
echo "TIMED [hr]: ".$basic->hrRunningTime()."<br>";
|
||||
|
||||
// color
|
||||
print "COLOR: -1, -1, -1: ".$basic->rgb2hex(-1, -1, -1)."<br>";
|
||||
print "COLOR: 10, 20, 30: ".$basic->rgb2hex(10, 20, 30)."<br>";
|
||||
print '<div><a href="class_test.db.php">Class Test: DB</a></div>';
|
||||
print '<div><a href="class_test.colors.php">Class Test: COLORS</a></div>';
|
||||
print '<div><a href="class_test.mime.php">Class Test: MIME</a></div>';
|
||||
print '<div><a href="class_test.json.php">Class Test: JSON</a></div>';
|
||||
print '<div><a href="class_test.token.php">Class Test: FORM TOKEN</a></div>';
|
||||
print '<div><a href="class_test.password.php">Class Test: PASSWORD</a></div>';
|
||||
print '<div><a href="class_test.math.php">Class Test: MATH</a></div>';
|
||||
print '<div><a href="class_test.html.php">Class Test: HTML/ELEMENTS</a></div>';
|
||||
print '<div><a href="class_test.email.php">Class Test: EMAIL</a></div>';
|
||||
print '<div><a href="class_test.uids.php">Class Test: UIDS</a></div>';
|
||||
print '<div><a href="class_test.phpv.php">Class Test: PHP VERSION</a></div>';
|
||||
print '<div><a href="class_test.hash.php">Class Test: HASH</a></div>';
|
||||
print '<div><a href="class_test.encoding.php">Class Test: ENCODING (CHECK/CONVERT/MIME)</a></div>';
|
||||
print '<div><a href="class_test.image.php">Class Test: IMAGE</a></div>';
|
||||
print '<div><a href="class_test.byte.php">Class Test: BYTE CONVERT</a></div>';
|
||||
print '<div><a href="class_test.datetime.php">Class Test: DATE/TIME</a></div>';
|
||||
print '<div><a href="class_test.array.php">Class Test: ARRAY HANDLER</a></div>';
|
||||
print '<div><a href="class_test.file.php">Class Test: FILE</a></div>';
|
||||
print '<div><a href="class_test.randomkey.php">Class Test: RANDOM KEY</a></div>';
|
||||
print '<div><a href="class_test.system.php">Class Test: SYSTEM</a></div>';
|
||||
print '<div><a href="class_test.readenvfile.php">Class Test: READ ENV FILE</a></div>';
|
||||
print '<div><a href="class_test.runningtime.php">Class Test: RUNNING TIME</a></div>';
|
||||
print '<div><a href="class_test.debug.php">Class Test: DEBUG</a></div>';
|
||||
print '<div><a href="class_test.output.form.php">Class Test: OUTPUT FORM</a></div>';
|
||||
print '<div><a href="class_test.admin.backend.php">Class Test: BACKEND ADMIN CLASS</a></div>';
|
||||
print '<div><a href="class_test.lang.php">Class Test: LANG/L10n</a></div>';
|
||||
print '<div><a href="class_test.session.php">Class Test: SESSION</a></div>';
|
||||
print '<div><a href="class_test.smarty.php">Class Test: SMARTY</a></div>';
|
||||
print '<div><a href="class_test.login.php">Class Test: LOGIN</a></div>';
|
||||
print '<div><a href="class_test.autoloader.php">Class Test: AUTOLOADER</a></div>';
|
||||
print '<div><a href="class_test.config.link.php">Class Test: CONFIG LINK</a></div>';
|
||||
print '<div><a href="class_test.config.direct.php">Class Test: CONFIG DIRECT</a></div>';
|
||||
print '<div><a href="subfolder/class_test.config.direct.php">Class Test: CONFIG DIRECT SUB</a></div>';
|
||||
|
||||
print "<hr>";
|
||||
print "L: " . CoreLibs\Debug\Support::printAr($locale) . "<br>";
|
||||
// print all _ENV vars set
|
||||
print "<div>READ _ENV ARRAY:</div>";
|
||||
print CoreLibs\Debug\Support::printAr(array_map('htmlentities', $_ENV));
|
||||
// set + check edit access id
|
||||
$edit_access_id = 3;
|
||||
if (is_object($login) && isset($login->acl['unit'])) {
|
||||
print "ACL UNIT: ".print_r(array_keys($login->acl['unit']), true)."<br>";
|
||||
print "ACCESS CHECK: ".(string)$login->loginCheckEditAccess($edit_access_id)."<br>";
|
||||
print "ACL UNIT: " . print_r(array_keys($login->acl['unit']), true) . "<br>";
|
||||
print "ACCESS CHECK: " . (string)$login->loginCheckEditAccess($edit_access_id) . "<br>";
|
||||
if ($login->loginCheckEditAccess($edit_access_id)) {
|
||||
$basic->edit_access_id = $edit_access_id;
|
||||
$backend->edit_access_id = $edit_access_id;
|
||||
} else {
|
||||
$basic->edit_access_id = $login->acl['unit_id'];
|
||||
$backend->edit_access_id = $login->acl['unit_id'];
|
||||
}
|
||||
} else {
|
||||
print "Something went wrong with the login<br>";
|
||||
}
|
||||
|
||||
// $basic->debug('SESSION', $basic->print_ar($_SESSION));
|
||||
// $backend->log->debug('SESSION', \CoreLibs\Debug\Support::printAr($_SESSION));
|
||||
|
||||
print "<html><head><title>TEST CLASS</title><head>";
|
||||
print "<body>";
|
||||
print '<form method="post" name="loginlogout">';
|
||||
print '<a href="javascript:document.loginlogout.login_logout.value=\'Logou\';document.loginlogout.submit();">Logout</a>';
|
||||
print '<a href="javascript:document.loginlogout.login_logout.value=\'Logou\';'
|
||||
. 'document.loginlogout.submit();">Logout</a>';
|
||||
print '<input type="hidden" name="login_logout" value="">';
|
||||
print '</form>';
|
||||
|
||||
// print the debug core vars
|
||||
print "DEBUG OUT: ".$basic->debug_output."<br>";
|
||||
print "ECHO OUT: ".$basic->echo_output."<br>";
|
||||
print "PRINT OUT: ".$basic->print_output."<br>";
|
||||
print "NOT DEBUG OUT: ".$basic->debug_output_not."<br>";
|
||||
print "NOT ECHO OUT: ".$basic->echo_output_not."<br>";
|
||||
print "NOT PRINT OUT: ".$basic->print_output_not."<br>";
|
||||
print "DEBUG OUT ALL: ".$basic->debug_output_all."<br>";
|
||||
print "ECHO OUT ALL: ".$basic->echo_output_all."<br>";
|
||||
print "PRINT OUT ALL: ".$basic->print_output_all."<br>";
|
||||
foreach (['on', 'off'] as $flag) {
|
||||
foreach (['debug', 'echo', 'print'] as $type) {
|
||||
$prefix = $flag == 'off' ? 'NOT ' : '';
|
||||
print $prefix . strtoupper($type) . ' OUT: '
|
||||
. \CoreLibs\Debug\Support::printAr($backend->log->getLogLevel($type, $flag)) . '<br>';
|
||||
}
|
||||
}
|
||||
foreach (['debug', 'echo', 'print'] as $type) {
|
||||
print strtoupper($type) . ' OUT ALL: ' . $backend->log->getLogLevelAll($type) . '<br>';
|
||||
}
|
||||
|
||||
print "CALLER BACKTRACE: ".$basic->getCallerMethod()."<br>";
|
||||
$basic->debug('SOME MARK', 'Some error output');
|
||||
$log->debug('SOME MARK', 'Some error output');
|
||||
|
||||
print "EDIT ACCESS ID: ".$basic->edit_access_id."<br>";
|
||||
// INTERNAL SET
|
||||
print "EDIT ACCESS ID: " . $backend->edit_access_id . "<br>";
|
||||
if (is_object($login)) {
|
||||
// print "ACL: <br>".$basic->print_ar($login->acl)."<br>";
|
||||
$basic->debug('ACL', "ACL: ".$basic->printAr($login->acl));
|
||||
// print "DEFAULT ACL: <br>".$basic->print_ar($login->default_acl_list)."<br>";
|
||||
// print "DEFAULT ACL: <br>".$basic->print_ar($login->default_acl_list)."<br>";
|
||||
// $result = array_flip(array_filter(array_flip($login->default_acl_list), function ($key) { if (is_numeric($key)) return $key; }));
|
||||
// print "DEFAULT ACL: <br>".$basic->print_ar($result)."<br>";
|
||||
// print "ACL: <br>".$backend->print_ar($login->acl)."<br>";
|
||||
$log->debug('ACL', "ACL: " . \CoreLibs\Debug\Support::printAr($login->acl));
|
||||
// print "DEFAULT ACL: <br>".$backend->print_ar($login->default_acl_list)."<br>";
|
||||
// print "DEFAULT ACL: <br>".$backend->print_ar($login->default_acl_list)."<br>";
|
||||
// $result = array_flip(
|
||||
// array_filter(
|
||||
// array_flip($login->default_acl_list),
|
||||
// function ($key) {
|
||||
// if (is_numeric($key)) {
|
||||
// return $key;
|
||||
// }
|
||||
// }
|
||||
// )
|
||||
// );
|
||||
// print "DEFAULT ACL: <br>".$backend->print_ar($result)."<br>";
|
||||
// DEPRICATED CALL
|
||||
// $basic->adbSetACL($login->acl);
|
||||
// $backend->adbSetACL($login->acl);
|
||||
}
|
||||
|
||||
// DB client encoding
|
||||
print "DB Client encoding: ".$basic->dbGetEncoding()."<br>";
|
||||
print "THIS HOST: " . HOST_NAME . ", with PROTOCOL: " . HOST_PROTOCOL . " is running SSL: " . HOST_SSL . "<br>";
|
||||
print "DIR: " . DIR . "<br>";
|
||||
print "BASE: " . BASE . "<br>";
|
||||
print "ROOT: " . ROOT . "<br>";
|
||||
print "HOST: " . HOST_NAME . " => DB HOST: " . DB_CONFIG_NAME . " => " . print_r(DB_CONFIG, true) . "<br>";
|
||||
|
||||
while ($res = $basic->dbReturn("SELECT * FROM max_test", 0, true)) {
|
||||
print "TIME: ".$res['time']."<br>";
|
||||
}
|
||||
print "CACHED DATA: <pre>".print_r($basic->cursor_ext, true)."</pre><br>";
|
||||
while ($res = $basic->dbReturn("SELECT * FROM max_test")) {
|
||||
print "[CACHED] TIME: ".$res['time']."<br>";
|
||||
}
|
||||
|
||||
print "<pre>";
|
||||
$status = $basic->dbExec("INSERT INTO foo (test) VALUES ('FOO TEST ".time()."') RETURNING test");
|
||||
print "DIRECT INSERT STATUS: $status | "
|
||||
."PRIMARY KEY: ".$basic->dbGetInsertPK()." | "
|
||||
."RETURNING EXT: ".print_r($basic->dbGetReturningExt(), true)." | "
|
||||
."RETURNING ARRAY: ".print_r($basic->dbGetReturningArray(), true)."<br>";
|
||||
|
||||
// should throw deprecated error
|
||||
// $basic->getReturningExt();
|
||||
print "DIRECT INSERT PREVIOUS INSERTED: ".print_r($basic->dbReturnRow("SELECT foo_id, test FROM foo WHERE foo_id = ".$basic->dbGetInsertPK()), true)."<br>";
|
||||
$basic->dbPrepare("ins_foo", "INSERT INTO foo (test) VALUES ($1)");
|
||||
$status = $basic->dbExecute("ins_foo", array('BAR TEST '.time()));
|
||||
print "PREPARE INSERT STATUS: $status | "
|
||||
."PRIMARY KEY: ".$basic->dbGetInsertPK()." | "
|
||||
."RETURNING EXT: ".print_r($basic->dbGetReturningExt(), true)." | "
|
||||
."RETURNING RETURN: ".print_r($basic->dbGetReturningArray(), true)."<br>";
|
||||
|
||||
print "PREPARE INSERT PREVIOUS INSERTED: ".print_r($basic->dbReturnRow("SELECT foo_id, test FROM foo WHERE foo_id = ".$basic->dbGetInsertPK()), true)."<br>";
|
||||
// returning test with multiple entries
|
||||
// $status = $basic->db_exec("INSERT INTO foo (test) values ('BAR 1 ".time()."'), ('BAR 2 ".time()."'), ('BAR 3 ".time()."') RETURNING foo_id");
|
||||
$status = $basic->dbExec("INSERT INTO foo (test) values ('BAR 1 ".time()."'), ('BAR 2 ".time()."'), ('BAR 3 ".time()."') RETURNING foo_id, test");
|
||||
print "DIRECT MULTIPLE INSERT STATUS: $status | "
|
||||
."PRIMARY KEYS: ".print_r($basic->dbGetInsertPK(), true)." | "
|
||||
."RETURNING EXT: ".print_r($basic->dbGetReturningExt(), true)." | "
|
||||
."RETURNING ARRAY: ".print_r($basic->dbGetReturningArray(), true)."<br>";
|
||||
|
||||
// no returning, but not needed ;
|
||||
$status = $basic->dbExec("INSERT INTO foo (test) VALUES ('FOO; TEST ".time()."');");
|
||||
print "DIRECT INSERT STATUS: $status | "
|
||||
."PRIMARY KEY: ".$basic->dbGetInsertPK()." | "
|
||||
."RETURNING EXT: ".print_r($basic->dbGetReturningExt(), true)." | "
|
||||
."RETURNING ARRAY: ".print_r($basic->dbGetReturningArray(), true)."<br>";
|
||||
|
||||
// UPDATE WITH RETURNING
|
||||
$status = $basic->dbExec("UPDATE foo SET test = 'SOMETHING DIFFERENT' WHERE foo_id = 3688452 RETURNING test");
|
||||
print "UPDATE STATUS: $status | "
|
||||
."RETURNING EXT: ".print_r($basic->dbGetReturningExt(), true)." | "
|
||||
."RETURNING ARRAY: ".print_r($basic->dbGetReturningArray(), true)."<br>";
|
||||
print "</pre>";
|
||||
|
||||
// REEAD PREPARE
|
||||
if ($basic->dbPrepare('sel_foo', "SELECT foo_id, test, some_bool, string_a, number_a, number_a_numeric, some_time FROM foo ORDER BY foo_id DESC LIMIT 5") === false) {
|
||||
print "Error in sel_foo prepare<br>";
|
||||
} else {
|
||||
$max_rows = 6;
|
||||
// do not run this in dbFetchArray directly as
|
||||
// dbFetchArray(dbExecute(...))
|
||||
// this will end in an endless loop
|
||||
$cursor = $basic->dbExecute('sel_foo', []);
|
||||
$i = 1;
|
||||
while (($res = $basic->dbFetchArray($cursor, true)) !== false) {
|
||||
print "DB PREP EXEC FETCH ARR: ".$i.": <pre>".print_r($res, true)."</pre><br>";
|
||||
$i ++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# db write class test
|
||||
$table = 'foo';
|
||||
print "TABLE META DATA: ".$basic->printAr($basic->dbShowTableMetaData($table))."<br>";
|
||||
$primary_key = ''; # unset
|
||||
$db_write_table = array('test', 'string_a', 'number_a', 'some_bool');
|
||||
// $db_write_table = array('test');
|
||||
$object_fields_not_touch = array();
|
||||
$object_fields_not_update = array();
|
||||
$data = array('test' => 'BOOL TEST SOMETHING '.time(), 'string_a' => 'SOME TEXT', 'number_a' => 5);
|
||||
$primary_key = $basic->dbWriteDataExt($db_write_table, $primary_key, $table, $object_fields_not_touch, $object_fields_not_update, $data);
|
||||
print "Wrote to DB tabel $table and got primary key $primary_key<br>";
|
||||
$data = array('test' => 'BOOL TEST ON '.time(), 'string_a' => '', 'number_a' => 0, 'some_bool' => 1);
|
||||
$primary_key = $basic->dbWriteDataExt($db_write_table, $primary_key, $table, $object_fields_not_touch, $object_fields_not_update, $data);
|
||||
print "Wrote to DB tabel $table and got primary key $primary_key<br>";
|
||||
$data = array('test' => 'BOOL TEST OFF '.time(), 'string_a' => null, 'number_a' => null, 'some_bool' => 0);
|
||||
$primary_key = $basic->dbWriteDataExt($db_write_table, $primary_key, $table, $object_fields_not_touch, $object_fields_not_update, $data);
|
||||
print "Wrote to DB tabel $table and got primary key $primary_key<br>";
|
||||
$data = array('test' => 'BOOL TEST UNSET '.time());
|
||||
$primary_key = $basic->dbWriteDataExt($db_write_table, $primary_key, $table, $object_fields_not_touch, $object_fields_not_update, $data);
|
||||
print "Wrote to DB tabel $table and got primary key $primary_key<br>";
|
||||
|
||||
// return Array Test
|
||||
$query = "SELECT type, sdate, integer FROM foobar";
|
||||
$data = $basic->dbReturnArray($query, true);
|
||||
print "Full foobar list: <br><pre>".print_r($data, true)."</pre><br>";
|
||||
|
||||
# async test queries
|
||||
/* $basic->dbExecAsync("SELECT test FROM foo, (SELECT pg_sleep(10)) as sub WHERE foo_id IN (27, 50, 67, 44, 10)");
|
||||
echo "WAITING FOR ASYNC: ";
|
||||
$chars = array('|', '/', '-', '\\');
|
||||
while (($ret = $basic->dbCheckAsync()) === true)
|
||||
{
|
||||
if ((list($_, $char) = each($chars)) === FALSE)
|
||||
{
|
||||
reset($chars);
|
||||
list($_, $char) = each($chars);
|
||||
}
|
||||
print $char;
|
||||
sleep(1);
|
||||
flush();
|
||||
}
|
||||
print "<br>END STATUS: ".$ret."<br>";
|
||||
// while ($res = $basic->dbFetchArray($ret))
|
||||
while ($res = $basic->dbFetchArray())
|
||||
{
|
||||
echo "RES: ".$res['test']."<br>";
|
||||
}
|
||||
# test async insert
|
||||
$basic->dbExecAsync("INSERT INTO foo (Test) VALUES ('ASYNC TEST ".time()."')");
|
||||
echo "WAITING FOR ASYNC INSERT: ";
|
||||
while (($ret = $basic->dbCheckAsync()) === true)
|
||||
{
|
||||
print ".";
|
||||
sleep(1);
|
||||
flush();
|
||||
}
|
||||
print "<br>END STATUS: ".$ret." | PK: ".$basic->insert_id."<br>";
|
||||
print "ASYNC PREVIOUS INSERTED: ".print_r($basic->dbReturnRow("SELECT foo_id, test FROM foo WHERE foo_id = ".$basic->insert_id), true)."<br>"; */
|
||||
|
||||
$to_db_version = '9.1.9';
|
||||
print "VERSION DB: ".$basic->dbVersion()."<br>";
|
||||
print "DB Version smaller $to_db_version: ".$basic->dbCompareVersion('<'.$to_db_version)."<br>";
|
||||
print "DB Version smaller than $to_db_version: ".$basic->dbCompareVersion('<='.$to_db_version)."<br>";
|
||||
print "DB Version equal $to_db_version: ".$basic->dbCompareVersion('='.$to_db_version)."<br>";
|
||||
print "DB Version bigger than $to_db_version: ".$basic->dbCompareVersion('>='.$to_db_version)."<br>";
|
||||
print "DB Version bigger $to_db_version: ".$basic->dbCompareVersion('>'.$to_db_version)."<br>";
|
||||
|
||||
/* $q = "SELECT FOO FRO BAR";
|
||||
// $q = "Select * from foo";
|
||||
$foo = $basic->dbExecAsync($q);
|
||||
print "[ERR] Query: ".$q."<br>";
|
||||
print "[ERR] RESOURCE: $foo<br>";
|
||||
while (($ret = $basic->dbCheckAsync()) === true)
|
||||
{
|
||||
print "[ERR]: $ret<br>";
|
||||
sleep(5);
|
||||
} */
|
||||
|
||||
// search path check
|
||||
$q = "SHOW search_path";
|
||||
$cursor = $basic->dbExec($q);
|
||||
$data = $basic->dbFetchArray($cursor)['search_path'];
|
||||
print "RETURN DATA FOR search_path: ".$data."<br>";
|
||||
// print "RETURN DATA FOR search_path: ".$basic->printAr($data)."<br>";
|
||||
// insert something into test.schema_test and see if we get the PK back
|
||||
$status = $basic->dbExec("INSERT INTO test.schema_test (contents, id) VALUES ('TIME: ".time()."', ".rand(1, 10).")");
|
||||
print "OTHER SCHEMA INSERT STATUS: ".$status." | PK NAME: ".$basic->pk_name.", PRIMARY KEY: ".$basic->insert_id."<br>";
|
||||
|
||||
print "<b>NULL TEST DB READ</b><br>";
|
||||
$q = "SELECT uid, null_varchar, null_int FROM test_null_data WHERE uid = 'A'";
|
||||
$res = $basic->dbReturnRow($q);
|
||||
var_dump($res);
|
||||
print "RES: ".$basic->printAr($res)."<br>";
|
||||
print "ISSET: ".isset($res['null_varchar'])."<br>";
|
||||
print "EMPTY: ".empty($res['null_varchar'])."<br>";
|
||||
|
||||
// data read test
|
||||
|
||||
// time string thest
|
||||
$timestamp = 5887998.33445;
|
||||
$time_string = $basic->timeStringFormat($timestamp);
|
||||
print "PLANE TIME STRING: ".$timestamp."<br>";
|
||||
print "TIME STRING TEST: ".$time_string."<br>";
|
||||
print "REVERSE TIME STRING: ".$basic->stringToTime($time_string)."<br>";
|
||||
if (round($timestamp, 4) == $basic->stringToTime($time_string)) {
|
||||
print "REVERSE TIME STRING MATCH<br>";
|
||||
} else {
|
||||
print "REVERSE TRIME STRING DO NOT MATCH<br>";
|
||||
}
|
||||
print "ZERO TIME STRING: ".$basic->timeStringFormat(0, true)."<br>";
|
||||
print "ZERO TIME STRING: ".$basic->timeStringFormat(0.0, true)."<br>";
|
||||
print "ZERO TIME STRING: ".$basic->timeStringFormat(1.005, true)."<br>";
|
||||
|
||||
echo "HTML ENT INT: ".$basic->htmlent(5)."<br>";
|
||||
echo "HTML ENT STRING: ".$basic->htmlent('5<<>')."<br>";
|
||||
echo "HTML ENT NULL: ".$basic->htmlent(null)."<br>";
|
||||
|
||||
// magic links test
|
||||
print $basic->magicLinks('user@bubu.at').'<br>';
|
||||
print $basic->magicLinks('http://test.com/foo/bar.php?foo=1').'<br>';
|
||||
|
||||
// compare date
|
||||
$date_1 = '2017/1/5';
|
||||
$date_2 = '2017-01-05';
|
||||
print "COMPARE DATE: ".$basic->compareDate($date_1, $date_2)."<br>";
|
||||
|
||||
// recursive array search
|
||||
$test_array = array(
|
||||
'foo' => 'bar',
|
||||
'input' => array(
|
||||
'element_a' => array(
|
||||
'type' => 'text'
|
||||
),
|
||||
'element_b' => array(
|
||||
'type' => 'email'
|
||||
),
|
||||
'element_c' => array(
|
||||
'type' => 'email'
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
echo "SOURCE ARRAY: ".$basic->printAr($test_array)."<br>";
|
||||
echo "FOUND ELEMENTS [base]: ".$basic->printAr($basic->arraySearchRecursive('email', $test_array, 'type'))."<br>";
|
||||
echo "FOUND ELEMENTS [input]: ".$basic->printAr($basic->arraySearchRecursive('email', $test_array['input'], 'type'))."<br>";
|
||||
|
||||
// *** BYTES TEST ***
|
||||
$bytes = array(
|
||||
-123123123,
|
||||
999999, // KB-1
|
||||
999999999, // MB-1
|
||||
254779258, // MB-n
|
||||
999999999999999, // TB-1
|
||||
588795544887632, // TB-n
|
||||
999999999999999999, // PB-1
|
||||
9223372036854775807, // MAX INT
|
||||
999999999999999999999, // EB-1
|
||||
);
|
||||
print "<b>BYTE FORMAT TESTS</b><br>";
|
||||
foreach ($bytes as $byte) {
|
||||
print '<div style="display: flex; border-bottom: 1px dashed gray;">';
|
||||
//
|
||||
print '<div style="width: 35%; text-align: right; padding-right: 2px;">';
|
||||
print "(".number_format($byte)."/".$byte.") bytes :";
|
||||
print '</div><div style="width: 40%;">';
|
||||
print $basic->humanReadableByteFormat($byte);
|
||||
print "</div>";
|
||||
//
|
||||
print "</div>";
|
||||
//
|
||||
print '<div style="display: flex; border-bottom: 1px dotted red;">';
|
||||
//
|
||||
print '<div style="width: 35%; text-align: right; padding-right: 2px;">';
|
||||
print "bytes [si]:";
|
||||
print '</div><div style="width: 40%;">';
|
||||
// print $basic->byteStringFormat($byte, true, false, true);
|
||||
print $basic->humanReadableByteFormat($byte, $basic::BYTE_FORMAT_SI);
|
||||
print "</div>";
|
||||
//
|
||||
print "</div>";
|
||||
}
|
||||
|
||||
|
||||
// *** IMAGE TESTS ***
|
||||
echo "<hr>";
|
||||
// image thumbnail
|
||||
$images = array(
|
||||
// height bigger
|
||||
// 'no_picture.jpg',
|
||||
// 'no_picture.png',
|
||||
// width bigger
|
||||
// 'no_picture_width_bigger.jpg',
|
||||
// 'no_picture_width_bigger.png',
|
||||
// square
|
||||
// 'no_picture_square.jpg',
|
||||
// 'no_picture_square.png',
|
||||
// other sample images
|
||||
// '5c501af48da6c.jpg',
|
||||
// Apple HEIC files
|
||||
// 'img_2145.heic',
|
||||
// Photoshop
|
||||
'photoshop_test.psd',
|
||||
);
|
||||
$thumb_width = 250;
|
||||
$thumb_height = 300;
|
||||
// return mime type ala mimetype
|
||||
$finfo = new finfo(FILEINFO_MIME_TYPE);
|
||||
foreach ($images as $image) {
|
||||
$image = BASE.LAYOUT.CONTENT_PATH.IMAGES.$image;
|
||||
list ($height, $width, $img_type) = getimagesize($image);
|
||||
echo "<div>IMAGE INFO: ".$height."x".$width.", TYPE: ".$img_type." [".$finfo->file($image)."]</div>";
|
||||
// rotate image first
|
||||
$basic->correctImageOrientation($image);
|
||||
// thumbnail tests
|
||||
echo "<div>".basename($image).": WIDTH: $thumb_width<br><img src=".$basic->createThumbnailSimple($image, $thumb_width)."></div>";
|
||||
echo "<div>".basename($image).": HEIGHT: $thumb_height<br><img src=".$basic->createThumbnailSimple($image, 0, $thumb_height)."></div>";
|
||||
echo "<div>".basename($image).": WIDTH/HEIGHT: $thumb_width x $thumb_height<br><img src=".$basic->createThumbnailSimple($image, $thumb_width, $thumb_height)."></div>";
|
||||
// test with dummy
|
||||
echo "<div>".basename($image).": WIDTH/HEIGHT: $thumb_width x $thumb_height (+DUMMY)<br><img src=".$basic->createThumbnailSimple($image, $thumb_width, $thumb_height, null, true, false)."></div>";
|
||||
echo "<hr>";
|
||||
}
|
||||
|
||||
// mime test
|
||||
$mime = 'application/vnd.ms-excel';
|
||||
print "App for mime: ".$basic->mimeGetAppName($mime)."<br>";
|
||||
$basic->mimeSetAppName($mime, 'Microsoft Excel');
|
||||
print "App for mime changed: ".$basic->mimeGetAppName($mime)."<br>";
|
||||
print "DS is: " . DIRECTORY_SEPARATOR . "<br>";
|
||||
print "SERVER HOST: " . $_SERVER['HTTP_HOST'] . "<br>";
|
||||
|
||||
// print error messages
|
||||
// print $login->printErrorMsg();
|
||||
print $basic->printErrorMsg();
|
||||
// print $login->log->printErrorMsg();
|
||||
print $log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
|
||||
83
www/admin/class_test.phpv.php
Normal file
83
www/admin/class_test.phpv.php
Normal file
@@ -0,0 +1,83 @@
|
||||
<?php // phpcs:ignore warning
|
||||
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-phpv';
|
||||
ob_end_flush();
|
||||
|
||||
use CoreLibs\Check\PhpVersion;
|
||||
|
||||
$log = new CoreLibs\Debug\Logging([
|
||||
'log_folder' => BASE . LOG,
|
||||
'file_id' => $LOG_FILE_ID,
|
||||
// add file date
|
||||
'print_file_date' => true,
|
||||
// set debug and print flags
|
||||
'debug_all' => $DEBUG_ALL ?? false,
|
||||
'echo_all' => $ECHO_ALL ?? false,
|
||||
'print_all' => $PRINT_ALL ?? false,
|
||||
]);
|
||||
$_phpv = new CoreLibs\Check\PhpVersion();
|
||||
$phpv_class = 'CoreLibs\Check\PhpVersion';
|
||||
|
||||
// define a list of from to color sets for conversion test
|
||||
|
||||
$PAGE_NAME = 'TEST CLASS: PHP VERSION';
|
||||
print "<!DOCTYPE html>";
|
||||
print "<html><head><title>" . $PAGE_NAME . "</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
||||
|
||||
$min_version_s = '7';
|
||||
$min_version_ss = '7.1';
|
||||
$min_version = '7.1.0';
|
||||
$max_version = '7.3.1';
|
||||
$max_version_ss = '8.1';
|
||||
|
||||
print "CURRENT: " . phpversion() . "<br>";
|
||||
// class
|
||||
print "MIN: $min_version: " . (string)$_phpv->checkPHPVersion($min_version) . "<br>";
|
||||
print "MIN/MAX: $min_version/$max_version: " . (string)$_phpv->checkPHPVersion($min_version, $max_version) . "<br>";
|
||||
print "MIN/S: $min_version_s: " . (string)$_phpv->checkPHPVersion($min_version_s) . "<br>";
|
||||
print "MIN/SS: $min_version_ss: " . (string)$_phpv->checkPHPVersion($min_version_ss) . "<br>";
|
||||
// static
|
||||
print "S::MIN: $min_version: " . (string)$phpv_class::checkPHPVersion($min_version) . "<br>";
|
||||
print "S::MIN/MAX: $min_version/$max_version: "
|
||||
. (string)$phpv_class::checkPHPVersion($min_version, $max_version) . "<br>";
|
||||
print "S::MIN/S: $min_version_s: " . (string)$phpv_class::checkPHPVersion($min_version_s) . "<br>";
|
||||
print "S::MIN/SS: $min_version_ss: " . (string)$phpv_class::checkPHPVersion($min_version_ss) . "<br>";
|
||||
print "S::MAX $max_version_ss: " . (string)$phpv_class::checkPHPVersion(null, $max_version_ss) . "<br>";
|
||||
// use stats
|
||||
print "U-S::MIN: $min_version: " . (string)PhpVersion::checkPHPVersion($min_version) . "<br>";
|
||||
|
||||
// error message
|
||||
print $log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
70
www/admin/class_test.randomkey.php
Normal file
70
www/admin/class_test.randomkey.php
Normal file
@@ -0,0 +1,70 @@
|
||||
<?php // phpcs:ignore warning
|
||||
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-randomkey';
|
||||
ob_end_flush();
|
||||
|
||||
use CoreLibs\Create\RandomKey;
|
||||
|
||||
$log = new CoreLibs\Debug\Logging([
|
||||
'log_folder' => BASE . LOG,
|
||||
'file_id' => $LOG_FILE_ID,
|
||||
// add file date
|
||||
'print_file_date' => true,
|
||||
// set debug and print flags
|
||||
'debug_all' => $DEBUG_ALL ?? false,
|
||||
'echo_all' => $ECHO_ALL ?? false,
|
||||
'print_all' => $PRINT_ALL ?? false,
|
||||
]);
|
||||
$array_class = 'CoreLibs\Create\RandomKey';
|
||||
|
||||
$PAGE_NAME = 'TEST CLASS: RANDOM KEY';
|
||||
print "<!DOCTYPE html>";
|
||||
print "<html><head><title>" . $PAGE_NAME . "</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
||||
|
||||
$key_length = 10;
|
||||
$key_length_b = 5;
|
||||
$key_lenght_long = 64;
|
||||
print "S::RANDOMKEYGEN(auto): " . RandomKey::randomKeyGen() . "<br>";
|
||||
print "S::SETRANDOMKEYLENGTH($key_length): " . RandomKey::setRandomKeyLength($key_length) . "<br>";
|
||||
print "S::RANDOMKEYGEN($key_length): " . RandomKey::randomKeyGen() . "<br>";
|
||||
print "S::RANDOMKEYGEN($key_length_b): " . RandomKey::randomKeyGen($key_length_b) . "<br>";
|
||||
print "S::RANDOMKEYGEN($key_length): " . RandomKey::randomKeyGen() . "<br>";
|
||||
print "S::RANDOMKEYGEN($key_lenght_long): " . RandomKey::randomKeyGen($key_lenght_long) . "<br>";
|
||||
$_array = new CoreLibs\Create\RandomKey();
|
||||
print "C->RANDOMKEYGEN(auto): " . $_array->randomKeyGen() . "<br>";
|
||||
|
||||
// error message
|
||||
print $log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
53
www/admin/class_test.readenvfile.php
Normal file
53
www/admin/class_test.readenvfile.php
Normal file
@@ -0,0 +1,53 @@
|
||||
<?php // phpcs:ignore warning
|
||||
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-readEnvFile';
|
||||
ob_end_flush();
|
||||
|
||||
$log = new CoreLibs\Debug\Logging([
|
||||
'log_folder' => BASE . LOG,
|
||||
'file_id' => $LOG_FILE_ID,
|
||||
// add file date
|
||||
'print_file_date' => true,
|
||||
// set debug and print flags
|
||||
'debug_all' => $DEBUG_ALL ?? false,
|
||||
'echo_all' => $ECHO_ALL ?? false,
|
||||
'print_all' => $PRINT_ALL ?? false,
|
||||
]);
|
||||
$ref_class = 'CoreLibs\Get\ReadEnvFile';
|
||||
|
||||
$PAGE_NAME = 'TEST CLASS: READ ENV FILE';
|
||||
print "<!DOCTYPE html>";
|
||||
print "<html><head><title>" . $PAGE_NAME . "</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
||||
|
||||
print "ALREADY from config.php: " . \CoreLibs\Debug\Support::printAr($_ENV) . "<br>";
|
||||
|
||||
// test .env in local
|
||||
|
||||
// error message
|
||||
print $log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
67
www/admin/class_test.runningtime.php
Normal file
67
www/admin/class_test.runningtime.php
Normal file
@@ -0,0 +1,67 @@
|
||||
<?php // phpcs:ignore warning
|
||||
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-runningtime';
|
||||
ob_end_flush();
|
||||
|
||||
use CoreLibs\Debug\RunningTime;
|
||||
|
||||
$log = new CoreLibs\Debug\Logging([
|
||||
'log_folder' => BASE . LOG,
|
||||
'file_id' => $LOG_FILE_ID,
|
||||
// add file date
|
||||
'print_file_date' => true,
|
||||
// set debug and print flags
|
||||
'debug_all' => $DEBUG_ALL ?? false,
|
||||
'echo_all' => $ECHO_ALL ?? false,
|
||||
'print_all' => $PRINT_ALL ?? false,
|
||||
]);
|
||||
|
||||
$PAGE_NAME = 'TEST CLASS: RUNNING TIME';
|
||||
print "<!DOCTYPE html>";
|
||||
print "<html><head><title>" . $PAGE_NAME . "</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
||||
|
||||
RunningTime::hrRunningTime();
|
||||
RunningTime::runningTime();
|
||||
echo "RANDOM KEY [50]: " . \CoreLibs\Create\RandomKey::randomKeyGen(50) . "<br>";
|
||||
echo "TIMED [hr]: " . RunningTime::hrRunningTime() . "<br>";
|
||||
echo "TIMED [def]: " . RunningTime::runningTime() . "<br>";
|
||||
echo "TIMED [string]: " . RunningTime::runningTimeString() . "<br>";
|
||||
RunningTime::hrRunningTime();
|
||||
echo "RANDOM KEY [default]: " . \CoreLibs\Create\RandomKey::randomKeyGen() . "<br>";
|
||||
echo "TIMED [hr]: " . RunningTime::hrRunningTime() . "<br>";
|
||||
|
||||
// error message
|
||||
print $log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
171
www/admin/class_test.session.php
Normal file
171
www/admin/class_test.session.php
Normal file
@@ -0,0 +1,171 @@
|
||||
<?php // phpcs:ignore warning
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @param int $status
|
||||
* @return string
|
||||
*/
|
||||
/** @phan-suppress-next-line PhanRedefineFunction */
|
||||
function getSessionStatusString(int $status): string
|
||||
{
|
||||
switch ($status) {
|
||||
case PHP_SESSION_DISABLED:
|
||||
$status = 'PHP_SESSION_DISABLED';
|
||||
break;
|
||||
case PHP_SESSION_NONE:
|
||||
$status = 'PHP_SESSION_NONE';
|
||||
break;
|
||||
case PHP_SESSION_ACTIVE:
|
||||
$status = 'PHP_SESSION_ACTIVE';
|
||||
break;
|
||||
default:
|
||||
$status = '[!] UNDEFINED';
|
||||
break;
|
||||
}
|
||||
return $status;
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
// if (!defined('SET_SESSION_NAME')) {
|
||||
// define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
// }
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-session';
|
||||
ob_end_flush();
|
||||
|
||||
$log = new CoreLibs\Debug\Logging([
|
||||
'log_folder' => BASE . LOG,
|
||||
'file_id' => $LOG_FILE_ID,
|
||||
// add file date
|
||||
'print_file_date' => true,
|
||||
// set debug and print flags
|
||||
'debug_all' => $DEBUG_ALL ?? false,
|
||||
'echo_all' => $ECHO_ALL ?? false,
|
||||
'print_all' => $PRINT_ALL ?? false,
|
||||
]);
|
||||
use CoreLibs\Create\Session;
|
||||
|
||||
$PAGE_NAME = 'TEST CLASS: SESSION';
|
||||
print "<!DOCTYPE html>";
|
||||
print "<html><head><title>" . $PAGE_NAME . "</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
||||
|
||||
$session_name = 'class-test-session';
|
||||
$var = 'foo';
|
||||
$value = 'bar';
|
||||
|
||||
foreach (['123', '123-123', '123abc'] as $_session_name) {
|
||||
print "[UNSET] Session Name valid for " . $_session_name . ": "
|
||||
. (Session::checkValidSessionName($_session_name) ? 'Valid' : 'Invalid') . "<br>";
|
||||
}
|
||||
|
||||
echo "Global session name: " . ($GLOBALS['SET_SESSION_NAME'] ?? '-') . "<br>";
|
||||
|
||||
print "[UNSET] Current session id: " . Session::getSessionId() . "<br>";
|
||||
print "[UNSET] Current session name: " . Session::getSessionName() . "<br>";
|
||||
print "[UNSET] Current session active: " . (Session::checkActiveSession() ? 'Yes' : 'No') . "<br>";
|
||||
print "[UNSET] Current session status: " . getSessionStatusString(Session::getSessionStatus()) . "<br>";
|
||||
if (isset($_SESSION)) {
|
||||
print "[UNSET] _SESSION is: set<br>";
|
||||
} else {
|
||||
print "[UNSET] _SESSION is: not set<br>";
|
||||
}
|
||||
#
|
||||
print "[UNSET] To set session name valid: "
|
||||
. (Session::checkValidSessionName($session_name) ? 'Valid' : 'Invalid') . "<br>";
|
||||
if (false === ($session = Session::startSession($session_name))) {
|
||||
print "[FAILED] Session start failed: " . Session::getErrorStr() . "<br>";
|
||||
} else {
|
||||
print "[SET] Current session id: " . $session . "<br>";
|
||||
}
|
||||
// set again
|
||||
if (false === ($session = Session::startSession($session_name))) {
|
||||
print "[2 FAILED] Session start failed: " . Session::getErrorStr() . "<br>";
|
||||
} else {
|
||||
print "[2 SET] Current session id: " . $session . "<br>";
|
||||
}
|
||||
print "[SET] Current session id: " . Session::getSessionId() . "<br>";
|
||||
print "[SET] Current session name: " . Session::getSessionName() . "<br>";
|
||||
print "[SET] Current session active: " . (Session::checkActiveSession() ? 'Yes' : 'No') . "<br>";
|
||||
print "[SET] Current session status: " . getSessionStatusString(Session::getSessionStatus()) . "<br>";
|
||||
if (isset($_SESSION)) {
|
||||
print "[SET] _SESSION is: set<br>";
|
||||
} else {
|
||||
print "[SET] _SESSION is: not set<br>";
|
||||
}
|
||||
if (!isset($_SESSION['counter'])) {
|
||||
$_SESSION['counter'] = 0;
|
||||
}
|
||||
$_SESSION['counter']++;
|
||||
print "[READ] " . $var . ": " . ($_SESSION[$var] ?? '{UNSET}') . "<br>";
|
||||
$_SESSION[$var] = $value;
|
||||
print "[READ] " . $var . ": " . ($_SESSION[$var] ?? '{UNSET}') . "<br>";
|
||||
print "[READ] Confirm " . $var . " is " . $value . ": "
|
||||
. (($_SESSION[$var] ?? '') == $value ? 'Matching' : 'Not matching') . "<br>";
|
||||
|
||||
// differnt session name
|
||||
$session_name = 'class-test-session-ALT';
|
||||
if (false === ($session = Session::startSession($session_name))) {
|
||||
print "[3 FAILED] Session start failed: " . Session::getErrorStr() . "<br>";
|
||||
} else {
|
||||
print "[3 SET] Current session id: " . $session . "<br>";
|
||||
}
|
||||
print "[SET AGAIN] Current session id: " . Session::getSessionId() . "<br>";
|
||||
|
||||
print "[ALL SESSION]: " . \CoreLibs\Debug\Support::printAr($_SESSION) . "<br>";
|
||||
|
||||
// close session
|
||||
Session::writeClose();
|
||||
// will never be written
|
||||
$_SESSION['will_never_be_written'] = 'empty';
|
||||
|
||||
// open again
|
||||
$session_name = 'class-test-session';
|
||||
if (false === ($session = Session::startSession($session_name))) {
|
||||
print "[4 FAILED] Session start failed: " . Session::getErrorStr() . "<br>";
|
||||
} else {
|
||||
print "[4 SET] Current session id: " . $session . "<br>";
|
||||
}
|
||||
print "[START AGAIN] Current session id: " . Session::getSessionId() . "<br>";
|
||||
$_SESSION['will_be_written_again'] = 'Full';
|
||||
|
||||
// close session
|
||||
Session::writeClose();
|
||||
// invalid
|
||||
$session_name = '123';
|
||||
if (false === ($session = Session::startSession($session_name))) {
|
||||
print "[5 FAILED] Session start failed: " . Session::getErrorStr() . "<br>";
|
||||
} else {
|
||||
print "[5 SET] Current session id: " . $session . "<br>";
|
||||
}
|
||||
print "[BAD NAME] Current session id: " . Session::getSessionId() . "<br>";
|
||||
print "[BAD NAME] Current session name: " . Session::getSessionName() . "<br>";
|
||||
print "[BAD NAME] Current session active: " . (Session::checkActiveSession() ? 'Yes' : 'No') . "<br>";
|
||||
print "[BAD NAME] Current session status: " . getSessionStatusString(Session::getSessionStatus()) . "<br>";
|
||||
|
||||
// error message
|
||||
print $log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
113
www/admin/class_test.session.read.php
Normal file
113
www/admin/class_test.session.read.php
Normal file
@@ -0,0 +1,113 @@
|
||||
<?php // phpcs:ignore warning
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @param int $status
|
||||
* @return string
|
||||
*/
|
||||
/** @phan-suppress-next-line PhanRedefineFunction */
|
||||
function getSessionStatusString(int $status): string
|
||||
{
|
||||
switch ($status) {
|
||||
case PHP_SESSION_DISABLED:
|
||||
$status = 'PHP_SESSION_DISABLED';
|
||||
break;
|
||||
case PHP_SESSION_NONE:
|
||||
$status = 'PHP_SESSION_NONE';
|
||||
break;
|
||||
case PHP_SESSION_ACTIVE:
|
||||
$status = 'PHP_SESSION_ACTIVE';
|
||||
break;
|
||||
default:
|
||||
$status = '[!] UNDEFINED';
|
||||
break;
|
||||
}
|
||||
return $status;
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-session.read';
|
||||
ob_end_flush();
|
||||
|
||||
$log = new CoreLibs\Debug\Logging([
|
||||
'log_folder' => BASE . LOG,
|
||||
'file_id' => $LOG_FILE_ID,
|
||||
// add file date
|
||||
'print_file_date' => true,
|
||||
// set debug and print flags
|
||||
'debug_all' => $DEBUG_ALL ?? false,
|
||||
'echo_all' => $ECHO_ALL ?? false,
|
||||
'print_all' => $PRINT_ALL ?? false,
|
||||
]);
|
||||
use CoreLibs\Create\Session;
|
||||
|
||||
$PAGE_NAME = 'TEST CLASS: SESSION (READ)';
|
||||
print "<!DOCTYPE html>";
|
||||
print "<html><head><title>" . $PAGE_NAME . "</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
||||
|
||||
$session_name = 'class-test-session';
|
||||
// $session_name = '';
|
||||
$var = 'foo';
|
||||
$value = 'bar';
|
||||
|
||||
echo "Global session name: " . ($GLOBALS['SET_SESSION_NAME'] ?? '-') . "<br>";
|
||||
|
||||
print "[UNSET] Current session id: " . Session::getSessionId() . "<br>";
|
||||
print "[UNSET] Current session name: " . Session::getSessionName() . "<br>";
|
||||
print "[UNSET] Current session active: " . (Session::checkActiveSession() ? 'Yes' : 'No') . "<br>";
|
||||
print "[UNSET] Current session status: " . getSessionStatusString(Session::getSessionStatus()) . "<br>";
|
||||
|
||||
print "[READ] " . $var . ": " . ($_SESSION[$var] ?? '{UNSET}') . "<br>";
|
||||
// start
|
||||
if (false === ($session = Session::startSession($session_name))) {
|
||||
print "Session start failed: " . Session::getErrorStr() . "<br>";
|
||||
} else {
|
||||
print "Current session id: " . $session . "<br>";
|
||||
}
|
||||
// set again
|
||||
if (false === ($session = Session::startSession($session_name))) {
|
||||
print "[2] Session start failed<br>";
|
||||
} else {
|
||||
print "[2] Current session id: " . $session . "<br>";
|
||||
}
|
||||
print "[SET] Current session id: " . Session::getSessionId() . "<br>";
|
||||
print "[SET] Current session name: " . Session::getSessionName() . "<br>";
|
||||
print "[SET] Current session active: " . (Session::checkActiveSession() ? 'Yes' : 'No') . "<br>";
|
||||
print "[SET] Current session status: " . getSessionStatusString(Session::getSessionStatus()) . "<br>";
|
||||
print "[READ] " . $var . ": " . ($_SESSION[$var] ?? '{UNSET}') . "<br>";
|
||||
print "[READ] Confirm " . $var . " is " . $value . ": "
|
||||
. (($_SESSION[$var] ?? '') == $value ? 'Matching' : 'Not matching') . "<br>";
|
||||
|
||||
print "[ALL SESSION]: " . \CoreLibs\Debug\Support::printAr($_SESSION) . "<br>";
|
||||
|
||||
// error message
|
||||
print $log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
136
www/admin/class_test.smarty.php
Normal file
136
www/admin/class_test.smarty.php
Normal file
@@ -0,0 +1,136 @@
|
||||
<?php // phpcs:ignore warning
|
||||
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = false; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = true;
|
||||
$PRINT_ALL = true;
|
||||
$DB_DEBUG = true;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', true);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// override ECHO ALL FALSE
|
||||
$ECHO_ALL = true;
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-smarty';
|
||||
ob_end_flush();
|
||||
|
||||
$log = new CoreLibs\Debug\Logging([
|
||||
'log_folder' => BASE . LOG,
|
||||
'file_id' => $LOG_FILE_ID,
|
||||
// add file date
|
||||
'print_file_date' => true,
|
||||
// set debug and print flags
|
||||
'debug_all' => $DEBUG_ALL ?? false,
|
||||
'echo_all' => $ECHO_ALL ?? false,
|
||||
'print_all' => $PRINT_ALL ?? false,
|
||||
]);
|
||||
$locale = \CoreLibs\Language\GetLocale::setLocale();
|
||||
$l10n = new \CoreLibs\Language\L10n(
|
||||
$locale['locale'],
|
||||
$locale['domain'],
|
||||
$locale['path'],
|
||||
);
|
||||
$smarty = new CoreLibs\Template\SmartyExtend($l10n, $locale);
|
||||
|
||||
$PAGE_NAME = 'TEST CLASS: SMARTY';
|
||||
print "<!DOCTYPE html>";
|
||||
print "<html><head><title>" . $PAGE_NAME . "</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
||||
|
||||
$smarty->DATA['JS_DEBUG'] = DEBUG;
|
||||
$smarty->MASTER_TEMPLATE_NAME = 'main_body.tpl';
|
||||
$smarty->TEMPLATE_NAME = 'smarty_test.tpl';
|
||||
$smarty->CSS_SPECIAL_TEMPLATE_NAME = 'smart_test.css';
|
||||
$smarty->USE_PROTOTYPE = false;
|
||||
$smarty->USE_JQUERY = true;
|
||||
$smarty->JS_DATEPICKR = false;
|
||||
if ($smarty->USE_PROTOTYPE) {
|
||||
$smarty->ADMIN_JAVASCRIPT = 'edit.pt.js';
|
||||
$smarty->JS_SPECIAL_TEMPLATE_NAME = 'prototype.test.js';
|
||||
} elseif ($smarty->USE_JQUERY) {
|
||||
$smarty->ADMIN_JAVASCRIPT = 'edit.jq.js';
|
||||
$smarty->JS_SPECIAL_TEMPLATE_NAME = 'jquery.test.js';
|
||||
}
|
||||
$smarty->PAGE_WIDTH = '100%';
|
||||
$smarty->setSmartyPaths();
|
||||
|
||||
// smarty test
|
||||
$smarty->DATA['SMARTY_TEST'] = 'Test Data';
|
||||
$smarty->DATA['TRANSLATE_TEST'] = $l10n->__('Are we translated?');
|
||||
$smarty->DATA['TRANSLATE_TEST_FUNCTION'] = _gettext('Are we translated?');
|
||||
$smarty->DATA['TRANSLATE_TEST_SMARTY'] = $smarty->l10n->__('Are we translated?');
|
||||
$smarty->DATA['replace'] = 'Replaced';
|
||||
// variable variables
|
||||
$smarty->DATA['test'] = 'foo';
|
||||
$smarty->DATA['foo'] = 'bar';
|
||||
// loop
|
||||
$smarty->DATA['loop_start'] = 5;
|
||||
// drop down test with optgroups
|
||||
$smarty->DATA['drop_down_test'] = [
|
||||
'foo' => 'Foo',
|
||||
'bar' => 'Bar',
|
||||
'foobar' => 'Foo Bar',
|
||||
];
|
||||
$smarty->DATA['drop_down_test_selected'] = 'bar';
|
||||
$smarty->DATA['drop_down_test_nested'] = [
|
||||
'' => '選択してください',
|
||||
'4/25(木)' => [
|
||||
'4/25(木) 11:00-11:50' => '4/25(木) 11:00-11:50',
|
||||
'4/25(木) 12:20-13:00' => '4/25(木) 12:20-13:00'
|
||||
],
|
||||
'4/26(金)' => [
|
||||
'4/26(金) 11:00-11:50' => '4/26(金) 11:00-11:50',
|
||||
'4/26(金) 12:20-13:00' => '4/26(金) 12:20-13:00'
|
||||
],
|
||||
'4/27(土)' => [
|
||||
'4/27(土) 11:00-11:50' => '4/27(土) 11:00-11:50',
|
||||
'4/27(土) 12:20-13:00' => '4/27(土) 12:20-13:00'
|
||||
],
|
||||
];
|
||||
$smarty->DATA['drop_down_test_nested_selected'] = '';
|
||||
$smarty->DATA['radio_test'] = [
|
||||
'0' => 'On',
|
||||
'1' => 'Off',
|
||||
'-1' => 'Undefined'
|
||||
];
|
||||
$smarty->DATA['radio_test_selected'] = -1;
|
||||
$smarty->DATA['checkbox_test'] = [
|
||||
'0' => 'On',
|
||||
'1' => 'Off',
|
||||
'-1' => 'Undefined'
|
||||
];
|
||||
$smarty->DATA['checkbox_test_pos'] = [
|
||||
'0' => 'A',
|
||||
'1' => 'B'
|
||||
];
|
||||
$smarty->DATA['checkbox_test_selected'] = ['1', '-1'];
|
||||
$smarty->DATA['checkbox_test_pos_selected'] = ['0', '-1'];
|
||||
|
||||
|
||||
$smarty->setSmartyVarsAdmin();
|
||||
|
||||
// error message
|
||||
print $log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
66
www/admin/class_test.system.php
Normal file
66
www/admin/class_test.system.php
Normal file
@@ -0,0 +1,66 @@
|
||||
<?php // phpcs:ignore warning
|
||||
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-system';
|
||||
ob_end_flush();
|
||||
|
||||
use CoreLibs\Get\System;
|
||||
use CoreLibs\Debug\Support as DgS;
|
||||
|
||||
$log = new CoreLibs\Debug\Logging([
|
||||
'log_folder' => BASE . LOG,
|
||||
'file_id' => $LOG_FILE_ID,
|
||||
// add file date
|
||||
'print_file_date' => true,
|
||||
// set debug and print flags
|
||||
'debug_all' => $DEBUG_ALL ?? false,
|
||||
'echo_all' => $ECHO_ALL ?? false,
|
||||
'print_all' => $PRINT_ALL ?? false,
|
||||
]);
|
||||
|
||||
$PAGE_NAME = 'TEST CLASS: SYSTEM';
|
||||
print "<!DOCTYPE html>";
|
||||
print "<html><head><title>" . $PAGE_NAME . "</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
||||
|
||||
print "GETHOSTNAME: " . DgS::printAr(System::getHostName()) . "<br>";
|
||||
print "GETPAGENAME(0): " . System::getPageName() . "<br>";
|
||||
print "GETPAGENAME(1): " . System::getPageName(System::NO_EXTENSION) . "<br>";
|
||||
print "GETPAGENAME(2): " . System::getPageName(System::FULL_PATH) . "<br>";
|
||||
print "GETPAGENAMEARRAY: " . \CoreLibs\Debug\Support::printAr(System::getPageNameArray()) . "<br>";
|
||||
// seting errro codes file upload
|
||||
print "FILEUPLOADERRORMESSAGE(): " . System::fileUploadErrorMessage(-1) . "<br>";
|
||||
print "FILEUPLOADERRORMESSAGE(UPLOAD_ERR_CANT_WRITE): "
|
||||
. System::fileUploadErrorMessage(UPLOAD_ERR_CANT_WRITE) . "<br>";
|
||||
|
||||
// error message
|
||||
print $log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
73
www/admin/class_test.token.php
Normal file
73
www/admin/class_test.token.php
Normal file
@@ -0,0 +1,73 @@
|
||||
<?php // phpcs:ignore warning
|
||||
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-token';
|
||||
ob_end_flush();
|
||||
|
||||
$log = new CoreLibs\Debug\Logging([
|
||||
'log_folder' => BASE . LOG,
|
||||
'file_id' => $LOG_FILE_ID,
|
||||
// add file date
|
||||
'print_file_date' => true,
|
||||
// set debug and print flags
|
||||
'debug_all' => $DEBUG_ALL ?? false,
|
||||
'echo_all' => $ECHO_ALL ?? false,
|
||||
'print_all' => $PRINT_ALL ?? false,
|
||||
]);
|
||||
$_token = new CoreLibs\Output\Form\Token();
|
||||
$token_class = 'CoreLibs\Output\Form\Token';
|
||||
|
||||
$PAGE_NAME = 'TEST CLASS: FORM TOKEN';
|
||||
print "<!DOCTYPE html>";
|
||||
print "<html><head><title>" . $PAGE_NAME . "</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
||||
|
||||
$token = 'test_form_token';
|
||||
$token_id = $_token->setFormToken($token);
|
||||
print "TOKEN: $token: (ID) " . $token_id . " => (S) " . $_SESSION[$token] . "<br>";
|
||||
print "VALIDATE: $token: " . (string)$_token->validateFormToken($token_id, $token) . "<br>";
|
||||
|
||||
$token = 'test_form_token_static';
|
||||
$token_id = $token_class::setFormToken($token);
|
||||
print "S-TOKEN: $token: (ID) " . $token_id . " => (S) " . $_SESSION[$token] . "<br>";
|
||||
print "S-VALIDATE: $token: " . (string)$token_class::validateFormToken($token_id, $token) . "<br>";
|
||||
|
||||
// DEPRECATED
|
||||
/* $token = 'test_form_token_deprecated';
|
||||
$token_id = $basic->setFormToken($token);
|
||||
print "TOKEN: $token: (ID) ".$token_id." => (S) ".$_SESSION[$token]."<br>";
|
||||
print "VALIDATE: $token: ".(string)$basic->validateFormToken($token_id, $token)."<br>"; */
|
||||
|
||||
// error message
|
||||
print $log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user