OptionalTest.php 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <?php declare(strict_types=1);
  2. /**
  3. * This file is part of toolkit/stdlib.
  4. *
  5. * @author https://github.com/inhere
  6. * @link https://github.com/php-toolkit/stdlib
  7. * @license MIT
  8. */
  9. namespace Toolkit\StdlibTest\Util;
  10. use Toolkit\Stdlib\Util\Optional;
  11. use Toolkit\Stdlib\Util\Stream\IntStream;
  12. use Toolkit\StdlibTest\BaseLibTestCase;
  13. /**
  14. * class OptionalTest
  15. *
  16. * @author inhere
  17. */
  18. class OptionalTest extends BaseLibTestCase
  19. {
  20. public function testOptionalBasic(): void
  21. {
  22. $o = Optional::of(23);
  23. $this->assertEquals(23, $o->get());
  24. $this->assertEquals('23', $o->map('strval')->get());
  25. // use arrow syntax:
  26. $val = $o->filter(fn ($val) => $val > 25)->orElse(25);
  27. $this->assertEquals(25, $val);
  28. $o = Optional::nullable(null);
  29. $this->assertEquals(23, $o->orElse(23));
  30. $this->assertEquals(25, $o->orElseGet(fn () => 25));
  31. }
  32. public function testOptional_stream(): void
  33. {
  34. $o = Optional::nullable([23, '56', '78']);
  35. $this->assertEquals([23, '56', '78'], $o->get());
  36. $list = $o->stream()->map(fn ($val) => (int)$val)->toArray();
  37. $this->assertEquals([23, 56, 78], $list);
  38. $this->assertEquals([23, '56', '78'], $o->get());
  39. $list = $o->stream(IntStream::class)->toArray();
  40. $this->assertEquals([23, 56, 78], $list);
  41. }
  42. public function testOptional_or(): void
  43. {
  44. $o = Optional::ofNullable(null);
  45. $e = $this->tryCatchRun(fn () => $o->get());
  46. $this->assertException($e, 'No value present');
  47. $val = $o->or(fn () => Optional::of(23))->get();
  48. $this->assertEquals(23, $val);
  49. $val = $o->or(fn () => Optional::of('abc'))->get();
  50. $this->assertEquals('abc', $val);
  51. }
  52. }