mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-12-05 05:09:57 +08:00
cfcbb4227f
This does not yet include support for the //go:embed directive added in this release. * Makefile.am (check-runtime): Don't create check-runtime-dir. (mostlyclean-local): Don't remove check-runtime-dir. (check-go-tool, check-vet): Copy in go.mod and modules.txt. (check-cgo-test, check-carchive-test): Add go.mod file. * Makefile.in: Regenerate. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/280172
153 lines
3.4 KiB
Go
153 lines
3.4 KiB
Go
// Copyright 2019 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package iotest
|
|
|
|
import (
|
|
"bytes"
|
|
"errors"
|
|
"fmt"
|
|
"log"
|
|
"testing"
|
|
)
|
|
|
|
type errWriter struct {
|
|
err error
|
|
}
|
|
|
|
func (w errWriter) Write([]byte) (int, error) {
|
|
return 0, w.err
|
|
}
|
|
|
|
func TestWriteLogger(t *testing.T) {
|
|
olw := log.Writer()
|
|
olf := log.Flags()
|
|
olp := log.Prefix()
|
|
|
|
// Revert the original log settings before we exit.
|
|
defer func() {
|
|
log.SetFlags(olf)
|
|
log.SetPrefix(olp)
|
|
log.SetOutput(olw)
|
|
}()
|
|
|
|
lOut := new(bytes.Buffer)
|
|
log.SetPrefix("lw: ")
|
|
log.SetOutput(lOut)
|
|
log.SetFlags(0)
|
|
|
|
lw := new(bytes.Buffer)
|
|
wl := NewWriteLogger("write:", lw)
|
|
if _, err := wl.Write([]byte("Hello, World!")); err != nil {
|
|
t.Fatalf("Unexpectedly failed to write: %v", err)
|
|
}
|
|
|
|
if g, w := lw.String(), "Hello, World!"; g != w {
|
|
t.Errorf("WriteLogger mismatch\n\tgot: %q\n\twant: %q", g, w)
|
|
}
|
|
wantLogWithHex := fmt.Sprintf("lw: write: %x\n", "Hello, World!")
|
|
if g, w := lOut.String(), wantLogWithHex; g != w {
|
|
t.Errorf("WriteLogger mismatch\n\tgot: %q\n\twant: %q", g, w)
|
|
}
|
|
}
|
|
|
|
func TestWriteLogger_errorOnWrite(t *testing.T) {
|
|
olw := log.Writer()
|
|
olf := log.Flags()
|
|
olp := log.Prefix()
|
|
|
|
// Revert the original log settings before we exit.
|
|
defer func() {
|
|
log.SetFlags(olf)
|
|
log.SetPrefix(olp)
|
|
log.SetOutput(olw)
|
|
}()
|
|
|
|
lOut := new(bytes.Buffer)
|
|
log.SetPrefix("lw: ")
|
|
log.SetOutput(lOut)
|
|
log.SetFlags(0)
|
|
|
|
lw := errWriter{err: errors.New("Write Error!")}
|
|
wl := NewWriteLogger("write:", lw)
|
|
if _, err := wl.Write([]byte("Hello, World!")); err == nil {
|
|
t.Fatalf("Unexpectedly succeeded to write: %v", err)
|
|
}
|
|
|
|
wantLogWithHex := fmt.Sprintf("lw: write: %x: %v\n", "", "Write Error!")
|
|
if g, w := lOut.String(), wantLogWithHex; g != w {
|
|
t.Errorf("WriteLogger mismatch\n\tgot: %q\n\twant: %q", g, w)
|
|
}
|
|
}
|
|
|
|
func TestReadLogger(t *testing.T) {
|
|
olw := log.Writer()
|
|
olf := log.Flags()
|
|
olp := log.Prefix()
|
|
|
|
// Revert the original log settings before we exit.
|
|
defer func() {
|
|
log.SetFlags(olf)
|
|
log.SetPrefix(olp)
|
|
log.SetOutput(olw)
|
|
}()
|
|
|
|
lOut := new(bytes.Buffer)
|
|
log.SetPrefix("lr: ")
|
|
log.SetOutput(lOut)
|
|
log.SetFlags(0)
|
|
|
|
data := []byte("Hello, World!")
|
|
p := make([]byte, len(data))
|
|
lr := bytes.NewReader(data)
|
|
rl := NewReadLogger("read:", lr)
|
|
|
|
n, err := rl.Read(p)
|
|
if err != nil {
|
|
t.Fatalf("Unexpectedly failed to read: %v", err)
|
|
}
|
|
|
|
if g, w := p[:n], data; !bytes.Equal(g, w) {
|
|
t.Errorf("ReadLogger mismatch\n\tgot: %q\n\twant: %q", g, w)
|
|
}
|
|
|
|
wantLogWithHex := fmt.Sprintf("lr: read: %x\n", "Hello, World!")
|
|
if g, w := lOut.String(), wantLogWithHex; g != w {
|
|
t.Errorf("ReadLogger mismatch\n\tgot: %q\n\twant: %q", g, w)
|
|
}
|
|
}
|
|
|
|
func TestReadLogger_errorOnRead(t *testing.T) {
|
|
olw := log.Writer()
|
|
olf := log.Flags()
|
|
olp := log.Prefix()
|
|
|
|
// Revert the original log settings before we exit.
|
|
defer func() {
|
|
log.SetFlags(olf)
|
|
log.SetPrefix(olp)
|
|
log.SetOutput(olw)
|
|
}()
|
|
|
|
lOut := new(bytes.Buffer)
|
|
log.SetPrefix("lr: ")
|
|
log.SetOutput(lOut)
|
|
log.SetFlags(0)
|
|
|
|
data := []byte("Hello, World!")
|
|
p := make([]byte, len(data))
|
|
|
|
lr := ErrReader(errors.New("io failure"))
|
|
rl := NewReadLogger("read", lr)
|
|
n, err := rl.Read(p)
|
|
if err == nil {
|
|
t.Fatalf("Unexpectedly succeeded to read: %v", err)
|
|
}
|
|
|
|
wantLogWithHex := fmt.Sprintf("lr: read %x: io failure\n", p[:n])
|
|
if g, w := lOut.String(), wantLogWithHex; g != w {
|
|
t.Errorf("ReadLogger mismatch\n\tgot: %q\n\twant: %q", g, w)
|
|
}
|
|
}
|