type Holder { file: dever.system.File label: Int } verify() (ok: Bool) { created = dever.io.create("created") dever.io.write(created, dever.bytes.fromText("hello")) dever.io.close(created) refused = createFailed(result(dever.io.create("created"))) file = dever.io.open("input") holder = Holder { file = file label = 1 } copied = holder copied.label = 2 first_read = dever.io.read(holder.file, 2) files = [copied.file] second_read = readAlias(first(files)) last_read = dever.io.read(file, 99) end = dever.io.read(file, 1) dever.io.close(copied.file) closed_read = readFailed(result(dever.io.read(file, 1))) closed_write = writeFailed(result(dever.io.write(holder.file, dever.bytes.fromText("")))) closed_close = closeFailed(result(dever.io.close(file))) dever.io.println("hello") reads = first_read == dever.io.ReadState.Read(dever.bytes.fromText("ab")) and second_read == dever.io.ReadState.Read(dever.bytes.fromText("cd")) and last_read == dever.io.ReadState.Read(dever.bytes.fromText("e")) ok = refused and holder.label == 1 and copied.label == 2 and reads and end == dever.io.ReadState.End and closed_read and closed_write and closed_close } readAlias(file: null) (state: dever.io.ReadState) { state = dever.io.ReadState.End } readAlias(file: dever.system.File) (state: dever.io.ReadState) { state = dever.io.read(file, 2) } missing() () { file = dever.io.open("missing-file") } invalid() () { file = dever.io.open("input") state = dever.io.read(file, 0) } print() () { dever.io.println("hello") } createFailed(value: dever.io.OpenResult.Opened(file)) (ok: Bool) recover("test observes expected I/O failure") { ok = false } createFailed(value: dever.io.OpenResult.Failed(message)) (ok: Bool) recover("test observes expected I/O failure") { ok = length(message) > 0 } readFailed(value: dever.io.ReadResult.Done(state)) (ok: Bool) recover("test observes expected I/O failure") { ok = false } readFailed(value: dever.io.ReadResult.Failed(message)) (ok: Bool) recover("test observes expected I/O failure") { ok = length(message) > 0 } writeFailed(value: dever.io.WriteResult.Done) (ok: Bool) recover("test observes expected I/O failure") { ok = false } writeFailed(value: dever.io.WriteResult.Failed(message)) (ok: Bool) recover("test observes expected I/O failure") { ok = length(message) > 0 } closeFailed(value: dever.io.CloseResult.Closed) (ok: Bool) recover("test observes expected I/O failure") { ok = false } closeFailed(value: dever.io.CloseResult.Failed(message)) (ok: Bool) recover("test observes expected I/O failure") { ok = length(message) > 0 }