Merge pull request #378 from peco/topic/issue-376

Fix --select-1
This commit is contained in:
lestrrat 2016-12-17 07:25:09 +09:00 committed by GitHub
commit 003fe3127f
2 changed files with 24 additions and 6 deletions

View file

@ -219,6 +219,10 @@ func (p *Peco) Err() error {
}
func (p *Peco) Exit(err error) {
if pdebug.Enabled {
g := pdebug.Marker("Peco.Exit (err = %s)", err)
defer g.End()
}
p.err = err
if cf := p.cancelFunc; cf != nil {
cf()
@ -348,7 +352,7 @@ func (p *Peco) Run(ctx context.Context) (err error) {
if b := p.CurrentLineBuffer(); b.Size() == 1 {
if l, err := b.LineAt(0); err == nil {
p.resultCh = make(chan line.Line)
p.Exit(nil)
p.Exit(errCollectResults{})
p.resultCh <- l
close(p.resultCh)
}

View file

@ -264,6 +264,9 @@ func TestApplyConfig(t *testing.T) {
}
}
// While this issue is labeled for Issue363, it tests against 376 as well.
// The test should have caught the bug for 376, but the premise of the test
// itself was wrong
func TestGHIssue363(t *testing.T) {
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel()
@ -273,15 +276,26 @@ func TestGHIssue363(t *testing.T) {
p.Stdin = bytes.NewBufferString("foo\n")
var out bytes.Buffer
p.Stdout = &out
if !assert.NoError(t, p.Run(ctx), "p.Run should succeed") {
return
}
resultCh := make(chan error)
go func() {
defer close(resultCh)
select {
case <-ctx.Done():
return
case resultCh <- p.Run(ctx):
return
}
}()
select {
case <-ctx.Done():
t.Errorf("we should get here before being canceled")
t.Errorf("timeout reached")
return
default:
case err := <-resultCh:
if !assert.True(t, util.IsCollectResultsError(err), "isCollectResultsError") {
return
}
}
if !assert.NotEqual(t, "foo\n", out.String(), "output should match") {