func (factory *AppExaminerCommandFactory) printDistribution() int { defer factory.ui.Say(cursor.ClearToEndOfDisplay()) cells, err := factory.appExaminer.ListCells() if err != nil { factory.ui.Say("Error visualizing: " + err.Error()) factory.ui.Say(cursor.ClearToEndOfLine()) factory.ui.SayNewLine() return 1 } for _, cell := range cells { factory.ui.Say(cell.CellID) if cell.Missing { factory.ui.Say(colors.Red("[MISSING]")) } factory.ui.Say(": ") if cell.RunningInstances == 0 && cell.ClaimedInstances == 0 && !cell.Missing { factory.ui.Say(colors.Red("empty")) } else { factory.ui.Say(colors.Green(strings.Repeat("•", cell.RunningInstances))) factory.ui.Say(colors.Yellow(strings.Repeat("•", cell.ClaimedInstances))) } factory.ui.Say(cursor.ClearToEndOfLine()) factory.ui.SayNewLine() } return len(cells) }
. "github.com/onsi/ginkgo" . "github.com/onsi/gomega" "github.com/cloudfoundry-incubator/ltc/terminal/cursor" ) var _ = Describe("cursor", func() { Describe("Up", func() { It("moves the cursor up N lines", func() { Expect(cursor.Up(5)).To(Equal("\033[5A")) }) }) Describe("ClearToEndOfLine", func() { It("clears the line after the cursor", func() { Expect(cursor.ClearToEndOfLine()).To(Equal("\033[0K")) }) }) Describe("ClearToEndOfDisplay", func() { It("clears everything below the cursor", func() { Expect(cursor.ClearToEndOfDisplay()).To(Equal("\033[0J")) }) }) Describe("Show", func() { It("shows the cursor", func() { Expect(cursor.Show()).To(Equal("\033[?25h")) }) })
commandFactory := command_factory.NewAppExaminerCommandFactory(fakeAppExaminer, terminalUI, fakeTerm, fakeClock, fakeExitHandler, fakeGraphicalVisualizer, fakeTaskExaminer, systemDomain) visualizeCommand = commandFactory.MakeVisualizeCommand() }) It("displays a visualization of cells", func() { listCells := []app_examiner.CellInfo{ {CellID: "cell-1", RunningInstances: 3, ClaimedInstances: 2}, {CellID: "cell-2", RunningInstances: 2, ClaimedInstances: 1}, {CellID: "cell-3", RunningInstances: 0, ClaimedInstances: 0}, } fakeAppExaminer.ListCellsReturns(listCells, nil) test_helpers.ExecuteCommandWithArgs(visualizeCommand, []string{}) Expect(outputBuffer).To(test_helpers.SayLine(colors.Bold("Distribution"))) Expect(outputBuffer).To(test_helpers.SayLine("cell-1: " + colors.Green("•••") + colors.Yellow("••") + cursor.ClearToEndOfLine())) Expect(outputBuffer).To(test_helpers.SayLine("cell-2: " + colors.Green("••") + colors.Yellow("•") + cursor.ClearToEndOfLine())) Expect(outputBuffer).To(test_helpers.SayLine("cell-3: " + colors.Red("empty") + cursor.ClearToEndOfLine())) }) Context("when the app examiner returns an error", func() { It("alerts the user fetching the cells returns an error", func() { fakeAppExaminer.ListCellsReturns(nil, errors.New("The list was lost")) test_helpers.ExecuteCommandWithArgs(visualizeCommand, []string{}) Expect(outputBuffer).To(test_helpers.Say("Error visualizing: The list was lost")) Expect(outputBuffer).To(test_helpers.Say(cursor.ClearToEndOfLine())) Expect(outputBuffer).To(test_helpers.SayNewLine()) // TODO: this should return non-zero, but it's shared with refresh view