Skip to content
This repository has been archived by the owner on Apr 19, 2024. It is now read-only.

Asking the same set of questions multiple times corrupts the output #270

Open
stoggi opened this issue Feb 11, 2020 · 3 comments
Open

Asking the same set of questions multiple times corrupts the output #270

stoggi opened this issue Feb 11, 2020 · 3 comments
Labels

Comments

@stoggi
Copy link

stoggi commented Feb 11, 2020

When asking multiple surveys but with the same question, the output is corrupted for the second survey. The cursor begins on the same line, and overwrites the previous question each time.

Environments Tested

OS: MacOS, Linux
Terminal: iTerm2, xfce4-terminal
Shell: bash, zsh, elvish
Versions:

  • github.com/AlecAivazis/survey/v2 v2.0.5
  • github.com/AlecAivazis/survey/v2 v2.0.6-0.20200121083222-e4745b24cd43

Example

package main

import (
	"fmt"

	"github.com/AlecAivazis/survey/v2"
)

type Answers struct {
	Name    string
	Age     int
	Hobbies string
}

var questions = []*survey.Question{
	{
		Name:     "Name",
		Prompt:   &survey.Input{Message: "What's your name?"},
		Validate: survey.Required,
	},
	{
		Name:     "Age",
		Prompt:   &survey.Input{Message: "How old are you?"},
		Validate: survey.Required,
	},
	{
		Name:     "Hobbies",
		Prompt:   &survey.Input{Message: "What are your hobbies?"},
		Validate: survey.Required,
	},
}

func main() {
	a1 := Answers{}
	if err := survey.Ask(questions, &a1); err != nil {
		panic(err)
	}
	a2 := Answers{}
	if err := survey.Ask(questions, &a2); err != nil {
		panic(err)
	}
	fmt.Println(a1, a2)
}

Observed output:
survey

What was I expecting to see?

The second survey should appear like the first, instead newlines seem to get lost, and it overwrites the same line for each question.

@stoggi stoggi changed the title Asking multiple surveys corrupts output for second and subsequent ones Asking the same set of questions multiple times corrupts the output Feb 11, 2020
@stoggi
Copy link
Author

stoggi commented Feb 11, 2020

After a little more digging, it seems this is because I'm asking the same questions multiple times!

This code is not affected:

package main

import (
	"fmt"

	"github.com/AlecAivazis/survey/v2"
)

type Answers struct {
	Name    string
	Age     int
	Hobbies string
}

var questions1 = []*survey.Question{
	{
		Name:     "Name",
		Prompt:   &survey.Input{Message: "What's your name?"},
		Validate: survey.Required,
	},
	{
		Name:     "Age",
		Prompt:   &survey.Input{Message: "How old are you?"},
		Validate: survey.Required,
	},
	{
		Name:     "Hobbies",
		Prompt:   &survey.Input{Message: "What are your hobbies?"},
		Validate: survey.Required,
	},
}

var questions2 = []*survey.Question{
	{
		Name:     "Name",
		Prompt:   &survey.Input{Message: "What's your name?"},
		Validate: survey.Required,
	},
	{
		Name:     "Age",
		Prompt:   &survey.Input{Message: "How old are you?"},
		Validate: survey.Required,
	},
	{
		Name:     "Hobbies",
		Prompt:   &survey.Input{Message: "What are your hobbies?"},
		Validate: survey.Required,
	},
}

func main() {
	a1 := Answers{}
	if err := survey.Ask(questions1, &a1); err != nil {
		panic(err)
	}
	a2 := Answers{}
	if err := survey.Ask(questions2, &a2); err != nil {
		panic(err)
	}
	fmt.Println(a1, a2)
}

This feels like some internal state is not being cleared.

@mislav
Copy link
Collaborator

mislav commented Sep 16, 2021

@stoggi Excellent sleuthing! It looks like some state is being remembered between these prompts that results in extra lines of output being overwritten.

@li-jin-gou
Copy link

I had the same problem.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

No branches or pull requests

3 participants