expect-pty 0.3.2 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/test/timeout_test.rb CHANGED
@@ -48,6 +48,125 @@ class TimeoutTest < ExpectTest
48
48
  assert_equal :timeout, session.error
49
49
  end
50
50
 
51
+ def test_eof_continuation_without_reset_observes_the_deadline_before_matching_again
52
+ first, = pipe_session
53
+ second, = pipe_session
54
+ first.close
55
+ now = 0.0
56
+ result = Expect.stub(:monotonic, -> { now }) do
57
+ Expect.expect_result(timeout: 1) do
58
+ eof(from: first) do
59
+ now = 2.0
60
+ second.buffer = "ready"
61
+ Expect.continue(reset_timeout: false)
62
+ end
63
+ on("ready", from: second)
64
+ end
65
+ end
66
+
67
+ assert result.timeout?
68
+ assert_same second, result.session
69
+ assert_equal "ready", second.buffer
70
+ assert first.last_result.eof?
71
+ end
72
+
73
+ def test_eof_continuation_can_reset_an_expired_deadline
74
+ first, = pipe_session
75
+ second, = pipe_session
76
+ first.close
77
+ now = 0.0
78
+ result = Expect.stub(:monotonic, -> { now }) do
79
+ Expect.expect_result(timeout: 1) do
80
+ eof(from: first) do
81
+ now = 2.0
82
+ second.buffer = "ready"
83
+ Expect.continue
84
+ end
85
+ on("ready", from: second)
86
+ end
87
+ end
88
+
89
+ assert_equal "ready", result.match
90
+ assert_same second, result.session
91
+ end
92
+
93
+ def test_last_eof_returns_even_when_continuation_deadline_has_expired
94
+ session, = pipe_session
95
+ session.close
96
+ now = 0.0
97
+ result = Expect.stub(:monotonic, -> { now }) do
98
+ session.expect_result(timeout: 1) do
99
+ eof do
100
+ now = 2.0
101
+ Expect.continue(reset_timeout: false)
102
+ end
103
+ end
104
+ end
105
+
106
+ assert result.eof?
107
+ assert_same session, result.session
108
+ end
109
+
110
+ def test_expired_eof_continuation_delivers_all_known_eof_events
111
+ sessions = Array.new(3) { pipe_session.first }
112
+ sessions.each(&:close)
113
+ seen = []
114
+ result = Expect.expect_result(from: sessions, timeout: 0) do
115
+ eof do |session|
116
+ seen << session
117
+ Expect.continue(reset_timeout: false)
118
+ end
119
+ end
120
+
121
+ assert result.eof?
122
+ assert_equal sessions, seen
123
+ assert(sessions.all? { |session| session.last_result.eof? })
124
+ end
125
+
126
+ def test_expired_eof_continuation_handles_known_eof_before_timing_out_live_sources
127
+ first, = pipe_session
128
+ second, = pipe_session
129
+ live, = pipe_session
130
+ [first, second].each(&:close)
131
+ seen = []
132
+ timed_out = nil
133
+ result = Expect.expect_result(timeout: 0) do
134
+ eof(from: [first, second]) do |session|
135
+ seen << session
136
+ live.buffer = "ready"
137
+ Expect.continue(reset_timeout: false)
138
+ end
139
+ on("ready", from: live)
140
+ timeout { |sessions| timed_out = sessions }
141
+ end
142
+
143
+ assert result.timeout?
144
+ assert_equal [first, second], seen
145
+ assert_equal [live], timed_out
146
+ assert_equal "ready", live.buffer
147
+ end
148
+
149
+ def test_reset_after_expired_eof_continuation_resumes_text_matching
150
+ %i[eof timeout].each do |reset_event|
151
+ first, = pipe_session
152
+ second, = pipe_session
153
+ live, = pipe_session
154
+ [first, second].each(&:close)
155
+ result = Expect.expect_result(timeout: 0) do
156
+ eof(from: first) do
157
+ live.buffer = "ready"
158
+ Expect.continue(reset_timeout: false)
159
+ end
160
+ eof(from: second) { Expect.continue(reset_timeout: reset_event == :eof) }
161
+ on("ready", from: live)
162
+ timeout { Expect.continue }
163
+ end
164
+
165
+ assert_equal "ready", result.match
166
+ assert_same live, result.session
167
+ end
168
+ end
169
+
51
170
  def test_restart_timeout_on_receive
52
171
  session, writer = pipe_session
53
172
  session.reset_timeout_on_read = true
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: expect-pty
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - expect-pty contributors
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2026-09-26 00:00:00.000000000 Z
10
+ date: 2026-09-27 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: forwardable
@@ -130,6 +130,7 @@ files:
130
130
  - lib/expect.rb
131
131
  - lib/expect/configuration.rb
132
132
  - lib/expect/interaction.rb
133
+ - lib/expect/logging.rb
133
134
  - lib/expect/matcher.rb
134
135
  - lib/expect/pattern.rb
135
136
  - lib/expect/pattern_list.rb
@@ -138,6 +139,7 @@ files:
138
139
  - lib/expect/relay_writer.rb
139
140
  - lib/expect/result.rb
140
141
  - lib/expect/session_resources.rb
142
+ - lib/expect/terminal.rb
141
143
  - lib/expect/version.rb
142
144
  - script/ci
143
145
  - script/release.rb