rast 0.3.0.pre → 0.4.0.pre
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -4
- data/lib/rast/parameter_generator.rb +9 -2
- data/lib/rast/rast_spec.rb +2 -2
- data/lib/rast/spec_dsl.rb +56 -4
- data/lib/rast.rb +4 -0
- data/rast.gemspec +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b7cc441726e5d5112063ef2cf2886627723522e56f15902e03b7a4338c7765dc
|
4
|
+
data.tar.gz: 64978ebd88c648899445d712b00a9095f1dcbdf5c00c5709f536af259fa1ddc2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fdb9d8e763f2bbc47f97b2a90a16c6f79d9b8300de9ea4afe1c5cbed3e68282ea85d26f88e28d7d2889ab543a06bc423674cd79171b116fcbbcda21a3d9f032f
|
7
|
+
data.tar.gz: 4daa2de1cb969a6c5de8fcfeade4986249d91081ef2610e8f7014c47e78bd0ea78734650235cd9508fd0fa937d2a4ace3618b11e1bc85e7f4d11587343803977
|
data/CHANGELOG.md
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
# Change log
|
2
2
|
|
3
|
-
|
4
|
-
- 0.3.
|
5
|
-
- 0.
|
6
|
-
- 0.
|
3
|
+
- 0.4.0.pre - Allow yaml-less configuration.
|
4
|
+
- 0.3.1.pre - Fixed spec naming for modules.
|
5
|
+
- 0.3.0.pre - Support factory methods in execute block.
|
6
|
+
- 0.2.0.pre - Support module subjects.
|
7
|
+
- 0.1.2.pre - Fixed exclusions.
|
7
8
|
- 0.1.1.pre - Pre release version compatible with Ruby 2.0.0-p247
|
@@ -11,12 +11,17 @@ require 'rast/converters/float_converter'
|
|
11
11
|
|
12
12
|
# Generates the test parameters.
|
13
13
|
class ParameterGenerator
|
14
|
+
# Allow access so yaml-less can build the config via dsl.
|
15
|
+
attr_accessor :specs_config
|
16
|
+
|
14
17
|
def initialize(yaml_path: '')
|
15
|
-
@specs_config = YAML.load_file(yaml_path)['specs']
|
18
|
+
@specs_config = YAML.load_file(yaml_path)['specs'] if File.exist? yaml_path
|
16
19
|
end
|
17
20
|
|
18
21
|
# addCase. Generate the combinations, then add the fixture to the final list
|
19
22
|
def generate_fixtures(spec_id: '')
|
23
|
+
return nil if @specs_config.nil?
|
24
|
+
|
20
25
|
spec_config = @specs_config[spec_id]
|
21
26
|
|
22
27
|
spec_config[:description] = spec_id
|
@@ -90,10 +95,12 @@ class ParameterGenerator
|
|
90
95
|
converters = if spec_config['converters'].nil?
|
91
96
|
str_converter = StrConverter.new
|
92
97
|
spec_config['variables'].map { |_var| str_converter }
|
93
|
-
|
98
|
+
elsif spec_config['converters'].first.class == String
|
94
99
|
spec_config['converters'].map do |converter|
|
95
100
|
Object.const_get(converter).new
|
96
101
|
end
|
102
|
+
else
|
103
|
+
spec_config['converters']
|
97
104
|
end
|
98
105
|
|
99
106
|
spec.init_converters(converters: converters)
|
data/lib/rast/rast_spec.rb
CHANGED
@@ -19,8 +19,8 @@ class RastSpec
|
|
19
19
|
def init_pair(pair_config: {})
|
20
20
|
@pair[pair_config.keys.first.to_s] = pair_config.values.first.to_s
|
21
21
|
|
22
|
-
array = [@pair.to_a.first.reverse]
|
23
|
-
@pair_reversed = { array.first.to_s
|
22
|
+
array = [@pair.to_a.first.reverse].first
|
23
|
+
@pair_reversed = { array.first.to_s => array.last }
|
24
24
|
self
|
25
25
|
end
|
26
26
|
|
data/lib/rast/spec_dsl.rb
CHANGED
@@ -10,8 +10,17 @@ class SpecDSL
|
|
10
10
|
attr_accessor :subject, :rspec_methods, :execute_block,
|
11
11
|
:prepare_block, :transients, :outcomes, :fixtures
|
12
12
|
|
13
|
-
|
13
|
+
# # yaml-less
|
14
|
+
attr_writer :variables, :exclude, :converters, :rules, :pair
|
15
|
+
|
16
|
+
# @subject the sut instance
|
17
|
+
# @name the sut name to be displayed with -fd
|
18
|
+
def initialize(subject: nil, name: '', fixtures: [], spec_id: '', &block)
|
14
19
|
@subject = subject
|
20
|
+
@spec_id = spec_id
|
21
|
+
|
22
|
+
# cannot derive name from subject when sut is a module.
|
23
|
+
@subject_name = name || subject.class
|
15
24
|
@fixtures = fixtures
|
16
25
|
|
17
26
|
@transients = []
|
@@ -30,6 +39,7 @@ class SpecDSL
|
|
30
39
|
end
|
31
40
|
|
32
41
|
def method_missing(method_name_symbol, *args, &block)
|
42
|
+
# p "method_missing: #{method_name_symbol}"
|
33
43
|
return super if method_name_symbol == :to_ary
|
34
44
|
|
35
45
|
@rspec_methods << {
|
@@ -41,6 +51,29 @@ class SpecDSL
|
|
41
51
|
self
|
42
52
|
end
|
43
53
|
|
54
|
+
# yaml-less start
|
55
|
+
def variables(vars)
|
56
|
+
@variables = vars
|
57
|
+
end
|
58
|
+
|
59
|
+
def exclude(clause)
|
60
|
+
@exclude = clause
|
61
|
+
end
|
62
|
+
|
63
|
+
def converters(&block)
|
64
|
+
@converters = instance_eval(&block)
|
65
|
+
end
|
66
|
+
|
67
|
+
def rules(rules)
|
68
|
+
@rules = rules
|
69
|
+
end
|
70
|
+
|
71
|
+
def pair(pair)
|
72
|
+
@pair = pair
|
73
|
+
end
|
74
|
+
|
75
|
+
# yaml-less end
|
76
|
+
|
44
77
|
def prepare(&block)
|
45
78
|
@prepare_block = block
|
46
79
|
@transients
|
@@ -49,6 +82,19 @@ class SpecDSL
|
|
49
82
|
def execute(&block)
|
50
83
|
@execute_block = block
|
51
84
|
|
85
|
+
if @fixtures.nil?
|
86
|
+
parameter_generator = ParameterGenerator.new
|
87
|
+
parameter_generator.specs_config = { @spec_id => {
|
88
|
+
'variables' => @variables,
|
89
|
+
'pair' => @pair,
|
90
|
+
'converters' => @converters,
|
91
|
+
'rules' => @rules,
|
92
|
+
'exclude' => @exclude
|
93
|
+
} }
|
94
|
+
|
95
|
+
@fixtures = parameter_generator.generate_fixtures(spec_id: @spec_id)
|
96
|
+
end
|
97
|
+
|
52
98
|
@fixtures.sort_by! do |fixture|
|
53
99
|
fixture[:expected_outcome] + fixture[:scenario].to_s
|
54
100
|
end
|
@@ -62,7 +108,7 @@ class SpecDSL
|
|
62
108
|
spec = @fixtures.first[:spec]
|
63
109
|
main_scope = self
|
64
110
|
|
65
|
-
RSpec.describe "#{@
|
111
|
+
RSpec.describe "#{@subject_name}: #{spec.description}" do
|
66
112
|
main_scope.fixtures.each do |fixture|
|
67
113
|
generate_rspec(
|
68
114
|
scope: main_scope,
|
@@ -104,6 +150,12 @@ def generate_rspec(scope: nil, scenario: {}, expected: '')
|
|
104
150
|
end
|
105
151
|
|
106
152
|
# DSL Entry Point
|
107
|
-
def spec(subject: nil, fixtures: [], &block)
|
108
|
-
SpecDSL.new(
|
153
|
+
def spec(subject: nil, name: '', fixtures: [], spec_id: '', &block)
|
154
|
+
SpecDSL.new(
|
155
|
+
subject: subject,
|
156
|
+
name: name,
|
157
|
+
fixtures: fixtures,
|
158
|
+
spec_id: spec_id,
|
159
|
+
&block
|
160
|
+
)
|
109
161
|
end
|
data/lib/rast.rb
CHANGED
@@ -24,6 +24,8 @@ class Rast
|
|
24
24
|
rasted_subject.new
|
25
25
|
end
|
26
26
|
|
27
|
+
@subject_name = rasted_subject
|
28
|
+
|
27
29
|
spec_path = caller[2][/spec.*?\.rb/]
|
28
30
|
yaml_path = spec_path.gsub(/(\w+).rb/, 'rast/\\1.yml')
|
29
31
|
|
@@ -35,7 +37,9 @@ class Rast
|
|
35
37
|
def spec(id, &block)
|
36
38
|
global_spec(
|
37
39
|
subject: @subject,
|
40
|
+
name: @subject_name,
|
38
41
|
fixtures: @generator.generate_fixtures(spec_id: id),
|
42
|
+
spec_id: id,
|
39
43
|
&block
|
40
44
|
)
|
41
45
|
end
|
data/rast.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rast
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0.pre
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Royce Remulla
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-04-
|
11
|
+
date: 2020-04-26 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Extends RSpec functionality by using the catch-all-scenario testing (CAST)
|
14
14
|
principle.
|