rformspec 0.4-x86-mingw32 → 0.5.1-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,27 +1,27 @@
1
- require File.dirname(__FILE__) + "/driver"
2
- require 'singleton'
3
-
4
- module RFormSpec
5
-
6
- class Process
7
- include Singleton
8
- include Driver
9
-
10
- def self.run(prog, work_path = nil)
11
- instance._run(prog, work_path)
12
- end
13
-
14
- def self.execute(prog, work_path = nil)
15
- instance._run(prog, work_path)
16
- end
17
-
18
- # --
19
- # instance methods
20
- def _run(program, work_path = nil)
21
- driver.Run(program, work_path)
22
- end
23
-
24
-
25
- end
26
-
27
- end
1
+ require File.dirname(__FILE__) + "/driver"
2
+ require 'singleton'
3
+
4
+ module RFormSpec
5
+
6
+ class Process
7
+ include Singleton
8
+ include Driver
9
+
10
+ def self.run(prog, work_path = nil)
11
+ instance._run(prog, work_path)
12
+ end
13
+
14
+ def self.execute(prog, work_path = nil)
15
+ instance._run(prog, work_path)
16
+ end
17
+
18
+ # --
19
+ # instance methods
20
+ def _run(program, work_path = nil)
21
+ driver.Run(program, work_path)
22
+ end
23
+
24
+
25
+ end
26
+
27
+ end
@@ -1,18 +1,18 @@
1
- module RFormSpec
2
- class SaveasFileDialog < RFormSpec::Window
3
-
4
- def initialize(title = "Save As")
5
- focus_window(title)
6
- end
7
-
8
- def enter_filepath(file_path)
9
- set_control_text("Edit1", file_path)
10
- end
11
-
12
- def click_save
13
- click_button("Button2")
14
- end
15
-
16
- end
17
-
18
- end
1
+ module RFormSpec
2
+ class SaveasFileDialog < RFormSpec::Window
3
+
4
+ def initialize(title = "Save As")
5
+ focus_window(title)
6
+ end
7
+
8
+ def enter_filepath(file_path)
9
+ set_control_text("Edit1", file_path)
10
+ end
11
+
12
+ def click_save
13
+ click_button("Button2")
14
+ end
15
+
16
+ end
17
+
18
+ end
@@ -0,0 +1,92 @@
1
+ require 'socket'
2
+
3
+ MAX_MESSAGE_LENGTH = 8192 # < 10K
4
+ $testwise_support = true
5
+
6
+ module RFormSpec
7
+ module TestWisePlugin
8
+
9
+ def debug(message)
10
+ if $RUN_IN_TESTWISE && message
11
+ the_sent_msg = message.to_s
12
+ if the_sent_msg.size > MAX_MESSAGE_LENGTH
13
+ the_sent_msg = the_sent_msg[0..MAX_MESSAGE_LENGTH] + "..."
14
+ end
15
+ connect_to_testwise(" DEBUG", the_sent_msg + "\r\n")
16
+ end
17
+ end
18
+
19
+
20
+ # Support of iTest to ajust the intervals between keystroke/mouse operations
21
+ def operation_delay
22
+ begin
23
+ if $TESTWISE_OPERATION_DELAY && $TESTWISE_OPERATION_DELAY > 0 &&
24
+ $TESTWISE_OPERATION_DELAY && $TESTWISE_OPERATION_DELAY < 30000 then # max 30 seconds
25
+ sleep($TESTWISE_OPERATION_DELAY / 1000)
26
+ end
27
+
28
+ while $TESTWISE_PAUSE
29
+ debug("Paused, waiting ...")
30
+ sleep 1
31
+ end
32
+ rescue => e
33
+ puts "Error on delaying: #{e}"
34
+ # ignore
35
+ end
36
+ end
37
+
38
+ def notify_screenshot_location(image_file_path)
39
+ connect_to_testwise(" SHOT", image_file_path)
40
+ end
41
+
42
+ # find out the line (and file) the execution is on, and notify iTest via Socket
43
+ def dump_caller_stack
44
+ return unless $TESTWISE_TRACE_EXECUTION
45
+ begin
46
+ trace_lines = []
47
+ trace_file = nil
48
+ found_first_spec_reference = false
49
+ caller.each_with_index do |position, idx|
50
+ next unless position =~ /\A(.*?):(\d+)/
51
+ trace_file = $1
52
+ if trace_file =~ /(_spec|_test|_rwebspec)\.rb\s*$/
53
+ found_first_spec_reference = true
54
+ trace_lines << position
55
+ break
56
+ end
57
+ trace_lines << position
58
+ break if trace_file =~ /example\/example_methods\.rb$/ or trace_file =~ /example\/example_group_methods\.rb$/
59
+ break if trace_lines.size > 10
60
+ # TODO: send multiple trace to be parse with pages.rb
61
+ # break if trace_file =~ /example\/example_methods\.rb$/ or trace_file =~ /example\/example_group_methods\.rb$/ or trace_file =~ /driver\.rb$/ or trace_file =~ /timeout\.rb$/ # don't include rspec or ruby trace
62
+ end
63
+
64
+ # (trace_file.include?("_spec.rb") || trace_file.include?("_rwebspec.rb") || trace_file.include?("_test.rb") || trace_file.include?("_cmd.rb"))
65
+ if !trace_lines.empty?
66
+ connect_to_testwise(" TRACE", trace_lines.reverse.join("|"))
67
+ end
68
+
69
+ rescue => e
70
+ puts "failed to capture log: #{e}"
71
+ end
72
+ end
73
+
74
+
75
+ def connect_to_testwise (message_type, body)
76
+ begin
77
+ the_message = message_type + "|" + body
78
+ if @last_message == the_message then # ignore the message same as preivous one
79
+ return
80
+ end
81
+ itest_port = $TESTWISE_TRACE_PORT || 7025
82
+ itest_socket = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0)
83
+ itest_socket.connect(Socket.pack_sockaddr_in(itest_port, '127.0.0.1'))
84
+ itest_socket.puts(the_message)
85
+ @last_message = the_message
86
+ itest_socket.close
87
+ rescue => e
88
+ end
89
+ end
90
+
91
+ end
92
+ end
@@ -1,114 +1,130 @@
1
- require File.dirname(__FILE__) + "/driver"
2
- require File.dirname(__FILE__) + "/control"
3
-
4
- module RFormSpec
5
-
6
- class Window < BaseControl
7
- attr_accessor :title, :text
8
-
9
- ##
10
- # title : page title, depends autoit options, might use as substring match or exact match
11
- # text: some text in window for further identifing the window
12
- # options:
13
- # present => true | false, already there
14
- # wait_timeout: wiat for maxium seconds if not active, throw error
15
- # (active: means the window becomes the active window)
16
- # otherwise, inside window class, using focus_window methods
17
- def initialize(title, text = '', options = {:present => false, :wait_timeout => 0})
18
- # for some windows, the title might change depends when it is invoked
19
- if title.class == Array
20
- title.each { |a_title|
21
- @title = a_title
22
- @text = text if text
23
- timeout = options[:wait_timeout]
24
- result = driver.WinWaitActive(@title, @text, timeout)
25
- return if result != 0
26
- }
27
- raise "timeout while waiting for window: #{self.to_s}"
28
- end
29
-
30
- @title = title
31
- @text = text if text
32
- timeout = options[:wait_timeout]
33
- if options[:present]
34
- result = driver.WinActivate(@title, @text)
35
- raise "window not found: #{self.to_s}" if result == 0
36
- elsif timeout && timeout.to_i > 1 then
37
- result = driver.WinWaitActive(@title, @text, timeout)
38
- raise "timeout while waiting for window: #{self.to_s}" if result == 0
39
- end
40
- end
41
-
42
- def focus
43
- driver.WinActivate(@title, @text)
44
- end
45
-
46
- def close
47
- driver.WinClose(@title, @text)
48
- end
49
-
50
- def exists?
51
- driver.WinExists(@title, @text)
52
- end
53
-
54
- def get_text
55
- driver.WinGetText(@title, @text)
56
- end
57
-
58
- def set_control_text(control_id, new_text)
59
- BaseControl.new(self, control_id).set_text(new_text)
60
- end
61
-
62
- def click_button(btn_id)
63
- Button.new(self, btn_id).click
64
- end
65
-
66
- def show_dropdown(combo_id)
67
- combo = ComboBox.new(self, combo_id)
68
- combo.show_dropdown
69
- combo
70
- end
71
-
72
- def hide_dropdown(combo_id)
73
- combo = ComboBox.new(self, combo_id)
74
- combo.hide_dropdown
75
- combo
76
- end
77
-
78
- def focus_control(ctrl_id)
79
- BaseControl.new(self, ctrl_id).focus
80
- end
81
-
82
- def send_control_text(ctrl_id, text)
83
- BaseControl.new(self, ctrl_id).send_text(text)
84
- end
85
-
86
- def get_control_text(ctrl_id)
87
- BaseControl.new(self, ctrl_id).get_text
88
- end
89
-
90
- #Not fully verified yet
91
- def statusbar_text
92
- driver.StatusbarGetText(@title)
93
- end
94
-
95
- def pixel_color(x,y)
96
- driver.PixelGetColor(x,y)
97
- end
98
- alias pixel_colour pixel_color
99
- alias get_pixel_colour pixel_color
100
- alias get_pixel_color pixel_color
101
-
102
-
103
- def to_s
104
- "Window{title => '#{@title}', text=>'#{@text}'}"
105
- end
106
-
107
- # a list
108
- def button(button_id)
109
- RFormSpec::Button.new(self, button_id)
110
- end
111
-
112
- end
113
-
114
- end
1
+ require File.dirname(__FILE__) + "/driver"
2
+ require File.dirname(__FILE__) + "/control"
3
+
4
+ module RFormSpec
5
+
6
+ class Window < BaseControl
7
+ attr_accessor :title, :text, :class_list
8
+
9
+ ##
10
+ # title : page title, depends autoit options, might use as substring match or exact match
11
+ # text: some text in window for further identifing the window
12
+ # options:
13
+ # present => true | false, already there
14
+ # wait_timeout: wiat for maxium seconds if not active, throw error
15
+ # (active: means the window becomes the active window)
16
+ # otherwise, inside window class, using focus_window methods
17
+ def initialize(title, text = '', options = {:present => false, :wait_timeout => 0})
18
+ # for some windows, the title might change depends when it is invoked
19
+ if title.class == Array
20
+ title.each { |a_title|
21
+ @title = a_title
22
+ @text = text if text
23
+ timeout = options[:wait_timeout]
24
+ result = driver.WinWaitActive(@title, @text, timeout)
25
+ return if result != 0
26
+ }
27
+ raise "timeout while waiting for window: #{self.to_s}"
28
+ end
29
+
30
+ @title = title
31
+ # puts "[DEBUG ] setting title => #{@title}"
32
+ @text = text if text
33
+ # useful when ID changes
34
+
35
+ timeout = options[:wait_timeout]
36
+ if options[:present]
37
+ result = driver.WinActivate(@title, @text)
38
+ raise "window not found: #{self.to_s}" if result == 0
39
+ elsif timeout && timeout.to_i > 1 then
40
+ result = driver.WinWaitActive(@title, @text, timeout)
41
+ raise "timeout while waiting for window: #{self.to_s}" if result == 0
42
+ end
43
+
44
+ end
45
+
46
+ def focus
47
+ driver.WinActivate(@title, @text)
48
+ end
49
+
50
+ def close
51
+ driver.WinClose(@title, @text)
52
+ end
53
+
54
+ def exists?
55
+ driver.WinExists(@title, @text)
56
+ end
57
+
58
+ def get_text
59
+ driver.WinGetText(@title, @text)
60
+ end
61
+
62
+ def get_class_list
63
+ driver.WinGetClassList(@title, @text)
64
+ end
65
+
66
+ def set_control_text(control_id, new_text)
67
+ BaseControl.new(self, control_id).set_text(new_text)
68
+ end
69
+
70
+ def click_button(btn_id)
71
+ Button.new(self, btn_id).click
72
+ end
73
+
74
+ def show_dropdown(combo_id)
75
+ combo = ComboBox.new(self, combo_id)
76
+ combo.show_dropdown
77
+ combo
78
+ end
79
+
80
+ def hide_dropdown(combo_id)
81
+ combo = ComboBox.new(self, combo_id)
82
+ combo.hide_dropdown
83
+ combo
84
+ end
85
+
86
+ def focus_control(ctrl_id)
87
+ BaseControl.new(self, ctrl_id).focus
88
+ end
89
+
90
+ def send_control_text(ctrl_id, text)
91
+ BaseControl.new(self, ctrl_id).send_text(text)
92
+ end
93
+
94
+ def get_control_text(ctrl_id)
95
+ BaseControl.new(self, ctrl_id).get_text
96
+ end
97
+
98
+ #Not fully verified yet
99
+ def statusbar_text
100
+ driver.StatusbarGetText(@title)
101
+ end
102
+
103
+ def pixel_color(x,y)
104
+ driver.PixelGetColor(x,y)
105
+ end
106
+ alias pixel_colour pixel_color
107
+ alias get_pixel_colour pixel_color
108
+ alias get_pixel_color pixel_color
109
+
110
+ def to_s
111
+ "Window{title => '#{@title}', text=>'#{@text}'}"
112
+ end
113
+
114
+ # a list
115
+ def button(button_id)
116
+ RFormSpec::Button.new(self, button_id)
117
+ end
118
+
119
+
120
+ # return the class match by name
121
+ def get_class(name)
122
+ @class_list = get_class_list
123
+ @class_list.select {|x| x.include?(name)}.collect{|y| y.strip}
124
+ end
125
+
126
+
127
+
128
+ end
129
+
130
+ end
@@ -1,68 +1,68 @@
1
- require 'rformspec'
2
-
3
- module CalcSpecHelper
4
- include RFormSpec::Driver
5
-
6
- def run_calc
7
- RFormSpec::Process.run("calc.exe")
8
- @calc_win = RFormSpec::Window.new('Calculator', "", :wait_timeout => 2)
9
- end
10
- alias start_calc run_calc
11
-
12
- def exit_calc
13
- @calc_win.close
14
- end
15
-
16
- def click_3
17
- @calc_win.click_button('127') #3
18
- sleep(0.5)
19
- end
20
-
21
- def click_7
22
- @calc_win.click_button('131') #7
23
- sleep(0.5)
24
- end
25
-
26
- def click_add
27
- @calc_win.click_button('92') # +
28
- sleep(0.5)
29
- end
30
- alias click_plus click_add
31
-
32
- def click_multiply
33
- @calc_win.click_button('91') #*
34
- sleep(0.5)
35
- end
36
-
37
- def click_equals
38
- @calc_win.click_button('112') #=
39
- sleep(0.5)
40
- end
41
-
42
- def result
43
- @calc_win.get_control_text('403')
44
- end
45
- alias get_result result
46
-
47
- def perform(actions)
48
- methods_to_call = actions.collect { |act|
49
- case act
50
- when '+':
51
- 'plus'
52
- when '-':
53
- 'minus'
54
- when '*':
55
- 'multiply'
56
- when '=':
57
- 'equals'
58
- else
59
- act
60
- end
61
- }
62
-
63
- methods_to_call.each { |met|
64
- self.send("click_#{met}")
65
- }
66
- get_result
67
- end
68
- end
1
+ require 'rformspec'
2
+
3
+ module CalcSpecHelper
4
+ include RFormSpec::Driver
5
+
6
+ def run_calc
7
+ RFormSpec::Process.run("calc.exe")
8
+ @calc_win = RFormSpec::Window.new('Calculator', "", :wait_timeout => 2)
9
+ end
10
+ alias start_calc run_calc
11
+
12
+ def exit_calc
13
+ @calc_win.close
14
+ end
15
+
16
+ def click_3
17
+ @calc_win.click_button('127') #3
18
+ sleep(0.5)
19
+ end
20
+
21
+ def click_7
22
+ @calc_win.click_button('131') #7
23
+ sleep(0.5)
24
+ end
25
+
26
+ def click_add
27
+ @calc_win.click_button('92') # +
28
+ sleep(0.5)
29
+ end
30
+ alias click_plus click_add
31
+
32
+ def click_multiply
33
+ @calc_win.click_button('91') #*
34
+ sleep(0.5)
35
+ end
36
+
37
+ def click_equals
38
+ @calc_win.click_button('112') #=
39
+ sleep(0.5)
40
+ end
41
+
42
+ def result
43
+ @calc_win.get_control_text('403')
44
+ end
45
+ alias get_result result
46
+
47
+ def perform(actions)
48
+ methods_to_call = actions.collect { |act|
49
+ case act
50
+ when '+':
51
+ 'plus'
52
+ when '-':
53
+ 'minus'
54
+ when '*':
55
+ 'multiply'
56
+ when '=':
57
+ 'equals'
58
+ else
59
+ act
60
+ end
61
+ }
62
+
63
+ methods_to_call.each { |met|
64
+ self.send("click_#{met}")
65
+ }
66
+ get_result
67
+ end
68
+ end