mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-17 03:03:27 +00:00
os: implement os.(*File).WriteAt (#3697)
os: implement os.(*File).WriteAt Signed-off-by: Achille Roussel <achille.roussel@gmail.com>
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
package os_test
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
. "os"
|
||||
@@ -249,3 +250,66 @@ func TestReadAtEOF(t *testing.T) {
|
||||
t.Fatalf("ReadAt failed: %s", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestWriteAt(t *testing.T) {
|
||||
if runtime.GOOS == "windows" {
|
||||
t.Log("TODO: implement Pwrite for Windows")
|
||||
return
|
||||
}
|
||||
f := newFile("TestWriteAt", t)
|
||||
defer Remove(f.Name())
|
||||
defer f.Close()
|
||||
|
||||
const data = "hello, world\n"
|
||||
io.WriteString(f, data)
|
||||
|
||||
n, err := f.WriteAt([]byte("WORLD"), 7)
|
||||
if err != nil || n != 5 {
|
||||
t.Fatalf("WriteAt 7: %d, %v", n, err)
|
||||
}
|
||||
|
||||
b, err := os.ReadFile(f.Name())
|
||||
if err != nil {
|
||||
t.Fatalf("ReadFile %s: %v", f.Name(), err)
|
||||
}
|
||||
if string(b) != "hello, WORLD\n" {
|
||||
t.Fatalf("after write: have %q want %q", string(b), "hello, WORLD\n")
|
||||
}
|
||||
}
|
||||
|
||||
// Verify that WriteAt doesn't allow negative offset.
|
||||
func TestWriteAtNegativeOffset(t *testing.T) {
|
||||
if runtime.GOOS == "windows" {
|
||||
t.Log("TODO: implement Pwrite for Windows")
|
||||
return
|
||||
}
|
||||
f := newFile("TestWriteAtNegativeOffset", t)
|
||||
defer Remove(f.Name())
|
||||
defer f.Close()
|
||||
|
||||
n, err := f.WriteAt([]byte("WORLD"), -10)
|
||||
|
||||
const wantsub = "negative offset"
|
||||
if !strings.Contains(fmt.Sprint(err), wantsub) || n != 0 {
|
||||
t.Errorf("WriteAt(-10) = %v, %v; want 0, ...%q...", n, err, wantsub)
|
||||
}
|
||||
}
|
||||
|
||||
// Verify that WriteAt doesn't work in append mode.
|
||||
func TestWriteAtInAppendMode(t *testing.T) {
|
||||
if runtime.GOOS == "windows" {
|
||||
t.Log("TODO: implement Pwrite for Windows")
|
||||
return
|
||||
}
|
||||
defer chtmpdir(t)()
|
||||
f, err := OpenFile("write_at_in_append_mode.txt", O_APPEND|O_CREATE|O_WRONLY, 0666)
|
||||
if err != nil {
|
||||
t.Fatalf("OpenFile: %v", err)
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
_, err = f.WriteAt([]byte(""), 1)
|
||||
if err != ErrWriteAtInAppendMode {
|
||||
t.Fatalf("f.WriteAt returned %v, expected %v", err, ErrWriteAtInAppendMode)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user