Files
core/test/rust/fixtures/stream.dever
T
2026-11-03 03:32:07 +00:00

82 lines
3.1 KiB
Plaintext

verify() (ok: Bool) {
file = dever.io.open("input")
invalid = creationFailed(result(dever.io.chunks(file, 0)))
stream = dever.io.chunks(file, 2)
alias = stream
head = reduceUntil(take, stream, 0)
tail = reduce(count, alias, 0)
end = reduce(count, stream, 0)
close(alias)
close(stream)
file_end = dever.io.read(file, 1)
dever.io.close(file)
closed = creationFailed(result(dever.io.chunks(file, 1)))
file_two = dever.io.open("input")
broken = dever.io.chunks(file_two, 2)
dever.io.close(file_two)
terminal = reduce(observe, broken, 0)
terminal_end = reduce(observe, broken, 0)
file_three = dever.io.open("input")
stopped = dever.io.chunks(file_three, 2)
each(stopReading, stopped, stopped)
remaining = dever.io.read(file_three, 99)
file_four = dever.io.open("input")
interrupted = dever.io.chunks(file_four, 2)
failed = consumeFailed(result(consume(interrupted)))
after_failure = reduce(count, interrupted, 0)
ok = invalid and closed and head == 2 and tail == 4 and end == 0 and file_end == dever.io.ReadState.End and terminal == 1000 and terminal_end == 0 and remaining == dever.io.ReadState.Read(dever.bytes.fromText("cdef")) and failed and after_failure == 4
}
count(event: dever.io.ReadEvent.Chunk(bytes), state: Int) (next: Int) {
next = state + dever.bytes.length(bytes)
}
count(event: dever.io.ReadEvent.Failed(message), state: Int) (next: Int) {
fail(dever.io.ReadEvent.Failed(message))
}
take(event: dever.io.ReadEvent, state: Int) (next: Int, stop: Bool) {
next = count(event, state)
stop = true
}
observe(event: dever.io.ReadEvent.Chunk(bytes), state: Int) (next: Int) recover("test observes terminal read failure") {
next = state + dever.bytes.length(bytes)
}
observe(event: dever.io.ReadEvent.Failed(message), state: Int) (next: Int) recover("test observes terminal read failure") {
next = state + 1000
}
creationFailed(value: dever.io.ReadStreamResult.Streaming(stream)) (ok: Bool) recover("test expects invalid stream construction") {
close(stream)
ok = false
}
creationFailed(value: dever.io.ReadStreamResult.Failed(message)) (ok: Bool) recover("test expects invalid stream construction") {
ok = length(message) > 0
}
stopReading(event: dever.io.ReadEvent.Chunk(bytes), stream: Stream<dever.io.ReadEvent>) () {
close(stream)
}
stopReading(event: dever.io.ReadEvent.Failed(message), stream: Stream<dever.io.ReadEvent>) () {
fail(dever.io.ReadEvent.Failed(message))
}
abort(event: dever.io.ReadEvent.Chunk(bytes)) () {
fail(dever.io.ReadResult.Failed("handler stopped"))
}
abort(event: dever.io.ReadEvent.Failed(message)) () {
fail(dever.io.ReadResult.Failed(message))
}
consume(stream: Stream<dever.io.ReadEvent>) (state: dever.io.ReadState) {
each(abort, stream)
state = dever.io.ReadState.End
}
consumeFailed(value: dever.io.ReadResult.Done(state)) (ok: Bool) recover("test observes handler failure without closing an external stream alias") {
ok = false
}
consumeFailed(value: dever.io.ReadResult.Failed(message)) (ok: Bool) recover("test observes handler failure without closing an external stream alias") {
ok = message == "handler stopped"
}