|
648 | 648 | expect(promise.wait).to be == :first |
649 | 649 | end |
650 | 650 | end |
| 651 | + |
| 652 | + with ".fulfill" do |
| 653 | + it "fulfills the promise when given" do |
| 654 | + promise = Async::Promise.new |
| 655 | + |
| 656 | + result = Async::Promise.fulfill(promise) do |
| 657 | + :block_result |
| 658 | + end |
| 659 | + |
| 660 | + expect(result).to be == :block_result |
| 661 | + expect(promise.resolved?).to be == true |
| 662 | + expect(promise.wait).to be == :block_result |
| 663 | + end |
| 664 | + |
| 665 | + it "simply yields when no promise is given" do |
| 666 | + result = Async::Promise.fulfill(nil) do |
| 667 | + :direct_result |
| 668 | + end |
| 669 | + |
| 670 | + expect(result).to be == :direct_result |
| 671 | + end |
| 672 | + |
| 673 | + it "handles exceptions when promise is given" do |
| 674 | + promise = Async::Promise.new |
| 675 | + test_error = StandardError.new("test error") |
| 676 | + |
| 677 | + result = Async::Promise.fulfill(promise) do |
| 678 | + raise test_error |
| 679 | + end |
| 680 | + |
| 681 | + expect(result).to be_nil |
| 682 | + expect(promise.failed?).to be == true |
| 683 | + expect(promise.value).to be == test_error |
| 684 | + end |
| 685 | + |
| 686 | + it "propagates exceptions when no promise is given" do |
| 687 | + test_error = StandardError.new("test error") |
| 688 | + |
| 689 | + expect do |
| 690 | + Async::Promise.fulfill(nil) do |
| 691 | + raise test_error |
| 692 | + end |
| 693 | + end.to raise_exception(StandardError, message: be =~ /test error/) |
| 694 | + end |
| 695 | + |
| 696 | + it "works with falsy promise values" do |
| 697 | + # Test that it properly checks for nil/false, not just truthiness |
| 698 | + result = Async::Promise.fulfill(false) do |
| 699 | + :should_yield_directly |
| 700 | + end |
| 701 | + |
| 702 | + expect(result).to be == :should_yield_directly |
| 703 | + end |
| 704 | + end |
651 | 705 | end |
0 commit comments