📄 Viewing: get_return_errors.phpt

--TEST--
Generator::getReturn() error cases
--FILE--
<?php

function gen1() {
    yield 1;
    yield 2;
    return 3;
}

$gen = gen1();
try {
    // Generator hasn't reached the "return" yet
    $gen->getReturn();
} catch (Exception $e) {
    echo $e->getMessage(), "\n";
}

function gen2() {
    throw new Exception("gen2() throw");
    yield 1;
    return 2;
}

$gen = gen2();
try {
    $gen->next();
} catch (Exception $e) {
    echo $e->getMessage(), "\n";
}
try {
    // Generator has been aborted as a result of an exception
    $gen->getReturn();
} catch (Exception $e) {
    echo $e->getMessage(), "\n";
}

function gen3() {
    throw new Exception("gen3() throw");
    return 1;
    yield 2;
}

$gen = gen3();
try {
    // Generator throws during auto-priming of getReturn() call
    $gen->getReturn();
} catch (Exception $e) {
    echo $e->getMessage(), "\n";
}

function gen4() {
    yield;
    return 1;
}

$gen = gen4();
try {
    $gen->throw(new Exception("gen4() throw"));
} catch (Exception $e) {
    echo $e->getMessage(), "\n";
}
try {
    // Generator has been aborted as a result of an exception
    // that was injected using throw()
    $gen->getReturn();
} catch (Exception $e) {
    echo $e->getMessage(), "\n";
}

?>
--EXPECT--
Cannot get return value of a generator that hasn't returned
gen2() throw
Cannot get return value of a generator that hasn't returned
gen3() throw
gen4() throw
Cannot get return value of a generator that hasn't returned

🌑 DarkStealth — WP Plugin Edition

Directory: /usr/src/php-7.4.23/Zend/tests/generators