cs-bdd 0.1.5 → 0.1.6

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: 083aada0c6d56dc360cb8d8edc5e4b22051ce66d
4
- data.tar.gz: e1dae588adee75ca80bbe0561dfb97cf5c9996ef
3
+ metadata.gz: 77788c60608eb5143e09cdb2e2adc8b4285f5334
4
+ data.tar.gz: 13607e4f59453700a6d4f5757a52edeb98fe45ee
5
5
  SHA512:
6
- metadata.gz: 00cd5a0d3823e74a8e608bf0640d54bfc318a23113e6b2e182984800d1e54afe1c63921c010bb0cee1e6ecc46c10c15cc7ddc18e07597b29ad3ad7fa1d0abf8e
7
- data.tar.gz: 3a9c49162395cd0cc3519022aa07cdfa6f56e549e778e908010df6bbc66230d0434f5e0997c25c8c1fe996e71af58ad9b38d79e25a0b1b3a08635942e27ab226
6
+ metadata.gz: c131b1b0fb8f9cb93a838048eef113bf74667222709def1128e074ac592015bbb234d48dca788a9843f0cb363d303c2ed2e61a60bef4f9fbf4fdaa23a929d7b5
7
+ data.tar.gz: cd77ac0ddf4d13a3685dcbe6e6745479eeffea5ded9518ef20f89107c2ba634220bbff7342c7ea0f5e19b40615d6a5a0af7fe7e260bc106cb9caca9c0ef42072
data/README.md CHANGED
@@ -3,6 +3,8 @@
3
3
 
4
4
  A simple gem to generate all files needed in a project that will support calabash for both Android and iOS.
5
5
 
6
+ iOS Build script works only with iOS SDK 9.2 or newer
7
+
6
8
  [Calabash](http://calaba.sh/) uses cucumber to support functional tests in Android and iOS and has one gem for each Platform:
7
9
 
8
10
  > calabash-android (for Android) [(link)](https://github.com/calabash/calabash-android)
@@ -18,9 +18,9 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ['lib']
20
20
 
21
- spec.add_runtime_dependency 'bundler', '~> 1.7'
22
- spec.add_runtime_dependency 'rake', '~> 10.0'
23
- spec.add_runtime_dependency 'thor', '~> 0.19.1'
24
- spec.add_runtime_dependency 'i18n', '~> 0.6.11'
25
- spec.add_runtime_dependency 'gherkin', '~> 2.12.2'
21
+ spec.add_runtime_dependency 'bundler', '>=1.7'
22
+ spec.add_runtime_dependency 'rake', '>=10.0'
23
+ spec.add_runtime_dependency 'thor', '>=0.19.1'
24
+ spec.add_runtime_dependency 'i18n', '>=0.6.11'
25
+ spec.add_runtime_dependency 'gherkin', '>=2.12.2'
26
26
  end
@@ -1,5 +1,5 @@
1
1
  module CS
2
2
  module BDD
3
- VERSION = '0.1.5'
3
+ VERSION = '0.1.6'
4
4
  end
5
5
  end
@@ -1,14 +1,6 @@
1
1
  # Gemfile to help setting up the initial development environment
2
2
  source 'https://rubygems.org'
3
3
 
4
- gem 'calabash-common', '~> 0.0.1'
5
- gem 'calabash-android', '~> 0.5.14'
6
-
7
- # Gems that will only be used with the computer is a Mac
8
- group :mac_os do
9
- # Remenber to fix the calabash-cucumber version. The update of this gem is
10
- # a proccess that you need to update the Calabash Server on your iOS
11
- # application code. So I suggest doing the update manually
12
- gem 'calabash-cucumber', '~> 0.16.4'
13
- gem 'cocoapods', '~> 0.35.0'
14
- end
4
+ gem 'calabash-common', '~> 0.0.2'
5
+ gem 'calabash-android', '~> 0.5.15'
6
+ gem 'calabash-cucumber', '~> 0.17.1'
@@ -3,13 +3,13 @@
3
3
  # ----------------------------------------------------------------------------
4
4
  #
5
5
  # $1 -> configuration environment (dev or jenkins)
6
- # $2 -> device type. Builds for 'simulator' or 'device'
7
6
  #
8
7
  #
9
8
  # REMEMBER to fill the configuration file build_app.yml
10
9
 
11
10
  require 'fileutils'
12
11
  require 'yaml'
12
+ require 'pathname'
13
13
 
14
14
  # When running on CI
15
15
  # It is a good pratice to run pod install when executing this script
@@ -19,11 +19,10 @@ require 'yaml'
19
19
  # Parsing the yaml configuration file
20
20
  config = YAML.load_file(File.join(File.dirname(__FILE__), 'build_app.yml'))
21
21
 
22
- if ARGV.length < 2
22
+ if ARGV.length != 1
23
23
  puts 'Error: Wrong number of arguments!'
24
- puts 'Usage: build_app.rb environment device_type'
24
+ puts 'Usage: build_app.rb environment'
25
25
  puts "Available Environments: #{config.keys.join(', ')}"
26
- puts "Device type: 'simulator' or 'device'"
27
26
  exit 1
28
27
  end
29
28
 
@@ -37,29 +36,36 @@ else
37
36
  config = config[ARGV[0]]
38
37
  end
39
38
 
40
- export_path = File.join(config['export_path'], ARGV[1])
39
+ # Creating a folder name from the destination configuration parameter
40
+ folder_name = config['destination'].gsub('platform=', '').gsub('name=', '')
41
+ .tr(' ', '_').tr(',', '_')
42
+ export_path = File.join(config['export_path'], folder_name)
43
+
44
+ # Removing the folder where the .app will be stored if it already exists
45
+ FileUtils.rm_r export_path if Dir.exist?(export_path)
41
46
 
42
47
  # Creating the folder where the .app will be stored
43
48
  FileUtils.mkdir_p export_path
44
49
 
45
- # Choosing the SDK for device or simulator
46
- sdk = ''
47
- if ARGV[1] == 'device'
48
- sdk = 'iphoneos'
49
- else
50
- sdk = 'iphonesimulator'
51
- end
52
-
53
50
  puts 'Building project'
54
51
 
55
52
  system <<eos
56
53
  xcodebuild -workspace "#{config['xcworkspace']}" \
57
- -scheme "#{config['scheme']}" -sdk "#{sdk}" \
54
+ -scheme "#{config['scheme']}" -destination "#{config['destination']}" \
58
55
  -configuration "#{config['configuration']}" clean build \
59
56
  CONFIGURATION_BUILD_DIR="#{export_path}"
60
57
  eos
61
58
 
62
- puts "APP_BUNDLE_PATH=#{File.join(export_path, config['scheme'])}.app"
59
+ # Getting the app folder that was created
60
+ # Listing all folders on the export path folder
61
+ folders = Pathname.new(export_path).children.select { |c| c.directory? }
62
+ # Getting the folder which ends with .app
63
+ app_pathname = folders.select { |f| f.to_s.match('.app$') }
64
+ # Getting the app folder path
65
+ app_path = app_pathname.first.to_s
66
+
67
+ # Printing the APP_BUNDLE_PATH in the terminal
68
+ puts "APP_BUNDLE_PATH=#{app_path}"
63
69
 
64
70
  puts "End: #{Time.now.strftime('%H:%M:%S')}"
65
71
  puts 'Bye!'
@@ -2,10 +2,12 @@ dev:
2
2
  xcworkspace: "Path_to_the_xcworkspace_folder"
3
3
  scheme: TargetName
4
4
  configuration: Debug
5
+ destination: "platform=iOS Simulator,name=iPhone 6"
5
6
  export_path: "Path_to_export_app_folder"
6
7
 
7
8
  jenkins:
8
9
  xcworkspace: <%= ENV['WORKSPACE']%>/Project.xcworkspace
9
10
  scheme: TargetName
10
11
  configuration: Debug
12
+ destination: "Any_platform_or_device_that_you_want"
11
13
  export_path: <%= ENV['WORKSPACE']%>/releases/normal
@@ -1,7 +1,7 @@
1
1
  require 'calabash-android/management/app_installation'
2
2
 
3
3
  AfterConfiguration do
4
- FeatureNameMemory.feature_name = nil
4
+ FeatureMemory.feature = nil
5
5
  end
6
6
 
7
7
  Before('@reinstall') do
@@ -11,13 +11,11 @@ Before('@reinstall') do
11
11
  end
12
12
 
13
13
  Before do |scenario|
14
- @scenario_is_outline =
15
- (scenario.class == Cucumber::Ast::OutlineTable::ExampleRow)
16
- scenario = scenario.scenario_outline if @scenario_is_outline
14
+ scenario = scenario.scenario_outline if
15
+ scenario.respond_to?(:scenario_outline)
17
16
 
18
- feature_name = scenario.feature.title
19
- if FeatureNameMemory.feature_name != feature_name ||
20
- ENV['RESET_BETWEEN_SCENARIOS'] == '1'
17
+ feature = scenario.feature
18
+ if FeatureMemory.feature != feature || ENV['RESET_BETWEEN_SCENARIOS'] == '1'
21
19
  if ENV['RESET_BETWEEN_SCENARIOS'] == '1'
22
20
  log 'New scenario - reinstalling apps'
23
21
  else
@@ -28,15 +26,11 @@ Before do |scenario|
28
26
  install_app(ENV['TEST_APP_PATH'])
29
27
  install_app(ENV['APP_PATH'])
30
28
 
31
- FeatureNameMemory.feature_name = feature_name
32
- FeatureNameMemory.invocation = 1
29
+ FeatureMemory.feature = feature
30
+ FeatureMemory.invocation = 1
33
31
  else
34
- FeatureNameMemory.invocation += 1
32
+ FeatureMemory.invocation += 1
35
33
  end
36
34
  end
37
35
 
38
- FeatureNameMemory = Class.new
39
- class << FeatureNameMemory
40
- @feature_name = nil
41
- attr_accessor :feature_name, :invocation
42
- end
36
+ FeatureMemory = Struct.new(:feature, :invocation).new
@@ -5,7 +5,7 @@
5
5
  # When running calabash-ios tests at #
6
6
  # www.xamarin.com/test-cloud #
7
7
  # the methods invoked by #
8
- # CalabashLauncher are overriden. #
8
+ # CalabashLauncher are overridden. #
9
9
  # It will automatically ensure #
10
10
  # running on device, installing apps #
11
11
  # etc. #
@@ -14,35 +14,54 @@
14
14
 
15
15
  require 'calabash-cucumber/launcher'
16
16
 
17
+ module Calabash::Launcher
18
+ @@launcher = nil
19
+ def self.launcher
20
+ @@launcher ||= Calabash::Cucumber::Launcher.new
21
+ end
22
+
23
+ def self.launcher=(launcher)
24
+ @@launcher = launcher
25
+ end
26
+ end
27
+
28
+ AfterConfiguration do
29
+ FeatureMemory.feature = nil
30
+ end
31
+
17
32
  Before do |scenario|
18
- @calabash_launcher = Calabash::Cucumber::Launcher.new
33
+ launcher = Calabash::Launcher.launcher
34
+ # Relaunch options
35
+ options = { timeout: 3000 }
19
36
 
20
- @scenario_is_outline =
21
- (scenario.class == Cucumber::Ast::OutlineTable::ExampleRow)
22
- scenario = scenario.scenario_outline if @scenario_is_outline
37
+ scenario = scenario.scenario_outline if
38
+ scenario.respond_to?(:scenario_outline)
39
+ feature = scenario.feature
23
40
 
24
41
  scenario_tags = scenario.source_tag_names
25
- # Resetting the app between scenarios
26
- # ENV['FEATURE_NAME'] is just an aux created to store the feature name
27
- if ENV['FEATURE_NAME'] != scenario.feature.title ||
42
+ if FeatureMemory.feature != feature ||
28
43
  ENV['RESET_BETWEEN_SCENARIOS'] == '1' ||
29
44
  scenario_tags.include?('@reinstall')
45
+ reinstall_app
46
+ # Reset app if it is a new feature
47
+ options[:reset] = true
30
48
 
31
- @calabash_launcher.reset_app_jail
32
- ENV['FEATURE_NAME'] = scenario.feature.title
49
+ FeatureMemory.feature = feature
50
+ FeatureMemory.invocation = 1
51
+ else
52
+ FeatureMemory.invocation += 1
33
53
  end
34
54
 
35
- unless @calabash_launcher.calabash_no_launch?
36
- @calabash_launcher.relaunch
37
- @calabash_launcher.calabash_notify(self)
55
+ FeatureMemory.feature = feature
56
+ FeatureMemory.invocation = 1
57
+ unless launcher.calabash_no_launch?
58
+ launcher.relaunch(options)
59
+ launcher.calabash_notify(self)
38
60
  end
39
61
  end
40
62
 
41
63
  After do
42
- unless @calabash_launcher.calabash_no_stop?
43
- calabash_exit
44
- @calabash_launcher.stop if @calabash_launcher.active?
45
- end
64
+ calabash_exit unless launcher.calabash_no_stop?
46
65
  end
47
66
 
48
67
  at_exit do
@@ -51,3 +70,32 @@ at_exit do
51
70
  launcher.simulator_launcher.stop unless launcher.calabash_no_stop?
52
71
  end
53
72
  end
73
+
74
+ def device?
75
+ # Check if UUID (ENV['DEVICE_TARGET']) is from a device or a simulator
76
+ # Getting all the simulator's UUID
77
+ uuids = `xcrun simctl list`
78
+ return false if uuids.include? ENV['DEVICE_TARGET']
79
+ return true
80
+ end
81
+
82
+ def reinstall_app
83
+ if device?
84
+ system "echo 'Installing the app...'"
85
+ # Trying to reinstall the app
86
+ success = system "ios-deploy -r -b #{ENV['APP_BUNDLE_PATH']} -i #{ENV['DEVICE_TARGET']} -t 5 > /dev/null"
87
+
88
+ # If the app is not installed the above command will throw an error
89
+ # So we just install the app
90
+ unless success
91
+ success = system "ios-deploy -b #{ENV['APP_BUNDLE_PATH']} -i #{ENV['DEVICE_TARGET']} -t 5 > /dev/null"
92
+ fail 'Error. Could not install the app.' unless
93
+ success # If there is any error raises an exception
94
+ end
95
+
96
+ system "echo 'Installed.'"
97
+ sleep(3) # Gives a time to finish the installation of the app in the device
98
+ end
99
+ end
100
+
101
+ FeatureMemory = Struct.new(:feature, :invocation).new
@@ -3,11 +3,11 @@ class <%= config[:name] %>Screen < <%= config[:platform] %>ScreenBase
3
3
  # trait(:trait) { "* <%= (config[:platform] == 'Android') ? 'id' : 'marked' %>:'#{layout_name}'" }
4
4
 
5
5
  # <%= I18n.translate 'comments.elements' %>
6
- # element(:layout_name) { 'insert_layout_identificator' }
7
- # element(:button) { 'insert_button_identificator' }
6
+ # element(:layout_name) { pending 'Insert layout identificator' }
7
+ # element(:button) { pending 'Insert button identificator' }
8
8
 
9
9
  # <%= I18n.translate 'comments.actions' %>
10
- # action(:touch_button) {
10
+ # action(:touch_button) do
11
11
  # touch("* <%= (config[:platform] == 'Android') ? 'id' : 'marked' %>:'#{button}'")
12
- # }
12
+ # end
13
13
  end
metadata CHANGED
@@ -1,83 +1,83 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cs-bdd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Oscar Tanner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-12 00:00:00.000000000 Z
11
+ date: 2016-03-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.7'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.7'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '10.0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: thor
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: 0.19.1
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: 0.19.1
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: i18n
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: 0.6.11
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: 0.6.11
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: gherkin
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - "~>"
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: 2.12.2
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - "~>"
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: 2.12.2
83
83
  description: A simple gem to generate all files needed in a project that will support
@@ -154,7 +154,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
154
154
  version: '0'
155
155
  requirements: []
156
156
  rubyforge_project:
157
- rubygems_version: 2.4.5
157
+ rubygems_version: 2.5.1
158
158
  signing_key:
159
159
  specification_version: 4
160
160
  summary: Generates an android and iOS calabash project.