mirror of
https://github.com/Respect/Validation.git
synced 2026-03-15 14:55:44 +01:00
The `ValidatorDefaults` is cumbersome, and customising it can be annoying. Most projects use some sort of dependency injection container, and by integrating the creation of the `Validator` with the PSR-11, we allow users to easily customise how they create validators. Some tasks, like overwriting the `Translator`, become a bit more verbose, if the user is not already using a PSR-11 container, but I think that’s a good tradeoff.
68 lines
2.1 KiB
PHP
68 lines
2.1 KiB
PHP
<?php
|
|
|
|
/*
|
|
* Copyright (c) Alexandre Gomes Gaigalas <alganet@gmail.com>
|
|
* SPDX-License-Identifier: MIT
|
|
*/
|
|
|
|
declare(strict_types=1);
|
|
|
|
use Respect\Validation\Exceptions\ValidationException;
|
|
use Respect\Validation\Test\Stubs\MyValidator;
|
|
|
|
test('Should overwrite file and line in the Validator class', function (): void {
|
|
try {
|
|
v::intType()->assert('string');
|
|
} catch (ValidationException $e) {
|
|
expect($e->getFile())->toBe(__FILE__);
|
|
expect($e->getLine())->toBe(__LINE__ - 3);
|
|
}
|
|
});
|
|
|
|
test('Should overwrite file and line in ValidationException', function (): void {
|
|
try {
|
|
MyValidator::assertIntType('string');
|
|
} catch (ValidationException $e) {
|
|
expect($e->getFile())->toBe(__FILE__);
|
|
expect($e->getLine())->toBe(__LINE__ - 3);
|
|
}
|
|
});
|
|
|
|
test('Should not overwrite file and line when created manually', function (): void {
|
|
try {
|
|
throw new ValidationException('message', 'fullMessage', ['id' => 'message']);
|
|
} catch (ValidationException $e) {
|
|
expect($e->getFile())->toBe(__FILE__);
|
|
expect($e->getLine())->toBe(__LINE__ - 3);
|
|
}
|
|
});
|
|
|
|
|
|
test('Should not overwrite file and line when file cannot be ever traced', function (): void {
|
|
try {
|
|
throw new ValidationException('message', 'fullMessage', ['id' => 'message'], ['/tmp/unknown']);
|
|
} catch (ValidationException $e) {
|
|
expect($e->getFile())->toBe(__FILE__);
|
|
expect($e->getLine())->toBe(__LINE__ - 3);
|
|
}
|
|
});
|
|
|
|
|
|
test('Should go not overwrite file and line when it runs out of choices', function (): void {
|
|
try {
|
|
$trace = array_unique(
|
|
array_filter(
|
|
array_map(
|
|
fn($trace) => $trace['file'] ?? null,
|
|
debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS),
|
|
),
|
|
),
|
|
);
|
|
$trace[] = __FILE__;
|
|
|
|
throw new ValidationException('message', 'fullMessage', ['id' => 'message'], $trace);
|
|
} catch (ValidationException $e) {
|
|
expect($e->getFile())->toBe(__FILE__);
|
|
expect($e->getLine())->toBe(__LINE__ - 3);
|
|
}
|
|
});
|