ruby-proxy 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/atu/key.rb +218 -0
- data/lib/atu/sikuli-script.jar +0 -0
- data/lib/atu/sikuli.rb +33 -0
- data/lib/ruby_proxy.rb +2 -0
- data/lib/ruby_proxy/client.rb +199 -0
- data/lib/ruby_proxy/proxy.rb +60 -0
- data/lib/ruby_proxy/proxy_load.rb +33 -0
- data/lib/ruby_proxy/server.rb +32 -0
- data/lib/ruby_proxy/version.rb +3 -0
- data/unittests/all_tests.rb +3 -0
- data/unittests/setup.rb +9 -0
- data/unittests/support/atu/hello.rb +94 -0
- data/unittests/support/image/search.png +0 -0
- data/unittests/support/image/start.png +0 -0
- data/unittests/test_drb_proxy.rb +130 -0
- data/unittests/test_sikuli_api.rb +33 -0
- data/unittests/your_jruby_sikuli_config_ok.rb +26 -0
- metadata +73 -0
data/lib/atu/key.rb
ADDED
@@ -0,0 +1,218 @@
|
|
1
|
+
require 'java'
|
2
|
+
require 'iconv'
|
3
|
+
#require 'drb'
|
4
|
+
java_import 'java.awt.event.InputEvent'
|
5
|
+
class String
|
6
|
+
def to_unicode
|
7
|
+
begin
|
8
|
+
Iconv.iconv("UNICODEBIG//", "utf-8", self)[0]
|
9
|
+
rescue Exception
|
10
|
+
puts $!.class
|
11
|
+
puts $!.message
|
12
|
+
self
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
module ATU
|
18
|
+
##
|
19
|
+
# The Shift key modifier constant.
|
20
|
+
# This equals to java.awt.event.InputEvent.SHIFT_MASK.
|
21
|
+
KEY_SHIFT = InputEvent::SHIFT_MASK
|
22
|
+
##
|
23
|
+
# The Ctrl key modifier constant.
|
24
|
+
# This equals to java.awt.event.InputEvent.CTRL_MASK.
|
25
|
+
KEY_CTRL = InputEvent::CTRL_MASK
|
26
|
+
##
|
27
|
+
# The Meta/Windows/Apple key modifier constant.
|
28
|
+
# This equals to java.awt.event.InputEvent.META_MASK.
|
29
|
+
KEY_META = InputEvent::META_MASK
|
30
|
+
##
|
31
|
+
# The Apple(Command) key modifier constant.
|
32
|
+
# This equals to java.awt.event.InputEvent.META_MASK.
|
33
|
+
KEY_CMD = InputEvent::META_MASK
|
34
|
+
##
|
35
|
+
# The Windows key modifier constant.
|
36
|
+
# This equals to java.awt.event.InputEvent.META_MASK.
|
37
|
+
KEY_WIN = InputEvent::META_MASK
|
38
|
+
##
|
39
|
+
# The Alt key modifier constant.
|
40
|
+
# This equals to java.awt.event.InputEvent.ALT_MASK.
|
41
|
+
KEY_ALT = InputEvent::ALT_MASK
|
42
|
+
|
43
|
+
##
|
44
|
+
# class Key contains the constants of all special keys.
|
45
|
+
class Key
|
46
|
+
include DRb::DRbUndumped
|
47
|
+
##
|
48
|
+
# ENTER
|
49
|
+
ENTER = "\n"
|
50
|
+
##
|
51
|
+
# BACKSPACE
|
52
|
+
BACKSPACE = "\b"
|
53
|
+
##
|
54
|
+
# TAB
|
55
|
+
TAB = "\t"
|
56
|
+
##
|
57
|
+
# ESC
|
58
|
+
ESC = "\u001b".to_unicode
|
59
|
+
##
|
60
|
+
# UP
|
61
|
+
UP = "\ue000".to_unicode
|
62
|
+
##
|
63
|
+
# RIGHT
|
64
|
+
RIGHT = "\ue001".to_unicode
|
65
|
+
##
|
66
|
+
# DOWN
|
67
|
+
DOWN = "\ue002".to_unicode
|
68
|
+
##
|
69
|
+
# LEFT
|
70
|
+
LEFT = "\ue003".to_unicode
|
71
|
+
##
|
72
|
+
# PAGE_UP
|
73
|
+
PAGE_UP = "\ue004".to_unicode
|
74
|
+
##
|
75
|
+
# PAGE_DOWN
|
76
|
+
PAGE_DOWN = "\ue005".to_unicode
|
77
|
+
##
|
78
|
+
# DELETE
|
79
|
+
DELETE = "\ue006".to_unicode
|
80
|
+
##
|
81
|
+
# END
|
82
|
+
KEY_END = "\ue007".to_unicode
|
83
|
+
##
|
84
|
+
# HOME
|
85
|
+
HOME = "\ue008".to_unicode
|
86
|
+
##
|
87
|
+
# INSERT
|
88
|
+
INSERT = "\ue009".to_unicode
|
89
|
+
##
|
90
|
+
# F1
|
91
|
+
F1 = "\ue011".to_unicode
|
92
|
+
##
|
93
|
+
# F2
|
94
|
+
F2 = "\ue012".to_unicode
|
95
|
+
##
|
96
|
+
# F3
|
97
|
+
F3 = "\ue013".to_unicode
|
98
|
+
##
|
99
|
+
# F4
|
100
|
+
F4 = "\ue014".to_unicode
|
101
|
+
##
|
102
|
+
# F5
|
103
|
+
F5 = "\ue015".to_unicode
|
104
|
+
##
|
105
|
+
# F6
|
106
|
+
F6 = "\ue016".to_unicode
|
107
|
+
##
|
108
|
+
# F7
|
109
|
+
F7 = "\ue017".to_unicode
|
110
|
+
##
|
111
|
+
# F8
|
112
|
+
F8 = "\ue018".to_unicode
|
113
|
+
##
|
114
|
+
# F9
|
115
|
+
F9 = "\ue019".to_unicode
|
116
|
+
##
|
117
|
+
# F10
|
118
|
+
F10 = "\ue01A".to_unicode
|
119
|
+
##
|
120
|
+
# F11
|
121
|
+
F11 = "\ue01B".to_unicode
|
122
|
+
##
|
123
|
+
# F12
|
124
|
+
F12 = "\ue01C".to_unicode
|
125
|
+
##
|
126
|
+
# F13
|
127
|
+
F13 = "\ue01D".to_unicode
|
128
|
+
##
|
129
|
+
# F14
|
130
|
+
F14 = "\ue01E".to_unicode
|
131
|
+
##
|
132
|
+
# F15
|
133
|
+
F15 = "\ue01F".to_unicode
|
134
|
+
##
|
135
|
+
# SHIFT
|
136
|
+
SHIFT = "\ue020".to_unicode
|
137
|
+
##
|
138
|
+
# CTRL
|
139
|
+
CTRL = "\ue021".to_unicode
|
140
|
+
##
|
141
|
+
# ALT
|
142
|
+
ALT = "\ue022".to_unicode
|
143
|
+
##
|
144
|
+
# META
|
145
|
+
META = "\ue023".to_unicode
|
146
|
+
##
|
147
|
+
# META
|
148
|
+
CMD = "\ue023".to_unicode
|
149
|
+
##
|
150
|
+
# META
|
151
|
+
WIN = "\ue023".to_unicode
|
152
|
+
|
153
|
+
##
|
154
|
+
# PRINTSCREEN
|
155
|
+
PRINTSCREEN = "\ue024".to_unicode
|
156
|
+
##
|
157
|
+
# SCROLL_LOCK
|
158
|
+
SCROLL_LOCK = "\ue025".to_unicode
|
159
|
+
##
|
160
|
+
# PAUSE
|
161
|
+
PAUSE = "\ue026".to_unicode
|
162
|
+
##
|
163
|
+
# CAPS_LOCK
|
164
|
+
CAPS_LOCK = "\ue027".to_unicode
|
165
|
+
|
166
|
+
##
|
167
|
+
# NUM0
|
168
|
+
NUM0 = "\ue030".to_unicode
|
169
|
+
##
|
170
|
+
# NUM1
|
171
|
+
NUM1 = "\ue031".to_unicode
|
172
|
+
##
|
173
|
+
# NUM2
|
174
|
+
NUM2 = "\ue032".to_unicode
|
175
|
+
##
|
176
|
+
# NUM3
|
177
|
+
NUM3 = "\ue033".to_unicode
|
178
|
+
##
|
179
|
+
# NUM4
|
180
|
+
NUM4 = "\ue034".to_unicode
|
181
|
+
##
|
182
|
+
# NUM5
|
183
|
+
NUM5 = "\ue035".to_unicode
|
184
|
+
##
|
185
|
+
# NUM6
|
186
|
+
NUM6 = "\ue036".to_unicode
|
187
|
+
##
|
188
|
+
# NUM7
|
189
|
+
NUM7 = "\ue037".to_unicode
|
190
|
+
##
|
191
|
+
# NUM8
|
192
|
+
NUM8 = "\ue038".to_unicode
|
193
|
+
##
|
194
|
+
# NUM9
|
195
|
+
NUM9 = "\ue039".to_unicode
|
196
|
+
##
|
197
|
+
# SEPARATOR (numpad)
|
198
|
+
SEPARATOR = "\ue03A".to_unicode
|
199
|
+
##
|
200
|
+
# NUM_LOCK
|
201
|
+
NUM_LOCK = "\ue03B".to_unicode
|
202
|
+
##
|
203
|
+
# ADD (numpad)
|
204
|
+
ADD = "\ue03C".to_unicode
|
205
|
+
##
|
206
|
+
# MINUS (numpad)
|
207
|
+
MINUS = "\ue03D".to_unicode
|
208
|
+
##
|
209
|
+
# MULTIPLY (numpad)
|
210
|
+
MULTIPLY = "\ue03E".to_unicode
|
211
|
+
##
|
212
|
+
# DIVIDE (numpad)
|
213
|
+
DIVIDE = "\ue03F".to_unicode
|
214
|
+
end
|
215
|
+
end
|
216
|
+
|
217
|
+
if __FILE__ == $0
|
218
|
+
end
|
Binary file
|
data/lib/atu/sikuli.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'java'
|
3
|
+
#$CLASSPATH << "/Applications/Sikuli-IDE.app/Contents/Resources/Java/"
|
4
|
+
#This is key to making it work under ruby. The path above is the default
|
5
|
+
#installation location on the Mac which contains all of the
|
6
|
+
#relevant sikuli jar files.
|
7
|
+
require "sikuli-script.jar"
|
8
|
+
|
9
|
+
module B
|
10
|
+
class C
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
#~ include Java
|
16
|
+
module ATU
|
17
|
+
module Sikuli
|
18
|
+
java_import 'org.sikuli.script.Region'
|
19
|
+
java_import 'org.sikuli.script.Screen'
|
20
|
+
java_import 'org.sikuli.script.Settings'
|
21
|
+
java_import 'org.sikuli.script.SikuliEvent'
|
22
|
+
java_import 'org.sikuli.script.SikuliScript'
|
23
|
+
include Java::OrgSikuliScript
|
24
|
+
include B
|
25
|
+
end
|
26
|
+
#Sikuli = Java::OrgSikuliScript
|
27
|
+
end
|
28
|
+
if __FILE__ == $0
|
29
|
+
puts ATU::Sikuli
|
30
|
+
@region = ATU::Sikuli::Region.new(0, 0, 1440, 900)
|
31
|
+
puts @region.class
|
32
|
+
puts ATU::Sikuli::C.new.class
|
33
|
+
end
|
data/lib/ruby_proxy.rb
ADDED
@@ -0,0 +1,199 @@
|
|
1
|
+
require 'drb'
|
2
|
+
require 'timeout'
|
3
|
+
require 'socket'
|
4
|
+
require 'logger'
|
5
|
+
|
6
|
+
module ATU
|
7
|
+
#entry
|
8
|
+
def self.const_missing(name)
|
9
|
+
name = self.name.to_s + "::" + name.to_s
|
10
|
+
type = RubyProxy::DRbClient.client.proxy_type(name.to_s)
|
11
|
+
make_kclass(name,type)
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.make_kclass(name,type)
|
15
|
+
puts "make_kclass: #{name}, #{type}"
|
16
|
+
case type
|
17
|
+
when "Class"
|
18
|
+
RubyProxy::KlassFactory.make_class(name) do |klass|
|
19
|
+
klass.class_eval do
|
20
|
+
def initialize(*arg)
|
21
|
+
#puts self.class.to_s
|
22
|
+
@proxy = RubyProxy::DRbClient.client.proxy(self.class.to_s,"new",*arg)
|
23
|
+
end
|
24
|
+
def method_missing(name,*arg)
|
25
|
+
#return if @proxy.nil?
|
26
|
+
#puts "#{@proxy.methods(false)}"
|
27
|
+
#puts "proxy = #{@proxy} method=#{name} arg=#{arg.join(',')}"
|
28
|
+
@proxy.__send__(name.to_s,*arg)
|
29
|
+
end
|
30
|
+
def self.const_missing(name)
|
31
|
+
name = self.name.to_s + "::" + name.to_s
|
32
|
+
type = RubyProxy::DRbClient.client.proxy_type(name.to_s)
|
33
|
+
ret = ATU::make_kclass(name,type)
|
34
|
+
case type
|
35
|
+
when "Module","Class"
|
36
|
+
return ret
|
37
|
+
end
|
38
|
+
RubyProxy::DRbClient.client.proxy(name.to_s)
|
39
|
+
end
|
40
|
+
|
41
|
+
# block not support now
|
42
|
+
def self.method_missing(name,*arg)
|
43
|
+
RubyProxy::DRbClient.client.proxy(self.name.to_s,name.to_s,*arg)
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
48
|
+
when "Module"
|
49
|
+
RubyProxy::KlassFactory.make_module(name) do |mod|
|
50
|
+
mod.class_eval do
|
51
|
+
def self.method_missing(name,*arg)
|
52
|
+
RubyProxy::DRbClient.client.proxy(self.name.to_s,name.to_s,*arg)
|
53
|
+
end
|
54
|
+
|
55
|
+
def self.const_missing(name)
|
56
|
+
name = self.name.to_s + "::" + name.to_s
|
57
|
+
#puts "in module const_missing : #{name}"
|
58
|
+
type = RubyProxy::DRbClient.client.proxy_type(name.to_s)
|
59
|
+
ret = ATU::make_kclass(name,type)
|
60
|
+
case type
|
61
|
+
when "Module","Class"
|
62
|
+
return ret
|
63
|
+
end
|
64
|
+
RubyProxy::DRbClient.client.proxy(name.to_s)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
else
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
|
76
|
+
|
77
|
+
|
78
|
+
module RubyProxy
|
79
|
+
class KlassFactory
|
80
|
+
def self.make_klass(klass_name,type)
|
81
|
+
case type
|
82
|
+
when "Class"
|
83
|
+
make_class(klass_name)
|
84
|
+
when "Module"
|
85
|
+
make_module(klass_name)
|
86
|
+
else
|
87
|
+
raise TypeError,"wrong make_klass type: #{type}"
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
#生成类,返回类常量
|
92
|
+
def self.make_class(klass_name)
|
93
|
+
klass_name = klass_name.to_s
|
94
|
+
name_ok?(klass_name)
|
95
|
+
eval <<-EOF
|
96
|
+
class #{klass_name}
|
97
|
+
end
|
98
|
+
EOF
|
99
|
+
klass = eval(klass_name)
|
100
|
+
yield klass
|
101
|
+
klass
|
102
|
+
end
|
103
|
+
|
104
|
+
def self.make_module(klass_name)
|
105
|
+
klass_name = klass_name.to_s
|
106
|
+
name_ok?(klass_name)
|
107
|
+
eval <<-EOF
|
108
|
+
module #{klass_name}
|
109
|
+
end
|
110
|
+
EOF
|
111
|
+
klass = eval(klass_name)
|
112
|
+
yield klass
|
113
|
+
klass
|
114
|
+
end
|
115
|
+
|
116
|
+
def self.name_ok?(name)
|
117
|
+
raise TypeError," name #{name} can't be class or module name." unless name =~ /^[A-Z][a-zA-Z_0-9]*/
|
118
|
+
end
|
119
|
+
end
|
120
|
+
class DRbClient
|
121
|
+
@client = nil
|
122
|
+
@port = 9000
|
123
|
+
@ip = "127.0.0.1"
|
124
|
+
@@logger = Logger.new(STDOUT)
|
125
|
+
@@logger.level= Logger::DEBUG
|
126
|
+
class <<self
|
127
|
+
def client
|
128
|
+
begin
|
129
|
+
stop_service if @client.nil?
|
130
|
+
@client ||= DRbObject.new(nil,"druby://#{@ip}:#{@port}")
|
131
|
+
alive?
|
132
|
+
@client
|
133
|
+
rescue Exception
|
134
|
+
start_service
|
135
|
+
@client ||= DRbObject.new(nil,"druby://#{@ip}:#{@port}")
|
136
|
+
@client
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
def alive?
|
141
|
+
@client.respond_to?("any_thing")
|
142
|
+
@client
|
143
|
+
rescue DRb::DRbConnError
|
144
|
+
raise
|
145
|
+
end
|
146
|
+
|
147
|
+
attr_accessor :ip,:port
|
148
|
+
|
149
|
+
def proxy_load(dir_or_file)
|
150
|
+
client.proxy_load(dir_or_file)
|
151
|
+
end
|
152
|
+
|
153
|
+
def start_service(t=5)
|
154
|
+
message = nil
|
155
|
+
@start_service_log_path = File.join(File.dirname(__FILE__),'start_service.log')
|
156
|
+
|
157
|
+
server_thread = Thread.new do
|
158
|
+
@@logger.info "start jruby proxy server..."
|
159
|
+
org_path = Dir.pwd
|
160
|
+
Dir.chdir(File.join(File.dirname(__FILE__),'..')) do
|
161
|
+
system("start /I /B jruby ruby_proxy/server.rb #{@ip} #{@port} #{org_path} ")#> #{@start_service_log_path} 2>&1")
|
162
|
+
end
|
163
|
+
end
|
164
|
+
wait_until_server_start_time(t)
|
165
|
+
end
|
166
|
+
|
167
|
+
def stop_service(t=5)
|
168
|
+
TCPSocket.new(@ip,@port)
|
169
|
+
@client ||= DRbObject.new(nil,"druby://#{@ip}:#{@port}")
|
170
|
+
@client.stop_proxy
|
171
|
+
sleep 1
|
172
|
+
rescue
|
173
|
+
@@logger.debug "service not start,stop fail!"
|
174
|
+
@@logger.debug "#{$!}"
|
175
|
+
ensure
|
176
|
+
@client = nil
|
177
|
+
end
|
178
|
+
|
179
|
+
def wait_until_server_start_time(t)
|
180
|
+
t.times do |tt|
|
181
|
+
begin
|
182
|
+
TCPSocket.new(@ip,@port)
|
183
|
+
@@logger.info "server is starting"
|
184
|
+
return true
|
185
|
+
rescue Exception
|
186
|
+
sleep 1
|
187
|
+
end
|
188
|
+
end
|
189
|
+
raise RuntimeError,"start drbserver fail, reason: #{File.read(@start_service_log_path) rescue nil}"
|
190
|
+
end
|
191
|
+
|
192
|
+
end
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
if $0 == __FILE__
|
197
|
+
a = ATU::Hello.new
|
198
|
+
puts a.return_1
|
199
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'logger'
|
2
|
+
require 'drb'
|
3
|
+
require 'ruby_proxy/proxy_load'
|
4
|
+
|
5
|
+
module RubyProxy
|
6
|
+
class Proxy
|
7
|
+
# loading proxy class, default folder: atu
|
8
|
+
# you can use Proxy.load_path << "" to add load path
|
9
|
+
ProxyLoad.load
|
10
|
+
@@logger = Logger.new(STDOUT)
|
11
|
+
@@logger.level = Logger::DEBUG
|
12
|
+
|
13
|
+
def self.proxy(klass_name,method=nil,*arg)
|
14
|
+
@@logger.debug "klass_name= #{klass_name}"
|
15
|
+
@@logger.debug "method = #{method}"
|
16
|
+
@@logger.debug "arg = #{arg.join(',')}"
|
17
|
+
if method.nil?
|
18
|
+
return proxy_module(klass_name)
|
19
|
+
else
|
20
|
+
return proxy_module(klass_name).send(method,*arg)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.proxy_load(dir_or_file)
|
25
|
+
ProxyLoad.load_path << dir_or_file
|
26
|
+
ProxyLoad.load
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.proxy_type(klass_name)
|
30
|
+
#@@logger.debug "proxy_type: #{proxy_const_get(klass_name).name} type is #{proxy_const_get(klass_name).class.to_s}"
|
31
|
+
return proxy_const_get(klass_name).class.to_s
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.proxy_module(klass_name)
|
35
|
+
m = proxy_const_get(klass_name)
|
36
|
+
m.class_eval { include DRb::DRbUndumped } if ( m.class.to_s == "Class" or m.class.to_s == "Module" ) and ! m.include?(DRb::DRbUndumped)
|
37
|
+
return m
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.proxy_const_get(klass_name)
|
41
|
+
#@@logger.debug "const_get klass_name = #{klass_name}"
|
42
|
+
atu = nil
|
43
|
+
klass_name_array = klass_name.split('::')
|
44
|
+
klass_name_array.shift if klass_name_array[0] == "ATU"
|
45
|
+
klass_name_array.each do |m|
|
46
|
+
if atu.nil?
|
47
|
+
atu = ATU.const_get(m)
|
48
|
+
else
|
49
|
+
atu = atu.const_get(m)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
atu
|
53
|
+
end
|
54
|
+
|
55
|
+
def self.stop_proxy
|
56
|
+
DRb.stop_service
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'logger'
|
2
|
+
module RubyProxy
|
3
|
+
class ProxyLoad
|
4
|
+
@@logger = Logger.new(STDOUT)
|
5
|
+
@@logger.level = Logger::DEBUG
|
6
|
+
@load_path = ['atu']
|
7
|
+
class <<self
|
8
|
+
attr_accessor :load_path
|
9
|
+
def load
|
10
|
+
load_path.uniq.each do |p|
|
11
|
+
if File.directory?(p)
|
12
|
+
Dir[p.chomp("/") + "/*.rb"].each do |file|
|
13
|
+
load_file(file)
|
14
|
+
end
|
15
|
+
elsif File.file?(p)
|
16
|
+
load_file(p)
|
17
|
+
else
|
18
|
+
@@logger.warn("path: #{p} not exist ,ignore")
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def load_file(file)
|
25
|
+
@@logger.debug "require file : #{file}"
|
26
|
+
Kernel.require file
|
27
|
+
rescue LoadError
|
28
|
+
@@logger.warn "require file : #{file} fail,exception:"
|
29
|
+
@@logger.warn "#{$!}"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'drb'
|
2
|
+
require 'ruby_proxy/proxy'
|
3
|
+
module RubyProxy
|
4
|
+
class DRbServer
|
5
|
+
@ip = "127.0.0.1"
|
6
|
+
@port = 9000
|
7
|
+
class << self
|
8
|
+
attr_writer :ip,:port
|
9
|
+
end
|
10
|
+
def self.start_service
|
11
|
+
DRb.start_service("druby://#{@ip}:#{@port}",Proxy)
|
12
|
+
DRb.thread.join
|
13
|
+
end
|
14
|
+
def self.stop_service
|
15
|
+
DRb.stop_service
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
if $0 == __FILE__
|
21
|
+
['INT'].each do |signal|
|
22
|
+
trap(signal) {
|
23
|
+
RubyProxy::DRbServer.stop_service
|
24
|
+
}
|
25
|
+
end
|
26
|
+
puts "start server ip:#{ARGV[0]}"
|
27
|
+
puts "start server port:#{ARGV[1]}"
|
28
|
+
RubyProxy::DRbServer.ip = ARGV[0] unless ARGV[0].nil?
|
29
|
+
RubyProxy::DRbServer.port = ARGV[1] unless ARGV[1].nil?
|
30
|
+
Dir.chdir ARGV[2] unless ARGV[2].nil?
|
31
|
+
RubyProxy::DRbServer.start_service
|
32
|
+
end
|
data/unittests/setup.rb
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
module B
|
2
|
+
def b
|
3
|
+
return "b"
|
4
|
+
end
|
5
|
+
class H
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
|
10
|
+
module ATU
|
11
|
+
class Hello
|
12
|
+
def initialize
|
13
|
+
end
|
14
|
+
|
15
|
+
def return_1
|
16
|
+
1
|
17
|
+
end
|
18
|
+
def return_str_1
|
19
|
+
"1"
|
20
|
+
end
|
21
|
+
|
22
|
+
def return_with_2ps(a,b)
|
23
|
+
return a,b
|
24
|
+
end
|
25
|
+
|
26
|
+
def return_vars(*a)
|
27
|
+
return a[0],a[1]
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
class Hello2
|
34
|
+
def return_1
|
35
|
+
"hello2"
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
class Hello3
|
41
|
+
def initialize(a,b)
|
42
|
+
end
|
43
|
+
def method_missing(m,*arg)
|
44
|
+
return m.to_s
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
module M1
|
50
|
+
|
51
|
+
def self.m
|
52
|
+
"m"
|
53
|
+
end
|
54
|
+
|
55
|
+
class Hello4
|
56
|
+
def test
|
57
|
+
return "test"
|
58
|
+
end
|
59
|
+
def one(p)
|
60
|
+
return "one"
|
61
|
+
end
|
62
|
+
end
|
63
|
+
class Hello5
|
64
|
+
def ok
|
65
|
+
1
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
class Hello6
|
70
|
+
include B
|
71
|
+
C = 1
|
72
|
+
def self.a(*arg)
|
73
|
+
return arg
|
74
|
+
end
|
75
|
+
|
76
|
+
def a(*arg)
|
77
|
+
var = 1
|
78
|
+
yield var
|
79
|
+
end
|
80
|
+
def b(*arg)
|
81
|
+
var = 1
|
82
|
+
yield var if block_given?
|
83
|
+
arg
|
84
|
+
end
|
85
|
+
|
86
|
+
def self.file_exist?(path)
|
87
|
+
File.exist?(path)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
94
|
+
|
Binary file
|
Binary file
|
@@ -0,0 +1,130 @@
|
|
1
|
+
require 'setup'
|
2
|
+
|
3
|
+
class Me
|
4
|
+
def a
|
5
|
+
"a"
|
6
|
+
end
|
7
|
+
|
8
|
+
end
|
9
|
+
|
10
|
+
|
11
|
+
class TestDrbProxy < Test::Unit::TestCase
|
12
|
+
@@atu = nil
|
13
|
+
def setup
|
14
|
+
return unless @@atu.nil?
|
15
|
+
@@atu = File.expand_path(File.join(__FILE__,'..','support','atu'))
|
16
|
+
RubyProxy::DRbClient.proxy_load(@@atu)
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_server_start_auto
|
20
|
+
assert_kind_of(DRbObject,RubyProxy::DRbClient.client)
|
21
|
+
end
|
22
|
+
def test_atu_ok
|
23
|
+
a = ATU::Hello.new
|
24
|
+
puts "aaa= #{a}"
|
25
|
+
assert_equal(1,a.return_1)
|
26
|
+
assert_equal("1",a.return_str_1)
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_mutli_new
|
30
|
+
a = ATU::Hello.new
|
31
|
+
assert_equal(1,a.return_1)
|
32
|
+
b = ATU::Hello.new
|
33
|
+
assert_equal(1,a.return_1)
|
34
|
+
a2 = ATU::Hello2.new
|
35
|
+
assert_equal("hello2",a2.return_1)
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_pars
|
39
|
+
a = ATU::Hello.new
|
40
|
+
assert_equal([1,"1"],a.return_with_2ps(1,"1"))
|
41
|
+
end
|
42
|
+
|
43
|
+
#可变参测试
|
44
|
+
def test_vars
|
45
|
+
a = Me.new
|
46
|
+
assert_equal("a",a.a)
|
47
|
+
a = ATU::Hello.new
|
48
|
+
assert_equal([1,"1"],a.return_vars(1,"1",3,4))
|
49
|
+
assert_equal([1,"1"],a.return_vars(1,"1",3,4))
|
50
|
+
assert_equal([1,"1"],a.return_vars(1,"1",3,4))
|
51
|
+
assert_equal([1,"1"],a.return_vars(1,"1",3,4))
|
52
|
+
assert_equal([1,"1"],a.return_vars(1,"1",3,4))
|
53
|
+
assert_equal([1,"1"],a.return_vars(1,"1",3,4))
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_support_thread
|
57
|
+
a = Me.new
|
58
|
+
assert_equal("a",a.a)
|
59
|
+
t = Thread.new do
|
60
|
+
a = ATU::Hello.new
|
61
|
+
for i in 1..100 do
|
62
|
+
assert_equal(1,a.return_1)
|
63
|
+
assert_equal(1,a.return_1)
|
64
|
+
|
65
|
+
#sleep 1
|
66
|
+
end
|
67
|
+
end
|
68
|
+
b = ATU::Hello.new
|
69
|
+
assert_equal(1,b.return_1)
|
70
|
+
assert_equal("1",b.return_str_1)
|
71
|
+
#sleep 20
|
72
|
+
|
73
|
+
assert_equal("1",b.return_str_1)
|
74
|
+
t.join
|
75
|
+
c = ATU::Hello.new
|
76
|
+
assert_equal(1,c.return_1)
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_method_missing1
|
80
|
+
a = ATU::Hello3.new(1,"2")
|
81
|
+
i=1
|
82
|
+
1.upto(100) do |i|
|
83
|
+
assert_equal("method#{i}",a.send("method#{i}"))
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
|
88
|
+
|
89
|
+
|
90
|
+
def test_atu_gue
|
91
|
+
assert_raise(NameError) do
|
92
|
+
ATU::ExistNo.new
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_atu_sikuli
|
97
|
+
screen = ATU::Sikuli::Region.new(0,0,1440,900)
|
98
|
+
assert_not_nil(screen)
|
99
|
+
end
|
100
|
+
#多个模块内的调用
|
101
|
+
def test_multi_m
|
102
|
+
a = ATU::M1::Hello4.new
|
103
|
+
assert_equal("one",a.one("test"))
|
104
|
+
end
|
105
|
+
|
106
|
+
def test_include_other_module
|
107
|
+
a = ATU::M1::Hello6.new
|
108
|
+
assert("b",a.b)
|
109
|
+
end
|
110
|
+
def test_constant_should_ok
|
111
|
+
assert(1,ATU::M1::Hello6::C)
|
112
|
+
end
|
113
|
+
|
114
|
+
def test_class_module_function_should_ok
|
115
|
+
assert([1,"1"],ATU::M1::Hello6.a(1,"1"))
|
116
|
+
assert("m",ATU::M1::m)
|
117
|
+
end
|
118
|
+
# failed, fix me
|
119
|
+
def test_block_ok
|
120
|
+
a = ATU::M1::Hello6.new
|
121
|
+
assert_equal(1,a.a() {|i| i})
|
122
|
+
end
|
123
|
+
|
124
|
+
def test_file_path
|
125
|
+
assert_equal([__FILE__],ATU::M1::Hello6.a(__FILE__))
|
126
|
+
path = File.join(__FILE__,'..','support','atu','hello.rb')
|
127
|
+
assert_equal(true,ATU::M1::Hello6.file_exist?(path))
|
128
|
+
end
|
129
|
+
|
130
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'setup'
|
2
|
+
|
3
|
+
class TestSikuliApi < Test::Unit::TestCase
|
4
|
+
@@image_path = nil
|
5
|
+
def setup
|
6
|
+
@@image_path ||= File.join(__FILE__,'..','support','image')
|
7
|
+
end
|
8
|
+
def test_sikuli_module
|
9
|
+
screen = ATU::Sikuli::Screen.new
|
10
|
+
assert_equal(0,screen.x)
|
11
|
+
assert_equal(0,screen.y)
|
12
|
+
assert_equal(true,screen.w > 0)
|
13
|
+
assert_equal(true,screen.h > 0)
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_screen_click
|
17
|
+
#region = ATU::Sikuli::Region.new(0,0,1440,900)
|
18
|
+
region = ATU::Sikuli::Screen.new
|
19
|
+
assert_equal(0,region.x)
|
20
|
+
assert_equal(0,region.y)
|
21
|
+
assert_equal(true,File.exist?(File.join(@@image_path,"start.png")))
|
22
|
+
region.click(File.expand_path(File.join(@@image_path, "start.png")),0)
|
23
|
+
assert_nothing_raised do
|
24
|
+
region.wait(File.expand_path(File.join(@@image_path,"search.png")),10)
|
25
|
+
end
|
26
|
+
#~ region.type(ATU::Key.ESC)
|
27
|
+
#~ assert_nothing_raised do
|
28
|
+
#~ region.waitVanish(File.expand_path(File.join(@@image_path,"search.png")),10)
|
29
|
+
#~ end
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'setup'
|
2
|
+
require 'atu/sikuli'
|
3
|
+
class TestSikuliApi < Test::Unit::TestCase
|
4
|
+
@@image_path = nil
|
5
|
+
def setup
|
6
|
+
@@image_path ||= File.join(__FILE__,'..','support','image')
|
7
|
+
end
|
8
|
+
def test_sikuli_module
|
9
|
+
screen = ATU::Sikuli::Screen.new
|
10
|
+
assert_equal(0,screen.x)
|
11
|
+
assert_equal(0,screen.y)
|
12
|
+
assert_equal(true,screen.w > 0)
|
13
|
+
assert_equal(true,screen.h > 0)
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_region_offen_used
|
17
|
+
region = ATU::Sikuli::Region.new(0,0,1440,900)
|
18
|
+
assert_equal(0,region.x)
|
19
|
+
assert_equal(0,region.y)
|
20
|
+
assert_equal(true,File.exist?(File.join(@@image_path,"start.png")))
|
21
|
+
region.click(File.join(@@image_path, "start.png"),0)
|
22
|
+
puts region.wait(File.join(@@image_path,"search.png"),10)
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
end
|
metadata
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ruby-proxy
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- yafei Li
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2011-08-10 00:00:00 +08:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: Ruby Proxy for Jruby.
|
17
|
+
email: lyfi2003@sina.com
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files: []
|
23
|
+
|
24
|
+
files:
|
25
|
+
- lib/atu
|
26
|
+
- lib/atu/key.rb
|
27
|
+
- lib/atu/sikuli-script.jar
|
28
|
+
- lib/atu/sikuli.rb
|
29
|
+
- lib/ruby_proxy
|
30
|
+
- lib/ruby_proxy/client.rb
|
31
|
+
- lib/ruby_proxy/proxy.rb
|
32
|
+
- lib/ruby_proxy/proxy_load.rb
|
33
|
+
- lib/ruby_proxy/server.rb
|
34
|
+
- lib/ruby_proxy/version.rb
|
35
|
+
- lib/ruby_proxy.rb
|
36
|
+
has_rdoc: false
|
37
|
+
homepage: https://github.com/windy/ruby_proxy
|
38
|
+
post_install_message:
|
39
|
+
rdoc_options: []
|
40
|
+
|
41
|
+
require_paths:
|
42
|
+
- lib
|
43
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: "0"
|
48
|
+
version:
|
49
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: "0"
|
54
|
+
version:
|
55
|
+
requirements: []
|
56
|
+
|
57
|
+
rubyforge_project: ruby-proxy
|
58
|
+
rubygems_version: 1.3.1
|
59
|
+
signing_key:
|
60
|
+
specification_version: 2
|
61
|
+
summary: Ruby Proxy for Jruby.
|
62
|
+
test_files:
|
63
|
+
- unittests/all_tests.rb
|
64
|
+
- unittests/setup.rb
|
65
|
+
- unittests/support
|
66
|
+
- unittests/support/atu
|
67
|
+
- unittests/support/atu/hello.rb
|
68
|
+
- unittests/support/image
|
69
|
+
- unittests/support/image/search.png
|
70
|
+
- unittests/support/image/start.png
|
71
|
+
- unittests/test_drb_proxy.rb
|
72
|
+
- unittests/test_sikuli_api.rb
|
73
|
+
- unittests/your_jruby_sikuli_config_ok.rb
|