update unit test doc & PHP 8 fixes
having had to re-do all of these steps on a new environment, I noticed some inconsistencies and updated the doc: - moved unit testing doc into common doc folder, so it is easier to find - removed no longer supported Janitor reference - removed note regarding generated test duration, current version takes less than a minute - addressed each function removal & phpunit deprecations
This commit is contained in:
parent
c895c511c1
commit
8c1310c334
2
Makefile
2
Makefile
@ -18,7 +18,7 @@ coverage-js: ## Run JS unit tests and generate code coverage reports.
|
|||||||
|
|
||||||
coverage-php: ## Run PHP unit tests and generate code coverage reports.
|
coverage-php: ## Run PHP unit tests and generate code coverage reports.
|
||||||
cd tst && phpunit 2> /dev/null
|
cd tst && phpunit 2> /dev/null
|
||||||
cd tst/log/php-coverage-report && sed -i "s#$(CURDIR)##g" *.html */*.html
|
cd tst/log/php-coverage-report && sed -i "s#$(CURDIR)/##g" *.html */*.html
|
||||||
|
|
||||||
doc: doc-js doc-php ## Generate all code documentation.
|
doc: doc-js doc-php ## Generate all code documentation.
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ new ConfigurationTestGenerator(array(
|
|||||||
'tests' => array(
|
'tests' => array(
|
||||||
array(
|
array(
|
||||||
'conditions' => array('steps' => $vd),
|
'conditions' => array('steps' => $vd),
|
||||||
'type' => 'RegExp',
|
'type' => 'MatchesRegularExpression',
|
||||||
'args' => array(
|
'args' => array(
|
||||||
'#<div[^>]*id="opendiscussionoption"[^>]*>#',
|
'#<div[^>]*id="opendiscussionoption"[^>]*>#',
|
||||||
'$content',
|
'$content',
|
||||||
@ -53,7 +53,7 @@ new ConfigurationTestGenerator(array(
|
|||||||
'setting' => false,
|
'setting' => false,
|
||||||
'tests' => array(
|
'tests' => array(
|
||||||
array(
|
array(
|
||||||
'type' => 'NotRegExp',
|
'type' => 'DoesNotMatchRegularExpression',
|
||||||
'args' => array(
|
'args' => array(
|
||||||
'#<div[^>]*id="opendiscussionoption"[^>]*>#',
|
'#<div[^>]*id="opendiscussionoption"[^>]*>#',
|
||||||
'$content',
|
'$content',
|
||||||
@ -70,7 +70,7 @@ new ConfigurationTestGenerator(array(
|
|||||||
'tests' => array(
|
'tests' => array(
|
||||||
array(
|
array(
|
||||||
'conditions' => array('main/discussion' => true),
|
'conditions' => array('main/discussion' => true),
|
||||||
'type' => 'RegExp',
|
'type' => 'MatchesRegularExpression',
|
||||||
'args' => array(
|
'args' => array(
|
||||||
'#<input[^>]+id="opendiscussion"[^>]*checked="checked"[^>]*>#',
|
'#<input[^>]+id="opendiscussion"[^>]*checked="checked"[^>]*>#',
|
||||||
'$content',
|
'$content',
|
||||||
@ -84,7 +84,7 @@ new ConfigurationTestGenerator(array(
|
|||||||
'tests' => array(
|
'tests' => array(
|
||||||
array(
|
array(
|
||||||
'conditions' => array('main/discussion' => true),
|
'conditions' => array('main/discussion' => true),
|
||||||
'type' => 'NotRegExp',
|
'type' => 'DoesNotMatchRegularExpression',
|
||||||
'args' => array(
|
'args' => array(
|
||||||
'#<input[^>]+id="opendiscussion"[^>]*checked="checked"[^>]*>#',
|
'#<input[^>]+id="opendiscussion"[^>]*checked="checked"[^>]*>#',
|
||||||
'$content',
|
'$content',
|
||||||
@ -100,7 +100,7 @@ new ConfigurationTestGenerator(array(
|
|||||||
'setting' => true,
|
'setting' => true,
|
||||||
'tests' => array(
|
'tests' => array(
|
||||||
array(
|
array(
|
||||||
'type' => 'RegExp',
|
'type' => 'MatchesRegularExpression',
|
||||||
'args' => array(
|
'args' => array(
|
||||||
'#<input[^>]+id="burnafterreading"[^>]*checked="checked"[^>]*>#',
|
'#<input[^>]+id="burnafterreading"[^>]*checked="checked"[^>]*>#',
|
||||||
'$content',
|
'$content',
|
||||||
@ -113,7 +113,7 @@ new ConfigurationTestGenerator(array(
|
|||||||
'setting' => false,
|
'setting' => false,
|
||||||
'tests' => array(
|
'tests' => array(
|
||||||
array(
|
array(
|
||||||
'type' => 'NotRegExp',
|
'type' => 'DoesNotMatchRegularExpression',
|
||||||
'args' => array(
|
'args' => array(
|
||||||
'#<input[^>]+id="burnafterreading"[^>]*checked="checked"[^>]*>#',
|
'#<input[^>]+id="burnafterreading"[^>]*checked="checked"[^>]*>#',
|
||||||
'$content',
|
'$content',
|
||||||
@ -129,7 +129,7 @@ new ConfigurationTestGenerator(array(
|
|||||||
'setting' => true,
|
'setting' => true,
|
||||||
'tests' => array(
|
'tests' => array(
|
||||||
array(
|
array(
|
||||||
'type' => 'RegExp',
|
'type' => 'MatchesRegularExpression',
|
||||||
'args' => array(
|
'args' => array(
|
||||||
'#<div[^>]*id="password"[^>]*>#',
|
'#<div[^>]*id="password"[^>]*>#',
|
||||||
'$content',
|
'$content',
|
||||||
@ -143,7 +143,7 @@ new ConfigurationTestGenerator(array(
|
|||||||
'tests' => array(
|
'tests' => array(
|
||||||
array(
|
array(
|
||||||
'conditions' => array('main/discussion' => true),
|
'conditions' => array('main/discussion' => true),
|
||||||
'type' => 'NotRegExp',
|
'type' => 'DoesNotMatchRegularExpression',
|
||||||
'args' => array(
|
'args' => array(
|
||||||
'#<div[^>]*id="password"[^>]*>#',
|
'#<div[^>]*id="password"[^>]*>#',
|
||||||
'$content',
|
'$content',
|
||||||
@ -159,14 +159,14 @@ new ConfigurationTestGenerator(array(
|
|||||||
'setting' => 'page',
|
'setting' => 'page',
|
||||||
'tests' => array(
|
'tests' => array(
|
||||||
array(
|
array(
|
||||||
'type' => 'RegExp',
|
'type' => 'MatchesRegularExpression',
|
||||||
'args' => array(
|
'args' => array(
|
||||||
'#<link[^>]+type="text/css"[^>]+rel="stylesheet"[^>]+href="css/privatebin\.css\\?\d[\d\.]+\d+"[^>]*/>#',
|
'#<link[^>]+type="text/css"[^>]+rel="stylesheet"[^>]+href="css/privatebin\.css\\?\d[\d\.]+\d+"[^>]*/>#',
|
||||||
'$content',
|
'$content',
|
||||||
'outputs "page" stylesheet correctly',
|
'outputs "page" stylesheet correctly',
|
||||||
),
|
),
|
||||||
), array(
|
), array(
|
||||||
'type' => 'NotRegExp',
|
'type' => 'DoesNotMatchRegularExpression',
|
||||||
'args' => array(
|
'args' => array(
|
||||||
'#<link[^>]+type="text/css"[^>]+rel="stylesheet"[^>]+href="css/bootstrap/bootstrap-\d[\d\.]+\d\.css"[^>]*/>#',
|
'#<link[^>]+type="text/css"[^>]+rel="stylesheet"[^>]+href="css/bootstrap/bootstrap-\d[\d\.]+\d\.css"[^>]*/>#',
|
||||||
'$content',
|
'$content',
|
||||||
@ -179,14 +179,14 @@ new ConfigurationTestGenerator(array(
|
|||||||
'setting' => 'bootstrap',
|
'setting' => 'bootstrap',
|
||||||
'tests' => array(
|
'tests' => array(
|
||||||
array(
|
array(
|
||||||
'type' => 'NotRegExp',
|
'type' => 'DoesNotMatchRegularExpression',
|
||||||
'args' => array(
|
'args' => array(
|
||||||
'#<link[^>]+type="text/css"[^>]+rel="stylesheet"[^>]+href="css/privatebin\.css\\?\d[\d\.]+\d+"[^>]*/>#',
|
'#<link[^>]+type="text/css"[^>]+rel="stylesheet"[^>]+href="css/privatebin\.css\\?\d[\d\.]+\d+"[^>]*/>#',
|
||||||
'$content',
|
'$content',
|
||||||
'removes "page" stylesheet correctly',
|
'removes "page" stylesheet correctly',
|
||||||
),
|
),
|
||||||
), array(
|
), array(
|
||||||
'type' => 'RegExp',
|
'type' => 'MatchesRegularExpression',
|
||||||
'args' => array(
|
'args' => array(
|
||||||
'#<link[^>]+type="text/css"[^>]+rel="stylesheet"[^>]+href="css/bootstrap/bootstrap-\d[\d\.]+\d\.css"[^>]*/>#',
|
'#<link[^>]+type="text/css"[^>]+rel="stylesheet"[^>]+href="css/bootstrap/bootstrap-\d[\d\.]+\d\.css"[^>]*/>#',
|
||||||
'$content',
|
'$content',
|
||||||
@ -361,7 +361,7 @@ class ConfigurationTestGenerator
|
|||||||
}
|
}
|
||||||
// skip if not all test conditions are met
|
// skip if not all test conditions are met
|
||||||
if (array_key_exists('conditions', $test)) {
|
if (array_key_exists('conditions', $test)) {
|
||||||
while (list($path, $setting) = each($test['conditions'])) {
|
foreach ($test['conditions'] as $path => $setting) {
|
||||||
if ($path == 'steps' && !in_array($step, $setting)) {
|
if ($path == 'steps' && !in_array($step, $setting)) {
|
||||||
continue 2;
|
continue 2;
|
||||||
} elseif ($path != 'steps') {
|
} elseif ($path != 'steps') {
|
||||||
@ -591,8 +591,9 @@ EOT;
|
|||||||
return $this->_configurations;
|
return $this->_configurations;
|
||||||
}
|
}
|
||||||
echo "generateConfigurations: iteration $this->_iterationCount", PHP_EOL;
|
echo "generateConfigurations: iteration $this->_iterationCount", PHP_EOL;
|
||||||
$continue = list($path, $settings) = each($this->_options);
|
$path = key($this->_options);
|
||||||
if ($continue === false) {
|
$settings = current($this->_options);
|
||||||
|
if (next($this->_options) === false) {
|
||||||
return $this->_configurations;
|
return $this->_configurations;
|
||||||
}
|
}
|
||||||
list($section, $option) = explode('/', $path);
|
list($section, $option) = explode('/', $path);
|
||||||
|
@ -28,11 +28,6 @@ docker run --rm --read-only -v ~/PrivateBin:/srv:ro privatebin/unit-testing phpu
|
|||||||
docker run --rm --read-only -v ~/PrivateBin:/srv:ro privatebin/unit-testing mocha
|
docker run --rm --read-only -v ~/PrivateBin:/srv:ro privatebin/unit-testing mocha
|
||||||
```
|
```
|
||||||
|
|
||||||
We also provide a Janitor image that includes the Cloud9 and Theia WebIDEs as
|
|
||||||
well as the integrated unit testing utilities. See our [docker wiki
|
|
||||||
page](https://github.com/PrivateBin/PrivateBin/wiki/Docker#janitor-image-with-cloud9-and-theia-webide-janitortechnologyprivatebin)
|
|
||||||
for further details on this.
|
|
||||||
|
|
||||||
## Running PHP Unit Tests
|
## Running PHP Unit Tests
|
||||||
|
|
||||||
In order to run these tests, you will need to install the following packages
|
In order to run these tests, you will need to install the following packages
|
||||||
@ -61,18 +56,15 @@ configurations defined in its constructor, it generates the unit test file
|
|||||||
of these configurations and tests for (most of the) valid combinations. Some of
|
of these configurations and tests for (most of the) valid combinations. Some of
|
||||||
combinations can't be tested with this method, i.e. a valid option combined with
|
combinations can't be tested with this method, i.e. a valid option combined with
|
||||||
an invalid one. Other very specific test cases (i.e. to trigger multiple errors)
|
an invalid one. Other very specific test cases (i.e. to trigger multiple errors)
|
||||||
are covered in `tst/PrivateBinTest.php`. Here is how to generate the
|
are covered in `tst/ControllerTest.php`. Here is how to generate the
|
||||||
configuration test and run it:
|
configuration test and run it:
|
||||||
|
|
||||||
```console
|
```console
|
||||||
$ cd PrivateBin/tst
|
$ cd PrivateBin/tst
|
||||||
$ php ConfigurationTestGenerator.php
|
$ ../bin/configuration-test-generator
|
||||||
$ phpunit ConfigurationCombinationsTest.php
|
$ phpunit ConfigurationCombinationsTest.php
|
||||||
```
|
```
|
||||||
|
|
||||||
Note that it can take an hour or longer to run the several thousand tests.
|
|
||||||
|
|
||||||
|
|
||||||
## Running JavaScript Unit Tests
|
## Running JavaScript Unit Tests
|
||||||
|
|
||||||
In order to run these tests, you will need to install the following packages
|
In order to run these tests, you will need to install the following packages
|
||||||
@ -134,7 +126,7 @@ associated random number generator (RNG) state, so you can reproduce it easily:
|
|||||||
1 failing
|
1 failing
|
||||||
|
|
||||||
1) Helper getCookie returns the requested cookie:
|
1) Helper getCookie returns the requested cookie:
|
||||||
Error: Failed after 30 tests and 11 shrinks. rngState: 88caf85079d32e416b; Counterexample: ["{", "9", "9", "YD8%fT"]; [" ", "_|K:"];
|
Error: Failed after 30 tests and 11 shrinks. rngState: 88caf85079d32e416b; Counterexample: ["{", "9", "9", "YD8%fT"]; [" ", "_|K:"];
|
||||||
|
|
||||||
[...]
|
[...]
|
||||||
```
|
```
|
Loading…
Reference in New Issue
Block a user