pretest 1.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,48 @@
1
+ require 'pretest/config/operational_system'
2
+ require 'thor/group'
3
+ require 'rest-client'
4
+ require 'zip'
5
+ require 'open-uri'
6
+ require 'fileutils'
7
+ require 'pry'
8
+
9
+ module Pretest
10
+ module Environment
11
+ class Check < Thor::Group
12
+ include Config
13
+ include Thor::Actions
14
+
15
+ desc 'Set, check and show environment variables from the actual Operational System'
16
+
17
+ def raise_env
18
+ if linux?
19
+ set_bits
20
+ set_linux_env
21
+ elsif mac?
22
+ set_mac_env
23
+ elsif windows?
24
+ set_bits
25
+ set_windows_env
26
+ end
27
+ end
28
+
29
+ no_commands do
30
+ def mac?
31
+ !(/darwin/ =~ RUBY_PLATFORM).nil?
32
+ end
33
+
34
+ def windows?
35
+ !(/cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM).nil?
36
+ end
37
+
38
+ def unix?
39
+ !windows?
40
+ end
41
+
42
+ def linux?
43
+ unix? && !mac?
44
+ end
45
+ end # no_commands
46
+ end # Class Check/Thor::Group
47
+ end # module Environment
48
+ end # module Pretest
@@ -0,0 +1,81 @@
1
+ require 'thor/group'
2
+ require 'rest-client'
3
+ require 'open-uri'
4
+ require 'fileutils'
5
+
6
+ module Pretest
7
+ module Mobile
8
+ class Environment < Thor::Group
9
+ include Thor::Actions
10
+
11
+ argument :env, type: :string, desc: 'Environment to configure'
12
+
13
+ desc 'Check, configure and install environment with de defined argument'
14
+
15
+ def set_mobile_environment
16
+ if linux? || mac?
17
+ mobile_env
18
+ elsif windows?
19
+ end
20
+ end
21
+
22
+ no_commands do
23
+ def mobile_env
24
+ if env == 'android'
25
+ set_android_env
26
+ elsif env == 'ios'
27
+ # set_ios_env
28
+ elsif (env != 'ios') && (env != 'android')
29
+ puts "You must use one of the following arguments:\n" \
30
+ "android:\t # pretest mobile_environment android\n" \
31
+ "ios:\t\t # pretest mobile_environment ios"
32
+ end
33
+ end
34
+
35
+ def set_environment_values
36
+ @android_studio = "\n\n#Android sdk set path\n" \
37
+ "export ANDROID_HOME='/usr/local/opt/android-sdk'\n" +
38
+ "export PATH='${PATH}:${ANDROID_HOME}/tools'".tr!("'", '"')
39
+ @set_source = "\n[[ -s '$HOME/.pretest' ]] && source '$HOME/.pretest' # Load environment variables defined in pretest".tr!("'", '"')
40
+ end
41
+
42
+ def set_android_env
43
+ set_environment_values
44
+ File.new("#{ENV['HOME']}/.pretest", 'w') unless Dir.entries(ENV['HOME']).include?('.pretest')
45
+ if File.read("#{ENV['HOME']}/.pretest").include?('ANDROID_HOME')
46
+ puts 'ANDROID_HOME is already defined'
47
+ else
48
+ File.open("#{ENV['HOME']}/.pretest", 'a') { |file| file << @android_studio }
49
+ File.open("#{ENV['HOME']}/.bashrc", 'a') { |file| file << @set_source }
50
+ system 'source ~/.bashrc'
51
+ puts 'ANDROID_HOME defined with success'
52
+ end
53
+ end
54
+
55
+ def set_bits
56
+ if RUBY_PLATFORM.include?('32')
57
+ (@bits = '32') && (@phantomjs_bits = 'linux-i686')
58
+ else
59
+ (@bits = '64') && (@phantomjs_bits = 'linux-x86_64')
60
+ end
61
+ end
62
+
63
+ def mac?
64
+ (/darwin/ =~ RUBY_PLATFORM) != nil
65
+ end
66
+
67
+ def windows?
68
+ (/cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM) != nil
69
+ end
70
+
71
+ def unix?
72
+ !windows?
73
+ end
74
+
75
+ def linux?
76
+ unix? && !mac?
77
+ end
78
+ end # no_commands
79
+ end # class Environment/Thor::Group
80
+ end # module Mobile
81
+ end # module Pretest
@@ -0,0 +1,115 @@
1
+ require 'thor/group'
2
+
3
+ module Pretest
4
+ module Structure
5
+ class Clone < Thor::Group
6
+ include Thor::Actions
7
+
8
+ argument :name, type: :string, desc:
9
+ 'Project Name'
10
+ argument :web, type: :string, desc:
11
+ 'Set Project Structure to Web Automation'
12
+ argument :web_scaffold, type: :string, desc:
13
+ 'Set Project Structure to Web Automation and Creates some examples'
14
+ argument :api, type: :string, desc:
15
+ 'Set Project Structure to API Automation'
16
+ argument :api_scaffold, type: :string, desc:
17
+ 'Set Project Structure to API Automation and Creates some examples'
18
+ argument :clean_install, type: :string, desc:
19
+ 'Set a Clean Project Structure to Web Automation'
20
+ argument :ios, type: :string, desc:
21
+ 'Set Project Structure to iOS Mobile Automation'
22
+ argument :android, type: :string, desc:
23
+ 'Set Project Structure to Android Mobile Automation'
24
+
25
+ desc 'Creates a new project for tests with Cucumber'
26
+
27
+ def self.source_root
28
+ File.dirname(__FILE__) + '/clone'
29
+ end
30
+
31
+ def structure_init
32
+ Dir.mkdir(name) unless File.exist?(name)
33
+ Dir.chdir(name)
34
+ dir_list
35
+ end
36
+
37
+ def cucumber_yml_clone
38
+ template 'cucumber.yml.tt',
39
+ "#{name}/cucumber.yml"
40
+ end
41
+
42
+ def gemfile_clone
43
+ template 'Gemfile.tt',
44
+ "#{name}/Gemfile"
45
+ end
46
+
47
+ def hooks_clone
48
+ template 'hooks.rb.tt',
49
+ "#{name}/features/support/hooks.rb"
50
+ end
51
+
52
+ def env_clone
53
+ template 'env.rb.tt',
54
+ "#{name}/features/support/env.rb"
55
+ end
56
+
57
+ def step_definitions_clone
58
+ template 'step_definitions.rb.tt',
59
+ "#{name}/features/step_definitions/step_definitions.rb"
60
+ end
61
+
62
+ def feature_clone
63
+ template 'example.feature.tt',
64
+ "#{name}/features/example.feature"
65
+ end
66
+
67
+ def app_life_cycle_hooks_clone
68
+ if android == 'true'
69
+ template 'app_life_cycle_hooks.rb.tt',
70
+ "#{name}/features/support/app_life_cycle_hooks.rb"
71
+ end
72
+ end
73
+
74
+ def app_installation_hook_clone
75
+ if android == 'true'
76
+ template 'app_installation_hook.rb.tt',
77
+ "#{name}/features/support/app_installation_hook.rb"
78
+ end
79
+ end
80
+
81
+ def dry_run_clone
82
+ if ios == 'true'
83
+ template 'dry_run.rb.tt',
84
+ "#{name}/features/support/dry_run.rb"
85
+ end
86
+ end
87
+
88
+ def first_launch_clone
89
+ if ios == 'true'
90
+ template 'first_launch.rb.tt',
91
+ "#{name}/features/support/first_launch.rb"
92
+ end
93
+ end
94
+
95
+ def page_clone
96
+ template 'example.rb.tt',
97
+ "#{name}/features/support/pages/example.rb"
98
+ end
99
+
100
+ no_commands do
101
+ def create_dir(dir)
102
+ Dir.mkdir(dir) unless File.exist?(dir)
103
+ end
104
+
105
+ def dir_list
106
+ create_dir('data')
107
+ create_dir('features')
108
+ create_dir('features/support')
109
+ create_dir('features/step_definitions')
110
+ create_dir('features/support/pages')
111
+ end
112
+ end
113
+ end
114
+ end
115
+ end
@@ -0,0 +1,55 @@
1
+ <% if web == 'false' &&
2
+ ( web_scaffold == 'false' &&
3
+ ( api == 'false' &&
4
+ ( api_scaffold == 'false' &&
5
+ ( clean_install == 'false' &&
6
+ ( ios == 'false' &&
7
+ ( android == 'false')))))) -%>
8
+ source 'http://rubygems.org'
9
+
10
+ gem 'selenium-webdriver'
11
+ gem 'cucumber'
12
+ gem 'rspec'
13
+ gem 'capybara'
14
+ gem 'pry'
15
+ gem 'poltergeist'
16
+ <% end -%>
17
+ <% if web == 'true' || web_scaffold == 'true' -%>
18
+ source 'http://rubygems.org'
19
+
20
+ gem 'selenium-webdriver'
21
+ gem 'cucumber'
22
+ gem 'rspec'
23
+ gem 'capybara'
24
+ gem 'pry'
25
+ gem 'poltergeist'
26
+ <% end -%>
27
+ <% if clean_install == 'true' -%>
28
+ source 'http://rubygems.org'
29
+
30
+ gem 'selenium-webdriver'
31
+ gem 'cucumber'
32
+ gem 'rspec'
33
+ gem 'capybara'
34
+ <% end -%>
35
+ <% if ios == 'true' -%>
36
+ source 'http://rubygems.org'
37
+
38
+ gem 'calabash-cucumber'
39
+ gem 'pry'
40
+ <% end -%>
41
+ <% if android == 'true' -%>
42
+ source 'http://rubygems.org'
43
+
44
+ gem 'calabash-cucumber'
45
+ gem 'calabash-android'
46
+ gem 'pry'
47
+ <% end -%>
48
+ <% if api == 'true' || api_scaffold == 'true' -%>
49
+ source 'http://rubygems.org'
50
+
51
+ gem 'cucumber'
52
+ gem 'rspec'
53
+ gem 'pry'
54
+ gem 'rest-client'
55
+ <% end -%>
@@ -0,0 +1,28 @@
1
+ require 'calabash-android/management/app_installation'
2
+
3
+ AfterConfiguration do |config|
4
+ FeatureMemory.feature = nil
5
+ end
6
+
7
+ Before do |scenario|
8
+ scenario = scenario.scenario_outline if scenario.respond_to?(:scenario_outline)
9
+
10
+ feature = scenario.feature
11
+ if FeatureMemory.feature != feature || ENV['RESET_BETWEEN_SCENARIOS'] == '1'
12
+ if ENV['RESET_BETWEEN_SCENARIOS'] == '1'
13
+ log 'New scenario - reinstalling apps'
14
+ else
15
+ log 'First scenario in feature - reinstalling apps'
16
+ end
17
+
18
+ uninstall_apps
19
+ install_app(ENV['TEST_APP_PATH'])
20
+ install_app(ENV['APP_PATH'])
21
+ FeatureMemory.feature = feature
22
+ FeatureMemory.invocation = 1
23
+ else
24
+ FeatureMemory.invocation += 1
25
+ end
26
+ end
27
+
28
+ FeatureMemory = Struct.new(:feature, :invocation).new
@@ -0,0 +1,13 @@
1
+ require 'calabash-android/management/adb'
2
+ require 'calabash-android/operations'
3
+
4
+ Before do |scenario|
5
+ start_test_server_in_background
6
+ end
7
+
8
+ After do |scenario|
9
+ if scenario.failed?
10
+ screenshot_embed
11
+ end
12
+ shutdown_test_server
13
+ end
@@ -0,0 +1 @@
1
+ default: --no-source --color --format pretty
@@ -0,0 +1,16 @@
1
+ require "calabash-cucumber"
2
+
3
+ dir = File.expand_path(File.dirname(__FILE__))
4
+ env = File.join(dir, "env.rb")
5
+
6
+ contents = File.read(env).force_encoding("UTF-8")
7
+
8
+ contents.split($-0).each do |line|
9
+
10
+ next if line.chars[0] == "#"
11
+
12
+ if line[/calabash-cucumber\/cucumber/, 0]
13
+ require "calabash-cucumber/calabash_steps"
14
+ break
15
+ end
16
+ end
@@ -0,0 +1,91 @@
1
+ require 'rspec'
2
+ require 'yaml'
3
+ require 'pry'
4
+ <% if clean_install == 'true' -%>
5
+ require 'capybara/cucumber'
6
+
7
+ Capybara.default_driver = :selenium
8
+ <% end -%>
9
+ <% if ios == 'true' -%>
10
+ require "calabash-cucumber/cucumber"
11
+
12
+ World(Calabash::Cucumber::Operations)
13
+ <% end -%>
14
+ <% if android == 'true' -%>
15
+ require 'calabash-android/cucumber'
16
+
17
+ World(Calabash::Android::Operations)
18
+ <% end -%>
19
+ <% if api == 'true' or api_scaffold == 'true' -%>
20
+ require 'rest-client'
21
+ <% end -%>
22
+ <% if web == 'true' || web_scaffold == 'true' -%>
23
+ require 'capybara/cucumber'
24
+ require 'capybara/poltergeist'
25
+
26
+ if ENV['chrome']
27
+ Capybara.default_driver = :chrome
28
+ Capybara.register_driver :chrome do |app|
29
+ Capybara::Selenium::Driver.new(app, browser: :chrome)
30
+ end
31
+ elsif ENV['firefox']
32
+ Capybara.default_driver = :firefox
33
+ Capybara.register_driver :firefox do |app|
34
+ Capybara::Selenium::Driver.new(app, browser: :firefox)
35
+ end
36
+ elsif ENV['ie']
37
+ Capybara.default_driver = :ie
38
+ Capybara.register_driver :ie do |app|
39
+ Capybara::Selenium::Driver.new(app, browser: :internet_explorer)
40
+ end
41
+ elsif ENV['headless_debug']
42
+ Capybara.default_driver = :poltergeist_debug
43
+ Capybara.register_driver :poltergeist_debug do |app|
44
+ Capybara::Poltergeist::Driver.new(app, inspector: true)
45
+ end
46
+ Capybara.javascript_driver = :poltergeist_debug
47
+ elsif ENV['headless']
48
+ Capybara.javascript_driver = :poltergeist
49
+ Capybara.default_driver = :poltergeist
50
+ else
51
+ Capybara.default_driver = :selenium
52
+ end
53
+ <% end -%>
54
+ <% if web == 'false' &&
55
+ ( web_scaffold == 'false' &&
56
+ ( api == 'false' &&
57
+ ( api_scaffold == 'false' &&
58
+ ( clean_install == 'false' &&
59
+ ( ios == 'false' &&
60
+ ( android == 'false')))))) -%>
61
+ require 'capybara/cucumber'
62
+ require 'capybara/poltergeist'
63
+
64
+ if ENV['chrome']
65
+ Capybara.default_driver = :chrome
66
+ Capybara.register_driver :chrome do |app|
67
+ Capybara::Selenium::Driver.new(app, browser: :chrome)
68
+ end
69
+ elsif ENV['firefox']
70
+ Capybara.default_driver = :firefox
71
+ Capybara.register_driver :firefox do |app|
72
+ Capybara::Selenium::Driver.new(app, browser: :firefox)
73
+ end
74
+ elsif ENV['ie']
75
+ Capybara.default_driver = :ie
76
+ Capybara.register_driver :ie do |app|
77
+ Capybara::Selenium::Driver.new(app, browser: :internet_explorer)
78
+ end
79
+ elsif ENV['headless_debug']
80
+ Capybara.default_driver = :poltergeist_debug
81
+ Capybara.register_driver :poltergeist_debug do |app|
82
+ Capybara::Poltergeist::Driver.new(app, inspector: true)
83
+ end
84
+ Capybara.javascript_driver = :poltergeist_debug
85
+ elsif ENV['headless']
86
+ Capybara.javascript_driver = :poltergeist
87
+ Capybara.default_driver = :poltergeist
88
+ else
89
+ Capybara.default_driver = :selenium
90
+ end
91
+ <% end -%>