ttytest2 0.8.3 → 0.8.5

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 995f1309860d889b44e0634247e1ae64cda8fc975a8a02de97de55605bd2958e
4
- data.tar.gz: a7a2c819970a4a6b432b7067ef3bf2feb8d349332b731df4c1639b4db659140d
3
+ metadata.gz: 3b98c6cd8789c970147b325d01c3af8e4b4eef8f32bac57aae4036b8ce3586d9
4
+ data.tar.gz: ddbfe244faedd701d96bc98ce103b49a8d825517e0664dbbea858954319290b4
5
5
  SHA512:
6
- metadata.gz: 83f652b2a5c2815e798cff48d6cd6c83b1a2d325e49306b9f883c11d6a01392c1b0c5303a175b1065238ea01d3628f06cc8a8a96cfa31c42e83d37746cd8cb63
7
- data.tar.gz: 3916165f772f1607ab7c03b497848213d30c7e7e93ce584fb911f081c5236d76722e3090b3c2a26889b3c52294e153d66be5df532d45f91a19ce9e0b362b3644
6
+ metadata.gz: f4862a535e862eb7fa58bc3373306ee3f82b939f5652b9b334e55acb5437358159cef2dd02d551823ff47e62625ac3b69200c526365fee2277882a617156acbd
7
+ data.tar.gz: 7ceed490dc0fb92b77ace530650a92691fdc69fa1833344b8e0000d5b1f21fe654d995b63825b5512d289c75079a83abc117d0e24c85483fda7efc5bf634bda2
data/README.md CHANGED
@@ -1,15 +1,12 @@
1
1
  # ttytest2
2
2
 
3
- TTYtest2 is an acceptance test framework for interactive console applications. It's like [capybara](https://github.com/teamcapybara/capybara) for the terminal.
3
+ ttytest2 is an acceptance test framework for interactive console applications. It's like [capybara](https://github.com/teamcapybara/capybara) for the terminal.
4
4
 
5
- Forked from https://github.com/jhawthorn/ttytest, because I had some features I needed for my own project.
5
+ A drop-in replacement for https://github.com/jhawthorn/ttytest, because I had some features I needed for my own project.
6
6
 
7
7
  It works by running commands inside a tmux session, capturing the pane, and comparing the content. The assertions will wait a specified amount of time (default 2 seconds) for the expected content to appear.
8
8
 
9
- [![Gem Version](https://badge.fury.io/rb/ttytest2.svg)](https://badge.fury.io/rb/ttytest2)
10
-
11
- ## Gem at RubyGems.org
12
- https://rubygems.org/gems/ttytest2
9
+ [![Gem Version](https://badge.fury.io/rb/ttytest2.svg?icon=si%3Arubygems)](https://badge.fury.io/rb/ttytest2)
13
10
 
14
11
  ## Minimum Requirements
15
12
 
@@ -18,7 +15,30 @@ https://rubygems.org/gems/ttytest2
18
15
 
19
16
  ## Usage
20
17
 
18
+ ### Assertions
19
+
20
+ The main way to use TTYtest is through assertions. When called on a `TTYtest::Terminal`, each of these will be retried (for up to 2 seconds).
21
+
22
+ Available assertions:
23
+ * `assert_row(row_number, expected_text)`
24
+ * `assert_row_like(row_number, expected_text)`
25
+ * `assert_row_starts_with(row_number, expected_text)`
26
+ * `assert_row_ends_with(row_number, expected_text)`
27
+ * `assert_cursor_position(x: x, y: y)`
28
+ * `assert_cursor_visible`
29
+ * `assert_cursor_hidden`
30
+ * `assert_contents(lines_of_terminal)`
31
+
32
+ ### Sending output
33
+
34
+ You can send output to the terminal with the following calls.
35
+
36
+ * `send_keys(output)`
37
+ * `send_newline # equivalent to @tty.send_keys(%(\n))`
38
+ * `send_keys_one_at_a_time(output)`
39
+
21
40
  ### Example Canonical CLI/Shell
41
+
22
42
  Most people should use send_keys, if you are writing or working with a noncanonical shell/CLI, you will probably know it. Most are canonical.
23
43
 
24
44
  ``` ruby
@@ -41,7 +61,10 @@ p @tty.rows # => ["$ echo \"Hello, world\"", "Hello, world", "$", "", "", "", ..
41
61
  ```
42
62
 
43
63
  ### Example Noncanonical CLI/Shell
44
- If you are working with a noncanonical shell, you need to use send_keys_one_at_a_time to have your shell/CLI process the input correctly.
64
+
65
+ If you are working with a noncanonical shell, you need to use send_keys_one_at_a_time to have your shell/CLI process the input correctly.<br /><br />
66
+ Also useful if you need to send input one character at a time for whatever reason.<br /><br />
67
+ 'Multi-character' characters like '\n' need to be sent with send-keys, though.<br /><br />
45
68
 
46
69
  ``` ruby
47
70
  require 'ttytest'
@@ -52,22 +75,33 @@ require 'ttytest'
52
75
 
53
76
  @tty.send_keys_one_at_a_time('ls')
54
77
  @tty.assert_row_ends_with(0, 'ls')
55
- @tty.send_keys_one_at_a_time(%(\n))
78
+ @tty.send_keys(%(\n)) # make sure to use send_keys for 'multi-character' characters like \n, \r, \t, etc.
79
+
80
+ @tty.send_keys_one_at_a_time('ps')
81
+ @tty.assert_row_ends_with(0, 'ps')
82
+ @tty.send_keys(TTYtest:NEWLINE) # can use constants instead
56
83
  ```
57
84
 
58
- ### Assertions
85
+ ### Constants
59
86
 
60
- The main way to use TTYtest is through assertions. When called on a `TTYtest::Terminal`, each of these will be retried (for up to 2 seconds by default).
87
+ There are some commonly used keys available as constants to make interacting with your shell/CLI easy. Most of them are self-evident, BACKSPACE is the same as hitting the backspace key on the keyboard.
61
88
 
62
- Available assertions:
63
- * `assert_row(row_number, expected_text)`
64
- * `assert_row_like(row_number, expected_text)`
65
- * `assert_row_starts_with(row_number, expected_text)`
66
- * `assert_row_ends_with(row_number, expected_text)`
67
- * `assert_cursor_position(x: x, y: y)`
68
- * `assert_cursor_visible`
69
- * `assert_cursor_hidden`
70
- * `assert_contents(lines_of_terminal)`
89
+ ``` ruby
90
+ TTYtest::BACKSPACE
91
+ TTYtest::DELETE
92
+ TTYtest::TAB
93
+ TTYtest::CTRLF
94
+ TTYtest::CTRLC
95
+ TTYtest::CTRLD
96
+ TTYtest::ESCAPE
97
+
98
+ TTYtest::UP_ARROW
99
+ TTYtest::DOWN_ARROW
100
+ TTYtest::RIGHT_ARROW
101
+ TTYtest::LEFT_ARROW
102
+
103
+ TTYtest::CLEAR # clear the screen
104
+ ```
71
105
 
72
106
  ## Docker
73
107
 
@@ -77,20 +111,9 @@ Easy to use from Docker. Add this to your dockerfile to get started.
77
111
  RUN apt update && \
78
112
  apt install gcc make ruby tmux -y && \
79
113
  gem install ttytest2
80
- ```
81
-
82
- ## TravisCI
83
-
84
- TTYtest can run on [TravisCI](https://travis-ci.org/), but the version of tmux made available with their default ubuntu 12.04 environment is too old. However the TravisCI ubuntu 14.04 "trusty" image provides tmux 1.8, which works great.
85
-
86
- Ensure the following is in your `.travis.yml` (see [this project's .travis.yml](./.travis.yml) for an example)
87
114
 
88
- ``` yaml
89
- dist: trusty
90
- addons:
91
- apt:
92
- packages:
93
- - tmux
115
+ # add this if you have issues
116
+ # ENV RUBYOPT="-KU -E utf-8:utf-8"
94
117
  ```
95
118
 
96
119
  ## Contributing
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ # some constants that can be used with send_keys, just to help out people creating tests
4
+ module TTYtest
5
+ BACKSPACE = 127.chr
6
+ DELETE = '^[[3~'
7
+ TAB = 9.chr
8
+ CTRLF = 6.chr
9
+ CTRLC = 3.chr
10
+ CTRLD = '\004'
11
+ ESCAPE = 27.chr
12
+
13
+ UP_ARROW = '^[[A'
14
+ DOWN_ARROW = '^[[B'
15
+ RIGHT_ARROW = '^[[C'
16
+ LEFT_ARROW = '^[[D'
17
+
18
+ CLEAR = 'clear'
19
+ end
@@ -27,7 +27,7 @@ module TTYtest
27
27
  # @!method capture
28
28
  # Capture the current state of the terminal
29
29
  # @return [Capture] instantaneous state of the terminal when called
30
- def_delegators :@driver_terminal, :send_keys, :send_keys_one_at_a_time, :capture
30
+ def_delegators :@driver_terminal, :send_keys, :send_keys_one_at_a_time, :send_newline, :capture
31
31
 
32
32
  # @!method rows
33
33
  # @return [Array<String>]
@@ -48,6 +48,10 @@ module TTYtest
48
48
  end
49
49
  end
50
50
 
51
+ def send_newline
52
+ driver.tmux(*%W[send-keys -t #{name} -l], %(\n))
53
+ end
54
+
51
55
  private
52
56
 
53
57
  attr_reader :driver, :name
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TTYtest
4
- VERSION = '0.8.3'
4
+ VERSION = '0.8.5'
5
5
  end
data/lib/ttytest.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'forwardable'
4
+ require 'ttytest/constants'
4
5
  require 'ttytest/tmux/driver'
5
6
  require 'ttytest/tmux/session'
6
7
 
data/notes.txt CHANGED
@@ -1,7 +1,7 @@
1
1
  to push new version to github,
2
- git tag v0.8.3
2
+ git tag v0.8.5
3
3
  git push origin --tags
4
4
 
5
5
  to push new version to rubygems.org
6
6
  gem build ttytest2.gemspec
7
- gem push ttytest2-0.8.3.gem
7
+ gem push ttytest2-0.8.5.gem
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ttytest2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.3
4
+ version: 0.8.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Eski
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-11-14 00:00:00.000000000 Z
11
+ date: 2024-11-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -81,6 +81,7 @@ files:
81
81
  - Rakefile
82
82
  - lib/ttytest.rb
83
83
  - lib/ttytest/capture.rb
84
+ - lib/ttytest/constants.rb
84
85
  - lib/ttytest/matchers.rb
85
86
  - lib/ttytest/terminal.rb
86
87
  - lib/ttytest/tmux/driver.rb