123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- package progress
- import (
- "bytes"
- "io"
- "io/ioutil"
- "testing"
- )
- func TestOutputOnPrematureClose(t *testing.T) {
- content := []byte("TESTING")
- reader := ioutil.NopCloser(bytes.NewReader(content))
- progressChan := make(chan Progress, 10)
- pr := NewProgressReader(reader, ChanOutput(progressChan), int64(len(content)), "Test", "Read")
- part := make([]byte, 4)
- _, err := io.ReadFull(pr, part)
- if err != nil {
- pr.Close()
- t.Fatal(err)
- }
- drainLoop:
- for {
- select {
- case <-progressChan:
- default:
- break drainLoop
- }
- }
- pr.Close()
- select {
- case <-progressChan:
- default:
- t.Fatalf("Expected some output when closing prematurely")
- }
- }
- func TestCompleteSilently(t *testing.T) {
- content := []byte("TESTING")
- reader := ioutil.NopCloser(bytes.NewReader(content))
- progressChan := make(chan Progress, 10)
- pr := NewProgressReader(reader, ChanOutput(progressChan), int64(len(content)), "Test", "Read")
- out, err := ioutil.ReadAll(pr)
- if err != nil {
- pr.Close()
- t.Fatal(err)
- }
- if string(out) != "TESTING" {
- pr.Close()
- t.Fatalf("Unexpected output %q from reader", string(out))
- }
- drainLoop:
- for {
- select {
- case <-progressChan:
- default:
- break drainLoop
- }
- }
- pr.Close()
- select {
- case <-progressChan:
- t.Fatalf("Should have closed silently when read is complete")
- default:
- }
- }
|