cs-bdd 0.1.6 → 0.1.7

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: 77788c60608eb5143e09cdb2e2adc8b4285f5334
4
- data.tar.gz: 13607e4f59453700a6d4f5757a52edeb98fe45ee
3
+ metadata.gz: 4b6b20897fce7c934cbacf55b1b33bc5742ab46e
4
+ data.tar.gz: 4762ff8d2b22f2dd53aaa4751bc544d7485d18bf
5
5
  SHA512:
6
- metadata.gz: c131b1b0fb8f9cb93a838048eef113bf74667222709def1128e074ac592015bbb234d48dca788a9843f0cb363d303c2ed2e61a60bef4f9fbf4fdaa23a929d7b5
7
- data.tar.gz: cd77ac0ddf4d13a3685dcbe6e6745479eeffea5ded9518ef20f89107c2ba634220bbff7342c7ea0f5e19b40615d6a5a0af7fe7e260bc106cb9caca9c0ef42072
6
+ metadata.gz: eee698a839ea1aa8740027d7a00d0314d9f09013c3556609322e5194d3ffaaa8c925bda88f2bdb92aa7a6cda8e035d9f3956f91aade882dc1dcc5ac91cc058f5
7
+ data.tar.gz: 5bd7d5e102efdb0326dc15431b10fa9e852f55620d60f7955f56a2dacd2cd7997f870c036e8fb162446d82e268f98d249c855e7d60d3dc425fb63a9ecff9f144
data/README.md CHANGED
@@ -54,17 +54,17 @@ This command will create a folder named ProjectName in the current directory and
54
54
  cs-bdd new ProjectName --lang=pt
55
55
  ```
56
56
 
57
- > The default language is English ('en'). The elements of Gherkin such as Given, When, Than, And, Scenario will be translated to all Gherkin supported languages, but this gem has a little quantity of translation files (see than in folder: `lib/cs/bdd/locales`).
57
+ > The default language is English ('en'). The elements of Gherkin such as Given, When, Then, And, Scenario will be translated to all Gherkin supported languages, but this gem has just a few translation files (see that in folder: `lib/cs/bdd/locales`).
58
58
 
59
59
  > **CS-BDD doesn't support your mother language?** No problem. Fork it, create your yml translation file, uses the en.yml file as a template. Translate it and make a pull request. There are only 15 lines to be translated, this will take no time.
60
60
 
61
- > **Don't you know how to name your translation yml file?** See the Gherkin supported languages [here](https://github.com/cucumber/gherkin/blob/master/lib/gherkin/i18n.json) for reference.
61
+ > **Want to know how to name your translation yml file?** See the Gherkin supported languages [here](https://github.com/cucumber/gherkin/blob/master/lib/gherkin/i18n.json) for reference.
62
62
 
63
63
  Once the project is created, open its folder (`cd ProjectName`) and run `bundle install`
64
64
 
65
65
  > This project supports both Android and iOS, so if you are on a PC you will not need the gems that are only for Macs, so you can run the command `bundle install --without mac_os`
66
66
 
67
- > Remember to fix a calabash-cucumber version on the Gemfile. When updating the calabash-cucumber gem version you need to update the Calabash framework that was embeded on your iOS code. So I suggest doing the update manually. [In this page](https://github.com/calabash/calabash-ios/wiki/B1-Updating-your-Calabash-iOS-version) you can find more informations on how to update the Calabash framework.
67
+ > Remember to fix the calabash-cucumber version on the Gemfile. When updating the calabash-cucumber gem version you need to update the Calabash framework that was embedded on your iOS code. So, my suggestion is to update it manually. [In this page](https://github.com/calabash/calabash-ios/wiki/B1-Updating-your-Calabash-iOS-version) you can find more information on how to update the Calabash framework.
68
68
 
69
69
 
70
70
  There are nine generators that are responsible to create the templates for Features, Step definitions and Screens.
@@ -19,6 +19,7 @@ en:
19
19
  take_print: "take picture"
20
20
  been_in_page: "I am at (?:page|screen) '(.*?)'"
21
21
  move_to_page: "I went to (?:page|screen) '(.*?)'"
22
+ restart_app: "I restart the app"
22
23
  directions:
23
24
  up: 'up'
24
25
  down: 'down'
@@ -19,6 +19,7 @@ pt:
19
19
  take_print: "faço um print"
20
20
  been_in_page: "que eu (?:estou|estava) na (?:página|tela)(?: de|) '(.*?)'"
21
21
  move_to_page: "eu (?:devo|deveria) estar na (?:página|tela)(?: de|) '(.*?)'"
22
+ restart_app: "(Eu |)reiniciar o aplicativo"
22
23
  directions:
23
24
  up: 'cima'
24
25
  down: 'baixo'
@@ -1,5 +1,5 @@
1
1
  module CS
2
2
  module BDD
3
- VERSION = '0.1.6'
3
+ VERSION = '0.1.7'
4
4
  end
5
5
  end
@@ -3,3 +3,7 @@ reports/*
3
3
  test_servers/*
4
4
  .DS_Store
5
5
  screenshot*.png
6
+ screenshots/android/*
7
+ !screenshots/android/.*
8
+ screenshots/ios/*
9
+ !screenshots/ios/.*
@@ -1,6 +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.2'
5
- gem 'calabash-android', '~> 0.5.15'
6
- gem 'calabash-cucumber', '~> 0.17.1'
4
+ gem 'calabash-common'
5
+ gem 'calabash-android', '~> 0.7.0'
6
+ gem 'calabash-cucumber', '~> 0.19.0'
@@ -1,7 +1,7 @@
1
1
  # config/cucumber.yml
2
2
  ##YAML Template
3
3
  ---
4
- android: PLATFORM=android -r features/support -r features/android -r features/step_definitions --exclude features/ios
4
+ android: PLATFORM=android SCREENSHOT_PATH=screenshots/android/ -r features/support -r features/android -r features/step_definitions --exclude features/ios
5
5
 
6
6
 
7
- ios: PLATFORM=ios -r features/support -r features/ios -r features/step_definitions --exclude features/android
7
+ ios: PLATFORM=ios SCREENSHOT_PATH=screenshots/ios/ -r features/support -r features/ios -r features/step_definitions --exclude features/android
@@ -28,7 +28,7 @@ do
28
28
  mkdir "$reports_path"/"$device"
29
29
 
30
30
  {
31
- ADB_DEVICE_ARG=$device SCREENSHOT_PATH="$reports_path"/"$device"/ calabash-android run $1 -p android -f 'Calabash::Formatters::Html' -o "$reports_path"/"$device"/reports.html -f junit -o "$reports_path"/"$device"
31
+ ADB_DEVICE_ARG=$device calabash-android run $1 -p android SCREENSHOT_PATH="$reports_path"/"$device"/ -f 'Calabash::Formatters::Html' -o "$reports_path"/"$device"/reports.html -f junit -o "$reports_path"/"$device"
32
32
  # Calabash has a problem with images relative path, the command above will replace all the images path on the
33
33
  # html report file to be a relative path
34
34
  sed -i.bak 's|'"$reports_path"/"$device"/'||g' "$reports_path"/"$device"/reports.html
@@ -26,16 +26,16 @@ if ARGV.length != 1
26
26
  exit 1
27
27
  end
28
28
 
29
- puts "Starting at #{Time.now.strftime('%H:%M:%S')}"
30
-
31
29
  if config[ARGV[0]].nil?
32
30
  puts 'Error: Wrong configuration environment!'
33
- puts "Available Environments: #{config.keys}"
31
+ puts "Available Environments: #{config.keys.join(', ')}"
34
32
  exit 1
35
33
  else
36
34
  config = config[ARGV[0]]
37
35
  end
38
36
 
37
+ puts "Starting at #{Time.now.strftime('%H:%M:%S')}"
38
+
39
39
  # Creating a folder name from the destination configuration parameter
40
40
  folder_name = config['destination'].gsub('platform=', '').gsub('name=', '')
41
41
  .tr(' ', '_').tr(',', '_')
@@ -45,7 +45,7 @@ do
45
45
  fi
46
46
 
47
47
  # Executing calabash for the device or simulator
48
- APP_BUNDLE_PATH="$APP_PATH" DEVICE_TARGET="$UUID" DEVICE_ENDPOINT="$IP" SCREENSHOT_PATH="$reports_path"/"$NAME"/ cucumber -p ios -f 'Calabash::Formatters::Html' -o "$reports_path"/"$NAME/reports.html" -f junit -o "$reports_path"/"$NAME"
48
+ APP_BUNDLE_PATH="$APP_PATH" DEVICE_TARGET="$UUID" DEVICE_ENDPOINT="$IP" cucumber -p ios SCREENSHOT_PATH="$reports_path"/"$NAME"/ -f 'Calabash::Formatters::Html' -o "$reports_path"/"$NAME/reports.html" -f junit -o "$reports_path"/"$NAME"
49
49
 
50
50
  # Calabash has a problem with images relative path, the command above will replace all the images path on the
51
51
  # html report file to be a relative path
@@ -54,21 +54,14 @@ Before do |scenario|
54
54
 
55
55
  FeatureMemory.feature = feature
56
56
  FeatureMemory.invocation = 1
57
- unless launcher.calabash_no_launch?
58
- launcher.relaunch(options)
59
- launcher.calabash_notify(self)
60
- end
61
- end
62
57
 
63
- After do
64
- calabash_exit unless launcher.calabash_no_stop?
58
+ launcher.relaunch(options)
59
+ # Avoid resetting when is not necessary
60
+ options[:reset] = false
65
61
  end
66
62
 
67
- at_exit do
68
- launcher = Calabash::Cucumber::Launcher.new
69
- if launcher.simulator_target?
70
- launcher.simulator_launcher.stop unless launcher.calabash_no_stop?
71
- end
63
+ After do
64
+ calabash_exit if launcher.quit_app_after_scenario?
72
65
  end
73
66
 
74
67
  def device?
@@ -0,0 +1,11 @@
1
+ class UnexpectedPageError < StandardError
2
+ end
3
+
4
+ class TouchElementError < StandardError
5
+ end
6
+
7
+ class ElementNotFoundError < StandardError
8
+ end
9
+
10
+ class ElementFoundError < StandardError
11
+ end
File without changes
@@ -11,6 +11,51 @@ class AndroidScreenBase < Calabash::ABase
11
11
  alias_method :trait, :element
12
12
  end
13
13
 
14
+ def restart_app
15
+ shutdown_test_server
16
+ start_test_server_in_background
17
+ end
18
+
19
+ def method_missing(method, *args)
20
+ if method.to_s.start_with?('touch_')
21
+ # If method name starts with touch_, executes the touch
22
+ # screen element method using the element name which is the
23
+ # method name without the first 'touch_' chars
24
+ touch_screen_element public_send(method.to_s.sub('touch_', ''))
25
+ elsif method.to_s.start_with?('enter_')
26
+ # If method starts with enter_, execute the enter method using
27
+ # the field name, which is the method name without the initial
28
+ # 'enter_' chars and appended '_field' chars
29
+ enter args[0], public_send("#{method.to_s.sub('enter_', '')}_field")
30
+ elsif method.to_s.end_with?('_visible?')
31
+ # If method ends with _visible?, executes the visible? method
32
+ # The field name is the method name without de ending
33
+ # '_visible? chars
34
+ visible? public_send(method.to_s.sub('_visible?', ''))
35
+ elsif method.to_s.end_with?('_visible!')
36
+ # Do the same as the method above, but throws an exception
37
+ # if the field is not visible
38
+ field_name = method.to_s.sub('_visible!', '')
39
+ .sub('_field', '')
40
+ .sub('_', ' ')
41
+ .capitalize
42
+ raise ElementNotFoundError, "ID: #{field_name}" unless
43
+ visible? public_send(method.to_s.sub('_visible!', ''))
44
+ else
45
+ super
46
+ end
47
+ end
48
+
49
+ def visible?(id, query = nil)
50
+ query = "* id:'#{id}'" if query.nil?
51
+ begin
52
+ wait_for(timeout: 3) { element_exists query }
53
+ rescue
54
+ return false
55
+ end
56
+ true
57
+ end
58
+
14
59
  element(:loading_screen) { 'insert_loading_view_id' }
15
60
 
16
61
  # The progress bar of the application is a custom view
@@ -21,6 +21,10 @@ end
21
21
  @page.drag_to direction.to_sym
22
22
  end
23
23
 
24
+ <%= I18n.translate( :when ).capitalize %>(/^<%= I18n.translate( "steps.restart_app" ) %>$/) do
25
+ @page.restart_app
26
+ end
27
+
24
28
  ######### <%= I18n.translate( :then ).upcase %> #########
25
29
 
26
30
  <%= I18n.translate( :then ).capitalize %>(/^<%= I18n.translate "steps.wait_progress_bar" %>$/) do
@@ -41,5 +45,4 @@ end
41
45
  <%= I18n.translate( :then ).capitalize %>(/^<%= I18n.translate "steps.take_print" %>$/) do
42
46
  screenshot_embed
43
47
  end
44
-
45
48
  <% end %>
@@ -11,6 +11,55 @@ class IOSScreenBase < Calabash::IBase
11
11
  alias_method :trait, :element
12
12
  end
13
13
 
14
+ def restart_app
15
+ # Relaunch options
16
+ options = { timeout: 3000 }
17
+
18
+ launcher.relaunch(options)
19
+ launcher.calabash_notify(self)
20
+ end
21
+
22
+ def method_missing(method, *args)
23
+ if method.to_s.start_with?('touch_')
24
+ # If method name starts with touch_, executes the touch
25
+ # screen element method using the element name which is the
26
+ # method name without the first 'touch_' chars
27
+ touch_screen_element public_send(method.to_s.sub('touch_', ''))
28
+ elsif method.to_s.start_with?('enter_')
29
+ # If method starts with enter_, execute the enter method using
30
+ # the field name, which is the method name without the initial
31
+ # 'enter_' chars and appended '_field' chars
32
+ enter args[0], public_send("#{method.to_s.sub('enter_', '')}_field")
33
+ elsif method.to_s.end_with?('_visible?')
34
+ # If method ends with _visible?, executes the visible? method
35
+ # The field name is the method name without de ending
36
+ # '_visible? chars
37
+ visible? public_send(method.to_s.sub('_visible?', ''))
38
+ elsif method.to_s.end_with?('_visible!')
39
+ # Do the same as the method above, but throws an exception
40
+ # if the field is not visible
41
+ field_name = method.to_s.sub('_visible!', '')
42
+ .sub('_field', '')
43
+ .sub('_', ' ')
44
+ .capitalize
45
+ raise ElementNotFoundError, "ID: #{field_name}" unless
46
+ visible? public_send(method.to_s.sub('_visible!', ''))
47
+ else
48
+ super
49
+ end
50
+ end
51
+
52
+ def visible?(id, query = nil)
53
+ query = "* id:'#{id}'" if query.nil?
54
+ begin
55
+ wait_for(timeout: 3) { element_exists query }
56
+ rescue
57
+ return false
58
+ end
59
+ true
60
+ end
61
+
62
+
14
63
  element(:loading_screen) { 'LOADING' }
15
64
 
16
65
  # The progress bar of the application is a custom view
@@ -26,6 +75,18 @@ class IOSScreenBase < Calabash::IBase
26
75
 
27
76
  def drag_to(direction, element = nil)
28
77
  element = 'tableView' if element.nil?
78
+
79
+ case(direction)
80
+ when :<%= (I18n.translate "directions.down").to_sym %>
81
+ direction = :down
82
+ when :<%= (I18n.translate "directions.up").to_sym %>
83
+ direction = :up
84
+ when :<%= (I18n.translate "directions.left").to_sym %>
85
+ positions = :left
86
+ when :<%= (I18n.translate "directions.right").to_sym %>
87
+ positions = :right
88
+ end
89
+
29
90
  scroll(element, direction)
30
91
  sleep(1)
31
92
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cs-bdd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Oscar Tanner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-09 00:00:00.000000000 Z
11
+ date: 2016-06-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -128,6 +128,9 @@ files:
128
128
  - lib/skeleton/features/ios/support/01_launch.rb
129
129
  - lib/skeleton/features/ios/support/02_pre_stop_hooks.rb
130
130
  - lib/skeleton/features/support/env.rb
131
+ - lib/skeleton/features/support/exceptions.rb
132
+ - lib/skeleton/screenshots/android/.gitkeep
133
+ - lib/skeleton/screenshots/ios/.gitkeep
131
134
  - lib/templates/android_screen_base.tt
132
135
  - lib/templates/base_steps.tt
133
136
  - lib/templates/feature.tt