zucchini-ios 0.5.4 → 0.5.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -16,10 +16,6 @@ module Zucchini
16
16
  @@config['app']
17
17
  end
18
18
 
19
- def self.template
20
- @@config['template']
21
- end
22
-
23
19
  def self.resolution_name(dimension)
24
20
  @@config['resolutions'][dimension.to_i]
25
21
  end
@@ -1,6 +1,7 @@
1
1
  class Zucchini::Feature
2
2
  attr_accessor :path
3
3
  attr_accessor :device
4
+ attr_accessor :template
4
5
  attr_accessor :stats
5
6
 
6
7
  attr_reader :succeeded
@@ -45,9 +46,14 @@ class Zucchini::Feature
45
46
  def compile_js
46
47
  zucchini_base_path = File.expand_path("#{File.dirname(__FILE__)}/..")
47
48
 
48
- feature_text = File.open("#{@path}/feature.zucchini").read.gsub(/#.+\n/,"").gsub(/\n/, "\\n")
49
+ feature_text = File.open("#{@path}/feature.zucchini").read.gsub(/\#.+[\z\n]?/,"").gsub(/\n/, "\\n")
49
50
  File.open("#{run_data_path}/feature.coffee", "w+") { |f| f.write("Zucchini.run('#{feature_text}')") }
50
- `coffee -o #{run_data_path} -j #{run_data_path}/feature.js -c #{zucchini_base_path}/lib/uia #{@path}/../support/screens #{run_data_path}/feature.coffee`
51
+
52
+ cs_paths = "#{zucchini_base_path}/lib/uia #{@path}/../support/screens"
53
+ cs_paths += " #{@path}/../support/lib" if File.exists?("#{@path}/../support/lib")
54
+ cs_paths += " #{run_data_path}/feature.coffee"
55
+
56
+ `coffee -o #{run_data_path} -j #{run_data_path}/feature.js -c #{cs_paths}`
51
57
  end
52
58
 
53
59
  def collect
@@ -58,7 +64,7 @@ class Zucchini::Feature
58
64
  device_params = (@device[:name] == "iOS Simulator") ? "" : "-w #{@device[:udid]}"
59
65
 
60
66
  begin
61
- out = `instruments #{device_params} -t #{Zucchini::Config.template} #{Zucchini::Config.app} -e UIASCRIPT #{run_data_path}/feature.js -e UIARESULTSPATH #{run_data_path} 2>&1`
67
+ out = `instruments #{device_params} -t #{@template} #{Zucchini::Config.app} -e UIASCRIPT #{run_data_path}/feature.js -e UIARESULTSPATH #{run_data_path} 2>&1`
62
68
  puts out
63
69
  # Hack. Instruments don't issue error return codes when JS exceptions occur
64
70
  raise "Instruments run error" if (out.match /JavaScript error/) || (out.match /Instruments\ .{0,5}\ Error\ :/ )
@@ -16,6 +16,8 @@ class Zucchini::Runner < Clamp::Command
16
16
  raise "ZUCCHINI_DEVICE environment variable not set" unless ENV['ZUCCHINI_DEVICE']
17
17
  @device = Zucchini::Config.device(ENV['ZUCCHINI_DEVICE'])
18
18
 
19
+ @template = detect_template
20
+
19
21
  exit run
20
22
  end
21
23
 
@@ -23,7 +25,8 @@ class Zucchini::Runner < Clamp::Command
23
25
  compare_threads = {}
24
26
 
25
27
  features.each do |f|
26
- f.device = @device
28
+ f.device = @device
29
+ f.template = @template
27
30
 
28
31
  if collect? then f.collect
29
32
  elsif compare? then f.compare
@@ -64,4 +67,11 @@ class Zucchini::Runner < Clamp::Command
64
67
  def detection_error(path)
65
68
  "#{path} is not a feature directory"
66
69
  end
70
+
71
+ def detect_template
72
+ path = `xcode-select -print-path`.gsub(/\n/, '')
73
+ path += "/Platforms/iPhoneOS.platform/Developer/Library/Instruments/PlugIns/AutomationInstrument.bundle/Contents/Resources/Automation.tracetemplate"
74
+ raise "Instruments template at #{path} does not exist" unless File.exists? path
75
+ path
76
+ end
67
77
  end
@@ -16,7 +16,8 @@ puts = (text) ->
16
16
  UIALogger.logMessage text
17
17
 
18
18
  target = UIATarget.localTarget()
19
- view = target.frontMostApp().mainWindow()
19
+ app = target.frontMostApp()
20
+ view = app.mainWindow()
20
21
 
21
22
  target.waitForElement = (element) ->
22
23
  return unless element
@@ -1,3 +1,3 @@
1
1
  module Zucchini
2
- VERSION = "0.5.4"
2
+ VERSION = "0.5.5"
3
3
  end
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ describe Zucchini::Feature do
4
+ let(:path) { './spec/sample_setup/feature_one' }
5
+ let(:feature) { Zucchini::Feature.new(path) }
6
+
7
+ after(:all) { FileUtils.rm_rf Dir.glob("#{path}/run_data/feature.*") }
8
+
9
+ describe "#compile_js" do
10
+ before { feature.compile_js }
11
+
12
+ it "should strip comments from the feature file" do
13
+ File.read("#{feature.run_data_path}/feature.coffee").index('#').should be_nil
14
+ end
15
+
16
+ describe "feature.js output" do
17
+ subject { File.read("#{feature.run_data_path}/feature.js") }
18
+
19
+ it "should include screen definitions" do
20
+ should match /SplashScreen = \(function/
21
+ end
22
+
23
+ it "should include Zucchini runtime" do
24
+ should match /Zucchini.run = /
25
+ end
26
+
27
+ it "should include custom libraries from support/lib" do
28
+ should match /Helpers.example = /
29
+ end
30
+ end
31
+ end
32
+ end
@@ -1,5 +1,4 @@
1
1
  app: MyApp.app
2
- template: '/Developer/Platforms/iPhoneOS.platform/Developer/Library/Instruments/PlugIns/AutomationInstrument.bundle/Contents/Resources/Automation.tracetemplate'
3
2
 
4
3
  devices:
5
4
  My iDevice:
@@ -0,0 +1,3 @@
1
+ class Helpers
2
+ @example: ->
3
+ puts "Helpers.example method is available in your screen classes"
@@ -1,5 +1,4 @@
1
1
  app: MyApp.app
2
- template: '/Developer/Platforms/iPhoneOS.platform/Developer/Library/Instruments/PlugIns/AutomationInstrument.bundle/Contents/Resources/Automation.tracetemplate'
3
2
 
4
3
  devices:
5
4
  My iDevice:
@@ -0,0 +1,3 @@
1
+ class Helpers
2
+ @example: ->
3
+ puts "Helpers.example method is available in your screen classes"
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: zucchini-ios
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.5.4
5
+ version: 0.5.5
6
6
  platform: ruby
7
7
  authors:
8
8
  - Vasily Mikhaylichenko
@@ -12,7 +12,7 @@ autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
14
 
15
- date: 2011-12-28 00:00:00 Z
15
+ date: 2012-04-03 00:00:00 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: clamp
@@ -76,6 +76,7 @@ files:
76
76
  - lib/uia/screen.coffee
77
77
  - lib/version.rb
78
78
  - spec/lib/config_spec.rb
79
+ - spec/lib/feature_spec.rb
79
80
  - spec/lib/generator_spec.rb
80
81
  - spec/lib/report_spec.rb
81
82
  - spec/lib/runner_spec.rb
@@ -91,6 +92,7 @@ files:
91
92
  - spec/sample_setup/feature_two/reference/retina_ios5/06_sign up_spinner_error.png
92
93
  - spec/sample_setup/feature_two/run_data/Run 1/06_sign up_spinner.png
93
94
  - spec/sample_setup/support/config.yml
95
+ - spec/sample_setup/support/lib/helpers.coffee
94
96
  - spec/sample_setup/support/masks/retina_ios5.png
95
97
  - spec/sample_setup/support/screens/splash.coffee
96
98
  - spec/spec_helper.rb
@@ -101,6 +103,7 @@ files:
101
103
  - templates/feature/run_data/.gitignore
102
104
  - templates/feature/setup.rb
103
105
  - templates/project/features/support/config.yml
106
+ - templates/project/features/support/lib/helpers.coffee
104
107
  - templates/project/features/support/masks/ipad_ios5.png
105
108
  - templates/project/features/support/masks/low_ios4.png
106
109
  - templates/project/features/support/masks/retina_ios5.png
@@ -129,12 +132,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
129
132
  requirements: []
130
133
 
131
134
  rubyforge_project:
132
- rubygems_version: 1.8.12
135
+ rubygems_version: 1.8.15
133
136
  signing_key:
134
137
  specification_version: 3
135
138
  summary: Functional testing framework for iOS-powered devices
136
139
  test_files:
137
140
  - spec/lib/config_spec.rb
141
+ - spec/lib/feature_spec.rb
138
142
  - spec/lib/generator_spec.rb
139
143
  - spec/lib/report_spec.rb
140
144
  - spec/lib/runner_spec.rb
@@ -150,6 +154,7 @@ test_files:
150
154
  - spec/sample_setup/feature_two/reference/retina_ios5/06_sign up_spinner_error.png
151
155
  - spec/sample_setup/feature_two/run_data/Run 1/06_sign up_spinner.png
152
156
  - spec/sample_setup/support/config.yml
157
+ - spec/sample_setup/support/lib/helpers.coffee
153
158
  - spec/sample_setup/support/masks/retina_ios5.png
154
159
  - spec/sample_setup/support/screens/splash.coffee
155
160
  - spec/spec_helper.rb