te3270 0.7.1 → 0.8.0

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
  SHA1:
3
- metadata.gz: af8cc879e8470d05f34abc4ad47a7b6db9c173a1
4
- data.tar.gz: eb94d218b98a0d9d9cfc26ee4d8c147fb7ea18ea
3
+ metadata.gz: 3a98a2c51a06119ab5ff8660994f1cbf352356d9
4
+ data.tar.gz: dd0cc3dda81267b7408b80e745b3de6adf7ecb78
5
5
  SHA512:
6
- metadata.gz: 03d8a5fc9df38d7efd38a949f4905ecc34b3fb34410ee6bdc9a4ee12ecc041fb98233c4aaaa34707f6473f2b76ff2960a76f1aa8e5e782b6067b7ea3edbca176
7
- data.tar.gz: 19755164422327c56e5b1bce336ca524007c772343efaf499e67230650652caa18a52948056e692b6460634bea7942e7b68e691f12f974a6ce4fe3fa5ef89fd0
6
+ metadata.gz: d019afdd33a9b46215f887c3983bce5bb86911e5fb2ceb5c1fabcfb97f683028117da4321aaf91bbd110683c8ad35512b64bce79a6d68f4cfe7b46e6b2cd3b1e
7
+ data.tar.gz: 4638275f200b51447eab85aa35b859a23a445a6fc3501485f4cb94572811f09e29f988515b32e5f8774c5b2329c7e7ec6678456791d90b8809b71163202e4441
data/ChangeLog CHANGED
@@ -1,3 +1,7 @@
1
+ === Version 0.8.0 / 2016-11-22 (Thanks David West)
2
+ * Enhancements
3
+ * Added support for Virtel driver
4
+
1
5
  === Version 0.7.1 / 2016/7/5
2
6
  * Enhanced the native portion of installation by added messages and warnings
3
7
 
data/Gemfile CHANGED
@@ -1,8 +1,7 @@
1
- source 'https://rubygems.org'
1
+ source 'http://rubygems.org'
2
2
 
3
3
  require 'rbconfig'
4
4
 
5
- gem 'rake'
6
5
  gem 'fuubar'
7
6
  gem 'guard-rspec'
8
7
  gem 'wdm', '>= 0.1.0'
data/README.md CHANGED
@@ -3,9 +3,9 @@
3
3
  This gem can be used to drive a 3270 terminal emulator. You have to have a supported emulator installed on the
4
4
  machines on which you use the gem. Currently the supported emulators are
5
5
  [EXTRA! X-treme](http://www.attachmate.com/Products/Terminal+Emulation/Extra/xtreme/extra-x-treme.htm) by
6
- Attachmate, [Quick3270](http://www.dn-computing.com/Quick3270.htm) by DN-Computing,
6
+ Attachmate, [Quick3270](http://www.dn-computing.com/Quick3270.htm) by DN-Computing, [Virtel Web Access](http://www.virtelweb.com/solutions/3270-terminal-emulation.html),
7
7
  and [X3270](http://x3270.bgp.nu/).
8
- The first two are commercial products and need to be purchased.
8
+ The first three are commercial products and need to be purchased.
9
9
  X3270 is open source. Support for other
10
10
  emulators will be added as time permits.
11
11
 
@@ -7,8 +7,9 @@ require 'te3270/emulator_factory'
7
7
 
8
8
  #
9
9
  # This gem can be used to drive a 3270 terminal emulator. You have to have a supported emulator installed on the
10
- # machines on which you use the gem. Currently the only supported emulators are EXTRA! X-treme by Attachmate and
11
- # Quick3270 by DN-Computing. These are commercial products and you will need to purchase one of them in order to
10
+ # machines on which you use the gem. Currently the supported emulators are EXTRA! X-treme by Attachmate,
11
+ # Quick3270 by DN-Computing, Virtel Web Access and X3270. These are commercial products, with the exception of X3270,
12
+ # and you will need to purchase one of them in order to
12
13
  # use this gem. We do plan to support other emulators as time permits.
13
14
  #
14
15
  # This gem has been designed to work very similar to the page-object gem. You will use it to create screen objects
@@ -65,7 +66,8 @@ module TE3270
65
66
  # To know what information you should provide in the block please see the classes in
66
67
  # the TE3270::Emulators package.
67
68
  #
68
- #@param platform =[:extra,:quick3270] use :extra for Extra emulator and :quick3270 for quick emulator
69
+ #@param platform =[:extra,:quick3270, :virtel] use :extra for Extra emulator, :quick3270 for quick emulator, :virtel
70
+ #for Virtel Web access, and :x3270 for X3270
69
71
  #
70
72
  def self.emulator_for(platform, &block)
71
73
  platform_class = TE3270::EmulatorFactory.emulator_for(platform)
@@ -1,6 +1,7 @@
1
1
  require 'te3270/emulators/extra'
2
2
  require 'te3270/emulators/quick3270'
3
3
  require 'te3270/emulators/x3270'
4
+ require 'te3270/emulators/virtel'
4
5
 
5
6
  module TE3270
6
7
  #
@@ -12,7 +13,8 @@ module TE3270
12
13
  EMULATORS = {
13
14
  extra: TE3270::Emulators::Extra,
14
15
  quick3270: TE3270::Emulators::Quick3270,
15
- x3270: TE3270::Emulators::X3270
16
+ x3270: TE3270::Emulators::X3270,
17
+ virtel: TE3270::Emulators::Virtel
16
18
  }
17
19
 
18
20
  def self.emulator_for(platform)
@@ -0,0 +1,210 @@
1
+ module TE3270
2
+ module Emulators
3
+ #
4
+ # This class has the code necessary to communicate with the terminal emulator called Virtel.
5
+ # It is a browser based terminal emulator. Watir webdriver (chrome only) is used to drive a browser with VWS (Virtel Web Access)
6
+ # You can use this emulator by providing the +:virtel+ parameter to the constructor of your screen
7
+ # object or by passing the same value to the +emulator_for+ method on the +TE3270+ module.
8
+ #
9
+ class Virtel
10
+
11
+ attr_writer :url, :max_wait_time
12
+ WAIT_SLEEP_INTERVAL = 0.2 # How long should we sleep during the wait loop.
13
+
14
+ def initialize
15
+ require 'watir-webdriver'
16
+ end
17
+
18
+ #
19
+ # Creates a method to connect to Virtel System. This method expects a block in which certain
20
+ # platform specific values can be set. Extra can take the following parameters.
21
+ #
22
+ # * url - this value is required and should be the url of the session.
23
+ # * max_wait_time - max time to wait in wait_for_string (defaults to 10 if not specified)
24
+ #
25
+ # @example Example calling screen object constructor with a block
26
+ # screen_object = MyScreenObject.new(:virtel)
27
+ # screen_object.connect do |emulator|
28
+ # emulator.url = 'http://mainframe:41001/w2h/WEB2AJAX.htm+Sessmgr'
29
+ # end
30
+ #
31
+ def connect
32
+ @max_wait_time = 10
33
+ yield self if block_given?
34
+ start_virtel_browser
35
+
36
+ raise 'The url must be set in a block when calling connect with the Virtel emulator.' if @url.nil?
37
+ end
38
+
39
+ #
40
+ # Disconnects the Virtel System connection
41
+ #
42
+ def disconnect
43
+ @browser.close
44
+ end
45
+
46
+ #
47
+ # Extracts text of specified length from a start point.
48
+ #
49
+ # @param [Fixnum] row the x coordinate of location on the screen.
50
+ # @param [Fixnum] column the y coordinate of location on the screen.
51
+ # @param [Fixnum] length the length of string to extract
52
+ # @return [String]
53
+ #
54
+ def get_string(row, column, length)
55
+ @browser.execute_script <<-JS
56
+ return VIR3270.getBoxedText("#{row}", "#{column}", 1, "#{length}");
57
+ JS
58
+ end
59
+
60
+ #
61
+ # Puts string at the coordinates specified.
62
+ #
63
+ # @param [String] str the string to set
64
+ # @param [Fixnum] row the x coordinate of the location on the screen.
65
+ # @param [Fixnum] column the y coordinate of the location on the screen.
66
+ #
67
+ def put_string(str, row, column)
68
+ move_to(row, column)
69
+ @browser.execute_script <<-JS
70
+ VIR3270.pasteByTyping("#{str}");
71
+ JS
72
+ quiet_period
73
+ end
74
+
75
+ #
76
+ # Moves string at the coordinates specified.
77
+ #
78
+ # @param [Fixnum] row the x coordinate of the location on the screen.
79
+ # @param [Fixnum] column the y coordinate of the location on the screen.
80
+ #
81
+ def move_to(row, column)
82
+ @browser.execute_script <<-JS
83
+ var row = parseInt("#{row}", 10);
84
+ var col = parseInt("#{column}", 10);
85
+
86
+ VIR3270.moveCursorToPos(VIR3270.posFromRowCol(row, col));
87
+ JS
88
+ end
89
+
90
+ #
91
+ # Sends keystrokes to the host, including function keys.
92
+ #
93
+ # @param [String] keys keystokes up to 255 in length
94
+ #
95
+ def send_keys(keys)
96
+ char_input_keys = ['ErEof','Reset']
97
+ if char_input_keys.include?(keys)
98
+ @browser.execute_script <<-JS
99
+ VIR3270.charInput("#{keys}");
100
+ JS
101
+ else
102
+ @browser.execute_script <<-JS
103
+ sendWithSpecialKey("#{keys}");
104
+ JS
105
+ end
106
+ quiet_period
107
+ end
108
+
109
+ #
110
+ # Wait for the string to appear at the specified location
111
+ #
112
+ # @param [String] str the string to wait for
113
+ # @param [Fixnum] row the x coordinate of location
114
+ # @param [Fixnum] column the y coordinate of location
115
+ #
116
+ def wait_for_string(str, row, column)
117
+ total_time = 0.0
118
+ sleep_time = 0.5
119
+ while get_string(row, column, str.length) != str do
120
+ sleep sleep_time
121
+ total_time = total_time + sleep_time
122
+ break if total_time >= @max_wait_time
123
+ end
124
+ end
125
+
126
+ #
127
+ # Waits for the host to not send data for a specified number of seconds
128
+ #
129
+ # @param [Fixnum] seconds the maximum number of seconds to wait
130
+ #
131
+ def wait_for_host(seconds)
132
+ milliseconds = seconds * 1000
133
+ sleep(WAIT_SLEEP_INTERVAL)
134
+ @browser.execute_script <<-JS
135
+ function virtelWaiting(){
136
+ if (VIR3270.waitlocked === false)
137
+ {return true;}
138
+ else
139
+ {return false;}
140
+ };
141
+
142
+ function waitOnVirtel(){
143
+ for (var count = 1; ; count++) {
144
+ if (setInterval(virtelWaiting(), 200))
145
+ {
146
+ return true;
147
+ }
148
+ }
149
+ }
150
+ setTimeout(waitOnVirtel(), "#{milliseconds}");
151
+ JS
152
+ end
153
+
154
+ #
155
+ # Waits until the cursor is at the specified location.
156
+ #
157
+ # @param [Fixnum] row the x coordinate of the location
158
+ # @param [Fixnum] column the y coordinate of the location
159
+ #
160
+ def wait_until_cursor_at(row, column)
161
+ wait_until do
162
+ @browser.execute_script <<-JS
163
+ return (VIR3270.rowFromPos(VIR3270.cursorPosn) === parseInt("#{row}", 10)) && (VIR3270.colFromPos(VIR3270.cursorPosn) === parseInt("#{column}", 10))
164
+ JS
165
+ end
166
+ end
167
+
168
+ #
169
+ # Returns the text of the active screen
170
+ #
171
+ # @return [String]
172
+ #
173
+ def text
174
+ @browser.execute_script <<-JS
175
+ VIR3270.collectText(1,1,VIR3270.rows,VIR3270.cols)
176
+ JS
177
+ end
178
+
179
+ #
180
+ # Creates a method to take screenshot of the active screen.
181
+ #
182
+ # @param [String] filename the path and name of the screenshot file to be saved
183
+ #
184
+ def screenshot(filename)
185
+ File.delete(filename) if File.exists?(filename)
186
+
187
+ @browser.screenshot.save(filename)
188
+ end
189
+
190
+ def start_virtel_browser
191
+ begin
192
+ @browser = Watir::Browser.new :chrome
193
+ @browser.goto(@url)
194
+ rescue Exception => e
195
+ $stderr.puts e
196
+ end
197
+ end
198
+
199
+ private
200
+
201
+ def quiet_period
202
+ wait_for_host(max_wait_time)
203
+ end
204
+
205
+ def max_wait_time
206
+ @max_wait_time ||= 10
207
+ end
208
+ end
209
+ end
210
+ end
@@ -1,4 +1,4 @@
1
1
  module TE3270
2
- VERSION = "0.7.1"
2
+ VERSION = "0.8.0"
3
3
  end
4
4
 
@@ -14,34 +14,34 @@ describe TE3270::Accessors do
14
14
  let(:screen_object) { AccessorsTestScreen.new platform }
15
15
 
16
16
  before(:each) do
17
- screen_object.stub(:platform).and_return platform
17
+ allow(screen_object).to receive(:platform).and_return platform
18
18
  end
19
19
 
20
20
  describe "text_field accessors" do
21
21
 
22
22
  it 'should generate a method to retrieve the value' do
23
- screen_object.should respond_to :method_name
23
+ expect(screen_object).to respond_to(:method_name)
24
24
  end
25
25
 
26
26
  it 'should generate a method to set the value' do
27
- screen_object.should respond_to :method_name=
27
+ expect(screen_object).to respond_to(:method_name=)
28
28
  end
29
29
 
30
30
  it 'should not generate a method to set the value if it is not editable' do
31
- screen_object.should_not respond_to :read_only=
31
+ expect(screen_object).not_to respond_to(:read_only=)
32
32
  end
33
33
 
34
34
  it 'should default to being editable when it is not specified' do
35
- screen_object.should respond_to :default_editable=
35
+ expect(screen_object).to respond_to :default_editable=
36
36
  end
37
37
 
38
38
  it 'should use the platform to get the text value' do
39
- platform.should_receive(:get_string).with(1, 2, 10).and_return('abc')
40
- screen_object.method_name.should == 'abc'
39
+ expect(platform).to receive(:get_string).with(1, 2, 10).and_return('abc')
40
+ expect(screen_object.method_name).to eql 'abc'
41
41
  end
42
42
 
43
43
  it 'should use the platform to set the text value' do
44
- platform.should_receive(:put_string).with('abc', 1, 2)
44
+ expect(platform).to receive(:put_string).with('abc', 1, 2)
45
45
  screen_object.method_name = 'abc'
46
46
  end
47
47
 
@@ -1,162 +1,171 @@
1
- if Gem.win_platform?
1
+ require 'spec_helper'
2
2
 
3
- require 'spec_helper'
4
3
 
5
- describe TE3270::Emulators::Extra do
4
+ describe TE3270::Emulators::Extra do
6
5
 
7
- let(:extra) { TE3270::Emulators::Extra.new }
8
-
9
- before(:each) do
10
- WIN32OLE.stub(:new).and_return extra_system
11
- extra.instance_variable_set(:@session_file, 'the_file')
12
- File.stub(:exists).and_return false
6
+ unless Gem.win_platform?
7
+ class WIN32OLE
13
8
  end
9
+ end
14
10
 
11
+ let(:extra) do
12
+ allow_any_instance_of(TE3270::Emulators::Extra).to receive(:require) unless Gem.win_platform?
13
+ TE3270::Emulators::Extra.new
14
+ end
15
15
 
16
- describe "global behaviors" do
17
- it 'should start a new terminal' do
18
- WIN32OLE.should_receive(:new).and_return(extra_system)
19
- extra.connect
20
- end
16
+ before(:each) do
17
+ allow(WIN32OLE).to receive(:new).and_return extra_system
18
+ extra.instance_variable_set(:@session_file, 'the_file')
19
+ allow(File).to receive(:exists).and_return false
20
+ end
21
21
 
22
- it 'should open a session' do
23
- extra_sessions.should_receive(:Open).and_return(extra_session)
24
- extra.connect
25
- end
26
22
 
27
- it 'should not display the splash screen if version is higher than 9' do
28
- extra_system.should_receive(:Version).and_return("9.2")
29
- extra_sessions.should_receive(:VisibleOnStartup=).with(true)
30
- extra.connect
31
- end
23
+ describe "global behaviors" do
24
+ it 'should start a new terminal' do
25
+ expect(WIN32OLE).to receive(:new).and_return(extra_system)
26
+ extra.connect
27
+ end
32
28
 
33
- it 'should call a block allowing the session file to be set' do
34
- extra_sessions.should_receive(:Open).with('blah.edp').and_return(extra_session)
35
- extra.connect do |platform|
36
- platform.session_file = 'blah.edp'
37
- end
38
- end
29
+ it 'should open a session' do
30
+ expect(extra_sessions).to receive(:Open).and_return(extra_session)
31
+ extra.connect
32
+ end
39
33
 
40
- it 'should raise an error when the session file is not set' do
41
- extra.instance_variable_set(:@session_file, nil)
42
- expect { extra.connect }.to raise_error('The session file must be set in a block when calling connect with the Extra emulator.')
43
- end
34
+ it 'should not display the splash screen if version is higher than 9' do
35
+ expect(extra_system).to receive(:Version).and_return("9.2")
36
+ expect(extra_sessions).to receive(:VisibleOnStartup=).with(true)
37
+ extra.connect
38
+ end
44
39
 
45
- it 'should take the visible value from a block' do
46
- extra_session.should_receive(:Visible=).with(false)
47
- extra.connect do |platform|
48
- platform.visible = false
49
- end
40
+ it 'should call a block allowing the session file to be set' do
41
+ expect(extra_sessions).to receive(:Open).with('blah.edp').and_return(extra_session)
42
+ extra.connect do |platform|
43
+ platform.session_file = 'blah.edp'
50
44
  end
45
+ end
51
46
 
52
- it 'should default to visible when not specified' do
53
- extra_session.should_receive(:Visible=).with(true)
54
- extra.connect
55
- end
47
+ it 'should raise an error when the session file is not set' do
48
+ extra.instance_variable_set(:@session_file, nil)
49
+ expect { extra.connect }.to raise_error('The session file must be set in a block when calling connect with the Extra emulator.')
50
+ end
56
51
 
57
- it 'should take the window state value from the block' do
58
- extra_session.should_receive(:WindowState=).with(2)
59
- extra.connect do |platform|
60
- platform.window_state = :maximized
61
- end
52
+ it 'should take the visible value from a block' do
53
+ expect(extra_session).to receive(:Visible=).with(false)
54
+ extra.connect do |platform|
55
+ platform.visible = false
62
56
  end
57
+ end
63
58
 
64
- it 'should default to window state normal when not specified' do
65
- extra_session.should_receive(:WindowState=).with(1)
66
- extra.connect
67
- end
59
+ it 'should default to visible when not specified' do
60
+ expect(extra_session).to receive(:Visible=).with(true)
61
+ extra.connect
62
+ end
68
63
 
69
- it 'should default to being visible' do
70
- extra_session.should_receive(:Visible=).with(true)
71
- extra.connect
64
+ it 'should take the window state value from the block' do
65
+ expect(extra_session).to receive(:WindowState=).with(2)
66
+ extra.connect do |platform|
67
+ platform.window_state = :maximized
72
68
  end
69
+ end
73
70
 
74
- it 'should get the screen for the active session' do
75
- extra_session.should_receive(:Screen).and_return(extra_screen)
76
- extra.connect
77
- end
71
+ it 'should default to window state normal when not specified' do
72
+ expect(extra_session).to receive(:WindowState=).with(1)
73
+ extra.connect
74
+ end
78
75
 
79
- it 'should get the area from the screen' do
80
- extra_screen.should_receive(:SelectAll).and_return(extra_area)
81
- extra.connect
82
- end
76
+ it 'should default to being visible' do
77
+ expect(extra_session).to receive(:Visible=).with(true)
78
+ extra.connect
79
+ end
83
80
 
84
- it 'should disconnect from a session' do
85
- extra_session.should_receive(:Close)
86
- extra.connect
87
- extra.disconnect
88
- end
81
+ it 'should get the screen for the active session' do
82
+ expect(extra_session).to receive(:Screen).and_return(extra_screen)
83
+ extra.connect
89
84
  end
90
85
 
91
- describe "interacting with text fields" do
92
- it 'should get the value from the screen' do
93
- extra_screen.should_receive(:GetString).with(1, 2, 10).and_return('blah')
94
- extra.connect
95
- extra.get_string(1, 2, 10).should == 'blah'
96
- end
86
+ it 'should get the area from the screen' do
87
+ expect(extra_screen).to receive(:SelectAll).and_return(extra_area)
88
+ extra.connect
89
+ end
97
90
 
98
- it 'should put the value on the screen' do
99
- wait_collection = double('wait')
100
- extra_screen.should_receive(:PutString).with('blah', 1, 2)
101
- extra_screen.should_receive(:WaitHostQuiet).and_return(wait_collection)
102
- wait_collection.should_receive(:Wait).with(1000)
103
- extra.connect
104
- extra.put_string('blah', 1, 2)
105
- end
91
+ it 'should disconnect from a session' do
92
+ expect(extra_session).to receive(:Close)
93
+ extra.connect
94
+ extra.disconnect
106
95
  end
96
+ end
107
97
 
108
- describe "interacting with the screen" do
109
- it 'should know how to send function keys' do
110
- wait_collection = double('wait')
111
- extra_screen.should_receive(:SendKeys).with('<Clear>')
112
- extra_screen.should_receive(:WaitHostQuiet).and_return(wait_collection)
113
- wait_collection.should_receive(:Wait).with(1000)
114
- extra.connect
115
- extra.send_keys(TE3270.Clear)
116
- end
98
+ describe "interacting with text fields" do
99
+ it 'should get the value from the screen' do
100
+ expect(extra_screen).to receive(:GetString).with(1, 2, 10).and_return('blah')
101
+ extra.connect
102
+ expect(extra.get_string(1, 2, 10)).to eql 'blah'
103
+ end
117
104
 
118
- it 'should wait for a string to appear' do
119
- wait_col = double('wait')
120
- extra_screen.should_receive(:WaitForString).with('The String', 3, 10).and_return(wait_col)
121
- extra_system.should_receive(:TimeoutValue).and_return(30000)
122
- wait_col.should_receive(:Wait).with(30000)
123
- extra.connect
124
- extra.wait_for_string('The String', 3, 10)
125
- end
105
+ it 'should put the value on the screen' do
106
+ wait_collection = double('wait')
107
+ expect(extra_screen).to receive(:PutString).with('blah', 1, 2)
108
+ expect(extra_screen).to receive(:WaitHostQuiet).and_return(wait_collection)
109
+ expect(wait_collection).to receive(:Wait).with(1000)
110
+ extra.connect
111
+ extra.put_string('blah', 1, 2)
112
+ end
113
+ end
126
114
 
127
- it 'should wait for the host to be quiet' do
128
- wait_col = double('wait')
129
- extra_screen.should_receive(:WaitHostQuiet).and_return(wait_col)
130
- wait_col.should_receive(:Wait).with(4000)
131
- extra.connect
132
- extra.wait_for_host(4)
133
- end
115
+ describe "interacting with the screen" do
116
+ it 'should know how to send function keys' do
117
+ wait_collection = double('wait')
118
+ expect(extra_screen).to receive(:SendKeys).with('<Clear>')
119
+ expect(extra_screen).to receive(:WaitHostQuiet).and_return(wait_collection)
120
+ expect(wait_collection).to receive(:Wait).with(1000)
121
+ extra.connect
122
+ extra.send_keys(TE3270.Clear)
123
+ end
134
124
 
135
- it 'should wait until the cursor is at a position' do
136
- wait_col = double('wait')
137
- extra_screen.should_receive(:WaitForCursor).with(5, 8).and_return(wait_col)
138
- extra_system.should_receive(:TimeoutValue).and_return(30000)
139
- wait_col.should_receive(:Wait).with(30000)
140
- extra.connect
141
- extra.wait_until_cursor_at(5, 8)
142
- end
125
+ it 'should wait for a string to appear' do
126
+ wait_col = double('wait')
127
+ expect(extra_screen).to receive(:WaitForString).with('The String', 3, 10).and_return(wait_col)
128
+ expect(extra_system).to receive(:TimeoutValue).and_return(30000)
129
+ expect(wait_col).to receive(:Wait).with(30000)
130
+ extra.connect
131
+ extra.wait_for_string('The String', 3, 10)
132
+ end
133
+
134
+ it 'should wait for the host to be quiet' do
135
+ wait_col = double('wait')
136
+ expect(extra_screen).to receive(:WaitHostQuiet).and_return(wait_col)
137
+ expect(wait_col).to receive(:Wait).with(4000)
138
+ extra.connect
139
+ extra.wait_for_host(4)
140
+ end
141
+
142
+ it 'should wait until the cursor is at a position' do
143
+ wait_col = double('wait')
144
+ expect(extra_screen).to receive(:WaitForCursor).with(5, 8).and_return(wait_col)
145
+ expect(extra_system).to receive(:TimeoutValue).and_return(30000)
146
+ expect(wait_col).to receive(:Wait).with(30000)
147
+ extra.connect
148
+ extra.wait_until_cursor_at(5, 8)
149
+ end
150
+
151
+ if Gem.win_platform?
143
152
 
144
153
  it 'should take screenshots' do
145
154
  take = double('Take')
146
- extra_session.should_receive(:WindowHandle).and_return(123)
147
- Win32::Screenshot::Take.should_receive(:of).with(:window, hwnd: 123).and_return(take)
148
- take.should_receive(:write).with('image.png')
155
+ expect(extra_session).to receive(:WindowHandle).and_return(123)
156
+ expect(Win32::Screenshot::Take).to receive(:of).with(:window, hwnd: 123).and_return(take)
157
+ expect(take).to receive(:write).with('image.png')
149
158
  extra.connect
150
159
  extra.screenshot('image.png')
151
160
  end
152
161
 
153
162
  it 'should make the window visible before taking a screenshot' do
154
163
  take = double('Take')
155
- extra_session.should_receive(:WindowHandle).and_return(123)
156
- Win32::Screenshot::Take.should_receive(:of).with(:window, hwnd: 123).and_return(take)
157
- take.should_receive(:write).with('image.png')
158
- extra_session.should_receive(:Visible=).once.with(true)
159
- extra_session.should_receive(:Visible=).twice.with(false)
164
+ expect(extra_session).to receive(:WindowHandle).and_return(123)
165
+ expect(Win32::Screenshot::Take).to receive(:of).with(:window, hwnd: 123).and_return(take)
166
+ expect(take).to receive(:write).with('image.png')
167
+ expect(extra_session).to receive(:Visible=).once.with(true)
168
+ expect(extra_session).to receive(:Visible=).twice.with(false)
160
169
  extra.connect do |emulator|
161
170
  emulator.visible = false
162
171
  end
@@ -164,23 +173,24 @@ if Gem.win_platform?
164
173
  end
165
174
 
166
175
  it 'should delete the file for the screenshot if it already exists' do
167
- File.should_receive(:exists?).and_return(true)
168
- File.should_receive(:delete)
176
+ expect(File).to receive(:exists?).and_return(true)
177
+ expect(File).to receive(:delete)
169
178
  take = double('Take')
170
- extra_session.should_receive(:WindowHandle).and_return(123)
171
- Win32::Screenshot::Take.should_receive(:of).with(:window, hwnd: 123).and_return(take)
172
- take.should_receive(:write).with('image.png')
179
+ expect(extra_session).to receive(:WindowHandle).and_return(123)
180
+ expect(Win32::Screenshot::Take).to receive(:of).with(:window, hwnd: 123).and_return(take)
181
+ expect(take).to receive(:write).with('image.png')
173
182
  extra.connect
174
183
  extra.screenshot('image.png')
175
184
  end
185
+ end
176
186
 
177
- it "should get the screen text" do
178
- extra_area.should_receive(:Value).and_return('blah')
179
- extra.connect
180
- extra.text.should == 'blah'
181
- end
182
-
187
+ it "should get the screen text" do
188
+ expect(extra_area).to receive(:Value).and_return('blah')
189
+ extra.connect
190
+ expect(extra.text).to eql 'blah'
183
191
  end
184
- end
185
192
 
193
+ end
186
194
  end
195
+
196
+