tune_spec 0.4.1 → 0.5.3
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 +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +8 -0
- data/Gemfile.lock +3 -3
- data/doctest_helper.rb +10 -5
- data/lib/tune_spec/instances.rb +21 -17
- data/lib/tune_spec/instances/groups.rb +1 -1
- data/lib/tune_spec/instances/page.rb +1 -1
- data/lib/tune_spec/instances/steps.rb +10 -3
- data/lib/tune_spec/instances/tuner.rb +14 -10
- data/lib/tune_spec/parser.rb +1 -0
- data/lib/tune_spec/version.rb +1 -1
- data/tune_spec.gemspec +1 -1
- metadata +12 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8b83bf10235e9377d6a6a3cf9c6a30a67b49b124
|
4
|
+
data.tar.gz: df48ef4b2cb6d703d80735e8300638fdd50b9622
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c1236ea27bc5238c533c86cd0e6d3164b786798cf7f37bfefcc1fc097af35e108cbe604977414346d679b6450f141fb22305e5362e5522d5aeb038a7d204f0f8
|
7
|
+
data.tar.gz: 4f7f0a5f9ce4ff5b7771d8b0ab734274e2a9502a69730895852c087d5df452cd1e76d03303e7da33b16235a984d27553a2d5011506067a9884f08a1b4130903d
|
data/.gitignore
CHANGED
data/.travis.yml
ADDED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
tune_spec (0.
|
4
|
+
tune_spec (0.5.3)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
@@ -33,11 +33,11 @@ PLATFORMS
|
|
33
33
|
ruby
|
34
34
|
|
35
35
|
DEPENDENCIES
|
36
|
-
bundler (~> 1.
|
36
|
+
bundler (~> 1.16, >= 1.16.2)
|
37
37
|
rubocop (~> 0.50.0)
|
38
38
|
tune_spec!
|
39
39
|
yard (~> 0.9.12)
|
40
40
|
yard-doctest (~> 0.1.10)
|
41
41
|
|
42
42
|
BUNDLED WITH
|
43
|
-
1.16.
|
43
|
+
1.16.2
|
data/doctest_helper.rb
CHANGED
@@ -9,7 +9,7 @@ TEST_ENV = 'STG'
|
|
9
9
|
TuneSpec.configure do |conf|
|
10
10
|
conf.directory = 'test'
|
11
11
|
conf.steps_page_arg = :page_object
|
12
|
-
conf.groups_opts = { env: TEST_ENV }
|
12
|
+
conf.groups_opts = { env: TEST_ENV, aut: 'WEB' }
|
13
13
|
conf.steps_opts = { env: TEST_ENV }
|
14
14
|
conf.page_opts = { env: TEST_ENV }
|
15
15
|
end
|
@@ -29,13 +29,18 @@ def file_content(name, type)
|
|
29
29
|
klass.class_eval do
|
30
30
|
case "#{type}"
|
31
31
|
when 'groups'
|
32
|
-
define_method('initialize') do |env
|
32
|
+
define_method('initialize') do |test, env:, aut:|; end
|
33
33
|
define_method('complete') do; end
|
34
34
|
when 'steps'
|
35
|
-
define_method('initialize') do |env
|
36
|
-
|
35
|
+
define_method('initialize') do |env:, page_object:|
|
36
|
+
@env = env
|
37
|
+
@page_object = page_object
|
38
|
+
end
|
39
|
+
define_method('verify_result') do
|
40
|
+
@page_object.click_element
|
41
|
+
end
|
37
42
|
when 'page'
|
38
|
-
define_method('initialize') do |env
|
43
|
+
define_method('initialize') do |env:|; end
|
39
44
|
define_method('click_element') do; end
|
40
45
|
end
|
41
46
|
end
|
data/lib/tune_spec/instances.rb
CHANGED
@@ -11,49 +11,53 @@ module TuneSpec
|
|
11
11
|
# Creates an instance of Group or calls an existing
|
12
12
|
#
|
13
13
|
# @param name [Symbol, String] the prefix of the Groups object class
|
14
|
-
# @param
|
14
|
+
# @param opts [Hash] optional arguments
|
15
|
+
# @param args [Any] extra arguments
|
15
16
|
# @param block [Block] that yields to self
|
16
17
|
# @return [GroupObject]
|
17
18
|
# @example
|
18
|
-
# groups(:login).complete
|
19
|
-
def groups(name, *args, &block)
|
20
|
-
instance_handler(name, Groups, *args, block)
|
19
|
+
# groups(:login, {}, 'Main').complete
|
20
|
+
def groups(name, opts = {}, *args, &block)
|
21
|
+
instance_handler(name, Groups, opts, *args, block)
|
21
22
|
end
|
22
23
|
|
23
24
|
# Creates an instance of Step or calls an existing
|
24
25
|
#
|
25
26
|
# @param name [Symbol, String] the prefix of the Step object class
|
26
|
-
# @param
|
27
|
+
# @param opts [Hash] optional arguments
|
28
|
+
# @param args [Any] extra arguments
|
27
29
|
# @param block [Block] that yields to self
|
28
30
|
# @return [StepObject]
|
29
31
|
# @example
|
30
32
|
# steps(:calculator, page: :home).verify_result
|
31
|
-
def steps(name, *args,
|
32
|
-
|
33
|
-
instance_handler(name, Steps, *args, block)
|
33
|
+
def steps(name, opts = {}, *args, &block)
|
34
|
+
opts[:page] && opts[:page] = pages(opts.fetch(:page))
|
35
|
+
instance_handler(name, Steps, opts, *args, block)
|
34
36
|
end
|
35
37
|
|
36
38
|
# Creates an instance of Page or calls an existing
|
37
39
|
#
|
38
40
|
# @param name [Symbol, String] the prefix of the Page object class
|
39
|
-
# @param
|
41
|
+
# @param opts [Hash] optional arguments
|
42
|
+
# @param args [Any] extra arguments
|
40
43
|
# @param block [Block] that yields to self
|
41
44
|
# @return [PageObject]
|
42
45
|
# @example
|
43
46
|
# pages(:home).click_element
|
44
|
-
def pages(name, *args, &block)
|
45
|
-
instance_handler(name, Page, *args, block)
|
47
|
+
def pages(name, opts = {}, *args, &block)
|
48
|
+
instance_handler(name, Page, opts, *args, block)
|
46
49
|
end
|
47
50
|
|
48
51
|
private
|
49
52
|
|
50
53
|
# @private
|
51
|
-
def instance_handler(name, klass, *args, block)
|
54
|
+
def instance_handler(name, klass, opts, *args, block)
|
52
55
|
method_name = klass.instance_method_name(name)
|
53
56
|
instance_klass = klass.call_object(method_name)
|
54
57
|
create_instance_method(method_name, klass, instance_klass)
|
55
|
-
|
56
|
-
|
58
|
+
formatted_opts = klass.format_opts(opts, instance_klass)
|
59
|
+
args << formatted_opts unless formatted_opts.empty?
|
60
|
+
call_instance_method(method_name, *args, block)
|
57
61
|
end
|
58
62
|
|
59
63
|
# @private
|
@@ -61,14 +65,14 @@ module TuneSpec
|
|
61
65
|
return if respond_to?(method_name)
|
62
66
|
define_singleton_method(method_name) do |*args|
|
63
67
|
instance_var = instance_variable_get("@#{method_name}")
|
64
|
-
return instance_var if klass.rules_passed?(instance_var, args)
|
65
|
-
new_instance = create_instance(klass, instance_klass, args)
|
68
|
+
return instance_var if klass.rules_passed?(instance_var, args.first)
|
69
|
+
new_instance = create_instance(klass, instance_klass, *args)
|
66
70
|
instance_variable_set("@#{method_name}", new_instance)
|
67
71
|
end
|
68
72
|
end
|
69
73
|
|
70
74
|
# @private
|
71
|
-
def create_instance(klass, instance_klass, args)
|
75
|
+
def create_instance(klass, instance_klass, *args)
|
72
76
|
return instance_klass.new(*args) if klass.object_type == :common
|
73
77
|
wait_opts = TuneSpec.calabash_wait_opts
|
74
78
|
page(instance_klass, *args).await(wait_opts)
|
@@ -8,8 +8,9 @@ module TuneSpec
|
|
8
8
|
class Steps < Tuner
|
9
9
|
class << self
|
10
10
|
# Steps specific rules
|
11
|
-
def rules_passed?(instance,
|
12
|
-
|
11
|
+
def rules_passed?(instance, opts = {})
|
12
|
+
return false if opts.nil?
|
13
|
+
same_page?(instance, opts[page_arg]) unless opts.empty?
|
13
14
|
end
|
14
15
|
|
15
16
|
private
|
@@ -19,7 +20,8 @@ module TuneSpec
|
|
19
20
|
return false unless instance
|
20
21
|
return true unless instance.respond_to?(page_arg)
|
21
22
|
return true unless general_steps?(instance)
|
22
|
-
page.
|
23
|
+
return true if page.nil?
|
24
|
+
page.instance_of?(instance.__send__(page_arg).class)
|
23
25
|
end
|
24
26
|
|
25
27
|
def general_steps?(instance)
|
@@ -33,6 +35,11 @@ module TuneSpec
|
|
33
35
|
def page_arg
|
34
36
|
TuneSpec.steps_page_arg
|
35
37
|
end
|
38
|
+
|
39
|
+
def pre_format_opts(opts)
|
40
|
+
return opts unless opts.key?(:page)
|
41
|
+
opts.tap { |hash| hash[page_arg] = hash.delete(:page) }
|
42
|
+
end
|
36
43
|
end
|
37
44
|
end
|
38
45
|
end
|
@@ -10,15 +10,15 @@ module TuneSpec
|
|
10
10
|
end
|
11
11
|
|
12
12
|
# A hook to define rules by subclasses
|
13
|
-
def rules_passed?(_instance,
|
13
|
+
def rules_passed?(_instance, _opts = {})
|
14
14
|
raise "Implement a #rules_passed? method for #{self}"
|
15
15
|
end
|
16
16
|
|
17
|
-
def
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
17
|
+
def format_opts(opts, instance_klass)
|
18
|
+
default_opts = fetch_default_opts
|
19
|
+
pre_format_opts(opts).tap do |hash|
|
20
|
+
default_opts.each do |key, value|
|
21
|
+
hash[key] = value if argument_required?(key, instance_klass)
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
@@ -39,7 +39,7 @@ module TuneSpec
|
|
39
39
|
@type ||= itself.to_s.split('::').last.downcase
|
40
40
|
end
|
41
41
|
|
42
|
-
def
|
42
|
+
def fetch_default_opts
|
43
43
|
TuneSpec.__send__("#{type}_opts".downcase)
|
44
44
|
end
|
45
45
|
|
@@ -48,18 +48,22 @@ module TuneSpec
|
|
48
48
|
end
|
49
49
|
|
50
50
|
def ensure_required(name)
|
51
|
-
path =
|
51
|
+
path = project_files.detect { |f| f.include?("/#{name}.rb") }
|
52
52
|
path ? require("./#{path}") : raise("Unable to find #{name}.rb")
|
53
53
|
end
|
54
54
|
|
55
|
-
def
|
56
|
-
@
|
55
|
+
def project_files
|
56
|
+
@project_files ||= Dir.glob("#{file_directory}/**/*")
|
57
57
|
end
|
58
58
|
|
59
59
|
# A hook to implement folder name by subclass
|
60
60
|
def file_directory
|
61
61
|
raise "Implement a #folder_name method for #{self}"
|
62
62
|
end
|
63
|
+
|
64
|
+
def pre_format_opts(opts)
|
65
|
+
opts
|
66
|
+
end
|
63
67
|
end
|
64
68
|
end
|
65
69
|
end
|
data/lib/tune_spec/parser.rb
CHANGED
data/lib/tune_spec/version.rb
CHANGED
data/tune_spec.gemspec
CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
21
21
|
spec.require_paths = ['lib']
|
22
22
|
|
23
|
-
spec.add_development_dependency 'bundler', '~> 1.
|
23
|
+
spec.add_development_dependency 'bundler', '~> 1.16', '>= 1.16.2'
|
24
24
|
spec.add_development_dependency 'rubocop', '~> 0.50.0'
|
25
25
|
spec.add_development_dependency 'yard', '~> 0.9.12'
|
26
26
|
spec.add_development_dependency 'yard-doctest', '~> 0.1.10'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tune_spec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Igor Starostenko
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-06-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -16,14 +16,20 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1.
|
19
|
+
version: '1.16'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 1.16.2
|
20
23
|
type: :development
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
27
|
- - "~>"
|
25
28
|
- !ruby/object:Gem::Version
|
26
|
-
version: '1.
|
29
|
+
version: '1.16'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 1.16.2
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: rubocop
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -77,6 +83,7 @@ files:
|
|
77
83
|
- ".gitignore"
|
78
84
|
- ".ruby-gemset"
|
79
85
|
- ".ruby-version"
|
86
|
+
- ".travis.yml"
|
80
87
|
- CODE_OF_CONDUCT.md
|
81
88
|
- Gemfile
|
82
89
|
- Gemfile.lock
|
@@ -119,5 +126,5 @@ rubyforge_project:
|
|
119
126
|
rubygems_version: 2.6.12
|
120
127
|
signing_key:
|
121
128
|
specification_version: 4
|
122
|
-
summary: tune_spec_0.
|
129
|
+
summary: tune_spec_0.5.3
|
123
130
|
test_files: []
|