te3270 0.7.1 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
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
+