Azat Khuzhin
|
a424b4ad56
|
Do not ignore eof in expect tests
expect_after that adjusts default timeout handler, reseted eof handler,
and this tell expect that it can ignore eof from read, consider the
following example:
<details>
```expect
#!/usr/bin/expect -f
exp_internal 1
log_user 1
set timeout 4
match_max 100000
expect_after {
# eof { exp_continue }
timeout {
exit 1
}
}
spawn bash -c "sleep 1; echo ':) '"
expect ":) "
```
```
$ ./expect.expect < /dev/null
spawn bash -c sleep 1; echo ':) '
parent: waiting for sync byte
parent: telling child to go ahead
parent: now unsynchronized from child
spawn: returns {6614}
expect: does "" (spawn_id exp4) match glob pattern ":) "? no
expect: read eof
^^^
expect: set expect_out(spawn_id) "exp0"
expect: set expect_out(buffer) ""
```
And with uncommented eof handler:
```
$ ./expect.expect < /dev/null
spawn bash -c sleep 1; echo ':) '
parent: waiting for sync byte
parent: telling child to go ahead
parent: now unsynchronized from child
spawn: returns {17959}
expect: does "" (spawn_id exp4) match glob pattern ":) "? no
expect: read eof
expect: set expect_out(spawn_id) "exp0"
expect: set expect_out(buffer) ""
expect: continuing expect after update
expect: does "" (spawn_id exp4) match glob pattern ":) "? no
expect: does ":) \r\n" (spawn_id exp4) match glob pattern ":) "? yes
expect: set expect_out(0,string) ":) "
expect: set expect_out(spawn_id) "exp4"
expect: set expect_out(buffer) ":) "
```
</details>
|
2021-12-29 10:02:38 +03:00 |
|