matest 0.2.0 → 1.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7e6e7d1a7872997bc4b3fad1f258f0093f9f32ea
4
- data.tar.gz: 78015cdf727f064505dbba282a5e008bdf8ecf1b
3
+ metadata.gz: b3dca823c49ba5da737893a493c8b2d6577fe39a
4
+ data.tar.gz: ee624abd646826218183f7eb841d0e9eb2430c2c
5
5
  SHA512:
6
- metadata.gz: 05aaa86b1200e3dc2b973ceab2efd6e0f5c78dbbdd1addcfc974f77131819ec89bdb97a160d0b61290fc5629ae8d85f57e5cdc40e4043774a3730c54c714d8e3
7
- data.tar.gz: 627b3b5a0a537325677319564fd80f3de92a99acbdfc95f981b51535d2e9c06f3d0aba7921c623ed76014303787fcf6165be6aa2b1226bb8a6c1c090ef29065a
6
+ metadata.gz: b04d07f356a535fdf18a12073d8cab63d3179e4d70555e91b3576de10b4a2d87b22239a5d160cd88d1c21fb8db023a0a103e8ad8ed94afc0999a33c04d2604f8
7
+ data.tar.gz: 1f3c6259e4f602eb7d2b1325cbb1255ef023ead69558511eb28bf01a76869f36971cdae788e7218f1a91a72b76330f74f526d64ea3e974b8c38efa6c73ad68fd
data/Gemfile CHANGED
@@ -1,4 +1,3 @@
1
- source 'https://rubygems.org'
1
+ source "https://rubygems.org"
2
+ gemspec
2
3
 
3
- # Specify your gem's dependencies in matest.gemspec
4
- gemspec
data/Rakefile CHANGED
@@ -1,2 +1,11 @@
1
1
  require "bundler/gem_tasks"
2
2
 
3
+ task default: :matest
4
+ task :matest do
5
+ arg_files = ENV["FILES"] && ENV["FILES"].split(/[\s,]+/)
6
+ all_files = Rake::FileList["./spec/matest_specs/**/*_spec.rb"]
7
+ files = arg_files || all_files
8
+ puts "\nRuning tests for: #{ files.join(" ") }\n\n"
9
+
10
+ system *["./bin/mt"].concat(files)
11
+ end
data/bin/mt CHANGED
@@ -37,3 +37,7 @@ puts good_bye_message
37
37
 
38
38
  time_elapsed = Time.now - start_time
39
39
  puts "Elapsed: #{time_elapsed} seconds."
40
+
41
+
42
+ exit(1) unless info[:success]
43
+
data/lib/matest.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  require "matest/version"
2
-
2
+ require "matest/spec_status"
3
3
  module Matest
4
4
  class Runner
5
5
  attr_reader :example_groups
@@ -33,7 +33,9 @@ module Matest
33
33
  puts "\n\n### Messages ###"
34
34
 
35
35
  statuses = []
36
+ info[:success] = true
36
37
  info[:num_specs] = { total: 0 }
38
+
37
39
  example_groups.each do |current_group|
38
40
  current_group.statuses.each do |status|
39
41
  info[:num_specs][:total] += 1
@@ -43,11 +45,16 @@ module Matest
43
45
 
44
46
  if status.is_a?(Matest::SpecPassed)
45
47
  else
48
+ if status.is_a?(Matest::SpecFailed)
49
+ info[:success] = false
50
+ end
46
51
  puts "\n[#{status.name}] #{status.description}"
47
52
  if status.is_a?(Matest::NotANaturalAssertion)
53
+ info[:success] = false
48
54
  puts " # => #{status.result.inspect}"
49
55
  end
50
56
  if status.is_a?(Matest::ExceptionRaised)
57
+ info[:success] = false
51
58
  puts "EXCEPTION >> #{status.result}"
52
59
  status.result.backtrace.each do |l|
53
60
  puts " #{l}"
@@ -61,98 +68,71 @@ module Matest
61
68
  end
62
69
  end
63
70
 
64
- class SpecStatus
65
- attr_reader :block
71
+ class SkipMe; end
72
+
73
+ class Example
74
+ attr_reader :example_block
66
75
  attr_reader :description
67
- attr_reader :result
68
76
 
69
- def initialize(block, result, description=nil)
70
- @block = block
71
- @result = result
77
+ def initialize(example_block, description, lets)
78
+ @example_block = example_block
72
79
  @description = description
80
+ lets.each do |let|
81
+ self.class.let(let.var_name, &let.block)
82
+ send(let.var_name) if let.and_call
83
+ end
73
84
  end
74
85
 
75
- def location
76
- "%s:%d" % block.source_location
77
- end
78
-
79
- end
80
-
81
- class SpecPassed < SpecStatus
82
- def to_s
83
- "."
84
- end
85
-
86
- def name
87
- "PASSING"
88
- end
89
- end
90
- class SpecFailed < SpecStatus
91
- def to_s
92
- "F"
93
- end
94
-
95
- def name
96
- "FAILING"
97
- end
98
- end
99
- class SpecSkipped < SpecStatus
100
- def to_s
101
- "S"
86
+ def call
87
+ instance_eval(&example_block)
102
88
  end
103
89
 
104
- def name
105
- "SKIPPED"
106
- end
107
- end
108
- class NotANaturalAssertion < SpecStatus
109
- def to_s
110
- "N"
111
- end
112
-
113
- def name
114
- "NOT A NATURAL ASSERTION"
90
+ def self.let(var_name, &block)
91
+ define_method(var_name) do
92
+ instance_variable_set(:"@#{var_name}", block.call)
93
+ end
115
94
  end
116
95
  end
117
96
 
118
- class ExceptionRaised < SpecStatus
119
- attr_reader :exception
120
- def to_s
121
- "E"
122
- end
123
-
124
- def name
125
- "ERROR"
97
+ class Let
98
+ attr_reader :var_name
99
+ attr_reader :block
100
+ attr_reader :and_call
101
+
102
+ def initialize(var_name, block, and_call=false)
103
+ @var_name = var_name
104
+ @block = block
105
+ @and_call = and_call
126
106
  end
127
107
  end
128
-
129
- class SkipMe; end
130
-
108
+
131
109
  class ExampleGroup
132
110
  attr_reader :scope_block
133
111
  attr_reader :specs
112
+ attr_reader :lets
134
113
  attr_reader :statuses
135
114
 
136
115
  def initialize(scope_block)
137
116
  @scope_block = scope_block
138
117
  @specs = []
118
+ @lets = []
139
119
  @statuses = []
140
120
  end
141
121
 
122
+ def spec(description=nil, &block)
123
+ current_example = block_given? ? block : -> { Matest::SkipMe.new }
124
+ specs << Example.new(current_example, description, lets)
125
+ end
126
+
142
127
  def execute!
143
128
  instance_eval(&scope_block)
144
129
  specs.shuffle.each do |spec, desc|
145
- res = run_spec(spec, desc)
130
+ res = run_spec(spec)
146
131
  print res
147
132
  end
148
133
 
149
134
  end
150
135
 
151
- def spec(description=nil, &block)
152
- current_example = block_given? ? block : -> { Matest::SkipMe.new }
153
- specs << [current_example, description]
154
- end
155
-
156
136
  def xspec(description=nil, &block)
157
137
  spec(description)
158
138
  end
@@ -168,16 +148,15 @@ module Matest
168
148
  end
169
149
  end
170
150
 
171
- def let(var_name, &block)
172
- self.class.let(var_name, &block)
151
+ def let(var_name, and_call=false, &block)
152
+ lets << Let.new(var_name, block, and_call=false)
173
153
  end
174
154
 
175
155
  def let!(var_name, &block)
176
- self.class.let(var_name, &block)
177
- send(var_name)
156
+ lets << Let.new(var_name, block, and_call=true)
178
157
  end
179
158
 
180
- def run_spec(spec, description)
159
+ def run_spec(spec)
181
160
  status = begin
182
161
  result = spec.call
183
162
  status_class = case result
@@ -190,9 +169,9 @@ module Matest
190
169
  else
191
170
  Matest::NotANaturalAssertion
192
171
  end
193
- status_class.new(spec, result, description)
172
+ status_class.new(spec.example_block, result, spec.description)
194
173
  rescue Exception => e
195
- Matest::ExceptionRaised.new(spec, e, description)
174
+ Matest::ExceptionRaised.new(spec.example_block, e, spec.description)
196
175
  end
197
176
  @statuses << status
198
177
  status
@@ -0,0 +1,67 @@
1
+ module Matest
2
+ class SpecStatus
3
+ attr_reader :block
4
+ attr_reader :description
5
+ attr_reader :result
6
+
7
+ def initialize(block, result, description=nil)
8
+ @block = block
9
+ @result = result
10
+ @description = description
11
+ end
12
+
13
+ def location
14
+ "%s:%d" % block.source_location
15
+ end
16
+ end
17
+
18
+ class SpecPassed < SpecStatus
19
+ def to_s
20
+ "."
21
+ end
22
+
23
+ def name
24
+ "PASSING"
25
+ end
26
+ end
27
+
28
+ class SpecFailed < SpecStatus
29
+ def to_s
30
+ "F"
31
+ end
32
+
33
+ def name
34
+ "FAILING"
35
+ end
36
+ end
37
+
38
+ class SpecSkipped < SpecStatus
39
+ def to_s
40
+ "S"
41
+ end
42
+
43
+ def name
44
+ "SKIPPED"
45
+ end
46
+ end
47
+ class NotANaturalAssertion < SpecStatus
48
+ def to_s
49
+ "N"
50
+ end
51
+
52
+ def name
53
+ "NOT A NATURAL ASSERTION"
54
+ end
55
+ end
56
+
57
+ class ExceptionRaised < SpecStatus
58
+ attr_reader :exception
59
+ def to_s
60
+ "E"
61
+ end
62
+
63
+ def name
64
+ "ERROR"
65
+ end
66
+ end
67
+ end
@@ -1,3 +1,3 @@
1
1
  module Matest
2
- VERSION = "0.2.0"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -17,6 +17,7 @@ scope "A" do
17
17
  false
18
18
  end
19
19
  end
20
+
20
21
  spec "B.1" do
21
22
  false
22
23
  end
@@ -0,0 +1,42 @@
1
+ scope do
2
+ test do
3
+ true
4
+ end
5
+
6
+ xtest do
7
+ true
8
+ end
9
+
10
+ test do
11
+ true
12
+ end
13
+
14
+ xtest do
15
+ 5
16
+ end
17
+
18
+ xtest do
19
+ true
20
+ end
21
+
22
+ test do
23
+ true
24
+ end
25
+
26
+ test do
27
+ true
28
+ end
29
+
30
+ test do
31
+ true
32
+ end
33
+
34
+ test do
35
+ true
36
+ end
37
+
38
+ test do
39
+ true
40
+ end
41
+
42
+ end
@@ -1,14 +1,14 @@
1
1
  scope do
2
2
  let(:m1) { :m1 }
3
3
  let!(:m3) { :m3 }
4
-
4
+
5
5
  let(:m4) { :m4 }
6
6
  let!(:m5) { :m5 }
7
7
 
8
8
  spec do
9
9
  m1 == :m1
10
10
  end
11
-
11
+ #
12
12
  spec do
13
13
  ! defined?(m2)
14
14
  end
@@ -24,6 +24,7 @@ scope do
24
24
  spec do
25
25
  !! defined?(@m5)
26
26
  end
27
+
27
28
  scope do
28
29
  let(:m2) { :m2 }
29
30
  spec do
@@ -35,3 +36,20 @@ scope do
35
36
  end
36
37
  end
37
38
  end
39
+
40
+ scope do
41
+ @c = true
42
+ test do
43
+ @a = true
44
+ !defined?(@b)
45
+ end
46
+
47
+ test do
48
+ @b = true
49
+ !defined?(@a)
50
+ end
51
+
52
+ test do
53
+ !defined?(@c)
54
+ end
55
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: matest
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Federico Iachetti
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-17 00:00:00.000000000 Z
11
+ date: 2014-11-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -53,10 +53,12 @@ files:
53
53
  - Rakefile
54
54
  - bin/mt
55
55
  - lib/matest.rb
56
+ - lib/matest/spec_status.rb
56
57
  - lib/matest/version.rb
57
58
  - matest.gemspec
58
59
  - spec/matest_spec.rb
59
60
  - spec/matest_specs/nested_scopes_spec.rb
61
+ - spec/matest_specs/passing_spec.rb
60
62
  - spec/matest_specs/scope_spec.rb
61
63
  - spec/matest_specs/scoping_stuff_spec.rb
62
64
  - spec/matest_specs/spec_helper.rb
@@ -81,13 +83,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
81
83
  version: '0'
82
84
  requirements: []
83
85
  rubyforge_project:
84
- rubygems_version: 2.4.2
86
+ rubygems_version: 2.4.3
85
87
  signing_key:
86
88
  specification_version: 4
87
89
  summary: Tests gasoleros (cheap tests).
88
90
  test_files:
89
91
  - spec/matest_spec.rb
90
92
  - spec/matest_specs/nested_scopes_spec.rb
93
+ - spec/matest_specs/passing_spec.rb
91
94
  - spec/matest_specs/scope_spec.rb
92
95
  - spec/matest_specs/scoping_stuff_spec.rb
93
96
  - spec/matest_specs/spec_helper.rb