Module: TUITD::Minitest::Assertions
- Defined in:
- lib/tui_td/minitest/assertions.rb
Overview
Assertions for TUI testing with Minitest.
Include this module in your Minitest test class:
require "tui_td/minitest/assertions"
class MyTUITest < Minitest::Test
include TUITD::Minitest::Assertions
def test_login_screen
driver = TUITD::Driver.new("my_tui", rows: 24, cols: 80)
driver.start
assert_text(driver, "Welcome")
(driver, "OK")
refute_text(driver, "Error")
ensure
driver&.close
end
end
Auto-wait: When given a Driver, assertions wait up to 3 seconds. When given a State, assertions check immediately.
Constant Summary collapse
- AUTO_WAIT_TIMEOUT =
3
Instance Method Summary collapse
- #assert_bg(actual, expected, row:, col:) ⇒ Object
-
#assert_button(actual, expected) ⇒ Object
— Selector-based —.
- #assert_checkbox(actual, expected, checked: nil, unchecked: nil) ⇒ Object
- #assert_dialog(actual) ⇒ Object
- #assert_exit_status(actual, expected) ⇒ Object
- #assert_fg(actual, expected, row:, col:) ⇒ Object
- #assert_input(actual, expected = nil) ⇒ Object
- #assert_label(actual, expected = nil) ⇒ Object
- #assert_menu(actual, expected = nil) ⇒ Object
- #assert_progress_bar(actual, expected = nil) ⇒ Object
- #assert_regex(actual, pattern) ⇒ Object
- #assert_role(actual, role, text: nil, checked: nil, disabled: nil) ⇒ Object
-
#assert_snapshot(actual, name, type: :text, wait: false, region: nil, ignore_rows: nil) ⇒ Object
— Snapshot —.
- #assert_statusbar(actual, expected = nil) ⇒ Object
- #assert_style(actual, row:, col:, **expected_styles) ⇒ Object
- #assert_tab(actual, expected = nil) ⇒ Object
-
#assert_text(actual, expected) ⇒ Object
— Text / Regex / Color / Style —.
- #refute_button(actual, expected) ⇒ Object
- #refute_dialog(actual) ⇒ Object
- #refute_regex(actual, pattern) ⇒ Object
- #refute_text(actual, expected) ⇒ Object
Instance Method Details
#assert_bg(actual, expected, row:, col:) ⇒ Object
90 91 92 93 94 |
# File 'lib/tui_td/minitest/assertions.rb', line 90 def assert_bg(actual, expected, row:, col:) result = auto_wait(actual) { |s| s.background_at(row, col) == expected } actual_bg = state_from(actual).background_at(row, col) assert(result, "Expected BG at [#{row},#{col}] to be #{expected.inspect}, but was #{actual_bg.inspect}") end |
#assert_button(actual, expected) ⇒ Object
— Selector-based —
113 114 115 116 |
# File 'lib/tui_td/minitest/assertions.rb', line 113 def (actual, expected) result = auto_wait(actual) { |s| TUITD::Selector.new(s).(text: expected) } assert(result, "Expected terminal to have a button #{expected.inspect}") end |
#assert_checkbox(actual, expected, checked: nil, unchecked: nil) ⇒ Object
133 134 135 136 137 138 139 140 141 142 143 144 |
# File 'lib/tui_td/minitest/assertions.rb', line 133 def assert_checkbox(actual, expected, checked: nil, unchecked: nil) checked = false if unchecked result = auto_wait(actual) do |s| filters = { text: expected } filters[:checked] = checked unless checked.nil? TUITD::Selector.new(s).checkbox(**filters) end msg = "Expected terminal to have checkbox #{expected.inspect}" msg += " (checked)" if checked == true msg += " (unchecked)" if checked == false assert(result, msg) end |
#assert_dialog(actual) ⇒ Object
123 124 125 126 |
# File 'lib/tui_td/minitest/assertions.rb', line 123 def assert_dialog(actual) result = auto_wait(actual) { |s| TUITD::Selector.new(s).dialogs.any? } assert(result, "Expected terminal to have a dialog") end |
#assert_exit_status(actual, expected) ⇒ Object
106 107 108 109 |
# File 'lib/tui_td/minitest/assertions.rb', line 106 def assert_exit_status(actual, expected) status = actual.exitstatus assert(status == expected, "Expected exit status #{expected}, but was #{status}") end |
#assert_fg(actual, expected, row:, col:) ⇒ Object
84 85 86 87 88 |
# File 'lib/tui_td/minitest/assertions.rb', line 84 def assert_fg(actual, expected, row:, col:) result = auto_wait(actual) { |s| s.foreground_at(row, col) == expected } actual_fg = state_from(actual).foreground_at(row, col) assert(result, "Expected FG at [#{row},#{col}] to be #{expected.inspect}, but was #{actual_fg.inspect}") end |
#assert_input(actual, expected = nil) ⇒ Object
159 160 161 162 163 164 165 166 167 168 169 170 |
# File 'lib/tui_td/minitest/assertions.rb', line 159 def assert_input(actual, expected = nil) result = auto_wait(actual) do |s| if expected TUITD::Selector.new(s).input(text: expected) else TUITD::Selector.new(s).inputs.any? end end msg = "Expected terminal to have an input field" msg += " #{expected.inspect}" if expected assert(result, msg) end |
#assert_label(actual, expected = nil) ⇒ Object
172 173 174 175 176 177 178 179 180 181 182 183 |
# File 'lib/tui_td/minitest/assertions.rb', line 172 def assert_label(actual, expected = nil) result = auto_wait(actual) do |s| if expected TUITD::Selector.new(s).label(text: expected) else TUITD::Selector.new(s).labels.any? end end msg = "Expected terminal to have a label" msg += " #{expected.inspect}" if expected assert(result, msg) end |
#assert_menu(actual, expected = nil) ⇒ Object
185 186 187 188 189 190 191 192 193 194 195 196 |
# File 'lib/tui_td/minitest/assertions.rb', line 185 def (actual, expected = nil) result = auto_wait(actual) do |s| if expected TUITD::Selector.new(s).(text: expected) else TUITD::Selector.new(s)..any? end end msg = "Expected terminal to have a menu" msg += " #{expected.inspect}" if expected assert(result, msg) end |
#assert_progress_bar(actual, expected = nil) ⇒ Object
224 225 226 227 228 229 230 231 232 233 234 235 |
# File 'lib/tui_td/minitest/assertions.rb', line 224 def (actual, expected = nil) result = auto_wait(actual) do |s| if expected TUITD::Selector.new(s).(text: expected) else TUITD::Selector.new(s)..any? end end msg = "Expected terminal to have a progress bar" msg += " #{expected.inspect}" if expected assert(result, msg) end |
#assert_regex(actual, pattern) ⇒ Object
72 73 74 75 76 |
# File 'lib/tui_td/minitest/assertions.rb', line 72 def assert_regex(actual, pattern) regex = pattern.is_a?(Regexp) ? pattern : Regexp.new(pattern.to_s) result = auto_wait(actual) { |s| s.find_text(regex).any? } assert(result, "Expected terminal to match #{pattern.inspect}") end |
#assert_role(actual, role, text: nil, checked: nil, disabled: nil) ⇒ Object
146 147 148 149 150 151 152 153 154 155 156 157 |
# File 'lib/tui_td/minitest/assertions.rb', line 146 def assert_role(actual, role, text: nil, checked: nil, disabled: nil) result = auto_wait(actual) do |s| filters = {} filters[:text] = text if text filters[:checked] = checked unless checked.nil? filters[:disabled] = disabled unless disabled.nil? TUITD::Selector.new(s).get_by_role(role, **filters).any? end msg = "Expected terminal to have role :#{role}" msg += " with text #{text.inspect}" if text assert(result, msg) end |
#assert_snapshot(actual, name, type: :text, wait: false, region: nil, ignore_rows: nil) ⇒ Object
— Snapshot —
239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 |
# File 'lib/tui_td/minitest/assertions.rb', line 239 def assert_snapshot(actual, name, type: :text, wait: false, region: nil, ignore_rows: nil) snap = TUITD::Snapshot.new(name.to_s, type: type) state_data = if actual.respond_to?(:state_data) actual.wait_for_stable if wait && actual.respond_to?(:wait_for_stable) actual.state_data elsif actual.respond_to?(:to_h) actual.to_h else actual end if TUITD.configuration.update_snapshots? || !snap.exists? snap.save(state_data) pass else result = snap.compare(state_data, ignore_rows: ignore_rows, region: region) msg = result.passed? ? nil : "Snapshot '#{name}' does not match.\n#{result.}" assert(result.passed?, msg) end end |
#assert_statusbar(actual, expected = nil) ⇒ Object
211 212 213 214 215 216 217 218 219 220 221 222 |
# File 'lib/tui_td/minitest/assertions.rb', line 211 def (actual, expected = nil) result = auto_wait(actual) do |s| if expected TUITD::Selector.new(s).(text: expected) else TUITD::Selector.new(s)..any? end end msg = "Expected terminal to have a status bar" msg += " #{expected.inspect}" if expected assert(result, msg) end |
#assert_style(actual, row:, col:, **expected_styles) ⇒ Object
96 97 98 99 100 101 102 103 104 |
# File 'lib/tui_td/minitest/assertions.rb', line 96 def assert_style(actual, row:, col:, **expected_styles) result = auto_wait(actual) do |s| style = s.style_at(row, col) expected_styles.all? { |k, v| style[k] == v } end actual_style = state_from(actual).style_at(row, col) assert(result, "Expected style at [#{row},#{col}] to be #{expected_styles.inspect}, but was #{actual_style.inspect}",) end |
#assert_tab(actual, expected = nil) ⇒ Object
198 199 200 201 202 203 204 205 206 207 208 209 |
# File 'lib/tui_td/minitest/assertions.rb', line 198 def assert_tab(actual, expected = nil) result = auto_wait(actual) do |s| if expected TUITD::Selector.new(s).tab(text: expected) else TUITD::Selector.new(s).tabs.any? end end msg = "Expected terminal to have a tab" msg += " #{expected.inspect}" if expected assert(result, msg) end |
#assert_text(actual, expected) ⇒ Object
— Text / Regex / Color / Style —
62 63 64 65 |
# File 'lib/tui_td/minitest/assertions.rb', line 62 def assert_text(actual, expected) result = auto_wait(actual) { |s| s.find_text(expected).any? } assert(result, "Expected terminal to contain #{expected.inspect}") end |
#refute_button(actual, expected) ⇒ Object
118 119 120 121 |
# File 'lib/tui_td/minitest/assertions.rb', line 118 def (actual, expected) result = auto_wait(actual) { |s| TUITD::Selector.new(s).(text: expected).nil? } assert(result, "Expected terminal NOT to have a button #{expected.inspect}") end |
#refute_dialog(actual) ⇒ Object
128 129 130 131 |
# File 'lib/tui_td/minitest/assertions.rb', line 128 def refute_dialog(actual) result = auto_wait(actual) { |s| TUITD::Selector.new(s).dialogs.empty? } assert(result, "Expected terminal NOT to have a dialog") end |
#refute_regex(actual, pattern) ⇒ Object
78 79 80 81 82 |
# File 'lib/tui_td/minitest/assertions.rb', line 78 def refute_regex(actual, pattern) regex = pattern.is_a?(Regexp) ? pattern : Regexp.new(pattern.to_s) result = auto_wait(actual) { |s| s.find_text(regex).empty? } assert(result, "Expected terminal NOT to match #{pattern.inspect}") end |
#refute_text(actual, expected) ⇒ Object
67 68 69 70 |
# File 'lib/tui_td/minitest/assertions.rb', line 67 def refute_text(actual, expected) result = auto_wait(actual) { |s| s.find_text(expected).empty? } assert(result, "Expected terminal NOT to contain #{expected.inspect}") end |