gitstack

grindlemire/go-tui code browser

1.6 KB Go 65 lines 2026-06-03 · d15bb9f raw
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package tui

import "time"

// MockEventReader is an EventReader for testing.
type MockEventReader struct {
	events []Event
	index  int
}

// Ensure MockEventReader implements EventReader and InterruptibleReader.
var (
	_ EventReader         = (*MockEventReader)(nil)
	_ InterruptibleReader = (*MockEventReader)(nil)
)

// NewMockEventReader creates a MockEventReader with the given events.
// Events are returned in order by successive calls to PollEvent.
func NewMockEventReader(events ...Event) *MockEventReader {
	return &MockEventReader{
		events: events,
		index:  0,
	}
}

// PollEvent returns the next queued event, ignoring the timeout.
// Returns (nil, false) when all events have been consumed.
func (m *MockEventReader) PollEvent(timeout time.Duration) (Event, bool) {
	if m.index >= len(m.events) {
		return nil, false
	}
	ev := m.events[m.index]
	m.index++
	return ev, true
}

// Close is a no-op for the mock reader.
func (m *MockEventReader) Close() error {
	return nil
}

// Reset resets the reader to return events from the beginning.
func (m *MockEventReader) Reset() {
	m.index = 0
}

// AddEvents adds more events to the queue.
func (m *MockEventReader) AddEvents(events ...Event) {
	m.events = append(m.events, events...)
}

// Remaining returns the number of events yet to be returned.
func (m *MockEventReader) Remaining() int {
	return len(m.events) - m.index
}

// EnableInterrupt is a no-op for the mock reader.
func (m *MockEventReader) EnableInterrupt() error {
	return nil
}

// Interrupt is a no-op for the mock reader.
func (m *MockEventReader) Interrupt() error {
	return nil
}