Compare commits
334 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 | ||
|
|
70a30c3182 | ||
|
|
9d54d6b0d1 | ||
|
|
a46888d101 | ||
|
|
be092fc449 | ||
|
|
6059b83637 | ||
|
|
b6c6d76b43 | ||
|
|
80993a06ac | ||
|
|
50073479d4 | ||
|
|
85f701ab2a | ||
|
|
519de8a23c | ||
|
|
d5fdb22e93 | ||
|
|
0ec0007569 | ||
|
|
7165a50b4d | ||
|
|
71ee80fa06 | ||
|
|
bb5276ee44 | ||
|
|
9c242ed1b9 | ||
|
|
0fcbe91ea2 | ||
|
|
ee4417fc52 | ||
|
|
ee1dafd8d8 | ||
|
|
96104095d0 | ||
|
|
a311552c56 | ||
|
|
f694539a0b | ||
|
|
2f1388494f | ||
|
|
06fe9657e2 | ||
|
|
d4e5f92277 | ||
|
|
b2c0a57924 | ||
|
|
5522348c8a | ||
|
|
ed01d248ec | ||
|
|
899ddc011c | ||
|
|
a86eaf0f02 | ||
|
|
3e29073664 | ||
|
|
5601b14d5f | ||
|
|
a1afc1fb2e | ||
|
|
d445bc3526 | ||
|
|
719d82d4ee | ||
|
|
6807f33120 | ||
|
|
114ca6c24a | ||
|
|
e46d0fa4a4 | ||
|
|
f7db84c62f | ||
|
|
3267fc0266 | ||
|
|
d9e13ae14c | ||
|
|
50db770992 | ||
|
|
e439945a54 | ||
|
|
8223441ca9 | ||
|
|
0153c9721f | ||
|
|
b6f6eeac9b | ||
|
|
beedf629e5 | ||
|
|
04b47574eb | ||
|
|
ecc52e2dbd | ||
|
|
12e335c69c | ||
|
|
3ae3b1b761 | ||
|
|
3c9ca025f5 | ||
|
|
96afa463e0 | ||
|
|
5195212fae | ||
|
|
e990d6b410 | ||
|
|
b5dd85bc75 | ||
|
|
b2945a8fa0 | ||
|
|
c77562b595 | ||
|
|
2210f62441 | ||
|
|
dfb2a93fbd | ||
|
|
ca073c1b56 | ||
|
|
f316dde8b7 | ||
|
|
13b18c3a62 | ||
|
|
18bf829c6b | ||
|
|
723b6345bb | ||
|
|
e235721c8b | ||
|
|
fd0af5a294 | ||
|
|
fd8caaf5de | ||
|
|
3d842d4107 | ||
|
|
c895beb35f | ||
|
|
b6a35d15cf | ||
|
|
20c44694e8 | ||
|
|
f6424bdd35 | ||
|
|
ea3a8edae6 | ||
|
|
d04cc380b2 | ||
|
|
98bf11e0c9 | ||
|
|
a6918bac6f | ||
|
|
86c5085f92 | ||
|
|
63bcdc0eff | ||
|
|
ef1df6f171 | ||
|
|
8ade113070 | ||
|
|
4508692330 | ||
|
|
98c87a755a | ||
|
|
bf96eb755d | ||
|
|
9ea8364aab | ||
|
|
25941f4b49 | ||
|
|
56612cb13b | ||
|
|
d9ad041c47 | ||
|
|
5558a21824 | ||
|
|
05c48bce60 | ||
|
|
b25f280849 | ||
|
|
745faacb30 | ||
|
|
fd2e0937b5 | ||
|
|
6be1b3008e | ||
|
|
46554e6965 | ||
|
|
c8686024e2 | ||
|
|
605ea06bf0 | ||
|
|
9ec19f5940 | ||
|
|
a27e4603a8 | ||
|
|
54b7af348b | ||
|
|
c5d624a318 | ||
|
|
47ffec1fd4 | ||
|
|
72c6844e74 | ||
|
|
d0753512a3 | ||
|
|
d0de3821f8 | ||
|
|
0d89eea1af | ||
|
|
d87033d57d | ||
|
|
19a44d9340 | ||
|
|
436025dd22 | ||
|
|
19458a2eba | ||
|
|
aa9e985120 | ||
|
|
a0d5e18832 | ||
|
|
6c1c528e2e | ||
|
|
d44325501a | ||
|
|
1b45a1b770 | ||
|
|
fe32dd4543 | ||
|
|
0111762315 | ||
|
|
89c2b54889 | ||
|
|
70d51025f8 | ||
|
|
1ecdd5f6d7 | ||
|
|
593e8fa7b0 | ||
|
|
4b08a4d856 | ||
|
|
23d2483855 | ||
|
|
729541f280 | ||
|
|
d47f525480 | ||
|
|
b5290971c1 | ||
|
|
2f1cb6a0a5 | ||
|
|
d813ce0e35 | ||
|
|
22b4fbce8d | ||
|
|
7fe27b8040 | ||
|
|
be03bc96cb | ||
|
|
4f73a88a8b | ||
|
|
b2019226da | ||
|
|
754c2edbd2 | ||
|
|
98e16e6143 | ||
|
|
005584e2ed | ||
|
|
7e34c5321d | ||
|
|
9d918f3b43 | ||
|
|
433b21ab6f | ||
|
|
826b5fdfd6 | ||
|
|
a923f07fc7 | ||
|
|
736415e939 | ||
|
|
2e8712d935 | ||
|
|
c6a15506c5 | ||
|
|
b2f5d439d5 | ||
|
|
071395bfe5 | ||
|
|
03ff1862c1 | ||
|
|
71ab3e27bd | ||
|
|
a190148125 | ||
|
|
fa5350baa2 | ||
|
|
4d70f8a017 | ||
|
|
d5476b4269 | ||
|
|
bddc196e25 | ||
|
|
e3d1679f86 | ||
|
|
34f33772d0 | ||
|
|
bfe3fdcff4 | ||
|
|
1feb7bf574 | ||
|
|
272a5ad202 | ||
|
|
8a86145307 | ||
|
|
1afc0eb982 | ||
|
|
a7e7539911 | ||
|
|
6e3f017960 | ||
|
|
80715e5ef1 | ||
|
|
0408483aa8 | ||
|
|
02d1d03c15 | ||
| 6db87c64b0 | |||
|
|
765297d2a2 | ||
|
|
382cc0524a | ||
|
|
aa57c6218f | ||
|
|
b3f9fd27e6 | ||
|
|
4e6463a849 | ||
|
|
5ad0419613 | ||
|
|
e23389a7f8 | ||
|
|
c21e194eaf | ||
|
|
41b1f14594 | ||
|
|
62eb2d61b0 | ||
|
|
7abdc96499 | ||
|
|
5a6c7ec187 | ||
|
|
0f483a2d20 | ||
|
|
3400902241 | ||
|
|
f51b74d8b5 | ||
|
|
bf5486a59e | ||
|
|
8a6a83ef06 | ||
|
|
2051d17901 | ||
|
|
477aae6232 | ||
|
|
cb0ed2b6c0 | ||
|
|
484444b97a | ||
|
|
0b1c0da131 | ||
| 6dc6a58765 | |||
| ca8da46a58 | |||
| a28e5244ab | |||
|
|
8151c05d91 | ||
|
|
5c3b45ef08 | ||
|
|
9086196f7d | ||
|
|
5474ae2dda | ||
|
|
31acfd1ee4 | ||
|
|
f1155ad824 | ||
|
|
eef3a81be7 | ||
|
|
bf60e9fcbf | ||
| 7d42256a30 | |||
|
|
5226fbcfc3 | ||
|
|
87b9af9786 | ||
|
|
7981e3ab51 | ||
|
|
21b9b99197 | ||
|
|
d9df0d64b8 | ||
|
|
73cdbe27c0 | ||
| 759b5527f8 | |||
| 8417e60c9d | |||
| aec8a5ee70 | |||
| f34d4214f4 | |||
| a2b6f29886 | |||
| a95d28a09f | |||
|
|
57b1aae9b4 | ||
| 42b4112a5e | |||
| 63a2495183 | |||
|
|
717962edc5 | ||
|
|
dc692f14e4 | ||
| b1a30b6dde | |||
| 967af4dc37 | |||
|
|
7a8fdcdf07 | ||
|
|
a06320c42b | ||
|
|
f0ba8c3c50 |
29
.htaccess.old
Normal file
29
.htaccess.old
Normal file
@@ -0,0 +1,29 @@
|
||||
# PHP XDEBUG SETTINGS
|
||||
# php_value xdebug.profiler_output_dir xdebug/
|
||||
# php_value xdebug.profiler_output_name timestamp
|
||||
# php_value xdebug.profiler_enable 1
|
||||
php_value xdebug.collect_params 2
|
||||
php_value xdebug.collect_vars 0
|
||||
php_value xdebug.show_local_vars 0
|
||||
#php_value xdebug.dump_globals 0
|
||||
# allowed COOKIE, FILES, GET, POST, REQUEST, SERVER, SESSION
|
||||
#php_value xdebug.dump.GET *
|
||||
# PHP ERROR SETTINGS
|
||||
php_flag short_open_tag off
|
||||
php_flag display_startup_errors on
|
||||
php_flag display_errors on
|
||||
php_flag html_errors on
|
||||
php_flag log_errors on
|
||||
php_flag ignore_repeated_errors off
|
||||
php_flag ignore_repeated_source off
|
||||
php_flag report_memleaks on
|
||||
php_flag track_errors on
|
||||
php_value docref_root 0
|
||||
php_value docref_ext 0
|
||||
# Turn this on to redirect log to different folder
|
||||
#php_value error_log /var/www/html/developers/clemens/php/php-error/php-errors.log
|
||||
# this is E_ALL reporting ON
|
||||
php_value error_reporting -1
|
||||
# this is E_ALL | ~E_NOTICE
|
||||
#php_value error_reporting 2039
|
||||
php_value log_errors_max_len 0
|
||||
141
.phan/config.php
Normal file
141
.phan/config.php
Normal file
@@ -0,0 +1,141 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* This configuration will be read and overlaid on top of the
|
||||
* default configuration. Command line arguments will be applied
|
||||
* after this file is read.
|
||||
*
|
||||
* @see src/Phan/Config.php
|
||||
* See Config for all configurable options.
|
||||
*
|
||||
* A Note About Paths
|
||||
* ==================
|
||||
*
|
||||
* Files referenced from this file should be defined as
|
||||
*
|
||||
* ```
|
||||
* Config::projectPath('relative_path/to/file')
|
||||
* ```
|
||||
*
|
||||
* where the relative path is relative to the root of the
|
||||
* project which is defined as either the working directory
|
||||
* 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.
|
||||
"allow_missing_properties" => false,
|
||||
|
||||
// Allow null to be cast as any type and for any
|
||||
// type to be cast to null.
|
||||
"null_casts_as_any_type" => false,
|
||||
|
||||
// Backwards Compatibility Checking
|
||||
'backward_compatibility_checks' => false,
|
||||
|
||||
// Run a quick version of checks that takes less
|
||||
// time
|
||||
"quick_mode" => false,
|
||||
|
||||
// Only emit critical issues to start with
|
||||
// (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" => [
|
||||
'.', '../configs/'
|
||||
],
|
||||
'ignore_undeclared_variables_in_global_scope' => true,
|
||||
|
||||
"file_list" => [
|
||||
"./www/configs/config.db.php",
|
||||
"./www/configs/config.host.php",
|
||||
"./www/configs/config.path.php",
|
||||
"./www/configs/config.other.php",
|
||||
"./www/configs/config.master.php",
|
||||
"./www/includes/admin_header.php",
|
||||
],
|
||||
|
||||
// A list of directories that should be parsed for class and
|
||||
// method information. After excluding the directories
|
||||
// defined in exclude_analysis_directory_list, the remaining
|
||||
// files will be statically analyzed for errors.
|
||||
//
|
||||
// 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',
|
||||
],
|
||||
|
||||
|
||||
// A list of directories holding code that we want
|
||||
// to parse, but not analyze
|
||||
"exclude_analysis_directory_list" => [
|
||||
'www/vendor',
|
||||
'www/tests',
|
||||
'www/lib/Smarty',
|
||||
'www/lib/smarty-4.1.0',
|
||||
'www/templates_c',
|
||||
'www/log',
|
||||
'www/tmp',
|
||||
'www/cache',
|
||||
'www/media',
|
||||
],
|
||||
'exclude_file_list' => [
|
||||
// ignore all symlink files to edit
|
||||
'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',
|
||||
// ignore the old qq tests
|
||||
'www/admin/qq_file_upload_front.php',
|
||||
'www/admin/qq_file_upload_ajax.php',
|
||||
// symlink ignore
|
||||
'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.
|
||||
// Class names should be prefixed with `\`.
|
||||
//
|
||||
// (E.g. `['_FOO' => '\FooClass', 'page' => '\PageClass', 'userId' => 'int']`)
|
||||
'globals_type_map' => [],
|
||||
];
|
||||
1
.phplint-cache
Normal file
1
.phplint-cache
Normal file
File diff suppressed because one or more lines are too long
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
|
||||
4
4dev/checking/phpunit.sh
Executable file
4
4dev/checking/phpunit.sh
Executable file
@@ -0,0 +1,4 @@
|
||||
base="/storage/var/www/html/developers/clemens/core_data/php_libraries/trunk/";
|
||||
# -c phpunit.xml
|
||||
# --testdox
|
||||
${base}www/vendor/bin/phpunit -c ${base}phpunit.xml ${base}4dev/tests/
|
||||
27
4dev/composer/install.txt
Normal file
27
4dev/composer/install.txt
Normal file
@@ -0,0 +1,27 @@
|
||||
Install composer:
|
||||
# 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-8.0-httpd-2.4/bin/php composer.phar selfupdate
|
||||
|
||||
Install something:
|
||||
/usr/local/php-8.0-httpd-2.4/bin/php composer.phar require something/something
|
||||
|
||||
Update all installed:
|
||||
/usr/local/php-8.0-httpd-2.4/bin/php composer.phar update
|
||||
|
||||
Or update only one package:
|
||||
/usr/local/php-8.0-httpd-2.4/bin/php composer.phar something/something
|
||||
|
||||
Install AWS SDK:
|
||||
/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-8.0-httpd-2.4/bin/php composer.phar require maennchen/zipstream-php
|
||||
|
||||
@@ -1,5 +1,10 @@
|
||||
# functions
|
||||
function/update_function.sql
|
||||
function/set_uid.sql
|
||||
function/set_generic.sql
|
||||
function/random_string.sql
|
||||
function/set_edit_generic.sql
|
||||
function/edit_set_access_uid.sql
|
||||
function/edit_log_partition_insert.sql
|
||||
# generic tables
|
||||
table/edit_temp_files.sql
|
||||
table/edit_generic.sql
|
||||
@@ -14,22 +19,29 @@ table/edit_scheme.sql
|
||||
table/edit_language.sql
|
||||
table/edit_group.sql
|
||||
table/edit_page_access.sql
|
||||
table/edit_page_content.sql
|
||||
table/edit_user.sql
|
||||
table/edit_log.sql
|
||||
table/edit_log_overflow.sql
|
||||
table/edit_access.sql
|
||||
table/edit_access_user.sql
|
||||
table/edit_access_data.sql
|
||||
# all triggers (after all tables have been created)
|
||||
trigger/trg_edit_access_right.sql
|
||||
trigger/trg_edit_access.sql
|
||||
trigger/trg_edit_access_data.sql
|
||||
trigger/trg_edit_access_user.sql
|
||||
trigger/trg_edit_generic.sql
|
||||
trigger/trg_edit_group.sql
|
||||
trigger/trg_edit_language.sql
|
||||
trigger/trg_edit_log_overflow.sql
|
||||
trigger/trg_edit_log.sql
|
||||
trigger/trg_edit_page_access.sql
|
||||
trigger/trg_edit_page_content.sql
|
||||
trigger/trg_edit_page.sql
|
||||
trigger/trg_edit_query_string.sql
|
||||
trigger/trg_edit_scheme.sql
|
||||
trigger/trg_edit_user.sql
|
||||
trigger/trg_edit_visible_group.sql
|
||||
trigger/trg_edit_menu_group.sql
|
||||
# insert data
|
||||
data/edit_tables.sql
|
||||
|
||||
@@ -15,22 +15,20 @@ function_name="set_generic";
|
||||
#sql_path_prep=`echo $sql_path | sed -e "s/\///g"`;
|
||||
|
||||
# goes for each file and strips headers and endings, and creates trigger name
|
||||
for name in $sql_path*;
|
||||
do
|
||||
for name in $sql_path*; do
|
||||
echo "Wokring on $name";
|
||||
# strip ending
|
||||
# t_name=`echo $name | sed -e 's/.sql$//g' | sed -e "s/^$sql_path_prep//g" | sed -e 's/\///g'`;
|
||||
t_name=`echo $name | sed -e 's/^.*\///g' | sed -e 's/.sql$//g'`;
|
||||
# clean all beginnings
|
||||
for prefix in $file_prefix;
|
||||
do
|
||||
for prefix in $file_prefix; do
|
||||
prefix=$prefix"_";
|
||||
t_name=`echo $t_name | sed -e "s/\$prefix//g"`;
|
||||
done;
|
||||
|
||||
# those tables don't need a trigger
|
||||
# edit_generic
|
||||
# generic
|
||||
# those tables don't need a trigger
|
||||
# edit_generic
|
||||
# generic
|
||||
|
||||
# copy the trigger template to the target
|
||||
trg_filename=$trigger_path$trigger_prefix"_"$t_name".sql";
|
||||
|
||||
@@ -5,26 +5,23 @@
|
||||
#echo "EXIT";
|
||||
#exit;
|
||||
|
||||
db='cibavision_jp_cms';
|
||||
host='db.tokyo.tequila.jp';
|
||||
user='ciba_vision';
|
||||
db='<db name>';
|
||||
host='<db host>';
|
||||
user='<db user>';
|
||||
schemas="public dev";
|
||||
|
||||
file_prefix="trg";
|
||||
trigger_prefix="trg";
|
||||
index_prefix="idx";
|
||||
|
||||
for file in `cat ORDER`;
|
||||
do
|
||||
if [ -f $file ];
|
||||
then
|
||||
for file in `cat ORDER`; do
|
||||
if [ -f $file ]; then
|
||||
# write them into a var, so we can re order them in the other way
|
||||
new_order=$file" "$new_order;
|
||||
fi;
|
||||
done;
|
||||
|
||||
for file in $new_order;
|
||||
do
|
||||
for file in $new_order; do
|
||||
sqltype=`echo $file | egrep "table/"`;
|
||||
trgtype=`echo $file | egrep "trigger/"`;
|
||||
idxtype=`echo $file | egrep "index/"`;
|
||||
@@ -32,43 +29,34 @@ do
|
||||
datatype=`echo $file | egrep "data/"`;
|
||||
# remove all around to get table name
|
||||
t_file=`echo $file | sed -e 's/^.*\///g' | sed -e 's/.sql$//g'`;
|
||||
for prefix in $file_prefix;
|
||||
do
|
||||
for prefix in $file_prefix; do
|
||||
prefix=$prefix"_";
|
||||
t_file=`echo $t_file | sed -e "s/\$prefix//g"`;
|
||||
done;
|
||||
# copy the trigger template to the target
|
||||
|
||||
for path in $schema;
|
||||
do
|
||||
if [ $sqltype ];
|
||||
then
|
||||
for path in $schemas; do
|
||||
if [ $sqltype ]; then
|
||||
echo "SQL "$path"."$t_file;
|
||||
echo "DROP TABLE "$path"."$t_file" CASCADE;" | psql -U $user -h $host $db
|
||||
fi;
|
||||
if [ $trgtype ];
|
||||
then
|
||||
if [ $trgtype ]; then
|
||||
trigger=$trigger_prefix"_"$t_file;
|
||||
echo "TRG $trigger TBL "$path".$t_file";
|
||||
echo "DROP TRIGGER "$path".$trigger ON "$t_file" CASCADE;" | psql -U $user -h $host $db
|
||||
fi;
|
||||
if [ $fcttype ];
|
||||
then
|
||||
if [ $fcttype ]; then
|
||||
echo "FCT "$path"."$t_file;
|
||||
echo "DROP FUNCTION "$path"."$t_file"();" | psql -U $user -h $host $db
|
||||
fi;
|
||||
if [ $idxtype ];
|
||||
then
|
||||
if [ $idxtype ]; then
|
||||
index=$index_prefix"_"$t_file;
|
||||
# echo "IDX "$t_file;
|
||||
# echo "DROP INDEX $index ON $t_file;" | psql -U $user -h $host $db
|
||||
# echo "IDX "$t_file;
|
||||
# echo "DROP INDEX $index ON $t_file;" | psql -U $user -h $host $db
|
||||
fi;
|
||||
if [ $datatype ];
|
||||
then
|
||||
if [ $datatype ]; then
|
||||
echo "DATA "$t_file;
|
||||
# echo "DROP FUNCTION "$t_file"();" | psql -U $user -h $host $db
|
||||
# echo "DROP FUNCTION "$t_file"();" | psql -U $user -h $host $db
|
||||
fi;
|
||||
|
||||
# psql -U cms_user -h 192.168.12.14 -f $file CMSv2
|
||||
done;
|
||||
done;
|
||||
|
||||
@@ -5,19 +5,63 @@
|
||||
#echo "EXIT";
|
||||
#exit;
|
||||
|
||||
db='gullevek';
|
||||
host='db.tokyo.tequila.jp';
|
||||
user='gullevek';
|
||||
#schema="publicv";
|
||||
# if flagged 'y' then it will ask after each import to continue
|
||||
development='y';
|
||||
test='n';
|
||||
input='';
|
||||
# database connection info
|
||||
db='<db name>';
|
||||
host='<db host>';
|
||||
user='<db user>';
|
||||
schema="public";
|
||||
export PGPASSWORD='';
|
||||
|
||||
for file in `cat ORDER`;
|
||||
do
|
||||
if [ -f $file ];
|
||||
then
|
||||
# for path in $schema;
|
||||
# do
|
||||
# echo "WORK ON "$schema"."$file;
|
||||
psql -U $user -h $host -f $file $db 1>> output 2>> error
|
||||
# done;
|
||||
# log files
|
||||
error_file="log/error";
|
||||
output_file="log/output";
|
||||
|
||||
if [ ! -f ORDER ]; then
|
||||
echo "Could not find ORDER file";
|
||||
exit;
|
||||
fi;
|
||||
|
||||
if [ "$test" != "n" ]; then
|
||||
echo "TESTING MODE, NO DATA WILL BE IMPORTED";
|
||||
fi;
|
||||
if [ "$development" = "y" ]; then
|
||||
echo "STEP BY STEP IMPORT MODE ACTIVATED";
|
||||
fi;
|
||||
|
||||
while read file <&3; do
|
||||
if [ "$file" = "FINISHED" ]; then
|
||||
echo "Database data is flagged as FINISHED in ORDER file";
|
||||
exit;
|
||||
fi;
|
||||
done;
|
||||
if [ -f "$file" ]; then
|
||||
for path in "$schemas"; do
|
||||
echo "[+] WORK ON '${file}' @ '${path}'";
|
||||
if [ "$test" = 'n' ]; then
|
||||
echo "=== START [$file] ===>" >> ${error_file};
|
||||
psql -U ${user} -h ${host} -f "${file}" ${db} 1>> ${output_file} 2>> ${error_file}
|
||||
echo "=== END [$file] ===>" >> ${error_file};
|
||||
fi;
|
||||
if [ "$development" = "y" ]; then
|
||||
echo "Press 'y' to move to next. Press 'r' to reload last file. ^c to abort";
|
||||
fi;
|
||||
while [ "$development" = "y" ] && [ "$input" != "y" ]; do
|
||||
read -ep "Continue (y|r|^c): " input;
|
||||
if [ "$input" = "r" ]; then
|
||||
echo "Reload File '${file}' ...";
|
||||
if [ "$test" = 'n' ]; then
|
||||
echo "=== START RELOAD [$file] ===>" >> ${error_file};
|
||||
psql -U ${user} -h ${host} -f "${file}" ${db} 1>> ${output_file} 2>> ${error_file}
|
||||
echo "=== END RELOAD [$file] ===>" >> ${error_file};
|
||||
fi;
|
||||
fi;
|
||||
done;
|
||||
input='';
|
||||
done;
|
||||
elif [[ ${file::1} != "#" ]]; then
|
||||
echo "[!] COULD NOT FIND FILE: '${file}'";
|
||||
fi;
|
||||
done 3<ORDER;
|
||||
|
||||
149
4dev/database/data/edit_tables.sql
Executable file
149
4dev/database/data/edit_tables.sql
Executable file
@@ -0,0 +1,149 @@
|
||||
-- edit tables insert data in order
|
||||
|
||||
-- edit visible group
|
||||
DELETE FROM edit_visible_group;
|
||||
INSERT INTO edit_visible_group (name, flag) VALUES ('Main Menu', 'main');
|
||||
INSERT INTO edit_visible_group (name, flag) VALUES ('Data popup Menu', 'datapopup');
|
||||
|
||||
-- edit menu group
|
||||
DELETE FROM edit_menu_group;
|
||||
INSERT INTO edit_menu_group (name, flag, order_number) VALUES ('Admin Menu', 'admin', 1);
|
||||
INSERT INTO edit_menu_group (name, flag, order_number) VALUES ('Admin Data Popup Menu', 'AdminDataPopup', 2);
|
||||
|
||||
-- edit page
|
||||
DELETE FROM edit_page;
|
||||
INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_pages.php', 'Edit Pages', 1, 1, 1);
|
||||
INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_users.php', 'Edit Users', 2, 1, 1);
|
||||
INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_languages.php', 'Edit Languages', 3, 1, 1);
|
||||
INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_schemes.php', 'Edit Schemes', 4, 1, 1);
|
||||
INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_groups.php', 'Edit Groups', 5, 1, 1);
|
||||
INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_visible_group.php', 'Edit Visible Groups', 6, 1, 1);
|
||||
INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_menu_group.php', 'Edit Menu Groups', 7, 1, 1);
|
||||
INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_access.php', 'Edit Access', 8, 1, 1);
|
||||
INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_order.php', 'Edit Order', 9, 1, 0);
|
||||
|
||||
-- edit visible group
|
||||
DELETE FROM edit_page_visible_group;
|
||||
INSERT INTO edit_page_visible_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Pages'), (SELECT edit_visible_group_id FROM edit_visible_group WHERE flag = 'main'));
|
||||
INSERT INTO edit_page_visible_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Users'), (SELECT edit_visible_group_id FROM edit_visible_group WHERE flag = 'main'));
|
||||
INSERT INTO edit_page_visible_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Languages'), (SELECT edit_visible_group_id FROM edit_visible_group WHERE flag = 'main'));
|
||||
INSERT INTO edit_page_visible_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Schemes'), (SELECT edit_visible_group_id FROM edit_visible_group WHERE flag = 'main'));
|
||||
INSERT INTO edit_page_visible_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Groups'), (SELECT edit_visible_group_id FROM edit_visible_group WHERE flag = 'main'));
|
||||
INSERT INTO edit_page_visible_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Visible Groups'), (SELECT edit_visible_group_id FROM edit_visible_group WHERE flag = 'main'));
|
||||
INSERT INTO edit_page_visible_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Menu Groups'), (SELECT edit_visible_group_id FROM edit_visible_group WHERE flag = 'main'));
|
||||
INSERT INTO edit_page_visible_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Access'), (SELECT edit_visible_group_id FROM edit_visible_group WHERE flag = 'main'));
|
||||
-- INSERT INTO edit_page_visible_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Order'), (SELECT edit_visible_group_id FROM edit_visible_group WHERE flag = 'main'));
|
||||
|
||||
-- edit page menu group
|
||||
DELETE FROM edit_page_menu_group;
|
||||
INSERT INTO edit_page_menu_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Pages'), (SELECT edit_menu_group_id FROM edit_menu_group WHERE flag = 'admin'));
|
||||
INSERT INTO edit_page_menu_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Users'), (SELECT edit_menu_group_id FROM edit_menu_group WHERE flag = 'admin'));
|
||||
INSERT INTO edit_page_menu_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Languages'), (SELECT edit_menu_group_id FROM edit_menu_group WHERE flag = 'admin'));
|
||||
INSERT INTO edit_page_menu_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Schemes'), (SELECT edit_menu_group_id FROM edit_menu_group WHERE flag = 'admin'));
|
||||
INSERT INTO edit_page_menu_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Groups'), (SELECT edit_menu_group_id FROM edit_menu_group WHERE flag = 'admin'));
|
||||
INSERT INTO edit_page_menu_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Visible Groups'), (SELECT edit_menu_group_id FROM edit_menu_group WHERE flag = 'admin'));
|
||||
INSERT INTO edit_page_menu_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Menu Groups'), (SELECT edit_menu_group_id FROM edit_menu_group WHERE flag = 'admin'));
|
||||
INSERT INTO edit_page_menu_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Access'), (SELECT edit_menu_group_id FROM edit_menu_group WHERE flag = 'admin'));
|
||||
-- INSERT INTO edit_page_menu_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Order'), (SELECT edit_menu_group_id FROM edit_menu_group WHERE flag = 'admin'));
|
||||
|
||||
|
||||
-- edit access right
|
||||
DELETE FROM edit_access_right;
|
||||
INSERT INTO edit_access_right (name, level, type) VALUES ('Default', -1, 'default');
|
||||
INSERT INTO edit_access_right (name, level, type) VALUES ('No Access', 0, 'none');
|
||||
INSERT INTO edit_access_right (name, level, type) VALUES ('List', 10, 'list');
|
||||
INSERT INTO edit_access_right (name, level, type) VALUES ('Read', 20, 'read');
|
||||
INSERT INTO edit_access_right (name, level, type) VALUES ('Translator', 30, 'mod_trans');
|
||||
INSERT INTO edit_access_right (name, level, type) VALUES ('Modify', 40, 'mod');
|
||||
INSERT INTO edit_access_right (name, level, type) VALUES ('Create/Write', 60, 'write');
|
||||
INSERT INTO edit_access_right (name, level, type) VALUES ('Delete', 80, 'del');
|
||||
INSERT INTO edit_access_right (name, level, type) VALUES ('Site Admin', 90, 'siteadmin');
|
||||
INSERT INTO edit_access_right (name, level, type) VALUES ('Admin', 100, 'admin');
|
||||
|
||||
-- edit scheme
|
||||
DELETE FROM edit_scheme;
|
||||
INSERT INTO edit_scheme (name, header_color, enabled) VALUES ('Default Scheme', 'E0E2FF', 1);
|
||||
INSERT INTO edit_scheme (name, header_color, enabled) VALUES ('Admin', 'CC7E7E', 1);
|
||||
INSERT INTO edit_scheme (name, header_color, enabled) VALUES ('Visitor', 'B0C4B3', 1);
|
||||
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 (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;
|
||||
INSERT INTO edit_group (name, enabled, edit_scheme_id, edit_access_right_id) VALUES ('Admin', 1, (SELECT edit_scheme_id FROM edit_scheme WHERE name = 'Admin'), (SELECT edit_access_right_id FROM edit_access_right WHERE type = 'admin'));
|
||||
INSERT INTO edit_group (name, enabled, edit_scheme_id, edit_access_right_id) VALUES ('User', 1, (SELECT edit_scheme_id FROM edit_scheme WHERE name = 'User'), (SELECT edit_access_right_id FROM edit_access_right WHERE type = 'write'));
|
||||
|
||||
-- edit page access
|
||||
DELETE FROM edit_page_access;
|
||||
INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1,
|
||||
(SELECT edit_group_id FROM edit_group WHERE name = 'Admin'),
|
||||
(SELECT edit_page_id FROM edit_page WHERE name = 'Edit Pages'),
|
||||
(SELECT edit_access_right_id FROM edit_access_right WHERE type = 'admin')
|
||||
);
|
||||
INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1,
|
||||
(SELECT edit_group_id FROM edit_group WHERE name = 'Admin'),
|
||||
(SELECT edit_page_id FROM edit_page WHERE name = 'Edit Users'),
|
||||
(SELECT edit_access_right_id FROM edit_access_right WHERE type = 'admin')
|
||||
);
|
||||
INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1,
|
||||
(SELECT edit_group_id FROM edit_group WHERE name = 'Admin'),
|
||||
(SELECT edit_page_id FROM edit_page WHERE name = 'Edit Languages'),
|
||||
(SELECT edit_access_right_id FROM edit_access_right WHERE type = 'admin')
|
||||
);
|
||||
INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1,
|
||||
(SELECT edit_group_id FROM edit_group WHERE name = 'Admin'),
|
||||
(SELECT edit_page_id FROM edit_page WHERE name = 'Edit Schemes'),
|
||||
(SELECT edit_access_right_id FROM edit_access_right WHERE type = 'admin')
|
||||
);
|
||||
INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1,
|
||||
(SELECT edit_group_id FROM edit_group WHERE name = 'Admin'),
|
||||
(SELECT edit_page_id FROM edit_page WHERE name = 'Edit Groups'),
|
||||
(SELECT edit_access_right_id FROM edit_access_right WHERE type = 'admin')
|
||||
);
|
||||
INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1,
|
||||
(SELECT edit_group_id FROM edit_group WHERE name = 'Admin'),
|
||||
(SELECT edit_page_id FROM edit_page WHERE name = 'Edit Visible Groups'),
|
||||
(SELECT edit_access_right_id FROM edit_access_right WHERE type = 'admin')
|
||||
);
|
||||
INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1,
|
||||
(SELECT edit_group_id FROM edit_group WHERE name = 'Admin'),
|
||||
(SELECT edit_page_id FROM edit_page WHERE name = 'Edit Menu Groups'),
|
||||
(SELECT edit_access_right_id FROM edit_access_right WHERE type = 'admin')
|
||||
);
|
||||
INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1,
|
||||
(SELECT edit_group_id FROM edit_group WHERE name = 'Admin'),
|
||||
(SELECT edit_page_id FROM edit_page WHERE name = 'Edit Access'),
|
||||
(SELECT edit_access_right_id FROM edit_access_right WHERE type = 'admin')
|
||||
);
|
||||
INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1,
|
||||
(SELECT edit_group_id FROM edit_group WHERE name = 'Admin'),
|
||||
(SELECT edit_page_id FROM edit_page WHERE name = 'Edit Order'),
|
||||
(SELECT edit_access_right_id FROM edit_access_right WHERE type = 'admin')
|
||||
);
|
||||
|
||||
-- edit user
|
||||
-- inserts admin user so basic users can be created
|
||||
DELETE FROM edit_user;
|
||||
INSERT INTO edit_user (username, password, enabled, debug, db_debug, email, protected, admin, edit_language_id, edit_group_id, edit_scheme_id, edit_access_right_id) VALUES ('admin', 'admin', 1, 1, 1, '', 1, 1,
|
||||
(SELECT edit_language_id FROM edit_language WHERE short_name = 'en'),
|
||||
(SELECT edit_group_id FROM edit_group WHERE name = 'Admin'),
|
||||
(SELECT edit_scheme_id FROM edit_scheme WHERE name = 'Admin'),
|
||||
(SELECT edit_access_right_id FROM edit_access_right WHERE type = 'admin')
|
||||
);
|
||||
|
||||
-- edit access
|
||||
DELETE FROM edit_access;
|
||||
INSERT INTO edit_access (name, enabled, protected) VALUES ('Admin Access', 1, 1);
|
||||
|
||||
-- edit access user
|
||||
DELETE FROM edit_access_user;
|
||||
INSERT INTO edit_access_user (edit_default, enabled, edit_access_id, edit_user_id, edit_access_right_id) VALUES (1, 1,
|
||||
(SELECT edit_access_id FROM edit_access WHERE uid = 'AdminAccess'),
|
||||
(SELECT edit_user_id FROM edit_user WHERE username = 'admin'),
|
||||
(SELECT edit_access_right_id FROM edit_access_right WHERE type = 'admin')
|
||||
);
|
||||
150
4dev/database/function/edit_log_partition_insert.sql
Normal file
150
4dev/database/function/edit_log_partition_insert.sql
Normal file
@@ -0,0 +1,150 @@
|
||||
-- AUTHOR: Clemens Schwaighofer
|
||||
-- DATE: 2018-07-17
|
||||
-- DESCRIPTION:
|
||||
-- partition the edit_log table by year
|
||||
-- auto creates table if missing, if failure writes to overflow table
|
||||
-- HISTORY:
|
||||
|
||||
CREATE OR REPLACE FUNCTION edit_log_insert_trigger ()
|
||||
RETURNS TRIGGER AS
|
||||
$$
|
||||
DECLARE
|
||||
start_date DATE := '2010-01-01';
|
||||
end_date DATE;
|
||||
timeformat TEXT := 'YYYY';
|
||||
selector TEXT := 'year';
|
||||
base_table TEXT := 'edit_log';
|
||||
_interval INTERVAL := '1 ' || selector;
|
||||
_interval_next INTERVAL := '2 ' || selector;
|
||||
table_name TEXT;
|
||||
-- compare date column
|
||||
compare_date DATE := NEW.event_date;
|
||||
compare_date_name TEXT := 'event_date';
|
||||
-- the create commands
|
||||
command_create_table TEXT := 'CREATE TABLE IF NOT EXISTS {TABLE_NAME} (CHECK({COMPARE_DATE_NAME} >= {START_DATE} AND {COMPARE_DATE_NAME} < {END_DATE})) INHERITS ({BASE_NAME})';
|
||||
command_create_primary_key TEXT := 'ALTER TABLE {TABLE_NAME} ADD PRIMARY KEY ({BASE_TABLE}_id)';
|
||||
command_create_foreign_key_1 TEXT := 'ALTER TABLE {TABLE_NAME} ADD CONSTRAINT {TABLE_NAME}_euid_fkey FOREIGN KEY (euid) REFERENCES edit_user (edit_user_id) MATCH FULL ON UPDATE CASCADE ON DELETE SET NULL';
|
||||
command_create_trigger_1 TEXT = 'CREATE TRIGGER trg_{TABLE_NAME} BEFORE INSERT OR UPDATE ON {TABLE_NAME} FOR EACH ROW EXECUTE PROCEDURE set_edit_generic()';
|
||||
BEGIN
|
||||
-- we are in valid start time area
|
||||
IF (NEW.event_date >= start_date) THEN
|
||||
-- current table name
|
||||
table_name := base_table || '_' || to_char(NEW.event_date, timeformat);
|
||||
BEGIN
|
||||
EXECUTE 'INSERT INTO ' || quote_ident(table_name) || ' SELECT ($1).*' USING NEW;
|
||||
-- if insert failed because of missing table, create new below
|
||||
EXCEPTION
|
||||
WHEN undefined_table THEN
|
||||
-- another block, so in case the creation fails here too
|
||||
BEGIN
|
||||
-- create new table here + all indexes
|
||||
start_date := date_trunc(selector, NEW.event_date);
|
||||
end_date := date_trunc(selector, NEW.event_date + _interval);
|
||||
-- creat table
|
||||
EXECUTE format(REPLACE( -- end date
|
||||
REPLACE( -- start date
|
||||
REPLACE( -- compare date name
|
||||
REPLACE( -- base name (inherit)
|
||||
REPLACE( -- table name
|
||||
command_create_table,
|
||||
'{TABLE_NAME}',
|
||||
table_name
|
||||
),
|
||||
'{BASE_NAME}',
|
||||
base_table
|
||||
),
|
||||
'{COMPARE_DATE_NAME}',
|
||||
compare_date_name
|
||||
),
|
||||
'{START_DATE}',
|
||||
quote_literal(start_date)
|
||||
),
|
||||
'{END_DATE}',
|
||||
quote_literal(end_date)
|
||||
));
|
||||
-- create all indexes and triggers
|
||||
EXECUTE format(REPLACE(
|
||||
REPLACE(
|
||||
command_create_primary_key,
|
||||
'{TABLE_NAME}',
|
||||
table_name
|
||||
),
|
||||
'{BASE_TABLE}',
|
||||
base_table
|
||||
));
|
||||
-- FK constraints
|
||||
EXECUTE format(REPLACE(command_create_foreign_key_1, '{TABLE_NAME}', table_name));
|
||||
-- generic trigger
|
||||
EXECUTE format(REPLACE(command_create_trigger_1, '{TABLE_NAME}', table_name));
|
||||
|
||||
-- insert try again
|
||||
EXECUTE 'INSERT INTO ' || quote_ident(table_name) || ' SELECT ($1).*' USING NEW;
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
-- if this faled, throw it into the overflow table (so we don't loose anything)
|
||||
INSERT INTO edit_log_overflow VALUES (NEW.*);
|
||||
END;
|
||||
-- other errors, insert into overlow
|
||||
WHEN OTHERS THEN
|
||||
-- if this faled, throw it into the overflow table (so we don't loose anything)
|
||||
INSERT INTO edit_log_overflow VALUES (NEW.*);
|
||||
END;
|
||||
-- main insert run done, check if we have to create next months table
|
||||
BEGIN
|
||||
-- check if next month table exists
|
||||
table_name := base_table || '_' || to_char((SELECT NEW.event_date + _interval)::DATE, timeformat);
|
||||
-- RAISE NOTICE 'SEARCH NEXT: %', table_name;
|
||||
IF (SELECT to_regclass(table_name)) IS NULL THEN
|
||||
-- move inner interval same
|
||||
start_date := date_trunc(selector, NEW.event_date + _interval);
|
||||
end_date := date_trunc(selector, NEW.event_date + _interval_next);
|
||||
-- RAISE NOTICE 'CREATE NEXT: %', table_name;
|
||||
-- create table
|
||||
EXECUTE format(REPLACE( -- end date
|
||||
REPLACE( -- start date
|
||||
REPLACE( -- compare date name
|
||||
REPLACE( -- base name (inherit)
|
||||
REPLACE( -- table name
|
||||
command_create_table,
|
||||
'{TABLE_NAME}',
|
||||
table_name
|
||||
),
|
||||
'{BASE_NAME}',
|
||||
base_table
|
||||
),
|
||||
'{COMPARE_DATE_NAME}',
|
||||
compare_date_name
|
||||
),
|
||||
'{START_DATE}',
|
||||
quote_literal(start_date)
|
||||
),
|
||||
'{END_DATE}',
|
||||
quote_literal(end_date)
|
||||
));
|
||||
-- create all indexes and triggers
|
||||
EXECUTE format(REPLACE(
|
||||
REPLACE(
|
||||
command_create_primary_key,
|
||||
'{TABLE_NAME}',
|
||||
table_name
|
||||
),
|
||||
'{BASE_TABLE}',
|
||||
base_table
|
||||
));
|
||||
-- FK constraints
|
||||
EXECUTE format(REPLACE(command_create_foreign_key_1, '{TABLE_NAME}', table_name));
|
||||
-- generic trigger
|
||||
EXECUTE format(REPLACE(command_create_trigger_1, '{TABLE_NAME}', table_name));
|
||||
END IF;
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
RAISE NOTICE 'Failed to create next table: %', table_name;
|
||||
END;
|
||||
ELSE
|
||||
-- if outside valid date, insert into overflow
|
||||
INSERT INTO edit_log_overflow VALUES (NEW.*);
|
||||
END IF;
|
||||
RETURN NULL;
|
||||
END
|
||||
$$
|
||||
LANGUAGE 'plpgsql';
|
||||
@@ -1,6 +1,6 @@
|
||||
-- add uid add for edit_access table
|
||||
|
||||
CREATE OR REPLACE FUNCTION set_edit_access_uid() RETURNS TRIGGER AS
|
||||
CREATE OR REPLACE FUNCTION set_edit_access_uid() RETURNS TRIGGER AS
|
||||
$$
|
||||
DECLARE
|
||||
myrec RECORD;
|
||||
|
||||
28
4dev/database/function/edit_set_group_uid.sql
Executable file
28
4dev/database/function/edit_set_group_uid.sql
Executable file
@@ -0,0 +1,28 @@
|
||||
-- add uid add for edit_group table
|
||||
|
||||
CREATE OR REPLACE FUNCTION set_edit_group_uid() RETURNS TRIGGER AS
|
||||
$$
|
||||
DECLARE
|
||||
myrec RECORD;
|
||||
v_uid VARCHAR;
|
||||
BEGIN
|
||||
-- skip if NEW.name is not set
|
||||
IF NEW.name IS NOT NULL AND NEW.name <> '' THEN
|
||||
-- use NEW.name as base, remove all spaces
|
||||
-- name data is already unique, so we do not need to worry about this here
|
||||
v_uid := REPLACE(NEW.name, ' ', '');
|
||||
IF TG_OP = 'INSERT' THEN
|
||||
-- always set
|
||||
NEW.uid := v_uid;
|
||||
ELSIF TG_OP = 'UPDATE' THEN
|
||||
-- check if not set, then set
|
||||
SELECT INTO myrec t.* FROM edit_group t WHERE edit_group_id = NEW.edit_group_id;
|
||||
IF FOUND THEN
|
||||
NEW.uid := v_uid;
|
||||
END IF;
|
||||
END IF;
|
||||
END IF;
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$
|
||||
LANGUAGE 'plpgsql';
|
||||
18
4dev/database/function/random_string.sql
Normal file
18
4dev/database/function/random_string.sql
Normal file
@@ -0,0 +1,18 @@
|
||||
-- create random string with length X
|
||||
|
||||
CREATE FUNCTION random_string(randomLength int)
|
||||
RETURNS text AS $$
|
||||
SELECT array_to_string(
|
||||
ARRAY(
|
||||
SELECT substring(
|
||||
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789',
|
||||
trunc(random() * 62)::int + 1,
|
||||
1
|
||||
)
|
||||
FROM generate_series(1, randomLength) AS gs(x)
|
||||
),
|
||||
''
|
||||
)
|
||||
$$ LANGUAGE SQL
|
||||
RETURNS NULL ON NULL INPUT
|
||||
VOLATILE; -- LEAKPROOF;
|
||||
15
4dev/database/function/set_edit_generic.sql
Normal file
15
4dev/database/function/set_edit_generic.sql
Normal file
@@ -0,0 +1,15 @@
|
||||
-- adds the created or updated date tags
|
||||
|
||||
CREATE OR REPLACE FUNCTION set_edit_generic() RETURNS TRIGGER AS '
|
||||
DECLARE
|
||||
random_length INT = 12; -- that should be long enough
|
||||
BEGIN
|
||||
IF TG_OP = ''INSERT'' THEN
|
||||
NEW.date_created := ''now'';
|
||||
NEW.cuid := random_string(random_length);
|
||||
ELSIF TG_OP = ''UPDATE'' THEN
|
||||
NEW.date_updated := ''now'';
|
||||
END IF;
|
||||
RETURN NEW;
|
||||
END;
|
||||
' LANGUAGE 'plpgsql';
|
||||
12
4dev/database/function/set_uid.sql
Normal file
12
4dev/database/function/set_uid.sql
Normal file
@@ -0,0 +1,12 @@
|
||||
-- adds the created or updated date tags
|
||||
|
||||
CREATE OR REPLACE FUNCTION set_uid() RETURNS TRIGGER AS '
|
||||
DECLARE
|
||||
random_length INT = 32; -- that should be long enough
|
||||
BEGIN
|
||||
IF TG_OP = ''INSERT'' THEN
|
||||
NEW.uid := random_string(random_length);
|
||||
END IF;
|
||||
RETURN NEW;
|
||||
END;
|
||||
' LANGUAGE 'plpgsql';
|
||||
@@ -1,14 +1,16 @@
|
||||
-- adds the created or updated date tags
|
||||
|
||||
CREATE OR REPLACE FUNCTION set_generic() RETURNS TRIGGER AS '
|
||||
BEGIN
|
||||
IF TG_OP = ''INSERT'' THEN
|
||||
NEW.date_created := clock_timestamp();
|
||||
NEW.user_created := current_user;
|
||||
ELSIF TG_OP = ''UPDATE'' THEN
|
||||
NEW.date_updated := clock_timestamp();
|
||||
NEW.user_updated := current_user;
|
||||
END IF;
|
||||
RETURN NEW;
|
||||
END;
|
||||
' LANGUAGE 'plpgsql';
|
||||
-- OLD, DEPRECATED, use set_generic.sql
|
||||
|
||||
-- CREATE OR REPLACE FUNCTION set_generic() RETURNS TRIGGER AS '
|
||||
-- BEGIN
|
||||
-- IF TG_OP = ''INSERT'' THEN
|
||||
-- NEW.date_created := clock_timestamp();
|
||||
-- NEW.user_created := current_user;
|
||||
-- ELSIF TG_OP = ''UPDATE'' THEN
|
||||
-- NEW.date_updated := clock_timestamp();
|
||||
-- NEW.user_updated := current_user;
|
||||
-- END IF;
|
||||
-- RETURN NEW;
|
||||
-- END;
|
||||
-- ' LANGUAGE 'plpgsql';
|
||||
|
||||
2
4dev/database/log/.gitignore
vendored
Normal file
2
4dev/database/log/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
*
|
||||
!.gitignore
|
||||
@@ -8,10 +8,12 @@
|
||||
-- DROP TABLE edit_access;
|
||||
CREATE TABLE edit_access (
|
||||
edit_access_id SERIAL PRIMARY KEY,
|
||||
name VARCHAR(255) UNIQUE,
|
||||
enabled SMALLINT NOT NULL DEFAULT 0,
|
||||
protected SMALLINT DEFAULT 0,
|
||||
deleted SMALLINT DEFAULT 0,
|
||||
uid VARCHAR,
|
||||
name VARCHAR UNIQUE,
|
||||
description VARCHAR,
|
||||
COLOR VARCHAR
|
||||
color VARCHAR,
|
||||
additional_acl JSONB
|
||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||
|
||||
DELETE FROM edit_access;
|
||||
INSERT INTO edit_access (name) VALUES ('Admin Access');
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
CREATE TABLE edit_access_data (
|
||||
edit_access_data_id SERIAL PRIMARY KEY,
|
||||
edit_access_id INT NOT NULL,
|
||||
FOREIGN KEY (edit_access_id) REFERENCES edit_access (edit_access_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
enabled SMALLINT NOT NULL DEFAULT 0,
|
||||
name VARCHAR,
|
||||
value VARCHAR,
|
||||
enabled SMALLINT NOT NULL DEFAULT 0,
|
||||
FOREIGN KEY (edit_access_id) REFERENCES edit_access (edit_access_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
|
||||
value VARCHAR
|
||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||
|
||||
@@ -14,14 +14,3 @@ CREATE TABLE edit_access_right (
|
||||
type VARCHAR,
|
||||
UNIQUE (level,type)
|
||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||
|
||||
DELETE FROM edit_access_right;
|
||||
INSERT INTO edit_access_right (name, level, type) VALUES ('Default', -1, 'default');
|
||||
INSERT INTO edit_access_right (name, level, type) VALUES ('No Access', 0, 'none');
|
||||
INSERT INTO edit_access_right (name, level, type) VALUES ('Read', 20, 'read');
|
||||
INSERT INTO edit_access_right (name, level, type) VALUES ('Translator', 30, 'mod_trans');
|
||||
INSERT INTO edit_access_right (name, level, type) VALUES ('Modify', 40, 'mod');
|
||||
INSERT INTO edit_access_right (name, level, type) VALUES ('Create/Write', 60, 'write');
|
||||
INSERT INTO edit_access_right (name, level, type) VALUES ('Delete', 80, 'del');
|
||||
INSERT INTO edit_access_right (name, level, type) VALUES ('Site Admin', 90, 'siteadmin');
|
||||
INSERT INTO edit_access_right (name, level, type) VALUES ('Admin', 100, 'admin');
|
||||
|
||||
@@ -8,15 +8,12 @@
|
||||
-- DROP TABLE edit_access_user;
|
||||
CREATE TABLE edit_access_user (
|
||||
edit_access_user_id SERIAL PRIMARY KEY,
|
||||
edit_default SMALLINT DEFAULT 0,
|
||||
edit_access_id INT NOT NULL,
|
||||
edit_user_id INT NOT NULL,
|
||||
edit_access_right_id INT NOT NULL,
|
||||
enabled SMALLINT NOT NULL DEFAULT 0,
|
||||
FOREIGN KEY (edit_access_id) REFERENCES edit_access (edit_access_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
edit_user_id INT NOT NULL,
|
||||
FOREIGN KEY (edit_user_id) REFERENCES edit_user (edit_user_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
|
||||
edit_access_right_id INT NOT NULL,
|
||||
FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
edit_default SMALLINT DEFAULT 0,
|
||||
enabled SMALLINT NOT NULL DEFAULT 0
|
||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||
|
||||
DELETE FROM edit_access_user;
|
||||
INSERT INTO edit_access_user (edit_default, edit_access_id, edit_user_id, edit_access_right_id) VALUES (1, 1, 1, 8);
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
-- DROP TABLE edit_generic;
|
||||
CREATE TABLE edit_generic (
|
||||
eg_status INT,
|
||||
cuid VARCHAR,
|
||||
date_created TIMESTAMP WITHOUT TIME ZONE DEFAULT clock_timestamp(),
|
||||
date_updated TIMESTAMP WITHOUT TIME ZONE
|
||||
);
|
||||
|
||||
@@ -8,12 +8,13 @@
|
||||
-- DROP TABLE edit_group;
|
||||
CREATE TABLE edit_group (
|
||||
edit_group_id SERIAL PRIMARY KEY,
|
||||
name VARCHAR(50),
|
||||
enabled SMALLINT NOT NULL DEFAULT 0,
|
||||
edit_scheme_id INT,
|
||||
edit_access_right_id INT NOT NULL,
|
||||
FOREIGN KEY (edit_scheme_id) REFERENCES edit_scheme (edit_scheme_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
|
||||
edit_access_right_id INT NOT NULL,
|
||||
FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
enabled SMALLINT NOT NULL DEFAULT 0,
|
||||
deleted SMALLINT DEFAULT 0,
|
||||
uid VARCHAR,
|
||||
name VARCHAR,
|
||||
additional_acl JSONB
|
||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||
|
||||
INSERT INTO edit_group (name, enabled, edit_scheme_id, edit_access_right_id) VALUES ('Admin', 1, 2, 8);
|
||||
|
||||
@@ -9,12 +9,10 @@
|
||||
-- DROP TABLE edit_language;
|
||||
CREATE TABLE edit_language (
|
||||
edit_language_id SERIAL PRIMARY KEY,
|
||||
short_name VARCHAR(2),
|
||||
long_name VARCHAR(70),
|
||||
iso_name VARCHAR(12),
|
||||
order_number INT,
|
||||
enabled SMALLINT NOT NULL DEFAULT 0,
|
||||
lang_default SMALLINT NOT NULL DEFAULT 0 UNIQUE
|
||||
lang_default SMALLINT NOT NULL DEFAULT 0,
|
||||
long_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;
|
||||
|
||||
INSERT INTO edit_language (short_name, long_name, iso_name, order_number, enabled, lang_default) VALUES ('en', 'English', 'UTF-8', 1, 1, 1);
|
||||
|
||||
@@ -8,6 +8,8 @@
|
||||
-- DROP TABLE edit_log;
|
||||
CREATE TABLE edit_log (
|
||||
edit_log_id SERIAL PRIMARY KEY,
|
||||
euid INT, -- this is a foreign key, but I don't nedd to reference to it
|
||||
FOREIGN KEY (euid) REFERENCES edit_user (edit_user_id) MATCH FULL ON UPDATE CASCADE ON DELETE SET NULL,
|
||||
username VARCHAR,
|
||||
password VARCHAR,
|
||||
event_date TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
||||
@@ -26,7 +28,6 @@ CREATE TABLE edit_log (
|
||||
action_value VARCHAR,
|
||||
action_type VARCHAR,
|
||||
action_error VARCHAR,
|
||||
euid INT, -- this is a foreign key, but I don't nedd to reference to it
|
||||
user_agent VARCHAR,
|
||||
referer VARCHAR,
|
||||
script_name VARCHAR,
|
||||
@@ -36,6 +37,5 @@ CREATE TABLE edit_log (
|
||||
http_accept VARCHAR,
|
||||
http_accept_charset VARCHAR,
|
||||
http_accept_encoding VARCHAR,
|
||||
session_id VARCHAR,
|
||||
FOREIGN KEY (euid) REFERENCES edit_user (edit_user_id) MATCH FULL ON UPDATE CASCADE
|
||||
session_id VARCHAR
|
||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||
|
||||
12
4dev/database/table/edit_log_overflow.sql
Normal file
12
4dev/database/table/edit_log_overflow.sql
Normal file
@@ -0,0 +1,12 @@
|
||||
-- AUTHOR: Clemens Schwaighofer
|
||||
-- DATE: 2020/1/28
|
||||
-- DESCRIPTION:
|
||||
-- edit log overflow table
|
||||
-- this is the overflow table for partition
|
||||
-- TABLE: edit_log_overflow
|
||||
-- HISTORY:
|
||||
|
||||
-- DROP TABLE edit_log_overflow;
|
||||
CREATE TABLE IF NOT EXISTS edit_log_overflow () INHERITS (edit_log);
|
||||
ALTER TABLE edit_log_overflow ADD PRIMARY KEY (edit_log_id);
|
||||
ALTER TABLE edit_log_overflow ADD CONSTRAINT edit_log_overflow_euid_fkey FOREIGN KEY (euid) REFERENCES edit_user (edit_user_id) MATCH FULL ON UPDATE CASCADE ON DELETE SET NULL;
|
||||
@@ -8,11 +8,9 @@
|
||||
-- DROP TABLE edit_menu_group;
|
||||
CREATE TABLE edit_menu_group (
|
||||
edit_menu_group_id SERIAL PRIMARY KEY,
|
||||
name VARCHAR(255),
|
||||
flag VARCHAR(50),
|
||||
name VARCHAR,
|
||||
flag VARCHAR,
|
||||
order_number INT NOT NULL
|
||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||
|
||||
DELETE FROM edit_menu_group;
|
||||
INSERT INTO edit_menu_group (name, flag, order_number) VALUES ('Admin Menu', 'admin', 1);
|
||||
INSERT INTO edit_menu_group (name, flag, order_number) VALUES ('Admin Data Popup Menu', 'AdminDataPopup', 2);
|
||||
|
||||
|
||||
@@ -2,29 +2,21 @@
|
||||
-- DATE: 2005/07/05
|
||||
-- DESCRIPTION:
|
||||
-- edit tables, this table contains all pages in the edit interface and allocates rights + values to it
|
||||
-- TABLE: edit_table
|
||||
-- TABLE: edit_page
|
||||
-- HISTORY:
|
||||
|
||||
-- DROP TABLE edit_page;
|
||||
CREATE TABLE edit_page (
|
||||
edit_page_id SERIAL PRIMARY KEY,
|
||||
filename VARCHAR(70),
|
||||
name VARCHAR(255) UNIQUE,
|
||||
content_alias_edit_page_id INT, -- alias for page content, if the page content is defined on a different page, ege for ajax backend pages
|
||||
FOREIGN KEY (content_alias_edit_page_id) REFERENCES edit_page (edit_page_id) MATCH FULL ON DELETE RESTRICT ON UPDATE CASCADE,
|
||||
filename VARCHAR,
|
||||
name VARCHAR UNIQUE,
|
||||
order_number INT NOT NULL,
|
||||
online SMALLINT NOT NULL DEFAULT 0,
|
||||
menu SMALLINT NOT NULL DEFAULT 0,
|
||||
popup SMALLINT NOT NULL DEFAULT 0,
|
||||
popup_x SMALLINT,
|
||||
popup_y SMALLINT
|
||||
popup_y SMALLINT,
|
||||
hostname VARCHAR
|
||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||
|
||||
DELETE FROM edit_page;
|
||||
INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_pages.php', 'Edit Pages', 1, 1, 1);
|
||||
INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_users.php', 'Edit Users', 2, 1, 1);
|
||||
INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_languages.php', 'Edit Languages', 3, 1, 1);
|
||||
INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_schemes.php', 'Edit Schemes', 4, 1, 1);
|
||||
INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_groups.php', 'Edit Groups', 5, 1, 1);
|
||||
INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_visible_group.php', 'Edit Visible Groups', 6, 1, 1);
|
||||
INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_menu_group.php', 'Edit Menu Groups', 7, 1, 1);
|
||||
INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_access.php', 'Edit Access', 8, 1, 1);
|
||||
INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_order.php', 'Edit Order', 9, 1, 0);
|
||||
|
||||
@@ -8,21 +8,13 @@
|
||||
-- DROP TABLE edit_page_access;
|
||||
CREATE TABLE edit_page_access (
|
||||
edit_page_access_id SERIAL PRIMARY KEY,
|
||||
enabled SMALLINT NOT NULL DEFAULT 0,
|
||||
edit_group_id INT NOT NULL,
|
||||
edit_page_id INT NOT NULL,
|
||||
edit_access_right_id INT NOT NULL,
|
||||
FOREIGN KEY (edit_group_id) REFERENCES edit_group (edit_group_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
edit_page_id INT NOT NULL,
|
||||
FOREIGN KEY (edit_page_id) REFERENCES edit_page (edit_page_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
|
||||
edit_access_right_id INT NOT NULL,
|
||||
FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
enabled SMALLINT NOT NULL DEFAULT 0
|
||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||
|
||||
INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1, 1, 1, 8);
|
||||
INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1, 1, 2, 8);
|
||||
INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1, 1, 3, 8);
|
||||
INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1, 1, 4, 8);
|
||||
INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1, 1, 5, 8);
|
||||
INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1, 1, 6, 8);
|
||||
INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1, 1, 7, 8);
|
||||
INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1, 1, 8, 8);
|
||||
INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1, 1, 9, 8);
|
||||
|
||||
|
||||
20
4dev/database/table/edit_page_content.sql
Normal file
20
4dev/database/table/edit_page_content.sql
Normal file
@@ -0,0 +1,20 @@
|
||||
-- AUTHOR: Clemens Schwaighofer
|
||||
-- DATE: 2019/9/9
|
||||
-- DESCRIPTION:
|
||||
-- sub content to one page with additional edit access right set
|
||||
-- can be eg JS content groups on one page
|
||||
-- TABLE: edit_page_content
|
||||
-- HISTORY:
|
||||
|
||||
-- DROP TABLE edit_page_content;
|
||||
CREATE TABLE edit_page_content (
|
||||
edit_page_content_id SERIAL PRIMARY KEY,
|
||||
edit_page_id INT NOT NULL,
|
||||
FOREIGN KEY (edit_page_id) REFERENCES edit_page (edit_page_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
edit_access_right_id INT NOT NULL,
|
||||
FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
uid VARCHAR UNIQUE,
|
||||
name VARCHAR,
|
||||
order_number INT NOT NULL,
|
||||
online SMALLINT NOT NULL DEFAULT 0
|
||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||
@@ -8,16 +8,7 @@
|
||||
-- DROP TABLE edit_page_menu_group;
|
||||
CREATE TABLE edit_page_menu_group (
|
||||
edit_page_id INT NOT NULL,
|
||||
edit_menu_group_id INT NOT NULL,
|
||||
FOREIGN KEY (edit_page_id) REFERENCES edit_page (edit_page_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
edit_menu_group_id INT NOT NULL,
|
||||
FOREIGN KEY (edit_menu_group_id) REFERENCES edit_menu_group (edit_menu_group_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
|
||||
);
|
||||
|
||||
DELETE FROM edit_page_menu_group;
|
||||
INSERT INTO edit_page_menu_group VALUES (1, 1);
|
||||
INSERT INTO edit_page_menu_group VALUES (2, 1);
|
||||
INSERT INTO edit_page_menu_group VALUES (3, 1);
|
||||
INSERT INTO edit_page_menu_group VALUES (4, 1);
|
||||
INSERT INTO edit_page_menu_group VALUES (5, 1);
|
||||
INSERT INTO edit_page_menu_group VALUES (6, 1);
|
||||
INSERT INTO edit_page_menu_group VALUES (7, 1);
|
||||
|
||||
@@ -8,16 +8,7 @@
|
||||
-- DROP TABLE edit_page_visible_group;
|
||||
CREATE TABLE edit_page_visible_group (
|
||||
edit_page_id INT NOT NULL,
|
||||
edit_visible_group_id INT NOT NULL,
|
||||
FOREIGN KEY (edit_page_id) REFERENCES edit_page (edit_page_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
edit_visible_group_id INT NOT NULL,
|
||||
FOREIGN KEY (edit_visible_group_id) REFERENCES edit_visible_group (edit_visible_group_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
|
||||
);
|
||||
|
||||
DELETE FROM edit_page_visible_group;
|
||||
INSERT INTO edit_page_visible_group VALUES (1, 1);
|
||||
INSERT INTO edit_page_visible_group VALUES (2, 1);
|
||||
INSERT INTO edit_page_visible_group VALUES (3, 1);
|
||||
INSERT INTO edit_page_visible_group VALUES (4, 1);
|
||||
INSERT INTO edit_page_visible_group VALUES (5, 1);
|
||||
INSERT INTO edit_page_visible_group VALUES (6, 1);
|
||||
INSERT INTO edit_page_visible_group VALUES (7, 1);
|
||||
|
||||
@@ -8,10 +8,10 @@
|
||||
-- DROP TABLE edit_query_string;
|
||||
CREATE TABLE edit_query_string (
|
||||
edit_query_string_id SERIAL PRIMARY KEY,
|
||||
name VARCHAR(255),
|
||||
value VARCHAR(255),
|
||||
enabled SMALLINT NOT NULL DEFAULT 0,
|
||||
dynamic SMALLINT NOT NULL DEFAULT 0,
|
||||
edit_page_id INT NOT NULL,
|
||||
FOREIGN KEY (edit_page_id) REFERENCES edit_page (edit_page_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
|
||||
FOREIGN KEY (edit_page_id) REFERENCES edit_page (edit_page_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
enabled SMALLINT NOT NULL DEFAULT 0,
|
||||
name VARCHAR,
|
||||
value VARCHAR,
|
||||
dynamic SMALLINT NOT NULL DEFAULT 0
|
||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||
|
||||
@@ -9,12 +9,8 @@
|
||||
CREATE TABLE edit_scheme (
|
||||
edit_scheme_id SERIAL PRIMARY KEY,
|
||||
enabled SMALLINT NOT NULL DEFAULT 0,
|
||||
name VARCHAR(50),
|
||||
header_color VARCHAR(7),
|
||||
css_file VARCHAR(50),
|
||||
template VARCHAR(50)
|
||||
name VARCHAR,
|
||||
header_color VARCHAR,
|
||||
css_file VARCHAR,
|
||||
template VARCHAR
|
||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||
|
||||
INSERT INTO edit_scheme (name, header_color, enabled) VALUES ('Default Scheme', '#E0E2FF', 1);
|
||||
INSERT INTO edit_scheme (name, header_color, enabled) VALUES ('Admin', '#CC7E7E', 1);
|
||||
INSERT INTO edit_scheme (name, header_color, enabled) VALUES ('Visitor', '#B0C4B3', 1);
|
||||
|
||||
@@ -7,5 +7,6 @@
|
||||
|
||||
-- DROP TABLE temp_files;
|
||||
CREATE TABLE temp_files (
|
||||
filename VARCHAR(250)
|
||||
filename VARCHAR,
|
||||
folder VARCHAR
|
||||
);
|
||||
|
||||
@@ -8,31 +8,41 @@
|
||||
-- DROP TABLE edit_user;
|
||||
CREATE TABLE edit_user (
|
||||
edit_user_id SERIAL PRIMARY KEY,
|
||||
connect_edit_user_id INT, -- possible reference to other user
|
||||
FOREIGN KEY (connect_edit_user_id) REFERENCES edit_user (edit_user_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
edit_language_id INT NOT NULL,
|
||||
FOREIGN KEY (edit_language_id) REFERENCES edit_language (edit_language_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
edit_group_id INT NOT NULL,
|
||||
FOREIGN KEY (edit_group_id) REFERENCES edit_group (edit_group_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
edit_scheme_id INT,
|
||||
FOREIGN KEY (edit_scheme_id) REFERENCES edit_scheme (edit_scheme_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
edit_access_right_id INT NOT NULL,
|
||||
FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
enabled SMALLINT NOT NULL DEFAULT 0,
|
||||
deleted SMALLINT NOT NULL DEFAULT 0,
|
||||
username VARCHAR UNIQUE,
|
||||
password VARCHAR,
|
||||
enabled SMALLINT NOT NULL DEFAULT 0,
|
||||
first_name VARCHAR,
|
||||
last_name VARCHAR,
|
||||
first_name_furigana VARCHAR,
|
||||
last_name_furigana VARCHAR,
|
||||
debug SMALLINT NOT NULL DEFAULT 0,
|
||||
db_debug SMALLINT NOT NULL DEFAULT 0,
|
||||
email VARCHAR,
|
||||
protected SMALLINT NOT NULL DEFAULT 0,
|
||||
admin SMALLINT NOT NULL DEFAULT 0,
|
||||
edit_language_id INT NOT NULL,
|
||||
edit_group_id INT NOT NULL,
|
||||
edit_scheme_id INT,
|
||||
edit_access_right_id INT NOT NULL,
|
||||
login_error_count INT,
|
||||
login_error_date_last TIMESTAMP WTIHOUT TIME ZONE,
|
||||
login_error_date_first TIMESTAMP WTIHOUT TIME ZONE,
|
||||
last_login TIMESTAMP WITHOUT TIME ZONE,
|
||||
login_error_count INT DEFAULT 0,
|
||||
login_error_date_last TIMESTAMP WITHOUT TIME ZONE,
|
||||
login_error_date_first TIMESTAMP WITHOUT TIME ZONE,
|
||||
strict SMALLINT DEFAULT 0,
|
||||
locked SMALLINT DEFAULT 0,
|
||||
password_change_date TIMESTAMP WITHOUT TIME ZONE, -- only when password is first set or changed
|
||||
password_change_interval INTERVAL, -- null if no change is needed, or d/m/y time interval
|
||||
FOREIGN KEY (edit_language_id) REFERENCES edit_language (edit_language_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
FOREIGN KEY (edit_group_id) REFERENCES edit_group (edit_group_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
FOREIGN KEY (edit_scheme_id) REFERENCES edit_scheme (edit_scheme_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
|
||||
password_reset_time TIMESTAMP WITHOUT TIME ZONE, -- when the password reset was requested
|
||||
password_reset_uid VARCHAR, -- the uid to access the password reset page
|
||||
additional_acl JSONB -- additional ACL as JSON string (can be set by other pages)
|
||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||
|
||||
-- inserts admin user so basic users can be created
|
||||
DELETE FROM edit_user;
|
||||
INSERT INTO edit_user (username, password, enabled, debug, db_debug, email, protected, admin, edit_language_id, edit_group_id, edit_scheme_id, edit_access_right_id) VALUES ('admin', 'admin', 1, 1, 1, '', 1, 1, 1, 1, 2, 8);
|
||||
COMMENT ON COLUMN edit_user.password_reset_time IS 'When the password reset was requested. For reset page uid valid check';
|
||||
COMMENT ON COLUMN edit_user.password_reset_uid IS 'Password reset page uid';
|
||||
|
||||
@@ -8,10 +8,6 @@
|
||||
-- DROP TABLE edit_visible_group;
|
||||
CREATE TABLE edit_visible_group (
|
||||
edit_visible_group_id SERIAL PRIMARY KEY,
|
||||
name VARCHAR(255),
|
||||
flag VARCHAR(50)
|
||||
name VARCHAR,
|
||||
flag VARCHAR
|
||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||
|
||||
DELETE FROM edit_visible_group;
|
||||
INSERT INTO edit_visible_group (name, flag) VALUES ('Main Menu', 'main');
|
||||
INSERT INTO edit_visible_group (name, flag) VALUES ('Data popup Menu', 'datapopup');
|
||||
|
||||
@@ -1,4 +1,9 @@
|
||||
-- DROP TRIGGER trg_edit_access ON edit_access;
|
||||
DROP TRIGGER IF EXISTS trg_edit_access ON edit_access;
|
||||
CREATE TRIGGER trg_edit_access
|
||||
BEFORE INSERT OR UPDATE ON edit_access
|
||||
FOR EACH ROW EXECUTE PROCEDURE set_generic();
|
||||
FOR EACH ROW EXECUTE PROCEDURE set_edit_generic();
|
||||
|
||||
DROP TRIGGER IF EXISTS trg_set_edit_access_uid ON edit_access;
|
||||
CREATE TRIGGER trg_set_edit_access_uid
|
||||
BEFORE INSERT OR UPDATE ON edit_access
|
||||
FOR EACH ROW EXECUTE PROCEDURE set_edit_access_uid();
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
-- DROP TRIGGER trg_edit_access_data ON edit_access_data;
|
||||
DROP TRIGGER IF EXISTS trg_edit_access_data ON edit_access_data;
|
||||
CREATE TRIGGER trg_edit_access_data
|
||||
BEFORE INSERT OR UPDATE ON edit_access_data
|
||||
FOR EACH ROW EXECUTE PROCEDURE set_generic();
|
||||
FOR EACH ROW EXECUTE PROCEDURE set_edit_generic();
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
-- DROP TRIGGER trg_edit_access_right ON edit_access_right;
|
||||
DROP TRIGGER IF EXISTS trg_edit_access_right ON edit_access_right;
|
||||
CREATE TRIGGER trg_edit_access_right
|
||||
BEFORE INSERT OR UPDATE ON edit_access_right
|
||||
FOR EACH ROW EXECUTE PROCEDURE set_generic();
|
||||
FOR EACH ROW EXECUTE PROCEDURE set_edit_generic();
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
-- DROP TRIGGER trg_edit_access_user ON edit_access_user;
|
||||
DROP TRIGGER IF EXISTS trg_edit_access_user ON edit_access_user;
|
||||
CREATE TRIGGER trg_edit_access_user
|
||||
BEFORE INSERT OR UPDATE ON edit_access_user
|
||||
FOR EACH ROW EXECUTE PROCEDURE set_generic();
|
||||
FOR EACH ROW EXECUTE PROCEDURE set_edit_generic();
|
||||
|
||||
@@ -1,4 +1,9 @@
|
||||
-- DROP TRIGGER trg_edit_group ON edit_group;
|
||||
DROP TRIGGER IF EXISTS trg_edit_group ON edit_group;
|
||||
CREATE TRIGGER trg_edit_group
|
||||
BEFORE INSERT OR UPDATE ON edit_group
|
||||
FOR EACH ROW EXECUTE PROCEDURE set_generic();
|
||||
FOR EACH ROW EXECUTE PROCEDURE set_edit_generic();
|
||||
|
||||
DROP TRIGGER IF EXISTS trg_set_edit_group_uid ON edit_group;
|
||||
CREATE TRIGGER trg_set_edit_group_uid
|
||||
BEFORE INSERT OR UPDATE ON edit_group
|
||||
FOR EACH ROW EXECUTE PROCEDURE set_edit_group_uid();
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
-- DROP TRIGGER trg_edit_language ON edit_language;
|
||||
DROP TRIGGER IF EXISTS trg_edit_language ON edit_language;
|
||||
CREATE TRIGGER trg_edit_language
|
||||
BEFORE INSERT OR UPDATE ON edit_language
|
||||
FOR EACH ROW EXECUTE PROCEDURE set_generic();
|
||||
FOR EACH ROW EXECUTE PROCEDURE set_edit_generic();
|
||||
|
||||
@@ -1,4 +1,9 @@
|
||||
-- DROP TRIGGER trg_edit_log ON edit_log;
|
||||
DROP TRIGGER IF EXISTS trg_edit_log ON edit_log;
|
||||
CREATE TRIGGER trg_edit_log
|
||||
BEFORE INSERT OR UPDATE ON edit_log
|
||||
FOR EACH ROW EXECUTE PROCEDURE set_generic();
|
||||
FOR EACH ROW EXECUTE PROCEDURE set_edit_generic();
|
||||
|
||||
DROP TRIGGER IF EXISTS trg_edit_log_insert_partition ON edit_log;
|
||||
CREATE TRIGGER trg_edit_log_insert_partition
|
||||
BEFORE INSERT OR UPDATE ON edit_log
|
||||
FOR EACH ROW EXECUTE PROCEDURE edit_log_insert_trigger();
|
||||
|
||||
4
4dev/database/trigger/trg_edit_log_overflow.sql
Normal file
4
4dev/database/trigger/trg_edit_log_overflow.sql
Normal file
@@ -0,0 +1,4 @@
|
||||
DROP TRIGGER IF EXISTS trg_edit_log_overflow ON edit_log_overflow;
|
||||
CREATE TRIGGER trg_edit_log_overflow
|
||||
BEFORE INSERT OR UPDATE ON edit_log_overflow
|
||||
FOR EACH ROW EXECUTE PROCEDURE set_edit_generic();
|
||||
@@ -1,4 +1,4 @@
|
||||
-- DROP TRIGGER trg_edit_visible_group ON edit_visible_group;
|
||||
DROP TRIGGER IF EXISTS trg_edit_menu_group ON edit_menu_group;
|
||||
CREATE TRIGGER trg_edit_menu_group
|
||||
BEFORE INSERT OR UPDATE ON edit_menu_group
|
||||
FOR EACH ROW EXECUTE PROCEDURE set_generic();
|
||||
FOR EACH ROW EXECUTE PROCEDURE set_edit_generic();
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
-- DROP TRIGGER trg_edit_page ON edit_page;
|
||||
DROP TRIGGER IF EXISTS trg_edit_page ON edit_page;
|
||||
CREATE TRIGGER trg_edit_page
|
||||
BEFORE INSERT OR UPDATE ON edit_page
|
||||
FOR EACH ROW EXECUTE PROCEDURE set_generic();
|
||||
FOR EACH ROW EXECUTE PROCEDURE set_edit_generic();
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
-- DROP TRIGGER trg_edit_page_access ON edit_page_access;
|
||||
DROP TRIGGER IF EXISTS trg_edit_page_access ON edit_page_access;
|
||||
CREATE TRIGGER trg_edit_page_access
|
||||
BEFORE INSERT OR UPDATE ON edit_page_access
|
||||
FOR EACH ROW EXECUTE PROCEDURE set_generic();
|
||||
FOR EACH ROW EXECUTE PROCEDURE set_edit_generic();
|
||||
|
||||
4
4dev/database/trigger/trg_edit_page_content.sql
Normal file
4
4dev/database/trigger/trg_edit_page_content.sql
Normal file
@@ -0,0 +1,4 @@
|
||||
DROP TRIGGER IF EXISTS trg_edit_page_content ON edit_page_content;
|
||||
CREATE TRIGGER trg_edit_page_content
|
||||
BEFORE INSERT OR UPDATE ON edit_page_content
|
||||
FOR EACH ROW EXECUTE PROCEDURE set_edit_generic();
|
||||
@@ -1,4 +1,4 @@
|
||||
-- DROP TRIGGER trg_edit_query_string ON edit_query_string;
|
||||
DROP TRIGGER IF EXISTS trg_edit_query_string ON edit_query_string;
|
||||
CREATE TRIGGER trg_edit_query_string
|
||||
BEFORE INSERT OR UPDATE ON edit_query_string
|
||||
FOR EACH ROW EXECUTE PROCEDURE set_generic();
|
||||
FOR EACH ROW EXECUTE PROCEDURE set_edit_generic();
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
-- DROP TRIGGER trg_edit_scheme ON edit_scheme;
|
||||
DROP TRIGGER IF EXISTS trg_edit_scheme ON edit_scheme;
|
||||
CREATE TRIGGER trg_edit_scheme
|
||||
BEFORE INSERT OR UPDATE ON edit_scheme
|
||||
FOR EACH ROW EXECUTE PROCEDURE set_generic();
|
||||
FOR EACH ROW EXECUTE PROCEDURE set_edit_generic();
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
-- DROP TRIGGER trg_edit_user ON edit_user;
|
||||
DROP TRIGGER IF EXISTS trg_edit_user ON edit_user;
|
||||
CREATE TRIGGER trg_edit_user
|
||||
BEFORE INSERT OR UPDATE ON edit_user
|
||||
FOR EACH ROW EXECUTE PROCEDURE set_generic();
|
||||
FOR EACH ROW EXECUTE PROCEDURE set_edit_generic();
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
-- DROP TRIGGER trg_edit_visible_group ON edit_visible_group;
|
||||
DROP TRIGGER IF EXISTS trg_edit_visible_group ON edit_visible_group;
|
||||
CREATE TRIGGER trg_edit_visible_group
|
||||
BEFORE INSERT OR UPDATE ON edit_visible_group
|
||||
FOR EACH ROW EXECUTE PROCEDURE set_generic();
|
||||
FOR EACH ROW EXECUTE PROCEDURE set_edit_generic();
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
-- DROP TRIGGER trg_set_edit_access_uid ON edit_access;
|
||||
CREATE TRIGGER trg_set_edit_access_uid
|
||||
BEFORE INSERT OR UPDATE ON edit_access
|
||||
FOR EACH ROW EXECUTE PROCEDURE set_edit_access_uid();
|
||||
14
4dev/database/update/edit_tables_missing_columns.sql
Normal file
14
4dev/database/update/edit_tables_missing_columns.sql
Normal file
@@ -0,0 +1,14 @@
|
||||
-- update missing edit_* table data
|
||||
|
||||
ALTER TABLE edit_generic ADD cuid VARCHAR;
|
||||
|
||||
ALTER TABLE edit_access ADD enabled SMALLINT DEFAULT 0;
|
||||
ALTER TABLE edit_access ADD protected SMALLINT DEFAULT 0;
|
||||
|
||||
ALTER TABLE edit_group ADD uid VARCHAR;
|
||||
ALTER TABLE edit_group ADD deleted SMALLINT DEFAULT 0;
|
||||
|
||||
ALTER TABLE temp_files ADD folder VARCHAR;
|
||||
ALTER TABLE edit_page ADD hostname VARCHAR;
|
||||
|
||||
ALTER TABLE edit_user ADD deleted SMALLINT DEFAULT 0;
|
||||
17
4dev/database/update/edit_update_missing_cuid.sql
Normal file
17
4dev/database/update/edit_update_missing_cuid.sql
Normal file
@@ -0,0 +1,17 @@
|
||||
-- 2019/9/10 UPDATE missing cuid in edit_* tables
|
||||
|
||||
UPDATE edit_access SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
UPDATE edit_access_data SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
UPDATE edit_access_right SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
UPDATE edit_access_user SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
UPDATE edit_group SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
UPDATE edit_language SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
UPDATE edit_log SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
UPDATE edit_menu_group SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
UPDATE edit_page SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
UPDATE edit_page_access SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
UPDATE edit_page_content SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
UPDATE edit_query_string SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
UPDATE edit_scheme SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
UPDATE edit_user SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
UPDATE edit_visible_group SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
File diff suppressed because one or more lines are too long
52
4dev/locale/Readme.md
Normal file
52
4dev/locale/Readme.md
Normal file
@@ -0,0 +1,52 @@
|
||||
# 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@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_US.admin.UTF-8.po`
|
||||
|
||||
## 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_JP/LC_MESSAGES/frontend.UTF-8.mo 4dev/lang/ja_US.admin.UTF-8.po`
|
||||
57
4dev/locale/en_US.admin.UTF-8.po
Normal file
57
4dev/locale/en_US.admin.UTF-8.po
Normal file
@@ -0,0 +1,57 @@
|
||||
# ********************************************************************
|
||||
# AUTHOR: Clemens Schwaighofer
|
||||
# CREATED: 2005/08/09
|
||||
# SHORT DESCRIPTION:
|
||||
# Backned English Messages file for gettext
|
||||
# to craete: msgfmt -o <output.po> <input.mo>
|
||||
# ********************************************************************/
|
||||
|
||||
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 "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_US 0"
|
||||
msgstr[1] "Multi Admin en_US 1"
|
||||
msgstr[2] "Multi Admin en_US 2"
|
||||
|
||||
msgctxt "month name"
|
||||
msgid "May"
|
||||
msgstr "May Admin en_US"
|
||||
|
||||
msgctxt "month name"
|
||||
msgid "single"
|
||||
msgid_plural "multi"
|
||||
msgstr[0] "Multi Admin month en_US 0"
|
||||
msgstr[1] "Multi Admin month en_US 1"
|
||||
msgstr[2] "Multi Admin month en_US 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"
|
||||
24
4dev/locale/en_US.frontend.UTF-8.po
Normal file
24
4dev/locale/en_US.frontend.UTF-8.po
Normal file
@@ -0,0 +1,24 @@
|
||||
# to craete: msgfmt -o <output.po> <input.mo>
|
||||
|
||||
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 "INPUT TEST"
|
||||
msgstr "OUTPUT TEST FRONTEND EN"
|
||||
|
||||
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"
|
||||
87
4dev/locale/ja_JP.admin.UTF-8.po
Normal file
87
4dev/locale/ja_JP.admin.UTF-8.po
Normal file
@@ -0,0 +1,87 @@
|
||||
# ********************************************************************
|
||||
# AUTHOR: Clemens Schwaighofer
|
||||
# CREATED: 2018/03/28
|
||||
# SHORT DESCRIPTION:
|
||||
# Backend Japanese Messages file for gettext
|
||||
# to craete: msgfmt -o <output.po> <input.mo>
|
||||
# ********************************************************************/
|
||||
|
||||
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.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 "はい"
|
||||
|
||||
msgid "No"
|
||||
msgstr "いいえ"
|
||||
|
||||
# Basic date info
|
||||
msgid "Year"
|
||||
msgstr "年"
|
||||
|
||||
msgid "Month"
|
||||
msgstr "月"
|
||||
|
||||
msgid "Day"
|
||||
msgstr "日"
|
||||
|
||||
msgid "Hour"
|
||||
msgstr "時"
|
||||
|
||||
msgid "Minute"
|
||||
msgstr "分"
|
||||
|
||||
msgid "Mon"
|
||||
msgstr "月"
|
||||
|
||||
msgid "Tue"
|
||||
msgstr "火"
|
||||
|
||||
msgid "Wed"
|
||||
msgstr "水"
|
||||
|
||||
msgid "Thu"
|
||||
msgstr "木"
|
||||
|
||||
msgid "Fri"
|
||||
msgstr "金"
|
||||
|
||||
msgid "Sat"
|
||||
msgstr "土"
|
||||
|
||||
msgid "Sun"
|
||||
msgstr "日"
|
||||
|
||||
msgid "INPUT TEST"
|
||||
msgstr "OUTPUT TEST ADMIN JA"
|
||||
|
||||
# testing multi
|
||||
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"
|
||||
|
||||
# login string
|
||||
msgid "Hello %s"
|
||||
msgstr "こにちは %s"
|
||||
|
||||
msgid "I should be translated"
|
||||
msgstr "「スマーティー」これは正しいです"
|
||||
|
||||
msgid "Are we translated?"
|
||||
msgstr "「クラス」これは翻訳です?"
|
||||
|
||||
msgid "Original with string: %1"
|
||||
msgstr "%1と翻訳した"
|
||||
8
4dev/locale/ja_JP.frontend.UTF-8.po
Normal file
8
4dev/locale/ja_JP.frontend.UTF-8.po
Normal file
@@ -0,0 +1,8 @@
|
||||
# to craete: msgfmt -o <output.po> <input.mo>
|
||||
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||
|
||||
msgid "INPUT TEST"
|
||||
msgstr "OUTPUT TEST FRONTEND JA"
|
||||
@@ -1,14 +1,17 @@
|
||||
#!/bin/bash
|
||||
|
||||
# create path
|
||||
path=`pwd`"/"$0;
|
||||
path=$(pwd)"/"$0;
|
||||
|
||||
LOCAL_BASE_DIR="";
|
||||
LOCAL_BASE_DIR="<local folder>";
|
||||
LOCAL_DIR=$LOCAL_BASE_DIR"";
|
||||
REMOTE_WEB="";
|
||||
TARGET_HOST_WEB="developer@10.76.32.25";
|
||||
TMP_DIR=$LOCAL_BASE_DIR"/4dev/";
|
||||
tmpf_web=$TMP_DIR"tmp.web";
|
||||
REMOTE_WEB="<remote folder>";
|
||||
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;
|
||||
@@ -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
|
||||
|
||||
46
4dev/tests/CoreLibsACLLoginTest.php
Normal file
46
4dev/tests/CoreLibsACLLoginTest.php
Normal file
@@ -0,0 +1,46 @@
|
||||
<?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
|
||||
{
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function setUp(): void
|
||||
{
|
||||
if (!extension_loaded('pgsql')) {
|
||||
$this->markTestSkipped(
|
||||
'The PgSQL extension is not available.'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
47
4dev/tests/CoreLibsAdminBackend.php
Normal file
47
4dev/tests/CoreLibsAdminBackend.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__
|
||||
785
4dev/tests/CoreLibsCombinedArrayHandlerTest.php
Normal file
785
4dev/tests/CoreLibsCombinedArrayHandlerTest.php
Normal file
@@ -0,0 +1,785 @@
|
||||
<?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 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,
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* TODO: create provider for n array merge
|
||||
* provides array listing for the merge test
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function arrayMergeRecursiveProvider(): array
|
||||
{
|
||||
return [
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 ... will be $expected [$_dataName]
|
||||
*
|
||||
* @param array $input nested array set as each parameter
|
||||
* @param bool $flag
|
||||
* @param bool|array $expected
|
||||
* @return void
|
||||
* array $input, bool $flag, $expected
|
||||
*/
|
||||
public function testArrayMergeRecursive(): void
|
||||
{
|
||||
$this->assertTrue(true, 'Implement proper test run');
|
||||
$this->markTestIncomplete(
|
||||
'testArrayMergeRecursive has not been implemented yet.'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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__
|
||||
104
4dev/tests/CoreLibsCreateSessionTest.php
Normal file
104
4dev/tests/CoreLibsCreateSessionTest.php
Normal file
@@ -0,0 +1,104 @@
|
||||
<?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
|
||||
{
|
||||
/* $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('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__
|
||||
3616
4dev/tests/CoreLibsDBIOTest.php
Normal file
3616
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__
|
||||
836
4dev/tests/CoreLibsDebugLoggingTest.php
Normal file
836
4dev/tests/CoreLibsDebugLoggingTest.php
Normal file
@@ -0,0 +1,836 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* 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' => '/tmp/',
|
||||
'debug_all' => false,
|
||||
'print_all' => false,
|
||||
],
|
||||
[
|
||||
'constant' => [
|
||||
'BASE' => '/tmp',
|
||||
'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__
|
||||
196
4dev/tests/CoreLibsGetSystemTest.php
Normal file
196
4dev/tests/CoreLibsGetSystemTest.php
Normal file
@@ -0,0 +1,196 @@
|
||||
<?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 [
|
||||
'original set' => [
|
||||
0 => null, // input
|
||||
1 => 'phpunit',
|
||||
2 => 'phpunit',
|
||||
3 => 'www/vendor/bin/phpunit', // NOTE: this can change
|
||||
],
|
||||
'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
|
||||
);
|
||||
$this->assertEquals(
|
||||
$expected_port,
|
||||
$port
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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()
|
||||
);
|
||||
$this->assertEquals(
|
||||
$expected_0,
|
||||
\CoreLibs\Get\System::getPageName(\CoreLibs\Get\System::WITH_EXTENSION)
|
||||
);
|
||||
$this->assertEquals(
|
||||
$expected_1,
|
||||
\CoreLibs\Get\System::getPageName(\CoreLibs\Get\System::NO_EXTENSION)
|
||||
);
|
||||
$this->assertEquals(
|
||||
$expected_2,
|
||||
\CoreLibs\Get\System::getPageName(\CoreLibs\Get\System::FULL_PATH)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
325
4dev/tests/CoreLibsLanguageGetSettingsTest.php
Normal file
325
4dev/tests/CoreLibsLanguageGetSettingsTest.php
Normal file
@@ -0,0 +1,325 @@
|
||||
<?php // phpcs:disable Generic.Files.LineLength
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* Test class for Language\GetSettings
|
||||
*
|
||||
* @coversDefaultClass \CoreLibs\Language\GetSettings
|
||||
* @testdox \CoreLibs\Language\GetSettings method tests
|
||||
*/
|
||||
final class CoreLibsLanguageGetSettingsTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* set all constant variables that must be set before call
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public static function setUpBeforeClass(): void
|
||||
{
|
||||
define('DEFAULT_LANG', 'en_US');
|
||||
// default web page encoding setting
|
||||
define('DEFAULT_ENCODING', 'UTF-8');
|
||||
// default lang + encoding
|
||||
define('DEFAULT_LOCALE', 'en_US.UTF-8');
|
||||
// site
|
||||
define('SITE_LANG', DEFAULT_LANG);
|
||||
// just set
|
||||
define('BASE', str_replace('/configs', '', __DIR__) . DIRECTORY_SEPARATOR);
|
||||
define('INCLUDES', 'includes' . DIRECTORY_SEPARATOR);
|
||||
define('LANG', 'lang' . DIRECTORY_SEPARATOR);
|
||||
define('CONTENT_PATH', 'frontend' . DIRECTORY_SEPARATOR);
|
||||
// array session
|
||||
$_SESSION = [];
|
||||
global $_SESSION;
|
||||
}
|
||||
|
||||
/**
|
||||
* all the test data
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function setLangEncodingProvider(): array
|
||||
{
|
||||
return [
|
||||
// 0: locale/lang
|
||||
// 1: domain
|
||||
// 2: path
|
||||
// 3: SESSION DEFAULT_CHARSE
|
||||
// 4: GLOBALS: OVERRIDE_LANG
|
||||
// 5: SESSION: DEFAULT_LANG
|
||||
// 6: expected array
|
||||
'no params, all default constants' => [
|
||||
// lang, domain, path
|
||||
null, null, null,
|
||||
// global set no session
|
||||
// SESSION: DEFAULT_CHARSET, GLOBALS: OVERRIDE_LANG, SESSION: DEFAULT_LANG
|
||||
null, null, null,
|
||||
// return array
|
||||
[
|
||||
0 => 'UTF-8',
|
||||
1 => 'en_US',
|
||||
2 => 'en',
|
||||
3 => 'frontend',
|
||||
4 => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
|
||||
'encoding' => 'UTF-8',
|
||||
'lang' => 'en_US',
|
||||
'lang_short' => 'en',
|
||||
'domain' => 'frontend',
|
||||
'path' => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
|
||||
],
|
||||
],
|
||||
'no params, session charset and lang' => [
|
||||
// lang, domain, path
|
||||
null, null, null,
|
||||
// global set no session
|
||||
// SESSION: DEFAULT_CHARSET, GLOBALS: OVERRIDE_LANG, SESSION: DEFAULT_LANG
|
||||
'UTF-8', null, 'ja_JP',
|
||||
// return array
|
||||
[
|
||||
0 => 'UTF-8',
|
||||
1 => 'ja_JP',
|
||||
2 => 'ja',
|
||||
3 => 'frontend',
|
||||
4 => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
|
||||
'encoding' => 'UTF-8',
|
||||
'lang' => 'ja_JP',
|
||||
'lang_short' => 'ja',
|
||||
'domain' => 'frontend',
|
||||
'path' => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
|
||||
],
|
||||
],
|
||||
'no params, session charset and lang short' => [
|
||||
// lang, domain, path
|
||||
null, null, null,
|
||||
// global set no session
|
||||
// SESSION: DEFAULT_CHARSET, GLOBALS: OVERRIDE_LANG, SESSION: DEFAULT_LANG
|
||||
'UTF-8', null, 'ja',
|
||||
// return array
|
||||
[
|
||||
0 => 'UTF-8',
|
||||
1 => 'ja',
|
||||
2 => 'ja',
|
||||
3 => 'frontend',
|
||||
4 => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
|
||||
'encoding' => 'UTF-8',
|
||||
'lang' => 'ja',
|
||||
'lang_short' => 'ja',
|
||||
'domain' => 'frontend',
|
||||
'path' => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
|
||||
],
|
||||
],
|
||||
// globals override lang
|
||||
'no params, session charset and lang, default lang override' => [
|
||||
// lang, domain, path
|
||||
null, null, null,
|
||||
// global set no session
|
||||
// SESSION: DEFAULT_CHARSET, GLOBALS: OVERRIDE_LANG, SESSION: DEFAULT_LANG
|
||||
'UTF-8', 'en_US', 'ja_JP',
|
||||
// return array
|
||||
[
|
||||
0 => 'UTF-8',
|
||||
1 => 'en_US',
|
||||
2 => 'en',
|
||||
3 => 'frontend',
|
||||
4 => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
|
||||
'encoding' => 'UTF-8',
|
||||
'lang' => 'en_US',
|
||||
'lang_short' => 'en',
|
||||
'domain' => 'frontend',
|
||||
'path' => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
|
||||
],
|
||||
],
|
||||
// globals override lang short
|
||||
'no params, session charset and lang, default lang short override' => [
|
||||
// lang, domain, path
|
||||
null, null, null,
|
||||
// global set no session
|
||||
// SESSION: DEFAULT_CHARSET, GLOBALS: OVERRIDE_LANG, SESSION: DEFAULT_LANG
|
||||
'UTF-8', 'en', 'ja_JP',
|
||||
// return array
|
||||
[
|
||||
0 => 'UTF-8',
|
||||
1 => 'en',
|
||||
2 => 'en',
|
||||
3 => 'frontend',
|
||||
4 => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
|
||||
'encoding' => 'UTF-8',
|
||||
'lang' => 'en',
|
||||
'lang_short' => 'en',
|
||||
'domain' => 'frontend',
|
||||
'path' => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
|
||||
],
|
||||
],
|
||||
// param lang (no override)
|
||||
'locale param only, no override' => [
|
||||
// lang, domain, path
|
||||
'ja.UTF-8', null, null,
|
||||
// global set no session
|
||||
// SESSION: DEFAULT_CHARSET, GLOBALS: OVERRIDE_LANG, SESSION: DEFAULT_LANG
|
||||
null, null, null,
|
||||
// return array
|
||||
[
|
||||
0 => 'UTF-8',
|
||||
1 => 'ja',
|
||||
2 => 'ja',
|
||||
3 => 'frontend',
|
||||
4 => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
|
||||
'encoding' => 'UTF-8',
|
||||
'lang' => 'ja',
|
||||
'lang_short' => 'ja',
|
||||
'domain' => 'frontend',
|
||||
'path' => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
|
||||
],
|
||||
],
|
||||
// different locale setting
|
||||
'locale complex param only, no override' => [
|
||||
// lang, domain, path
|
||||
'ja_JP.SJIS', null, null,
|
||||
// global set no session
|
||||
// SESSION: DEFAULT_CHARSET, GLOBALS: OVERRIDE_LANG, SESSION: DEFAULT_LANG
|
||||
null, null, null,
|
||||
// return array
|
||||
[
|
||||
0 => 'SJIS',
|
||||
1 => 'ja_JP',
|
||||
2 => 'ja',
|
||||
3 => 'frontend',
|
||||
4 => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
|
||||
'encoding' => 'SJIS',
|
||||
'lang' => 'ja_JP',
|
||||
'lang_short' => 'ja',
|
||||
'domain' => 'frontend',
|
||||
'path' => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
|
||||
],
|
||||
],
|
||||
// param lang and domain (no override)
|
||||
'locale, domain params, no override' => [
|
||||
// lang, domain, path
|
||||
'ja.UTF-8', 'admin', null,
|
||||
// global set no session
|
||||
// SESSION: DEFAULT_CHARSET, GLOBALS: OVERRIDE_LANG, SESSION: DEFAULT_LANG
|
||||
null, null, null,
|
||||
// return array
|
||||
[
|
||||
0 => 'UTF-8',
|
||||
1 => 'ja',
|
||||
2 => 'ja',
|
||||
3 => 'admin',
|
||||
4 => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
|
||||
'encoding' => 'UTF-8',
|
||||
'lang' => 'ja',
|
||||
'lang_short' => 'ja',
|
||||
'domain' => 'admin',
|
||||
'path' => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
|
||||
],
|
||||
],
|
||||
// all params set (no override)
|
||||
'all params, no override' => [
|
||||
// lang, domain, path
|
||||
'ja.UTF-8', 'admin', __DIR__ . '/locale_other/',
|
||||
// global set no session
|
||||
// SESSION: DEFAULT_CHARSET, GLOBALS: OVERRIDE_LANG, SESSION: DEFAULT_LANG
|
||||
null, null, null,
|
||||
// return array
|
||||
[
|
||||
0 => 'UTF-8',
|
||||
1 => 'ja',
|
||||
2 => 'ja',
|
||||
3 => 'admin',
|
||||
4 => "/^\/(.*\/)?locale_other\/$/",
|
||||
'encoding' => 'UTF-8',
|
||||
'lang' => 'ja',
|
||||
'lang_short' => 'ja',
|
||||
'domain' => 'admin',
|
||||
'path' => "/^\/(.*\/)?locale_other\/$/",
|
||||
],
|
||||
],
|
||||
// TODO invalid params (bad path) (no override)
|
||||
// TODO param calls, but with override set
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::setLangEncoding
|
||||
* @dataProvider setLangEncodingProvider
|
||||
* @testdox lang settings lang $language, domain $domain, path $path; null session char: $SESSION_DEFAULT_CHARSET, null global lang: $GLOBAL_OVERRIDE_LANG, null session lang: $SESSION_DEFAULT_LANG [$_dataName]
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testSetLangEncoding(
|
||||
?string $language,
|
||||
?string $domain,
|
||||
?string $path,
|
||||
?string $SESSION_DEFAULT_CHARSET,
|
||||
?string $GLOBAL_OVERRIDE_LANG,
|
||||
?string $SESSION_DEFAULT_LANG,
|
||||
array $expected,
|
||||
): void {
|
||||
$return_lang_settings = [];
|
||||
global $_SESSION;
|
||||
// set override
|
||||
if ($SESSION_DEFAULT_CHARSET !== null) {
|
||||
$_SESSION['DEFAULT_CHARSET'] = $SESSION_DEFAULT_CHARSET;
|
||||
}
|
||||
if ($GLOBAL_OVERRIDE_LANG !== null) {
|
||||
$GLOBALS['OVERRIDE_LANG'] = $GLOBAL_OVERRIDE_LANG;
|
||||
}
|
||||
if ($SESSION_DEFAULT_LANG !== null) {
|
||||
$_SESSION['DEFAULT_LANG'] = $SESSION_DEFAULT_LANG;
|
||||
}
|
||||
// function call
|
||||
if ($language === null && $domain === null && $path === null) {
|
||||
$return_lang_settings = \CoreLibs\Language\GetSettings::setLangEncoding();
|
||||
} elseif ($language !== null && $domain === null && $path === null) {
|
||||
$return_lang_settings = \CoreLibs\Language\GetSettings::setLangEncoding(
|
||||
$language
|
||||
);
|
||||
} elseif ($language !== null && $domain !== null && $path === null) {
|
||||
$return_lang_settings = \CoreLibs\Language\GetSettings::setLangEncoding(
|
||||
$language,
|
||||
$domain
|
||||
);
|
||||
} else {
|
||||
$return_lang_settings = \CoreLibs\Language\GetSettings::setLangEncoding(
|
||||
$language,
|
||||
$domain,
|
||||
$path
|
||||
);
|
||||
}
|
||||
// print "RETURN: " . print_r($return_lang_settings, true) . "\n";
|
||||
|
||||
foreach (
|
||||
[
|
||||
0, 1, 2, 3, 4,
|
||||
'encoding', 'lang', 'lang_short', 'domain', 'path'
|
||||
] as $key
|
||||
) {
|
||||
$value = $expected[$key];
|
||||
if (strpos($value, "/") === 0) {
|
||||
// this is regex
|
||||
$this->assertMatchesRegularExpression(
|
||||
$value,
|
||||
$return_lang_settings[$key]
|
||||
);
|
||||
} else {
|
||||
// assert equal
|
||||
$this->assertEquals(
|
||||
$value,
|
||||
$return_lang_settings[$key],
|
||||
);
|
||||
}
|
||||
}
|
||||
// unset all vars
|
||||
$_SESSION = [];
|
||||
unset($GLOBALS['OVERRIDE_LANG']);
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
1044
4dev/tests/CoreLibsLanguageL10nTest.php
Normal file
1044
4dev/tests/CoreLibsLanguageL10nTest.php
Normal file
File diff suppressed because it is too large
Load Diff
33
4dev/tests/CoreLibsOutputFormElements.php
Normal file
33
4dev/tests/CoreLibsOutputFormElements.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/CoreLibsOutputFormGenerate.php
Normal file
33
4dev/tests/CoreLibsOutputFormGenerate.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/CoreLibsOutputFormToken.php
Normal file
33
4dev/tests/CoreLibsOutputFormToken.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/CoreLibsOutputImage.php
Normal file
33
4dev/tests/CoreLibsOutputImage.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__
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user