|
| 1 | +<?php |
| 2 | + |
| 3 | +/* |
| 4 | + * Copyright (c) Alexandre Gomes Gaigalas <alganet@gmail.com> |
| 5 | + * SPDX-License-Identifier: MIT |
| 6 | + */ |
| 7 | + |
| 8 | +declare(strict_types=1); |
| 9 | + |
| 10 | +namespace Respect\Validation\Test; |
| 11 | + |
| 12 | +use Generator; |
| 13 | +use Respect\Validation\Mixins\Chain; |
| 14 | +use Respect\Validation\ValidatorBuilder as v; |
| 15 | +use stdClass; |
| 16 | + |
| 17 | +use function fopen; |
| 18 | + |
| 19 | +use const FILTER_VALIDATE_EMAIL; |
| 20 | +use const INF; |
| 21 | + |
| 22 | +trait SmokeTestProvider |
| 23 | +{ |
| 24 | + public static function provideValidatorInput(): Generator |
| 25 | + { |
| 26 | + yield 'All' => [v::all(v::intVal()), [1, 2, 3]]; |
| 27 | + yield 'AllOf' => [v::allOf(v::intVal(), v::greaterThan(0)), 5]; |
| 28 | + yield 'Alnum' => [v::alnum(), 'abc123']; |
| 29 | + yield 'Alpha' => [v::alpha(), 'abc']; |
| 30 | + yield 'AlwaysInvalid' => [v::not(v::alwaysInvalid()), 'whatever']; |
| 31 | + yield 'AlwaysValid' => [v::alwaysValid(), 'whatever']; |
| 32 | + yield 'AnyOf' => [v::anyOf(v::intVal(), v::stringVal()), 5]; |
| 33 | + yield 'ArrayType' => [v::arrayType(), []]; |
| 34 | + yield 'ArrayVal' => [v::arrayVal(), []]; |
| 35 | + yield 'Attributes' => [v::attributes(), (object) ['required' => true]]; |
| 36 | + yield 'Base' => [v::base(2), '001001']; |
| 37 | + yield 'Base64' => [v::base64(), 'U29tZSBCYXNlNjQgU3RyaW5n']; |
| 38 | + yield 'Between' => [v::between(1, 10), 5]; |
| 39 | + yield 'BetweenExclusive' => [v::betweenExclusive(1, 10), 5]; |
| 40 | + yield 'Blank' => [v::blank(), '']; |
| 41 | + yield 'BoolType' => [v::boolType(), true]; |
| 42 | + yield 'BoolVal' => [v::boolVal(), true]; |
| 43 | + yield 'Bsn' => [v::bsn(), '612890053']; |
| 44 | + yield 'Call' => [v::call('array_keys', v::each(v::stringType())), ['a' => 'b']]; |
| 45 | + yield 'CallableType' => [v::callableType(), [static::class, 'callableTarget']]; |
| 46 | + yield 'Callback' => [v::callback('is_string'), 'valid']; |
| 47 | + yield 'Charset' => [v::charset('UTF-8'), 'example']; |
| 48 | + yield 'Circuit' => [v::circuit(v::intVal(), v::greaterThan(0)), 5]; |
| 49 | + yield 'Cnh' => [v::cnh(), '02650306461']; |
| 50 | + yield 'Cnpj' => [v::cnpj(), '11444777000161']; |
| 51 | + yield 'Consonant' => [v::consonant(), 'bcdf']; |
| 52 | + yield 'Contains' => [v::contains('needle'), 'haystack needle']; |
| 53 | + yield 'ContainsAny' => [v::containsAny(['a', 'b']), 'abc']; |
| 54 | + yield 'ContainsCount' => [v::containsCount('foo', 2), 'foo bar foo']; |
| 55 | + yield 'Control' => [v::control(), "\n\r"]; |
| 56 | + yield 'Countable' => [v::countable(), []]; |
| 57 | + yield 'CountryCode' => [v::countryCode(), 'US']; |
| 58 | + yield 'Cpf' => [v::cpf(), '11598647644']; |
| 59 | + yield 'CreditCard' => [v::creditCard(), '4111111111111111']; |
| 60 | + yield 'CurrencyCode' => [v::currencyCode(), 'USD']; |
| 61 | + yield 'Date' => [v::date(), '2020-01-01']; |
| 62 | + yield 'DateTime' => [v::dateTime(), '2020-01-01 12:00:00']; |
| 63 | + yield 'DateTimeDiff' => [v::dateTimeDiff('years', v::greaterThan(18), 'd/m/Y'), '09/12/1990']; |
| 64 | + yield 'Decimal' => [v::decimal(2), '1.23']; |
| 65 | + yield 'Digit' => [v::digit(), '7']; |
| 66 | + yield 'Directory' => [v::directory(), 'tests/fixtures']; |
| 67 | + yield 'Domain' => [v::domain(), 'example.com']; |
| 68 | + yield 'Each' => [v::each(v::stringType()), ['a', 'b']]; |
| 69 | + yield 'Email' => [v::email(), 'bob@example.com']; |
| 70 | + yield 'Emoji' => [v::emoji(), '😀']; |
| 71 | + yield 'EndsWith' => [v::endsWith('.com'), 'example.com']; |
| 72 | + yield 'Equals' => [v::equals('x'), 'x']; |
| 73 | + yield 'Equivalent' => [v::equivalent(123), 123.0]; |
| 74 | + yield 'Even' => [v::even(), 2]; |
| 75 | + yield 'Executable' => [v::executable(), 'tests/fixtures/executable']; |
| 76 | + yield 'Exists' => [v::exists(), 'tests/fixtures/valid-image.png']; |
| 77 | + yield 'Extension' => [v::extension('png'), 'image.png']; |
| 78 | + yield 'Factor' => [v::factor(0), 36]; |
| 79 | + yield 'FalseVal' => [v::falseVal(), false]; |
| 80 | + yield 'Falsy' => [v::falsy(), 0]; |
| 81 | + yield 'Fibonacci' => [v::fibonacci(), 13]; |
| 82 | + yield 'File' => [v::file(), __FILE__]; |
| 83 | + yield 'FilterVar' => [v::filterVar(FILTER_VALIDATE_EMAIL), 'bob@example.com']; |
| 84 | + yield 'Finite' => [v::finite(), 1.23]; |
| 85 | + yield 'FloatType' => [v::floatType(), 1.23]; |
| 86 | + yield 'FloatVal' => [v::floatVal(), 1.23]; |
| 87 | + yield 'Graph' => [v::graph(), 'abc123!@#']; |
| 88 | + yield 'GreaterThan' => [v::greaterThan(0), 1]; |
| 89 | + yield 'GreaterThanOrEqual' => [v::greaterThanOrEqual(1), 1]; |
| 90 | + yield 'Hetu' => [v::hetu(), '010106A9012']; |
| 91 | + yield 'HexRGBColor' => [v::hexRgbColor(), '#FFAABB']; |
| 92 | + yield 'Iban' => [v::iban(), 'SE35 5000 0000 0549 1000 0003']; |
| 93 | + yield 'Identical' => [v::identical(123), 123]; |
| 94 | + yield 'Imei' => [v::imei(), '490154203237518']; |
| 95 | + yield 'In' => [v::in(['a', 'b']), 'a']; |
| 96 | + yield 'Infinite' => [v::infinite(), INF]; |
| 97 | + yield 'Instance' => [v::instance(stdClass::class), new stdClass()]; |
| 98 | + yield 'IntType' => [v::intType(), 123]; |
| 99 | + yield 'IntVal' => [v::intVal(), 123]; |
| 100 | + yield 'Ip' => [v::ip(), '127.0.0.1']; |
| 101 | + yield 'Isbn' => [v::isbn(), '9783161484100']; |
| 102 | + yield 'IterableType' => [v::iterableType(), []]; |
| 103 | + yield 'IterableVal' => [v::iterableVal(), []]; |
| 104 | + yield 'Json' => [v::json(), '{"key":"value"}']; |
| 105 | + yield 'Key' => [v::key('name', v::stringType()), ['name' => 'value']]; |
| 106 | + yield 'KeyExists' => [v::keyExists('name'), ['name' => 'value']]; |
| 107 | + yield 'KeyOptional' => [v::keyOptional('missing', v::stringType()), ['name' => 'value']]; |
| 108 | + yield 'KeySet' => [v::keySet(v::key('name', v::stringType())), ['name' => 'value']]; |
| 109 | + yield 'LanguageCode' => [v::languageCode(), 'en']; |
| 110 | + yield 'Lazy' => [v::lazy([static::class, 'callableLazy']), 123]; |
| 111 | + yield 'LeapDate' => [v::leapDate('Y-m-d'), '2020-02-29']; |
| 112 | + yield 'LeapYear' => [v::leapYear(), 2020]; |
| 113 | + yield 'Length' => [v::length(v::equals(4)), 'abcd']; |
| 114 | + yield 'LessThan' => [v::lessThan(10), 5]; |
| 115 | + yield 'LessThanOrEqual' => [v::lessThanOrEqual(10), 10]; |
| 116 | + yield 'Lowercase' => [v::lowercase(), 'abc']; |
| 117 | + yield 'Luhn' => [v::luhn(), '2222400041240011']; |
| 118 | + yield 'MacAddress' => [v::macAddress(), '00:11:22:33:44:55']; |
| 119 | + yield 'Max' => [v::max(v::equals(30)), [10, 20, 30]]; |
| 120 | + yield 'Min' => [v::min(v::equals(10)), [10, 20, 30]]; |
| 121 | + yield 'Multiple' => [v::multiple(3), 9]; |
| 122 | + yield 'Named' => [v::named('MyValidator', v::intVal()), 123]; |
| 123 | + yield 'Negative' => [v::negative(), -1]; |
| 124 | + yield 'NfeAccessKey' => [v::nfeAccessKey(), '52060433009911002506550120000007800267301615']; |
| 125 | + yield 'Nif' => [v::nif(), '12345678Z']; |
| 126 | + yield 'Nip' => [v::nip(), '1645865777']; |
| 127 | + yield 'Not' => [v::not(v::trueVal()), false]; |
| 128 | + yield 'NullOr' => [v::nullOr(v::intVal()), null]; |
| 129 | + yield 'Number' => [v::number(), '123']; |
| 130 | + yield 'NullType' => [v::nullType(), null]; |
| 131 | + yield 'NumericVal' => [v::numericVal(), '123']; |
| 132 | + yield 'Odd' => [v::odd(), 3]; |
| 133 | + yield 'OneOf' => [v::oneOf(v::digit(), v::alpha()), 'AB']; |
| 134 | + yield 'PerfectSquare' => [v::perfectSquare(), 16]; |
| 135 | + yield 'Pesel' => [v::pesel(), '21120209256']; |
| 136 | + yield 'Phone' => [v::phone(), '+1 650 253 00 00']; |
| 137 | + yield 'PhpLabel' => [v::phpLabel(), 'valid_label']; |
| 138 | + yield 'Pis' => [v::pis(), '120.0340.678-8']; |
| 139 | + yield 'PolishIdCard' => [v::polishIdCard(), 'AYW036733']; |
| 140 | + yield 'PortugueseNif' => [v::portugueseNif(), '123456789']; |
| 141 | + yield 'Positive' => [v::positive(), 1]; |
| 142 | + yield 'PostalCode' => [v::postalCode('US'), '12345']; |
| 143 | + yield 'PrimeNumber' => [v::primeNumber(), 7]; |
| 144 | + yield 'Printable' => [v::printable(), 'abc123!@#']; |
| 145 | + yield 'Property' => [v::property('email', v::endsWith('@example.com')), (object) ['email' => 'a@example.com']]; |
| 146 | + yield 'PropertyExists' => [v::propertyExists('email'), (object) ['email' => 'a@example.com']]; |
| 147 | + yield 'PropertyOptional' => [v::propertyOptional('missing', v::email()), (object) ['email' => 'a@example.com']]; |
| 148 | + yield 'PublicDomainSuffix' => [v::publicDomainSuffix(), 'co.uk']; |
| 149 | + yield 'Punct' => [v::punct(), '!@#']; |
| 150 | + yield 'Readable' => [v::readable(), 'tests/fixtures/valid-image.png']; |
| 151 | + yield 'Regex' => [v::regex('/^[a-z]+$/'), 'abc']; |
| 152 | + yield 'ResourceType' => [v::resourceType(), fopen('php://temp', 'r')]; |
| 153 | + yield 'Roman' => [v::roman(), 'XIV']; |
| 154 | + yield 'ScalarVal' => [v::scalarVal(), 'example']; |
| 155 | + yield 'Slug' => [v::slug(), 'a-valid-slug']; |
| 156 | + yield 'Sorted' => [v::sorted('ASC'), [1, 2, 3]]; |
| 157 | + yield 'Space' => [v::space(), " \t\n"]; |
| 158 | + yield 'Spaced' => [v::spaced(), 'a b c']; |
| 159 | + yield 'StartsWith' => [v::startsWith('ex'), 'example']; |
| 160 | + yield 'StringType' => [v::stringType(), 'example']; |
| 161 | + yield 'StringVal' => [v::stringVal(), 'example']; |
| 162 | + yield 'SubdivisionCode' => [v::subdivisionCode('US'), 'CA']; |
| 163 | + yield 'Subset' => [v::subset(['a', 'b', 'c']), ['a', 'b']]; |
| 164 | + yield 'SymbolicLink' => [v::symbolicLink(), 'tests/fixtures/symbolic-link']; |
| 165 | + yield 'Time' => [v::time(), '12:34:56']; |
| 166 | + yield 'Tld' => [v::tld(), 'com']; |
| 167 | + yield 'TrueVal' => [v::trueVal(), true]; |
| 168 | + yield 'Undef' => [v::undef(), null]; |
| 169 | + yield 'UndefOr' => [v::undefOr(v::intVal()), null]; |
| 170 | + yield 'Unique' => [v::unique(), [1, 2, 3]]; |
| 171 | + yield 'Uppercase' => [v::uppercase(), 'ABC']; |
| 172 | + yield 'Uuid' => [v::uuid(), '123e4567-e89b-12d3-a456-426655440000']; |
| 173 | + yield 'Version' => [v::version(), '1.2.3']; |
| 174 | + yield 'VideoUrl' => [v::videoUrl(), 'https://www.youtube.com/watch?v=dQw4w9WgXcQ']; |
| 175 | + yield 'Vowel' => [v::vowel(), 'aeiou']; |
| 176 | + yield 'When' => [v::when(v::intVal(), v::alwaysValid(), v::alwaysInvalid()), 5]; |
| 177 | + yield 'Writable' => [v::writable(), 'tests/fixtures/valid-image.png']; |
| 178 | + yield 'Xdigit' => [v::xdigit(), 'AF']; |
| 179 | + } |
| 180 | + |
| 181 | + public static function callableTarget(): true |
| 182 | + { |
| 183 | + return true; |
| 184 | + } |
| 185 | + |
| 186 | + public static function callableLazy(): v|Chain |
| 187 | + { |
| 188 | + return v::intVal(); |
| 189 | + } |
| 190 | +} |
0 commit comments