Compare commits

...

13 commits

Author SHA1 Message Date
6d7f8cff6a
chore: bump version 2022-01-23 17:27:44 -06:00
Roy Verrips
a84cdd8917 Remove phpstan from dependancies - want to keep this compatible with php 7.0 as per github build steps 2022-01-23 17:26:15 -06:00
Roy Verrips
7cebbfc06a Refactors to satisfy phpstan level 8 2022-01-23 17:26:15 -06:00
Roy Verrips
6e973db521 Add phpstan with config set to max 2022-01-23 17:26:15 -06:00
Roy Verrips
63a52c853b PHP 8.1: Implicit incompatible float to int conversion is deprecated
In PHP 8.1 floats are not implicitly converted to integers as before. 
The array_slice on line 139 requires an integer as the third parameter (the $count variable) so added line 117 to do the conversion of $count.
2022-01-23 17:26:15 -06:00
c9e2957c23 feat: ensure passed tags are strings
Newer versions of PHP raise a warning if you attempt to use array syntax
against non-strings / non-arrays. Added sanity check to ensure we're
working with a string, otherwise skip it.

Also added in PHP 8.1 to the testing suite and bumped the copyright.

Bumped version to 2.0 since as the change in expected output is a
breaking change.
2022-01-04 22:01:25 -06:00
peter279k
ae53465dad Improvements about namespace and PHPUnit version 2020-12-29 16:23:21 -06:00
732be48504 test: update assertion syntax
Tweaked the assertion syntax based on some upcoming changes to PHPUnit.
2020-10-12 18:01:46 -05:00
Umair Khan
007b7a211e Fix #7 Change visibility of $words
The PHPDoc block of `$words` say that the visibility / access of `$words` is private but its `public` in php code.
https://github.com/joshtronic/php-loremipsum/blob/master/src/LoremIpsum.php#L37-L40
2020-10-02 10:50:21 -05:00
f0ec43a045 ci: switch to github actions
Dropped Travis CI and Coveralls for GitHub Actions and CodeCov.
2020-06-01 22:25:24 -05:00
73e356956c
docs: update funding 2020-03-02 20:53:03 -06:00
cdb2e05cf4 chore(ci): test against PHP 7.4
* Updated to test again PHP 7.4 and to use that for coverage reporting.
* Added PHP nightly builds as an allowable failure.
* Added a git ignore as well as a `phpunit` configuration.
* Updated the tests and CI configuration to better handle the juggling of PHP and `phpunit` versions.
* Updated the coveralls dependency to be the latest and greatest instead of the deprecated package.
* Tweaked the README, updated the LICENSE years and bumped this package's version.
* Dropped Patreon link in favor of using Github Sponsors.
2020-01-09 21:49:13 -06:00
e41f4f7630
PHP 7.3 and more
* Added CI for PHP 7.3
* Dropped CI for HHVM (was running into too many issues out of no where)
* Reworked CI distros where I could
* Bumped copyright year
* Cleaned up the README, fixed spacing, dumped some of the wordiness
2019-01-03 00:21:50 -06:00
13 changed files with 298 additions and 173 deletions

View file

@ -1 +0,0 @@
service_name: travis-ci

29
.github/workflows/test.yml vendored Normal file
View file

@ -0,0 +1,29 @@
name: Test
on: [push, pull_request]
jobs:
test:
name: Test PHP ${{ matrix.php-version }}
runs-on: ubuntu-latest
strategy:
matrix:
php-version: ['5.3', '5.4', '5.5', '5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1']
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-version }}
- name: PHP Version
run: php --version
- name: Composer Version
run: composer --version
- name: Install Dependencies
run: COMPOSER_MEMORY_LIMIT=-1 composer install
- name: Run Tests
run: vendor/bin/phpunit --coverage-clover ./coverage.xml
- name: Upload Coverage
if: ${{ matrix.php-version == '8.1' }}
uses: codecov/codecov-action@v1
with:
file: ./coverage.xml

4
.gitignore vendored Normal file
View file

@ -0,0 +1,4 @@
composer.lock
composer.phar
.phpunit.result.cache
/vendor/

View file

@ -1,33 +0,0 @@
language: php
dist: trusty
sudo: required
matrix:
include:
- php: 5.3
dist: precise
- php: 5.4
- php: 5.5
- php: 5.6
- php: 7.0
- php: 7.1
- php: 7.2
- php: hhvm
env: HHVM=true
install:
- composer install
- if [[ $HHVM == true ]]; then composer require "phpunit/phpunit:5.7"; fi
before_script:
- mkdir -p build/logs
- cd tests
script:
- if [[ $HHVM == true ]]; then ../vendor/bin/phpunit --colors --coverage-clover ../build/logs/clover.xml .; fi
- if [[ $HHVM != true ]]; then phpunit --colors --coverage-clover ../build/logs/clover.xml .; fi
after_success:
- cd ..
- php vendor/bin/coveralls --config .coveralls.yml -v

1
FUNDING.yml Normal file
View file

@ -0,0 +1 @@
github: joshtronic

View file

@ -1,6 +1,6 @@
The MIT License (MIT) The MIT License (MIT)
Copyright (c) 2014, 2015, 2016, 2017, 2018 Josh Sherman Copyright (c) 2014-2022 Josh Sherman
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View file

@ -1,39 +1,17 @@
# php-loremipsum # php-loremipsum
[![Build Status](https://travis-ci.org/joshtronic/php-loremipsum.svg?branch=master)](https://travis-ci.org/joshtronic/php-loremipsum) [![License](https://img.shields.io/packagist/l/joshtronic/php-loremipsum?style=for-the-badge)](https://github.com/joshtronic/php-loremipsum/blob/master/LICENSE)
[![Coverage Status](https://coveralls.io/repos/github/joshtronic/php-loremipsum/badge.svg?branch=master)](https://coveralls.io/github/joshtronic/php-loremipsum?branch=master) ![PHP Version](https://img.shields.io/packagist/php-v/joshtronic/php-loremipsum?style=for-the-badge)
[![Total Downloads](https://poser.pugx.org/joshtronic/php-loremipsum/downloads)](https://packagist.org/packages/joshtronic/php-loremipsum) [![Test Status](https://img.shields.io/github/workflow/status/joshtronic/php-loremipsum/Test?style=for-the-badge)](https://github.com/joshtronic/php-loremipsum/actions)
[![Code Coverage](https://img.shields.io/codecov/c/github/joshtronic/php-loremipsum?style=for-the-badge)](https://codecov.io/gh/joshtronic/php-loremipsum)
[![Monthly Downloads](https://img.shields.io/packagist/dm/joshtronic/php-loremipsum?style=for-the-badge)](https://packagist.org/packages/joshtronic/php-loremipsum)
Lorem ipsum generator in PHP without dependencies. Compatible with PHP 5.3+ as Lorem ipsum generator in PHP without dependencies. Compatible with PHP 5.3+.
well as HHVM.
## Origins
Once upon a time, I was attempting to find a lorem ipsum generator over on
[Packagist](https://packagist.org/search/?q=lorem%20ipsum). I was presented
with many options, and some of those options were good. Unfortunately, the
bulk of those options depended on Symphony or the Zend Framework. This
wouldnt have been a big deal but under the circumstances, I wanted something
that was not tightly coupled to these frameworks because I wanted to use the
generator in my _own_ framework.
I had decided to use
[badcow/lorem-ipsum](https://packagist.org/packages/badcow/lorem-ipsum)
because it did not have any dependencies nor did it rely on any external APIs.
As I started to use the library, I found that I was going to have to fight
with it to get it to do what I wanted. After digging through the code, I
realized that I was going to end up gutting most of it to bend it to my will.
I know when you overhaul someones code the liklihood of them accepting a pull
request goes down dramatically, hence building this library while taking cues
from its predecessor.
Also, the aforementioned package had a bunch of “setter” and “getter” methods
that were grossing me out :scream:
## Installation ## Installation
The preferred installation method is via `composer`. First add the following The preferred installation method is via `composer`. First add the following to
to your `composer.json` your `composer.json`:
```json ```json
"require": { "require": {
@ -41,7 +19,7 @@ to your `composer.json`
} }
``` ```
Then run `composer update` Then run `composer update`.
## Usage ## Usage
@ -58,21 +36,21 @@ echo '1 word: ' . $lipsum->word();
echo '5 words: ' . $lipsum->words(5); echo '5 words: ' . $lipsum->words(5);
``` ```
### Generating sentences ### Generating Sentences
```php ```php
echo '1 sentence: ' . $lipsum->sentence(); echo '1 sentence: ' . $lipsum->sentence();
echo '5 sentences: ' . $lipsum->sentences(5); echo '5 sentences: ' . $lipsum->sentences(5);
``` ```
### Generating paragraphs ### Generating Paragraphs
```php ```php
echo '1 paragraph: ' . $lipsum->paragraph(); echo '1 paragraph: ' . $lipsum->paragraph();
echo '5 paragraphs: ' . $lipsum->paragraphs(5); echo '5 paragraphs: ' . $lipsum->paragraphs(5);
``` ```
### Wrapping text with HTML tags ### Wrapping Text with HTML Tags
If you would like to wrap the generated text with a tag, pass it as the second If you would like to wrap the generated text with a tag, pass it as the second
parameter: parameter:
@ -99,7 +77,7 @@ echo $lipsum->words(3, '<li><a href="$1">$1</a></li>');
// Generates: <li><a href="...">...</a></li><li><a href="...">...</a></li><li><a href="...">...</a></li> // Generates: <li><a href="...">...</a></li><li><a href="...">...</a></li><li><a href="...">...</a></li>
``` ```
### Return as an array ### Return as an Array
Perhaps you want an array instead of a string: Perhaps you want an array instead of a string:
@ -117,16 +95,25 @@ print_r($lipsum->wordsArray(5, 'li'));
## Assumptions ## Assumptions
Instead of having an option as to whether or not a string should start the The first string generated will always start with the traditional "Lorem ipsum
generated output with “Lorem ipsum dolor sit amet, consectetur adipiscing dolor sit amet, consectetur adipiscing elit". Subsequent strings may contain
elit.” a few assumptions are baked in. The first string generated will always
start with the traditional “Lorem ipsum…”. Subsequent strings may contain
those words but will not explicitly start with them. those words but will not explicitly start with them.
## Contributing ## Contributing
Suggestions and bug reports are always welcome, but karma points are earned Suggestions and bug reports are always welcome, but karma points are earned for
for pull requests. pull requests.
Unit tests are required for all contributions. You can run the test suite Unit tests are required for all contributions. You can run the test suite from
from the `tests` directory simply by running `phpunit .` the project's root directory simply by running `phpunit`.
## Credits
`php-loremipsum` was originally inspired by
[badcow/lorem-ipsum](https://packagist.org/packages/badcow/lorem-ipsum) with a
goal of being a dependency free lorem ipsum generator with flexible generation
options.
## License
MIT

20
codecov.yml Normal file
View file

@ -0,0 +1,20 @@
codecov:
require_ci_to_pass: yes
coverage:
precision: 2
round: down
range: "70...100"
parsers:
gcov:
branch_detection:
conditional: yes
loop: yes
method: no
macro: no
comment:
layout: "reach,diff,flags,tree"
behavior: default
require_changes: no

View file

@ -1,7 +1,7 @@
{ {
"name": "joshtronic/php-loremipsum", "name": "joshtronic/php-loremipsum",
"description": "Lorem ipsum generator in PHP without dependencies", "description": "Lorem ipsum generator in PHP without dependencies",
"version": "1.0.3", "version": "2.1.0",
"type": "library", "type": "library",
"keywords": [ "keywords": [
"lorem", "lorem",
@ -10,22 +10,25 @@
], ],
"homepage": "https://github.com/joshtronic/php-loremipsum", "homepage": "https://github.com/joshtronic/php-loremipsum",
"license": "MIT", "license": "MIT",
"authors": [ "authors": [{
{
"name": "Josh Sherman", "name": "Josh Sherman",
"email": "hello@joshtronic.com", "email": "hello@joshtronic.com",
"homepage": "https://joshtronic.com" "homepage": "https://joshtronic.com"
} }],
],
"require": { "require": {
"php": ">=5.3.0" "php": ">=5.3"
}, },
"require-dev": { "require-dev": {
"satooshi/php-coveralls": "~1.0" "phpunit/phpunit": "^4.8.36 || ^9.0"
}, },
"autoload": { "autoload": {
"psr-4": { "psr-4": {
"joshtronic\\": "src/" "joshtronic\\": "src/"
} }
},
"autoload-dev": {
"psr-4": {
"joshtronic\\Tests\\": "tests/"
}
} }
} }

14
phpstan.neon Normal file
View file

@ -0,0 +1,14 @@
parameters:
paths:
- src
# The level 8 is the highest level
level: max
excludePaths:
- ./*/*/FileToBeExcluded.php
checkMissingIterableValueType: true
#editorUrl: 'vscode://file/%%file%%:%%line%%'

24
phpunit.xml Normal file
View file

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit
bootstrap="vendor/autoload.php"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
failOnRisky="true"
stopOnError="true"
stopOnFailure="true"
stopOnIncomplete="true"
verbose="true"
>
<testsuites>
<testsuite name="Lorem Ipsum">
<directory>tests</directory>
</testsuite>
</testsuites>
<filter>
<whitelist addUncoveredFilesFromWhitelist="true">
<directory>./src</directory>
</whitelist>
</filter>
</phpunit>

View file

@ -9,7 +9,7 @@
* Redistribution of these files must retain the above copyright notice. * Redistribution of these files must retain the above copyright notice.
* *
* @author Josh Sherman <hello@joshtronic.com> * @author Josh Sherman <hello@joshtronic.com>
* @copyright Copyright 2014, 2015, 2016, 2017, 2018 Josh Sherman * @copyright Copyright 2014-2022 Josh Sherman
* @license http://www.opensource.org/licenses/mit-license.html * @license http://www.opensource.org/licenses/mit-license.html
* @link https://github.com/joshtronic/php-loremipsum * @link https://github.com/joshtronic/php-loremipsum
*/ */
@ -24,7 +24,7 @@ class LoremIpsum
* Whether or not we should be starting the string with "Lorem ipsum..." * Whether or not we should be starting the string with "Lorem ipsum..."
* *
* @access private * @access private
* @var boolean * @var mixed
*/ */
private $first = true; private $first = true;
@ -35,9 +35,9 @@ class LoremIpsum
* a complete list exists and if so, where to get it. * a complete list exists and if so, where to get it.
* *
* @access private * @access private
* @var array * @var array<string>
*/ */
public $words = array( private $words = array(
// Lorem ipsum... // Lorem ipsum...
'lorem', 'ipsum', 'dolor', 'sit', 'amet', 'consectetur', 'adipiscing', 'elit', 'lorem', 'ipsum', 'dolor', 'sit', 'amet', 'consectetur', 'adipiscing', 'elit',
@ -83,7 +83,7 @@ class LoremIpsum
*/ */
public function word($tags = false) public function word($tags = false)
{ {
return $this->words(1, $tags); return strval($this->words(1, $tags));
} }
/** /**
@ -94,7 +94,7 @@ class LoremIpsum
* @access public * @access public
* @param integer $count how many words to generate * @param integer $count how many words to generate
* @param mixed $tags string or array of HTML tags to wrap output with * @param mixed $tags string or array of HTML tags to wrap output with
* @return array generated lorem ipsum words * @return mixed generated lorem ipsum words
*/ */
public function wordsArray($count = 1, $tags = false) public function wordsArray($count = 1, $tags = false)
{ {
@ -114,6 +114,7 @@ class LoremIpsum
*/ */
public function words($count = 1, $tags = false, $array = false) public function words($count = 1, $tags = false, $array = false)
{ {
$count = (int) $count;
$words = array(); $words = array();
$word_count = 0; $word_count = 0;
@ -151,7 +152,7 @@ class LoremIpsum
*/ */
public function sentence($tags = false) public function sentence($tags = false)
{ {
return $this->sentences(1, $tags); return strval($this->sentences(1, $tags));
} }
/** /**
@ -162,7 +163,7 @@ class LoremIpsum
* @access public * @access public
* @param integer $count how many sentences to generate * @param integer $count how many sentences to generate
* @param mixed $tags string or array of HTML tags to wrap output with * @param mixed $tags string or array of HTML tags to wrap output with
* @return array generated lorem ipsum sentences * @return mixed generated lorem ipsum sentences
*/ */
public function sentencesArray($count = 1, $tags = false) public function sentencesArray($count = 1, $tags = false)
{ {
@ -204,7 +205,7 @@ class LoremIpsum
*/ */
public function paragraph($tags = false) public function paragraph($tags = false)
{ {
return $this->paragraphs(1, $tags); return strval($this->paragraphs(1, $tags));
} }
/** /**
@ -215,15 +216,18 @@ class LoremIpsum
* @access public * @access public
* @param integer $count how many paragraphs to generate * @param integer $count how many paragraphs to generate
* @param mixed $tags string or array of HTML tags to wrap output with * @param mixed $tags string or array of HTML tags to wrap output with
* @return array generated lorem ipsum paragraphs * @return array<string> generated lorem ipsum paragraphs
*/ */
public function paragraphsArray($count = 1, $tags = false) public function paragraphsArray($count = 1, $tags = false)
{ {
// The $array parameter set to true means an array is returned.
// Return type is mixed, we should probably cast to array.
// @phpstan-ignore-next-line
return $this->paragraphs($count, $tags, true); return $this->paragraphs($count, $tags, true);
} }
/** /**
* Paragraphss * Paragraphs
* *
* Generates paragraphs of lorem ipsum. * Generates paragraphs of lorem ipsum.
* *
@ -238,11 +242,14 @@ class LoremIpsum
$paragraphs = array(); $paragraphs = array();
for ($i = 0; $i < $count; $i++) { for ($i = 0; $i < $count; $i++) {
$paragraphs[] = $this->sentences($this->gauss(5.8, 1.93)); $paragraphs[] = strval($this->sentences($this->gauss(5.8, 1.93)));
} }
if ($array) {
return $this->output($paragraphs, $tags, $array, "\n\n"); return $this->output($paragraphs, $tags, $array, "\n\n");
} }
return strval($this->output($paragraphs, $tags, false, "\n\n"));
}
/** /**
* Gaussian Distribution * Gaussian Distribution
@ -255,7 +262,7 @@ class LoremIpsum
* @access private * @access private
* @param double $mean average value * @param double $mean average value
* @param double $std_dev stadnard deviation * @param double $std_dev stadnard deviation
* @return double calculated distribution * @return int calculated distribution
*/ */
private function gauss($mean, $std_dev) private function gauss($mean, $std_dev)
{ {
@ -263,7 +270,7 @@ class LoremIpsum
$y = mt_rand() / mt_getrandmax(); $y = mt_rand() / mt_getrandmax();
$z = sqrt(-2 * log($x)) * cos(2 * pi() * $y); $z = sqrt(-2 * log($x)) * cos(2 * pi() * $y);
return $z * $std_dev + $mean; return intval($z * $std_dev + $mean);
} }
/** /**
@ -273,6 +280,7 @@ class LoremIpsum
* the first time we are generating the text. * the first time we are generating the text.
* *
* @access private * @access private
* @return void
*/ */
private function shuffle() private function shuffle()
{ {
@ -298,18 +306,18 @@ class LoremIpsum
* first word of the sentence. * first word of the sentence.
* *
* @access private * @access private
* @param array $sentences the sentences we would like to punctuate * @param array<string> $sentences the sentences we would like to punctuate
* @return void
*/ */
private function punctuate(&$sentences) private function punctuate(&$sentences)
{ {
foreach ($sentences as $key => $sentence) { foreach ($sentences as $key => $sentence) {
$words = count($sentence); $words = count($sentence);
// Only worry about commas on sentences longer than 4 words // Only worry about commas on sentences longer than 4 words
if ($words > 4) { if ($words > 4) {
$mean = log($words, 6); $mean = log($words, 6);
$std_dev = $mean / 6; $std_dev = $mean / 6;
$commas = round($this->gauss($mean, $std_dev)); $commas = $this->gauss($mean, $std_dev);
for ($i = 1; $i <= $commas; $i++) { for ($i = 1; $i <= $commas; $i++) {
$word = round($i * $words / ($commas + 1)); $word = round($i * $words / ($commas + 1));
@ -333,7 +341,7 @@ class LoremIpsum
* into a string or not. * into a string or not.
* *
* @access private * @access private
* @param array $strings an array of generated strings * @param array<string> $strings an array of generated strings
* @param mixed $tags string or array of HTML tags to wrap output with * @param mixed $tags string or array of HTML tags to wrap output with
* @param boolean $array whether an array or a string should be returned * @param boolean $array whether an array or a string should be returned
* @param string $delimiter the string to use when calling implode() * @param string $delimiter the string to use when calling implode()
@ -351,12 +359,14 @@ class LoremIpsum
foreach ($strings as $key => $string) { foreach ($strings as $key => $string) {
foreach ($tags as $tag) { foreach ($tags as $tag) {
if (is_string($tag)) {
// Detects / applies back reference // Detects / applies back reference
if ($tag[0] == '<') { if ($tag[0] == '<') {
$string = str_replace('$1', $string, $tag); $string = str_replace('$1', $string, $tag);
} else { } else {
$string = sprintf('<%1$s>%2$s</%1$s>', $tag, $string); $string = sprintf('<%1$s>%2$s</%1$s>', $tag, $string);
} }
}
$strings[$key] = $string; $strings[$key] = $string;
} }
@ -370,4 +380,3 @@ class LoremIpsum
return $strings; return $strings;
} }
} }

View file

@ -1,130 +1,198 @@
<?php <?php
namespace joshtronic\Tests;
use joshtronic\LoremIpsum;
use PHPUnit\Framework\TestCase;
require_once '../src/LoremIpsum.php'; class LoremIpsumTest extends TestCase
{
if ( /**
!class_exists('\PHPUnit_Framework_TestCase') * @doesNotPerformAssertions
&& class_exists('\PHPUnit\Framework\TestCase') */
) { public function testAssertRegExp() {
class_alias('\PHPUnit\Framework\TestCase', '\PHPUnit_Framework_TestCase'); if (version_compare(PHP_VERSION, '7.3.0', '>=')) {
return 'assertMatchesRegularExpression';
} }
class LoremIpsumTest extends PHPUnit_Framework_TestCase return 'assertRegExp';
{
private $lipsum;
public function setUp()
{
$this->lipsum = new joshtronic\LoremIpsum();
} }
public function testWord() /**
* @depends testAssertRegExp
*/
public function testWord($assertRegExp)
{ {
$this->assertRegExp('/^[a-z]+$/i', $this->lipsum->word()); $lipsum = new LoremIpsum();
$this->$assertRegExp('/^[a-z]+$/i', $lipsum->word());
} }
public function testWords() /**
* @depends testAssertRegExp
*/
public function testWords($assertRegExp)
{ {
$this->assertRegExp( $lipsum = new LoremIpsum();
$this->$assertRegExp(
'/^[a-z]+ [a-z]+ [a-z]+$/i', '/^[a-z]+ [a-z]+ [a-z]+$/i',
$this->lipsum->words(3) $lipsum->words(3)
); );
} }
public function testWordsArray() /**
* @depends testAssertRegExp
*/
public function testWordsArray($assertRegExp)
{ {
$words = $this->lipsum->wordsArray(3); $lipsum = new LoremIpsum();
$words = $lipsum->wordsArray(3);
$this->assertTrue(is_array($words)); $this->assertTrue(is_array($words));
$this->assertCount(3, $words); $this->assertCount(3, $words);
foreach ($words as $word) { foreach ($words as $word) {
$this->assertRegExp('/^[a-z]+$/i', $word); $this->$assertRegExp('/^[a-z]+$/i', $word);
} }
} }
public function testWordsExceedingVocab() /**
* @depends testAssertRegExp
*/
public function testWordsExceedingVocab($assertRegExp)
{ {
$this->assertCount(500, $this->lipsum->wordsArray(500)); $lipsum = new LoremIpsum();
$this->assertCount(500, $lipsum->wordsArray(500));
} }
public function testSentence() /**
* @depends testAssertRegExp
*/
public function testSentence($assertRegExp)
{ {
$this->assertRegExp('/^[a-z, ]+\.$/i', $this->lipsum->sentence()); $lipsum = new LoremIpsum();
$this->$assertRegExp('/^[a-z, ]+\.$/i', $lipsum->sentence());
} }
public function testSentences() /**
* @depends testAssertRegExp
*/
public function testSentences($assertRegExp)
{ {
$this->assertRegExp('/^[a-z, ]+\. [a-z, ]+\. [a-z, ]+\.$/i', $this->lipsum->sentences(3)); $lipsum = new LoremIpsum();
$this->$assertRegExp(
'/^[a-z, ]+\. [a-z, ]+\. [a-z, ]+\.$/i',
$lipsum->sentences(3)
);
} }
public function testSentencesArray() /**
* @depends testAssertRegExp
*/
public function testSentencesArray($assertRegExp)
{ {
$sentences = $this->lipsum->sentencesArray(3); $lipsum = new LoremIpsum();
$sentences = $lipsum->sentencesArray(3);
$this->assertTrue(is_array($sentences)); $this->assertTrue(is_array($sentences));
$this->assertCount(3, $sentences); $this->assertCount(3, $sentences);
foreach ($sentences as $sentence) { foreach ($sentences as $sentence) {
$this->assertRegExp('/^[a-z, ]+\.$/i', $sentence); $this->$assertRegExp('/^[a-z, ]+\.$/i', $sentence);
} }
} }
public function testParagraph() /**
* @depends testAssertRegExp
*/
public function testParagraph($assertRegExp)
{ {
$this->assertRegExp('/^([a-z, ]+\.)+$/i', $this->lipsum->paragraph()); $lipsum = new LoremIpsum();
$this->$assertRegExp('/^([a-z, ]+\.)+$/i', $lipsum->paragraph());
} }
public function testParagraphs() /**
* @depends testAssertRegExp
*/
public function testParagraphs($assertRegExp)
{ {
$this->assertRegExp( $lipsum = new LoremIpsum();
$this->$assertRegExp(
'/^([a-z, ]+\.)+\n\n([a-z, ]+\.)+\n\n([a-z, ]+\.)+$/i', '/^([a-z, ]+\.)+\n\n([a-z, ]+\.)+\n\n([a-z, ]+\.)+$/i',
$this->lipsum->paragraphs(3) $lipsum->paragraphs(3)
); );
} }
public function testParagraphsArray() /**
* @depends testAssertRegExp
*/
public function testParagraphsArray($assertRegExp)
{ {
$paragraphs = $this->lipsum->paragraphsArray(3); $lipsum = new LoremIpsum();
$paragraphs = $lipsum->paragraphsArray(3);
$this->assertTrue(is_array($paragraphs)); $this->assertTrue(is_array($paragraphs));
$this->assertCount(3, $paragraphs); $this->assertCount(3, $paragraphs);
foreach ($paragraphs as $paragraph) { foreach ($paragraphs as $paragraph) {
$this->assertRegExp('/^([a-z, ]+\.)+$/i', $paragraph); $this->$assertRegExp('/^([a-z, ]+\.)+$/i', $paragraph);
} }
} }
public function testMarkupString() /**
* @depends testAssertRegExp
*/
public function testMarkupString($assertRegExp)
{ {
$this->assertRegExp( $lipsum = new LoremIpsum();
$this->$assertRegExp(
'/^<li>[a-z]+<\/li>$/i', '/^<li>[a-z]+<\/li>$/i',
$this->lipsum->word('li') $lipsum->word('li')
); );
} }
public function testMarkupArray() /**
* @depends testAssertRegExp
*/
public function testMarkupArray($assertRegExp)
{ {
$this->assertRegExp( $lipsum = new LoremIpsum();
$this->$assertRegExp(
'/^<div><p>[a-z]+<\/p><\/div>$/i', '/^<div><p>[a-z]+<\/p><\/div>$/i',
$this->lipsum->word(array('div', 'p')) $lipsum->word(array('div', 'p'))
); );
} }
public function testMarkupBackReference() /**
* @depends testAssertRegExp
*/
public function testMarkupBackReference($assertRegExp)
{ {
$this->assertRegExp( $lipsum = new LoremIpsum();
$this->$assertRegExp(
'/^<li><a href="[a-z]+">[a-z]+<\/a><\/li>$/i', '/^<li><a href="[a-z]+">[a-z]+<\/a><\/li>$/i',
$this->lipsum->word('<li><a href="$1">$1</a></li>') $lipsum->word('<li><a href="$1">$1</a></li>')
); );
} }
public function testMarkupArrayReturn() /**
* @depends testAssertRegExp
*/
public function testMarkupArrayReturn($assertRegExp)
{ {
$words = $this->lipsum->wordsArray(3, 'li'); $lipsum = new LoremIpsum();
$words = $lipsum->wordsArray(3, 'li');
$this->assertTrue(is_array($words)); $this->assertTrue(is_array($words));
$this->assertCount(3, $words); $this->assertCount(3, $words);
foreach ($words as $word) { foreach ($words as $word) {
$this->assertRegExp('/^<li>[a-z]+<\/li>$/i', $word); $this->$assertRegExp('/^<li>[a-z]+<\/li>$/i', $word);
} }
}
/**
* @depends testAssertRegExp
*/
public function testSkipNonStringTag($assertRegExp)
{
$lipsum = new LoremIpsum();
$this->$assertRegExp('/^[a-z]+$/i', $lipsum->word(123));
$this->$assertRegExp('/^[a-z]+$/i', $lipsum->word(array(1, 2, 3)));
$this->$assertRegExp('/^[a-z]+$/i', $lipsum->word(true));
} }
} }