sikuli 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
+ .DS_Store
1
2
  *.gem
2
3
  .bundle
3
4
  Gemfile.lock
data/README.md CHANGED
@@ -10,28 +10,44 @@ Requirements
10
10
  * [Sikuli X 1.0rc2](http://sikuli.org/)
11
11
  * OSX
12
12
 
13
+ Compatibility
14
+ -------------
15
+ It's recommended to use JRuby ~> 1.6.0 and run it in 1.9 mode to get unicode characters working
16
+ as expected.
17
+
18
+ ```
19
+ export JRUBY_OPTS=--1.9
20
+ ```
21
+
13
22
  Installation
14
23
  ------------
15
24
 
16
25
  gem install sikuli
17
-
26
+
18
27
  Usage
19
28
  -----
20
-
29
+
21
30
  require 'java'
22
31
  require 'sikuli'
23
-
24
- Sikuli::Config.run do |config|
32
+
33
+ Sikuli::Config.run do |config|
25
34
  config.image_path = "#{Dir.pwd}/images/"
26
35
  config.logging = false
27
36
  end
28
-
37
+
29
38
  screen = Sikuli::Screen.new
30
39
  screen.click(10, 10) # should open your apple menu
31
-
40
+
32
41
  app = Sikuli::App.new("iPhone Simulator")
33
42
  app.window.click('ui_element.png') if app.window.exists?('ui_element.png')
34
43
 
44
+ Running the test suite
45
+ ----------------------
46
+
47
+ 1. You need to open `test_area.jpg` in **Preview** from `spec/support/images/` directory
48
+ before running tests.
49
+ 2. You also need to open the **TextEdit** app
50
+
35
51
  Examples
36
52
  --------
37
53
 
data/lib/sikuli/app.rb CHANGED
@@ -3,13 +3,13 @@ module Sikuli
3
3
  def initialize(app_name)
4
4
  @java_obj = org.sikuli.script::App.new(app_name)
5
5
  end
6
-
6
+
7
7
  def focus
8
8
  @java_obj.focus()
9
9
  end
10
-
10
+
11
11
  def window
12
12
  Region.new(@java_obj.window())
13
13
  end
14
14
  end
15
- end
15
+ end
@@ -15,7 +15,7 @@ module Sikuli
15
15
  else raise ArgumentError
16
16
  end
17
17
  end
18
-
18
+
19
19
  def dragDrop(start_x, start_y, end_x, end_y)
20
20
  @java_obj.dragDrop(
21
21
  org.sikuli.script::Location.new(start_x, start_y).offset(x(), y()),
@@ -23,10 +23,10 @@ module Sikuli
23
23
  0
24
24
  )
25
25
  end
26
-
26
+
27
27
  private
28
-
29
- def click_image(filename, opts = {})
28
+
29
+ def click_image(filename, opts = {})
30
30
  begin
31
31
  if opts[:double]
32
32
  @java_obj.doubleClick(filename, 0)
@@ -37,7 +37,7 @@ module Sikuli
37
37
  raise "File Not Found: #{filename}"
38
38
  end
39
39
  end
40
-
40
+
41
41
  def click_point(x, y, opts = {})
42
42
  if opts[:double]
43
43
  @java_obj.doubleClick(org.sikuli.script::Location.new(x, y).offset(x(), y()), 0)
@@ -46,4 +46,4 @@ module Sikuli
46
46
  end
47
47
  end
48
48
  end
49
- end
49
+ end
data/lib/sikuli/config.rb CHANGED
@@ -1,24 +1,29 @@
1
1
  module Sikuli
2
2
  class Config
3
- def self.image_path
4
- java.lang.System.getProperty("SIKULI_IMAGE_PATH")
5
- end
6
-
7
- def self.image_path=(path)
8
- java.lang.System.setProperty("SIKULI_IMAGE_PATH", path)
9
- end
10
-
11
- def self.logging=(boolean)
12
- return unless [TrueClass, FalseClass].include? boolean.class
13
- org.sikuli.script::Settings.InfoLogs = boolean
14
- org.sikuli.script::Settings.ActionLogs = boolean
15
- org.sikuli.script::Settings.DebugLogs = boolean
16
- end
17
-
18
- def self.run(*args)
19
- if block_given?
20
- yield self
3
+ class << self
4
+ attr_accessor :highlight_on_find
5
+
6
+ def image_path
7
+ java.lang.System.getProperty("SIKULI_IMAGE_PATH")
8
+ end
9
+
10
+ def image_path=(path)
11
+ java.lang.System.setProperty("SIKULI_IMAGE_PATH", path)
12
+ end
13
+
14
+ def logging=(boolean)
15
+ return unless [TrueClass, FalseClass].include? boolean.class
16
+ org.sikuli.script::Settings.InfoLogs = boolean
17
+ org.sikuli.script::Settings.ActionLogs = boolean
18
+ org.sikuli.script::Settings.DebugLogs = boolean
19
+ end
20
+
21
+ def run(*args)
22
+ if block_given?
23
+ yield self
24
+ end
21
25
  end
26
+
22
27
  end
23
28
  end
24
- end
29
+ end
data/lib/sikuli/region.rb CHANGED
@@ -7,29 +7,29 @@ module Sikuli
7
7
  include Clickable
8
8
  include Typeable
9
9
  include Searchable
10
-
10
+
11
11
  def initialize(*args)
12
12
  @java_obj = org.sikuli.script::Region.new(*args)
13
13
  end
14
-
14
+
15
15
  def highlight(seconds = 1)
16
16
  @java_obj.highlight(seconds)
17
17
  end
18
-
18
+
19
19
  def x
20
20
  @java_obj.x()
21
21
  end
22
-
22
+
23
23
  def y
24
24
  @java_obj.y()
25
25
  end
26
-
26
+
27
27
  def width
28
28
  @java_obj.w()
29
29
  end
30
-
30
+
31
31
  def height
32
32
  @java_obj.h()
33
33
  end
34
34
  end
35
- end
35
+ end
@@ -1,18 +1,20 @@
1
1
  module Sikuli
2
- module Searchable
2
+ module Searchable
3
3
  def find(filename, similarity = 0.9)
4
4
  begin
5
5
  pattern = org.sikuli.script::Pattern.new(filename).similar(similarity)
6
- Region.new(@java_obj.find(pattern))
6
+ region = Region.new(@java_obj.find(pattern))
7
+ region.highlight if Sikuli::Config.highlight_on_find
8
+ return region
7
9
  rescue
8
10
  raise "File Not Found: #{filename}"
9
11
  end
10
12
  end
11
-
13
+
12
14
  def exists?(filename, similarity = 0.9, time = 0.5)
13
15
  pattern = org.sikuli.script::Pattern.new(filename).similar(similarity)
14
16
  @java_obj.exists(pattern, time)
15
17
  end
16
18
  alias_method :contains?, :exists?
17
19
  end
18
- end
20
+ end
@@ -1,3 +1,3 @@
1
1
  module Sikuli
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.4"
3
3
  end
@@ -2,6 +2,6 @@ require 'spec_helper'
2
2
 
3
3
  describe Sikuli::App do
4
4
  subject { Sikuli::App.new('Finder') }
5
-
5
+
6
6
  its(:window) { should be_an_instance_of Sikuli::Region }
7
- end
7
+ end
@@ -2,22 +2,21 @@ require 'spec_helper'
2
2
 
3
3
  describe Sikuli::Region, "#Clickable" do
4
4
  before(:all) do
5
- #open the file 'test_area.jpg' in Preview at zoom level 0
6
5
  @region = setup_test_area
7
6
  end
8
-
7
+
9
8
  it "should perform a click at 10, 10" do
10
9
  lambda { @region.click(12, 12) }.should_not raise_error
11
10
  end
12
-
13
- it "should perform a double click 10, 1040" do
11
+
12
+ it "should perform a double click 10, 1040" do
14
13
  lambda { @region.doubleClick(12, 491) }.should_not raise_error
15
14
  end
16
-
15
+
17
16
  it "should perform a double click on an image" do
18
17
  lambda { @region.doubleClick("smiley_face.png") }.should_not raise_error
19
18
  end
20
-
19
+
21
20
  it "should perform a drag and drop" do
22
21
  lambda { @region.dragDrop(12, 12, 491, 491) }.should_not raise_error
23
22
  end
@@ -25,8 +24,8 @@ describe Sikuli::Region, "#Clickable" do
25
24
  it "should perform a click on an image" do
26
25
  lambda { @region.click("smiley_face.png") }.should_not raise_error
27
26
  end
28
-
27
+
29
28
  it "should not perform a click on an image that is outside of the region" do
30
29
  lambda { @region.click("apple.png")}.should raise_error
31
30
  end
32
- end
31
+ end
@@ -5,33 +5,43 @@ describe Sikuli::Config do
5
5
  Sikuli::Config.image_path = ""
6
6
  java.lang.System.getProperty("SIKULI_IMAGE_PATH").should == ""
7
7
  end
8
-
8
+
9
9
  it "should allow a path to be added" do
10
10
  Sikuli::Config.run do |config|
11
11
  config.image_path = '/Users/images/'
12
12
  end
13
-
13
+
14
14
  java.lang.System.getProperty("SIKULI_IMAGE_PATH").should == '/Users/images/'
15
15
  Sikuli::Config.image_path.should == '/Users/images/'
16
16
  end
17
-
17
+
18
18
  it "should allow logging to be turned on" do
19
19
  Sikuli::Config.run do |config|
20
20
  config.logging = true
21
21
  end
22
-
22
+
23
23
  org.sikuli.script::Settings.InfoLogs.should be_true
24
24
  org.sikuli.script::Settings.ActionLogs.should be_true
25
25
  org.sikuli.script::Settings.DebugLogs.should be_true
26
26
  end
27
-
27
+
28
28
  it "should allow logging to be turned off" do
29
29
  Sikuli::Config.run do |config|
30
30
  config.logging = false
31
31
  end
32
-
32
+
33
33
  org.sikuli.script::Settings.InfoLogs.should be_false
34
34
  org.sikuli.script::Settings.ActionLogs.should be_false
35
35
  org.sikuli.script::Settings.DebugLogs.should be_false
36
36
  end
37
- end
37
+
38
+ it "should allow us to turn off highlighting on find" do
39
+ Sikuli::Config.highlight_on_find = false
40
+ Sikuli::Config.highlight_on_find.should be_false
41
+ end
42
+
43
+ it "should allow us to turn on highlighting on find" do
44
+ Sikuli::Config.highlight_on_find = true
45
+ Sikuli::Config.highlight_on_find.should be_true
46
+ end
47
+ end
@@ -2,9 +2,11 @@ require 'spec_helper'
2
2
 
3
3
  describe Sikuli::Screen, 'when initialized' do
4
4
  subject { Sikuli::Screen.new }
5
-
5
+
6
6
  its(:x) { should == 0 }
7
7
  its(:y) { should == 0 }
8
- its(:width) { should == 1680 } # screen's resolution
9
- its(:height) { should == 1050 } # screen's resolution
10
- end
8
+ its(:width) { should > 0 } # screen's resolution
9
+ its(:width) { should be_instance_of Fixnum }
10
+ its(:height) { should > 0 } # screen's resolution
11
+ its(:height) { should be_instance_of Fixnum }
12
+ end
@@ -2,31 +2,30 @@ require 'spec_helper'
2
2
 
3
3
  describe Sikuli::Region, "#Searchable" do
4
4
  before(:all) do
5
- #open the file 'test_area.jpg' in Preview at zoom level 0
6
5
  @region = setup_test_area
7
6
  end
8
-
7
+
9
8
  it "should find an image within the region" do
10
9
  @region.find("smiley_face.png").should_not be_nil
11
10
  end
12
-
11
+
13
12
  it "should return a region containing the found image" do
14
13
  @region.find("smiley_face.png").should be_an_instance_of Sikuli::Region
15
14
  end
16
-
15
+
17
16
  it "should not find an image that is not in the region" do
18
17
  lambda { @region.find("apple.png") }.should raise_error
19
18
  end
20
-
19
+
21
20
  it "should return true if the image is found" do
22
21
  @region.exists?("smiley_face.png").should be_true
23
22
  end
24
-
23
+
25
24
  it "should allow you to call contains?" do
26
25
  @region.contains?("smiley_face.png").should be_true
27
26
  end
28
-
27
+
29
28
  it "should return false if the image is not found" do
30
29
  @region.exists?("apple.png").should be_false
31
30
  end
32
- end
31
+ end
@@ -2,25 +2,23 @@ require 'spec_helper'
2
2
 
3
3
  describe Sikuli::Region, "#Typeable" do
4
4
  before(:all) do
5
- app = Sikuli::App.new("TextMate")
5
+ app = Sikuli::App.new("TextEdit")
6
6
  app.focus
7
- @region = app.window
7
+ @region = app.window
8
8
  end
9
-
9
+
10
10
  context "modifying text input with" do
11
11
  it "apple key" do
12
12
  @region.type("n", Sikuli::KEY_CMD)
13
13
  end
14
-
14
+
15
15
  it "shift key" do
16
16
  @region.type("this should be lower case")
17
17
  @region.type("this should be upper case", Sikuli::KEY_SHIFT)
18
18
  end
19
19
  end
20
-
20
+
21
21
  context "unicode characters" do
22
- # tell JRuby to run in 1.9 mode
23
- # http://stackoverflow.com/questions/4755900/how-to-make-jruby-1-6-default-to-ruby-1-9
24
22
  it("backspace") { @region.type(Sikuli::KEY_BACKSPACE * 50) }
25
23
  it("return") { @region.type(Sikuli::KEY_RETURN) }
26
24
  xit("up arrow") { @region.type(Sikuli::UP_ARROW) }
@@ -28,4 +26,4 @@ describe Sikuli::Region, "#Typeable" do
28
26
  it("down arrow") { @region.type(Sikuli::DOWN_ARROW) }
29
27
  it("right arrow") { @region.type(Sikuli::RIGHT_ARROW) }
30
28
  end
31
- end
29
+ end
data/spec/spec_helper.rb CHANGED
@@ -11,9 +11,9 @@ def setup_test_area
11
11
  app = Sikuli::App.new('Preview')
12
12
  app.focus()
13
13
  center = screen.find("#{Dir.pwd}/spec/support/images/smiley_face.png")
14
-
14
+
15
15
  test_area = Sikuli::Region.new(center.x - 212, center.y - 212, 503, 503)
16
16
  test_area.highlight
17
-
17
+
18
18
  test_area
19
- end
19
+ end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: sikuli
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.1.3
5
+ version: 0.1.4
6
6
  platform: ruby
7
7
  authors:
8
8
  - Chas Lemley
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-07-25 00:00:00 -04:00
13
+ date: 2011-07-28 00:00:00 -04:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -58,7 +58,6 @@ files:
58
58
  - spec/sikuli/searchable_spec.rb
59
59
  - spec/sikuli/typeable_spec.rb
60
60
  - spec/spec_helper.rb
61
- - spec/support/images/.DS_Store
62
61
  - spec/support/images/apple.png
63
62
  - spec/support/images/smiley_face.png
64
63
  - spec/support/images/test_area.jpg
@@ -99,7 +98,6 @@ test_files:
99
98
  - spec/sikuli/searchable_spec.rb
100
99
  - spec/sikuli/typeable_spec.rb
101
100
  - spec/spec_helper.rb
102
- - spec/support/images/.DS_Store
103
101
  - spec/support/images/apple.png
104
102
  - spec/support/images/smiley_face.png
105
103
  - spec/support/images/test_area.jpg
Binary file