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.
- checksums.yaml +7 -0
- data/.gitignore +10 -0
- data/.rspec +2 -0
- data/.rubocop.yml +39 -0
- data/.travis.yml +5 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +63 -0
- data/LICENSE.txt +662 -0
- data/README.md +69 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/pretest +5 -0
- data/bin/setup +6 -0
- data/lib/pretest.rb +2 -0
- data/lib/pretest/cli.rb +59 -0
- data/lib/pretest/config/linux.rb +60 -0
- data/lib/pretest/config/mac.rb +74 -0
- data/lib/pretest/config/operational_system.rb +34 -0
- data/lib/pretest/config/unix.rb +21 -0
- data/lib/pretest/config/windows.rb +135 -0
- data/lib/pretest/environment/check.rb +48 -0
- data/lib/pretest/mobile/environment.rb +81 -0
- data/lib/pretest/structure/clone.rb +115 -0
- data/lib/pretest/structure/clone/Gemfile.tt +55 -0
- data/lib/pretest/structure/clone/app_installation_hook.rb.tt +28 -0
- data/lib/pretest/structure/clone/app_life_cycle_hooks.rb.tt +13 -0
- data/lib/pretest/structure/clone/cucumber.yml.tt +1 -0
- data/lib/pretest/structure/clone/dry_run.rb.tt +16 -0
- data/lib/pretest/structure/clone/env.rb.tt +91 -0
- data/lib/pretest/structure/clone/example.feature.tt +35 -0
- data/lib/pretest/structure/clone/example.rb.tt +30 -0
- data/lib/pretest/structure/clone/first_launch.rb.tt +28 -0
- data/lib/pretest/structure/clone/hooks.rb.tt +18 -0
- data/lib/pretest/structure/clone/step_definitions.rb.tt +129 -0
- data/lib/pretest/version.rb +3 -0
- data/pretest.gemspec +30 -0
- metadata +224 -0
@@ -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 @@
|
|
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 -%>
|