mirror of
https://github.com/archtechx/enums.git
synced 2025-12-12 08:24:05 +00:00
* #4 Added `From` trait This adds the `from()` and `tryFrom()` methods to pure enums, and the `fromName()` and `tryFromName()` methods for all enum types. * Code review changes Dropped support for fragile indexes on pure enums * Dropped unnecessary array_pop() * import ValueError * remove import Co-authored-by: Samuel Štancl <samuel@archte.ch> Co-authored-by: Samuel Štancl <samuel.stancl@gmail.com>
This commit is contained in:
parent
0c87357a6e
commit
cc5bba1912
4 changed files with 183 additions and 2 deletions
65
tests/Pest/FromTest.php
Normal file
65
tests/Pest/FromTest.php
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
<?php
|
||||
|
||||
it('does not override the default BackedEnum from method')
|
||||
->expect(Status::from(0))
|
||||
->toBe(Status::PENDING);
|
||||
|
||||
it('does not override the default BackedEnum from method with errors', function () {
|
||||
Status::from(2);
|
||||
})->throws(ValueError::class, '2 is not a valid backing value for enum "Status"');
|
||||
|
||||
it('does not override the default BackedEnum tryFrom method')
|
||||
->expect(Status::tryFrom(1))
|
||||
->toBe(Status::DONE);
|
||||
|
||||
it('does not override the default BackedEnum tryFrom method with errors')
|
||||
->expect(Status::tryFrom(2))
|
||||
->toBe(null);
|
||||
|
||||
it('can select a case by name with from() for pure enums')
|
||||
->expect(Role::from('ADMIN'))
|
||||
->toBe(Role::ADMIN);
|
||||
|
||||
it('throws a value error when selecting a non-existent case with from() for pure enums', function () {
|
||||
Role::from('NOBODY');
|
||||
})->throws(ValueError::class, '"NOBODY" is not a valid name for enum "Role"');
|
||||
|
||||
it('can select a case by name with tryFrom() for pure enums')
|
||||
->expect(Role::tryFrom('GUEST'))
|
||||
->toBe(Role::GUEST);
|
||||
|
||||
it('can returns null when selecting a non-existent case by name with tryFrom() for pure enums')
|
||||
->expect(Role::tryFrom('NOBODY'))
|
||||
->toBe(null);
|
||||
|
||||
it('can select a case by name with fromName() for pure enums')
|
||||
->expect(Role::fromName('ADMIN'))
|
||||
->toBe(Role::ADMIN);
|
||||
|
||||
it('throws a value error when selecting a non-existent case by name with fromName() for pure enums', function () {
|
||||
Role::fromName('NOBODY');
|
||||
})->throws(ValueError::class, '"NOBODY" is not a valid name for enum "Role"');
|
||||
|
||||
it('can select a case by name with tryFromName() for pure enums')
|
||||
->expect(Role::tryFromName('GUEST'))
|
||||
->toBe(Role::GUEST);
|
||||
|
||||
it('returns null when selecting a non-existent case by name with tryFromName() for pure enums')
|
||||
->expect(Role::tryFromName('NOBODY'))
|
||||
->toBe(null);
|
||||
|
||||
it('can select a case by name with fromName() for backed enums')
|
||||
->expect(Status::fromName('PENDING'))
|
||||
->toBe(Status::PENDING);
|
||||
|
||||
it('throws a value error when selecting a non-existent case by name with fromName() for backed enums', function () {
|
||||
Status::fromName('NOTHING');
|
||||
})->throws(ValueError::class, '"NOTHING" is not a valid name for enum "Status"');
|
||||
|
||||
it('can select a case by name with tryFromName() for backed enums')
|
||||
->expect(Status::tryFromName('DONE'))
|
||||
->toBe(Status::DONE);
|
||||
|
||||
it('returns null when selecting a non-existent case by name with tryFromName() for backed enums')
|
||||
->expect(Status::tryFromName('NOTHING'))
|
||||
->toBe(null);
|
||||
Loading…
Add table
Add a link
Reference in a new issue