SurfCustomCalabash 0.1.6 → 1.1.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 +5 -5
- data/CHANGELOG.md +18 -0
- data/Gemfile +2 -1
- data/README.md +73 -4
- data/SurfCustomCalabash.gemspec +4 -4
- data/bin/SurfCustomCalabash +63 -0
- data/bin/files_for_update +7 -0
- data/bin/surf-calabash-console.rb +62 -0
- data/bin/surf-calabash-gen.rb +19 -0
- data/bin/surf-calabash-helpers.rb +36 -0
- data/bin/update_files.rb +202 -0
- data/lib/SurfCustomCalabash/CommonMethods.rb +316 -231
- data/lib/SurfCustomCalabash/DroidMethods.rb +104 -74
- data/lib/SurfCustomCalabash/IosMethods.rb +109 -73
- data/lib/SurfCustomCalabash/version.rb +1 -1
- data/sources/Backdoors list b/data/sources/Backdoors → list +0 -0
- data/sources/Gemfile +27 -0
- data/sources/Scripts/and.sh +5 -0
- data/sources/Scripts/ca.sh +5 -0
- data/sources/Scripts/ci.sh +5 -0
- data/sources/Scripts/data +7 -0
- data/sources/Scripts/fa.sh +6 -0
- data/sources/Scripts/fi.sh +5 -0
- data/sources/Scripts/get_apk.rb +68 -0
- data/sources/Scripts/get_scenarios.rb +193 -0
- data/sources/Scripts/import_scenarios.rb +172 -0
- data/sources/Scripts/ios.sh +5 -0
- data/sources/Scripts/parallel_android_smoke.sh +4 -0
- data/sources/Scripts/parallel_android_test.sh +4 -0
- data/sources/Scripts/ra.sh +12 -0
- data/sources/Scripts/ri.sh +9 -0
- data/sources/Scripts/smoke_and.sh +5 -0
- data/sources/Scripts/smoke_ios.sh +5 -0
- data/sources/Scripts/ta.sh +5 -0
- data/sources/Scripts/ti.sh +5 -0
- data/sources/Scripts/to_exec.sh +19 -0
- data/sources/Scripts/update.sh +24 -0
- data/sources/Scripts/update_exec.rb +96 -0
- data/sources/TestFolder/small.gif +0 -0
- data/sources/ci/JenkinsfileUiTestAndroid.groovy +22 -0
- data/sources/ci/JenkinsfileUiTestIos.groovy +23 -0
- data/sources/config/cucumber.yml +24 -0
- data/sources/features/android/pages/standard/DroidCommon.rb +33 -0
- data/sources/features/android/pages/standard/Init_android.rb +8 -0
- data/sources/features/android/pages/test.rb +43 -0
- data/sources/features/android/support/app_life_cycle_hooks.rb +147 -0
- data/sources/features/android/support/log_hooks_and.rb +40 -0
- data/sources/features/android/support/video_hooks_and.rb +110 -0
- data/sources/features/ios/pages/standard/Init_ios.rb +5 -0
- data/sources/features/ios/pages/standard/IosCommon.rb +30 -0
- data/sources/features/ios/pages/test.rb +37 -0
- data/sources/features/ios/support/01_launch.rb +194 -0
- data/sources/features/ios/support/log_hooks_ios.rb +40 -0
- data/sources/features/ios/support/video_hooks_ios.rb +58 -0
- data/sources/features/net/net.rb +28 -0
- data/sources/features/net/screentest_api.rb +186 -0
- data/sources/features/scenarios/eng.feature +8 -0
- data/sources/features/scenarios/rus.feature +8 -0
- data/sources/features/step_definitions/test.rb +43 -0
- data/sources/features/support/credentials.rb +11 -0
- data/sources/features/support/env.rb +8 -0
- data/sources/features/support/hooks.rb +21 -0
- data/sources/features/support/localization.rb +8 -0
- data/sources/find_id.rb +95 -0
- data/sources/group_steps.rb +39 -0
- data/sources/irbrcs/android/irbrc +105 -0
- data/sources/irbrcs/ios/irbrc +132 -0
- data/sources/start.sh +134 -0
- metadata +71 -11
- data/bin/console +0 -14
- data/bin/setup +0 -8
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 642a2175dd5be63af09865c3e401256600b92e24e9d81b7acebb6a3431356c5f
|
|
4
|
+
data.tar.gz: cb0842d72f0a04b435f422b928869cbaa84aca0a14db4ea028e4c07d88b9bfb2
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: adfc4a77d09b27c5b2abd6094a49981763d9cd4dae2c033fd6602936d9ba3953e260424665511ed61b1b4dd152674c898ebea1bfb262ee45583797c39bfab31c
|
|
7
|
+
data.tar.gz: 35c47618c702ccc856c0bc5dcfe8e5a8ffaaf259609dd6e8ff758dde008f33a116814c91bab2ea2e6db8dc6fdd0bcf8018d0f5d34d111844f810e557e8e257d6
|
data/CHANGELOG.md
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Change Log
|
|
2
|
+
All notable changes to this project will be documented in this file.
|
|
3
|
+
|
|
4
|
+
## v1.1.0 - 08.10.2020
|
|
5
|
+
### Added
|
|
6
|
+
- File **files_for_update** with a list of files required for updating in your project with autotests. For update your project use **SurfCustomCalabash update**
|
|
7
|
+
|
|
8
|
+
### Changed
|
|
9
|
+
- In command **SurfCustomCalabash gen** you can immediately enter the name of the folder with your tests
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
## v1.0.0 - 28.08.2020
|
|
13
|
+
### Added
|
|
14
|
+
- Changelog.md
|
|
15
|
+
- Added template file for initializing a new autotest project (use **SurfCustomCalabash gen**)
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
- method close_keybord can now be called with optional parameters **x_start** and **y_start** (by default **x_start:** 100, **y_start:** 150)
|
data/Gemfile
CHANGED
data/README.md
CHANGED
|
@@ -21,11 +21,80 @@ Or install it yourself as:
|
|
|
21
21
|
|
|
22
22
|
This gem provides methods for easier use Calabash.
|
|
23
23
|
|
|
24
|
-
Install gem in your project, add
|
|
24
|
+
Install gem in your exist project, add in your ios or android ruby files.
|
|
25
25
|
|
|
26
|
-
IosCommon
|
|
26
|
+
$require 'SurfCustomCalabash/IosCommon'
|
|
27
|
+
|
|
28
|
+
$require 'SurfCustomCalabash/DroidCommon'
|
|
29
|
+
|
|
30
|
+
**IosCommon** contains custom swipe methods for ios.
|
|
31
|
+
|
|
32
|
+
**DroidCommon** contains custom swipe methods for android.
|
|
33
|
+
|
|
34
|
+
**CommonMethods** contains different methods (taps, swipes, waits and other) for both platforms.
|
|
35
|
+
|
|
36
|
+
### Create new project
|
|
37
|
+
You should move to the directory which would contains folder with your tests and execute command and then enter folder name
|
|
38
|
+
|
|
39
|
+
$ SurfCustomCalabash gen
|
|
40
|
+
|
|
41
|
+
After that you'll see many folders inside them. Each of them will be describe below.
|
|
42
|
+
|
|
43
|
+
#### ci
|
|
44
|
+
|
|
45
|
+
It is used for all scripts for continuous integration. In Surfstudio we have .groovy files for them.
|
|
27
46
|
|
|
28
|
-
|
|
47
|
+
|
|
48
|
+
#### config
|
|
49
|
+
|
|
50
|
+
Contains only cucumber.yml file. It named arguments are called profiles - e.g. iOS or Android for run.
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
#### features
|
|
54
|
+
|
|
55
|
+
Main folder of all project. Every feature, step definition, support files and page objects are here. You can read about it more in each file of this folder.
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
#### irbrcs
|
|
59
|
+
|
|
60
|
+
Our own shtick. We change calabash-android console and calabash-ios console a little, so you can write your own complex functions, which you'll implement in the step_definitions or in page objects. So for the correct work we had to change irbrc-files of gems too.
|
|
61
|
+
|
|
62
|
+
#### reports
|
|
63
|
+
|
|
64
|
+
Folder with screenshots of errors.
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
#### test_servers
|
|
68
|
+
|
|
69
|
+
Standard calabash-android folder with signed apk-files.
|
|
70
|
+
|
|
71
|
+
#### TestFolder
|
|
72
|
+
|
|
73
|
+
Contains some additional files, e.g. jpg-pictures or other data which can be used in tests.
|
|
74
|
+
|
|
75
|
+
#### Backdoors list
|
|
76
|
+
|
|
77
|
+
We use backdoors for our applications for get around the limit of nativity of calabash.
|
|
78
|
+
|
|
79
|
+
#### Gemfile
|
|
80
|
+
|
|
81
|
+
All required gems for surf-calabash. You should run installing all gems by bundle after initializing project when you rename **Change_it_to_your_own_project_name** to your own name.
|
|
82
|
+
|
|
83
|
+
$bundle install
|
|
84
|
+
|
|
85
|
+
#### Scripts
|
|
86
|
+
|
|
87
|
+
Some shell scripts which can help to start tests faster because of typing smaller count of symbols. :)
|
|
88
|
+
Also it shows some integration with Xray Jira plugin.
|
|
89
|
+
|
|
90
|
+
#### start.sh
|
|
91
|
+
|
|
92
|
+
Shell script for useful launch all helpful scripts of folder above.
|
|
93
|
+
|
|
94
|
+
### Update infrastructure files
|
|
95
|
+
|
|
96
|
+
To check the relevance of the infrastructure files of your project with autotests, execute command:
|
|
29
97
|
|
|
30
|
-
|
|
98
|
+
$ SurfCustomCalabash update
|
|
31
99
|
|
|
100
|
+
If your project has files that are not up-to-date, you will be prompted to update them all or only those you need.
|
data/SurfCustomCalabash.gemspec
CHANGED
|
@@ -6,7 +6,7 @@ require "SurfCustomCalabash/version"
|
|
|
6
6
|
Gem::Specification.new do |spec|
|
|
7
7
|
spec.name = "SurfCustomCalabash"
|
|
8
8
|
spec.version = SurfCustomCalabash::VERSION
|
|
9
|
-
spec.authors = ["Alexey Hripunov"]
|
|
9
|
+
spec.authors = ["Alexey Hripunov", "Igor Tolubaev"]
|
|
10
10
|
spec.email = ["hripunov@surfstudio.ru"]
|
|
11
11
|
|
|
12
12
|
spec.summary = "Custom methods for calabash ios and android"
|
|
@@ -32,9 +32,9 @@ Gem::Specification.new do |spec|
|
|
|
32
32
|
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
|
33
33
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
|
34
34
|
end
|
|
35
|
-
spec.bindir = "exe"
|
|
36
|
-
spec.executables =
|
|
37
|
-
spec.require_paths = ["lib"]
|
|
35
|
+
# spec.bindir = "exe"
|
|
36
|
+
spec.executables = ["SurfCustomCalabash"]
|
|
37
|
+
# spec.require_paths = ["lib"]
|
|
38
38
|
|
|
39
39
|
spec.add_development_dependency "bundler", "~> 1.17"
|
|
40
40
|
spec.add_development_dependency "rake", "~> 10.0"
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require 'fileutils'
|
|
4
|
+
require 'rbconfig'
|
|
5
|
+
|
|
6
|
+
# for ruby 1.9.1 and earlier
|
|
7
|
+
unless defined? RbConfig.ruby
|
|
8
|
+
def RbConfig.ruby
|
|
9
|
+
File.join(RbConfig::CONFIG["bindir"], RbConfig::CONFIG["ruby_install_name"] + RbConfig::CONFIG["EXEEXT"])
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
require File.join(File.dirname(__FILE__), "surf-calabash-helpers")
|
|
14
|
+
|
|
15
|
+
@hierarchy = File.join(FileUtils.pwd, "features")
|
|
16
|
+
@source_dir = File.join(File.dirname(__FILE__), '..', 'sources')
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
if ARGV.length == 0
|
|
20
|
+
print_usage
|
|
21
|
+
else
|
|
22
|
+
cmd = ARGV.shift
|
|
23
|
+
|
|
24
|
+
case cmd
|
|
25
|
+
when 'help'
|
|
26
|
+
print_help
|
|
27
|
+
when 'gen'
|
|
28
|
+
gen = File.join(File.dirname(__FILE__), "surf-calabash-gen")
|
|
29
|
+
require gen
|
|
30
|
+
surf_gen
|
|
31
|
+
when 'android_console'
|
|
32
|
+
require 'calabash-android/helpers'
|
|
33
|
+
require 'calabash-android/utils'
|
|
34
|
+
require 'calabash-android/java_keystore'
|
|
35
|
+
require 'calabash-android/env'
|
|
36
|
+
require File.join(File.dirname(__FILE__), "surf-calabash-console")
|
|
37
|
+
|
|
38
|
+
if ARGV.empty? or not is_apk_file?(ARGV.first)
|
|
39
|
+
Kernel.puts "The first parameter must be the path to the apk file."
|
|
40
|
+
exit 1
|
|
41
|
+
else
|
|
42
|
+
android_console(relative_to_full_path(ARGV.shift))
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
when 'ios_console'
|
|
46
|
+
require File.join(File.dirname(__FILE__), "surf-calabash-console")
|
|
47
|
+
ios_console
|
|
48
|
+
when 'version'
|
|
49
|
+
require_relative '../lib/SurfCustomCalabash/version'
|
|
50
|
+
Kernel.puts SurfCustomCalabash::VERSION
|
|
51
|
+
when 'update'
|
|
52
|
+
require File.join(File.dirname(__FILE__), "update_files")
|
|
53
|
+
if File.exists?(@hierarchy)
|
|
54
|
+
show_files_for_update
|
|
55
|
+
else
|
|
56
|
+
Kernel.puts("В текущей папке нет файлов автотестов, перейдите в нужную папку или создайте новый проект используя команду:")
|
|
57
|
+
Kernel.puts("SurfCustomCalabash gen")
|
|
58
|
+
end
|
|
59
|
+
else
|
|
60
|
+
Kernel.puts "Invalid command '#{cmd}'"
|
|
61
|
+
print_usage
|
|
62
|
+
end
|
|
63
|
+
end
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require 'fileutils'
|
|
4
|
+
require 'rbconfig'
|
|
5
|
+
|
|
6
|
+
def android_console(app_path = nil)
|
|
7
|
+
test_server_path = test_server_path(app_path)
|
|
8
|
+
|
|
9
|
+
path = ENV['CALABASH_IRBRC']
|
|
10
|
+
Kernel.puts(path)
|
|
11
|
+
|
|
12
|
+
unless path
|
|
13
|
+
if File.exist?('irbrc')
|
|
14
|
+
path = File.expand_path('irbrc')
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
unless path
|
|
19
|
+
path = File.expand_path(File.join(File.dirname(__FILE__), '../sources/irbrcs/android', 'irbrc'))
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
ENV['IRBRC'] = path
|
|
23
|
+
Kernel.puts(path)
|
|
24
|
+
|
|
25
|
+
unless ENV['APP_PATH']
|
|
26
|
+
ENV['APP_PATH'] = app_path
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
unless ENV['TEST_APP_PATH']
|
|
30
|
+
ENV['TEST_APP_PATH'] = test_server_path
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
build_test_server_if_needed(app_path)
|
|
34
|
+
|
|
35
|
+
Kernel.puts 'Starting calabash-android console...'
|
|
36
|
+
Kernel.puts "Loading #{ENV['IRBRC']}"
|
|
37
|
+
Kernel.puts 'Running irb...'
|
|
38
|
+
exec('irb')
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def is_apk_file?(file_path)
|
|
42
|
+
file_path.end_with? ".apk" and File.exist? file_path
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def relative_to_full_path(file_path)
|
|
46
|
+
File.expand_path(file_path)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def ios_console
|
|
50
|
+
path = ENV['CALABASH_IRBRC']
|
|
51
|
+
unless path
|
|
52
|
+
if File.exist?('.irbrc')
|
|
53
|
+
path = File.expand_path('.irbrc')
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
unless path
|
|
57
|
+
path = File.expand_path(File.join(File.dirname(__FILE__), '../sources/irbrcs/ios', 'irbrc'))
|
|
58
|
+
end
|
|
59
|
+
ENV['IRBRC'] = path
|
|
60
|
+
puts "Running irb..."
|
|
61
|
+
exec("irb")
|
|
62
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
def surf_gen
|
|
2
|
+
if File.exists?(@hierarchy)
|
|
3
|
+
Kernel.puts "hierarchy is already created. Stopping..."
|
|
4
|
+
exit 1
|
|
5
|
+
end
|
|
6
|
+
msg("Question") do
|
|
7
|
+
Kernel.puts "I'm about to create a subdirectory called sources."
|
|
8
|
+
Kernel.puts "Please hit return to confirm that's what you want."
|
|
9
|
+
end
|
|
10
|
+
exit 2 unless STDIN.gets.chomp == ''
|
|
11
|
+
|
|
12
|
+
Kernel.puts("Please enter name autotest project:")
|
|
13
|
+
file_name = gets.chomp
|
|
14
|
+
file_name = "Change_it_to_your_own_project_name" if file_name == ""
|
|
15
|
+
FileUtils.cp_r(@source_dir, File.join(FileUtils.pwd, file_name))
|
|
16
|
+
msg("Info") do
|
|
17
|
+
Kernel.puts "hierarchy was created. \n"
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require 'tempfile'
|
|
2
|
+
require 'json'
|
|
3
|
+
require "rubygems"
|
|
4
|
+
|
|
5
|
+
def msg(title, &block)
|
|
6
|
+
Kernel.puts "\n" + "-"*10 + title + "-"*10
|
|
7
|
+
block.call
|
|
8
|
+
Kernel.puts "-"*10 + "-------" + "-"*10 + "\n"
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def print_usage
|
|
12
|
+
Kernel.puts <<EOF
|
|
13
|
+
Usage: SurfCustomCalabash <command-name> [parameters] [options]
|
|
14
|
+
<command-name> can be one of
|
|
15
|
+
help
|
|
16
|
+
prints more detailed help information.
|
|
17
|
+
gen
|
|
18
|
+
generate a features folder structure.
|
|
19
|
+
update
|
|
20
|
+
update infrastructure files in your project
|
|
21
|
+
version
|
|
22
|
+
prints the gem version
|
|
23
|
+
|
|
24
|
+
<options> can be
|
|
25
|
+
-v, --verbose
|
|
26
|
+
Turns on verbose logging
|
|
27
|
+
EOF
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def print_help
|
|
31
|
+
print_usage
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def is_json?(str)
|
|
35
|
+
str[0..0] == '{'
|
|
36
|
+
end
|
data/bin/update_files.rb
ADDED
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
require 'fileutils'
|
|
2
|
+
require 'diffy'
|
|
3
|
+
|
|
4
|
+
# for compare files use gem diffy https://github.com/samg/diffy
|
|
5
|
+
|
|
6
|
+
CUR_FOLDER = FileUtils.pwd
|
|
7
|
+
|
|
8
|
+
GEM_FOLDER = File.dirname(__FILE__)
|
|
9
|
+
|
|
10
|
+
# list files for update
|
|
11
|
+
FILES_FOR_UPDATE = File.join(GEM_FOLDER, 'files_for_update')
|
|
12
|
+
|
|
13
|
+
# path to data file
|
|
14
|
+
DATA_FILE = "/Scripts/data"
|
|
15
|
+
|
|
16
|
+
# read from file, files that need update
|
|
17
|
+
def read_file_to_arr(path_to_file)
|
|
18
|
+
arr_lines = Array.new
|
|
19
|
+
text = File.open(path_to_file).read
|
|
20
|
+
text.each_line do |line|
|
|
21
|
+
line.gsub!(/\n/, "")
|
|
22
|
+
arr_lines.push(line)
|
|
23
|
+
end
|
|
24
|
+
return arr_lines
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# get list files from sourcec folder in gem
|
|
28
|
+
def get_list_files_for_update
|
|
29
|
+
list_files = read_file_to_arr(FILES_FOR_UPDATE)
|
|
30
|
+
all_files = Array.new
|
|
31
|
+
|
|
32
|
+
list_files.each do |name|
|
|
33
|
+
path = File.join(GEM_FOLDER, '..', name)
|
|
34
|
+
if File.file?(path)
|
|
35
|
+
all_files.push(path)
|
|
36
|
+
elsif File.directory?(path)
|
|
37
|
+
Dir["#{path}/*"].each {|pth| all_files.push(pth)}
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
return all_files
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# trim folder sources from path
|
|
45
|
+
def get_list_for_search
|
|
46
|
+
all_files = get_list_files_for_update
|
|
47
|
+
|
|
48
|
+
all_files.each do |name|
|
|
49
|
+
name.sub! /.*sources/, ''
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
return all_files
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# search files, then not exist in autotest folder
|
|
56
|
+
def search_not_exists_files
|
|
57
|
+
not_exists_files = Array.new
|
|
58
|
+
get_list_for_search.each do |name|
|
|
59
|
+
not_exists_files.push(name) unless File.file?(CUR_FOLDER + name)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
return not_exists_files
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# search files, then exist in autotest folder
|
|
66
|
+
def search_exists_files
|
|
67
|
+
exists_files = Array.new
|
|
68
|
+
get_list_for_search.each do |name|
|
|
69
|
+
exists_files.push(name) if File.file?(CUR_FOLDER + name)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# exclude file data from list, then to don't erase user data
|
|
73
|
+
exclude_str_from_arr(exists_files, DATA_FILE)
|
|
74
|
+
return exists_files
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
# copy files from gem to autotest folder
|
|
78
|
+
def copy_files(list_for_copy)
|
|
79
|
+
list_for_copy.each do |name|
|
|
80
|
+
FileUtils.mkdir_p File.dirname(CUR_FOLDER + name)
|
|
81
|
+
FileUtils.cp(File.join(GEM_FOLDER, '../sources', name), File.dirname(CUR_FOLDER + name))
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# add ccs style in html-report for readability
|
|
86
|
+
def add_css_style(file)
|
|
87
|
+
file.puts("<style>")
|
|
88
|
+
file.puts(Diffy::CSS)
|
|
89
|
+
file.puts("</style>")
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# compare files from gem and autotest folder
|
|
93
|
+
# the result would be html file with differences in compare folder
|
|
94
|
+
def compare_files
|
|
95
|
+
need_copy = Array.new
|
|
96
|
+
FileUtils.rm_rf(Dir[File.join(CUR_FOLDER, '/compare/*')])
|
|
97
|
+
search_exists_files.each do |name|
|
|
98
|
+
compare_result = Diffy::Diff.new(File.dirname(CUR_FOLDER + name), File.join(GEM_FOLDER, '../sources', name), :source => 'files', :format => :html)
|
|
99
|
+
unless compare_result.to_s(:text).empty?
|
|
100
|
+
need_copy.push(name)
|
|
101
|
+
FileUtils.mkdir_p 'compare'
|
|
102
|
+
File.open(File.join(CUR_FOLDER, '/compare/', "#{File.basename(name, ".*")}.html"), "w:UTF-8") do |file|
|
|
103
|
+
add_css_style(file)
|
|
104
|
+
file.puts(compare_result.to_s(:html))
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
return need_copy
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
# delete from array element match str_name
|
|
113
|
+
def exclude_str_from_arr(input_arr, str_name)
|
|
114
|
+
result_arr = input_arr
|
|
115
|
+
need_del = result_arr.select { |el| el.include? str_name}
|
|
116
|
+
need_del.each do |value|
|
|
117
|
+
result_arr.delete(value)
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
# show files, then don't exixst in autotest folder
|
|
122
|
+
def show_files_ready_for_copy
|
|
123
|
+
unless search_not_exists_files.empty?
|
|
124
|
+
Kernel.puts("Файлы которых нет в текущей папке с автотестами и они будут добавлены:")
|
|
125
|
+
Kernel.puts search_not_exists_files
|
|
126
|
+
Kernel.puts("\n")
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
# exclude files from list, then don't need update
|
|
131
|
+
def excludes_files_for_update(input_arr, list_files)
|
|
132
|
+
all_files = list_files.split(/,\s*/)
|
|
133
|
+
list_files_for_update = input_arr
|
|
134
|
+
all_files.each do |name|
|
|
135
|
+
exclude_str_from_arr(list_files_for_update, name)
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
return list_files_for_update
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
# show files, then need update and update them
|
|
142
|
+
def show_files_for_update
|
|
143
|
+
Kernel.puts("\n")
|
|
144
|
+
|
|
145
|
+
new_files = search_not_exists_files
|
|
146
|
+
exist_files = compare_files
|
|
147
|
+
|
|
148
|
+
if !new_files.empty? && exist_files.empty?
|
|
149
|
+
show_files_ready_for_copy
|
|
150
|
+
Kernel.puts("Скопировать все файлы? (y/n)")
|
|
151
|
+
answer = gets
|
|
152
|
+
|
|
153
|
+
if answer == "y\n"|| answer == "\n"
|
|
154
|
+
copy_files(new_files)
|
|
155
|
+
Kernel.puts("Файлы успешно добавлены!")
|
|
156
|
+
end
|
|
157
|
+
elsif !exist_files.empty?
|
|
158
|
+
show_files_ready_for_copy
|
|
159
|
+
Kernel.puts("Файлы которые уже есть в текущей папки с автотестами, но требуют обновления:")
|
|
160
|
+
Kernel.puts exist_files
|
|
161
|
+
Kernel.puts("\n")
|
|
162
|
+
Kernel.puts("Все изменения в указанных файлах можно посмотреть в папке compare")
|
|
163
|
+
Kernel.puts("Для каждого файла создан html-отчет с отображением изменений")
|
|
164
|
+
Kernel.puts("\n")
|
|
165
|
+
Kernel.puts("Скопировать все файлы или исключить некоторые файлы из обновления?")
|
|
166
|
+
Kernel.puts("1 - Скопировать все файлы")
|
|
167
|
+
Kernel.puts("2 - Исключить файлы из обновления")
|
|
168
|
+
answer = gets.chomp
|
|
169
|
+
|
|
170
|
+
if answer == "1"
|
|
171
|
+
copy_files(new_files)
|
|
172
|
+
copy_files(exist_files)
|
|
173
|
+
Kernel.puts("Файлы успешно добавлены!")
|
|
174
|
+
elsif answer == "2"
|
|
175
|
+
Kernel.puts("Введите в одной строке через запятую имена файлов, которые надо исключить из обновления:")
|
|
176
|
+
file_names = gets.chomp
|
|
177
|
+
files_for_update = excludes_files_for_update(exist_files,file_names)
|
|
178
|
+
|
|
179
|
+
if !files_for_update.empty? || !new_files.empty?
|
|
180
|
+
Kernel.puts("Список файлов для обновления:")
|
|
181
|
+
Kernel.puts files_for_update
|
|
182
|
+
Kernel.puts new_files
|
|
183
|
+
Kernel.puts("Скопировать все файлы? (y/n)")
|
|
184
|
+
answer = gets
|
|
185
|
+
|
|
186
|
+
if answer == "y\n"|| answer == "\n"
|
|
187
|
+
copy_files(new_files)
|
|
188
|
+
copy_files(files_for_update)
|
|
189
|
+
Kernel.puts("Файлы успешно добавлены!")
|
|
190
|
+
end
|
|
191
|
+
else
|
|
192
|
+
Kernel.puts("Нет файлов для обновлений!")
|
|
193
|
+
end
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
if new_files.empty? && compare_files.empty?
|
|
198
|
+
Kernel.puts("В текущей папке все инфраструктурные файлы актуальны!")
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
Kernel.puts("\n")
|
|
202
|
+
end
|