single_test.go 1.03 KB
Newer Older
keks's avatar
keks committed
1 2 3 4 5 6 7
package cli

import (
	"bytes"
	"context"
	"testing"

Hector Sanjuan's avatar
Hector Sanjuan committed
8
	cmds "github.com/ipfs/go-ipfs-cmds"
keks's avatar
keks committed
9 10 11 12 13 14 15 16 17 18
)

func TestSingle(t *testing.T) {
	req, err := cmds.NewRequest(context.Background(), nil, nil, nil, nil, &cmds.Command{})
	if err != nil {
		t.Fatal(err)
	}

	var bufout, buferr bytes.Buffer

Steven Allen's avatar
Steven Allen committed
19
	re, err := NewResponseEmitter(&bufout, &buferr, req)
Steven Allen's avatar
Steven Allen committed
20 21 22
	if err != nil {
		t.Fatal(err)
	}
keks's avatar
keks committed
23 24 25 26 27

	wait := make(chan struct{})

	go func() {
		if err := cmds.EmitOnce(re, "test"); err != nil {
Hector Sanjuan's avatar
Hector Sanjuan committed
28 29
			t.Error(err)
			return
keks's avatar
keks committed
30 31 32 33 34 35 36 37 38 39 40 41 42 43
		}

		err := re.Emit("this should not be emitted")
		if err != cmds.ErrClosedEmitter {
			t.Errorf("expected emit error %q, got: %v", cmds.ErrClosedEmitter, err)
		}

		err = re.Close()
		if err != cmds.ErrClosingClosedEmitter {
			t.Errorf("expected close error %q, got: %v", cmds.ErrClosingClosedEmitter, err)
		}
		wait <- struct{}{}
	}()

Steven Allen's avatar
Steven Allen committed
44 45 46
	<-wait

	exitCode := re.Status()
keks's avatar
keks committed
47 48 49 50 51 52 53 54 55 56
	if exitCode != 0 {
		t.Errorf("expected exit code 0, got: %v", exitCode)
	}

	str := bufout.String()
	if str != "test\n" {
		t.Fatalf("expected %#v, got %#v", "test\n", str)
	}

}