speckle 0.1.16 → 0.1.17

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,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MjYyNmMzN2NkYzljNmIzMGFmZDExYjY5MTc0Mzg5M2M0NDIyMWZkMg==
4
+ M2M1N2NiYTNlMDU4MmJlOWY0MjI0NzEwNjJiN2M3MWEwY2QwN2ViYg==
5
5
  data.tar.gz: !binary |-
6
- ZDdmZThhY2RmOTE3ODU5NDI0OTcwNzNmZGZkZDEzMjM1ZWJiOGZkYg==
6
+ MTEwMjU5OTQzYWEyMDdjZDVlOTViZDdmZGQ4ODZjNTExODdmMDU0NQ==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- YjViNjUzOGMyODJkOGJlOTQ4NDRmZjM4YzE0Mzc3NmI4YmEwNmFhMjU3OTY5
10
- OTE2ZjZhOGVkNTRiNTVkYTQ1ZjZlMTk5MWRmNmI3OGIwODc3MWI3OGUwZDcw
11
- NjdlMWYwMzMwODRhN2Y3ODBkODYzYjhmYjYyODViOGJjMmMzYzk=
9
+ OTM2MzdlMTE1YTUwZDliMTE1MjhhNGRhZjc0MDg1OTk4NTE5MjUyZjc5MzE1
10
+ MWNmMThlNzY5NDhkOTE4ZGZkMDkzOTFmYzgxMDI1YjEzMDQ3MDcxMWVmMGZl
11
+ MGZlMWJkYjRmNGFlMDc2Yjc5ZWRmOGMwZGQ4MGZhNTMzZTEwZTM=
12
12
  data.tar.gz: !binary |-
13
- YWMwM2JiNGExNmZjMmZlMWUzMDcwOTVjZjA3ZWM2ZTU0NjdjNmQ0Njg5YzQ1
14
- YjY1YjU0MDUxNjNmNTEyYTQ5Mjc4ZjMyMjYwNjllZDU0OTc3NjZjMzYxMTJk
15
- MzliNWI2YzEwM2I3NTE5NmVhMGY4OThlOGI0NDRhMjhkNWUyOTY=
13
+ YWFjZjI4MmIyN2JkZDBmM2U2MDg3ZWRjODM4MWJiYjJkNWRlZWM5ZTY5N2Mz
14
+ OTEzZDVjMjgyMDA3MDgyMzNkODE3YjM2MTRlYzc5NTFhMTQwODZmOGVhMDA5
15
+ Mzg5Y2YxOTZmZjNmYWM3NmM2ZjcyODI2NjE0MGE3NjJiMTNhNDA=
@@ -5,10 +5,10 @@ class LengthMatcher
5
5
  end
6
6
 
7
7
  defm failure_message_for_match(expected, actual)
8
- return "expected length of “#{actual}” to be “#{expected}”, but was #{self.result}"
8
+ return "expected length of “#{string(actual)}” to be “#{expected}”, but was #{self.result}"
9
9
  end
10
10
 
11
11
  defm failure_message_for_mismatch(expected, actual)
12
- return "expected length of “#{actual}” to not be “#{expected}”, but was #{self.result}"
12
+ return "expected length of “#{string(actual)}” to not be “#{expected}”, but was #{self.result}"
13
13
  end
14
14
  end
@@ -0,0 +1,122 @@
1
+ class FivematReporter < BaseReporter
2
+
3
+ def initialize()
4
+ super()
5
+ self.indents = 0
6
+ self.log_buffer = []
7
+ self.current_index = 0
8
+ self.error_buffer = []
9
+ end
10
+
11
+ defm writeln(msg)
12
+ line = "#{self.indent_to_str()}#{msg}"
13
+ self.writer.writeln(line)
14
+ end
15
+
16
+ defm write(msg)
17
+ line = "#{self.indent_to_str()}#{msg}"
18
+ self.writer.write(line)
19
+ end
20
+
21
+ defm write_errorln(msg)
22
+ add(self.error_buffer, self.indent_to_str() . msg)
23
+ end
24
+
25
+ defm has_error_lines
26
+ return len(self.error_buffer) > 0
27
+ end
28
+
29
+ defm flush_error_buffer
30
+ if self.has_error_lines()
31
+ for line in self.error_buffer
32
+ self.writeln(line)
33
+ end
34
+
35
+ self.error_buffer = []
36
+ end
37
+ end
38
+
39
+ defm on_start(stats)
40
+ end
41
+
42
+ defm on_context_start(context, stats)
43
+ self.current_index = 0
44
+ self.write("#{context} ")
45
+ end
46
+
47
+ defm on_context_end(context, stats)
48
+ self.writeln('')
49
+ self.flush_error_buffer()
50
+ end
51
+
52
+ defm on_spec_pass(meta, stats)
53
+ duration_msg = self.get_duration_msg(meta)
54
+ self.write('.')
55
+ self.flush_log_buffer()
56
+ end
57
+
58
+ defm show_error(type, meta, err, stats)
59
+ char = type[0]
60
+ self.write(self.to_red(char))
61
+
62
+ self.indent(1)
63
+
64
+ self.write_errorln("#{self.current_index}) #{type}: #{meta.get_sentence()}")
65
+
66
+ self.indent(1)
67
+ self.write_errorln(" ". self.to_red(err.get_message()))
68
+ self.indent(1)
69
+ self.print_stacktrace(err)
70
+ self.flush_log_buffer()
71
+ self.unindent(3)
72
+ self.write_errorln('')
73
+ end
74
+
75
+ defm on_spec_failure(meta, err, stats)
76
+ self.current_index += 1
77
+ self.show_error('Failure', meta, err, stats)
78
+ end
79
+
80
+ defm on_spec_error(meta, err, stats)
81
+ self.current_index += 1
82
+ self.show_error('Error', meta, err, stats)
83
+ end
84
+
85
+ defm indent_to_str()
86
+ return repeat(" ", self.indents)
87
+ end
88
+
89
+ defm indent(size)
90
+ self.indents += size
91
+ end
92
+
93
+ defm unindent(size)
94
+ self.indents -= size
95
+ end
96
+
97
+ defm write_epilogue_separator()
98
+ self.writer.writeln('')
99
+ super()
100
+ end
101
+
102
+ defm write_log_line(line)
103
+ self.write_errorln(" log: #{line}")
104
+ end
105
+
106
+ defm write_stacktrace_line(line)
107
+ self.write_errorln(" " . line)
108
+ end
109
+
110
+ defm flush_log_buffer
111
+ if self.has_logs()
112
+ self.write_errorln('')
113
+
114
+ for line in self.log_buffer
115
+ self.write_log_line(line)
116
+ end
117
+
118
+ self.log_buffer = []
119
+ end
120
+ end
121
+
122
+ end
@@ -8,6 +8,8 @@ class ReporterFactory
8
8
  return new TAPReporter()
9
9
  elseif reporter_name == 'dot'
10
10
  return new DotMatrixReporter()
11
+ elseif reporter_name == 'fivemat'
12
+ return new FivematReporter()
11
13
  else
12
14
  return new SpecReporter()
13
15
  end
@@ -25,7 +25,13 @@ class SpecRunner
25
25
  did_fail = false
26
26
  context = self.call_hook('describe')
27
27
  reporter.on_context_start(context, stats)
28
- self.call_hook('before')
28
+
29
+ try
30
+ self.call_hook('before')
31
+ catch /.*/
32
+ self.report_hook_error('before', context, reporter, stats)
33
+ self.stopped = true
34
+ end
29
35
 
30
36
  for method in keys(spec)
31
37
  if self.stopped
@@ -42,7 +48,7 @@ class SpecRunner
42
48
  try
43
49
  self.call_hook('before_each')
44
50
  timer.start()
45
- eval("spec.#{method}()")
51
+ res = call(self.spec[method], [], self.spec)
46
52
  timer.stop()
47
53
  self.call_hook('after_each')
48
54
 
@@ -84,14 +90,30 @@ class SpecRunner
84
90
  end
85
91
  end
86
92
 
87
- self.call_hook('after')
93
+ try
94
+ unless self.stopped
95
+ self.call_hook('after')
96
+ end
97
+ catch /.*/
98
+ self.report_hook_error('after', context, reporter, stats)
99
+ end
100
+
88
101
  reporter.on_context_end(context, stats)
89
102
  end
90
103
 
104
+ defm report_hook_error(hook, context, reporter, stats)
105
+ meta = new SpecMeta(context, hook)
106
+
107
+ reporter.on_spec_start(meta, stats)
108
+
109
+ stats.inc_errors()
110
+ error = new VimError(v:exception)
111
+ reporter.on_spec_error(meta, error, stats)
112
+ end
113
+
91
114
  defm call_hook(hook)
92
- spec = self.spec
93
- if has_key(spec, hook)
94
- return eval("spec.#{hook}()");
115
+ if has_key(self.spec, hook)
116
+ return call(self.spec[hook], [], self.spec)
95
117
  else
96
118
  return "Undefined hook: #{hook}"
97
119
  end
@@ -105,7 +127,7 @@ class SpecRunner
105
127
  return method =~ '^it'
106
128
  end
107
129
 
108
- defm is_method_tagged(method)
130
+ defm is_tagged(method)
109
131
  return method =~ "_#{self.tag}$"
110
132
  end
111
133
 
@@ -113,7 +135,7 @@ class SpecRunner
113
135
  if self.tag == ''
114
136
  return self.is_test_method(method)
115
137
  else
116
- return self.is_test_method(method) && self.is_method_tagged(method)
138
+ return self.is_test_method(method) && self.is_tagged(method)
117
139
  end
118
140
  end
119
141
 
@@ -1,3 +1,3 @@
1
1
  module Speckle
2
- VERSION = "0.1.16"
2
+ VERSION = "0.1.17"
3
3
  end
data/lib/speckle.riml CHANGED
@@ -37,6 +37,7 @@ riml_include 'spec_reporter.riml'
37
37
  riml_include 'min_reporter.riml'
38
38
  riml_include 'tap_reporter.riml'
39
39
  riml_include 'dotmatrix_reporter.riml'
40
+ riml_include 'fivemat_reporter.riml'
40
41
  riml_include 'reporter_factory.riml'
41
42
 
42
43
  "" runners
@@ -138,7 +139,7 @@ class g:Speckle
138
139
 
139
140
  functions = ''
140
141
  :redir => functions
141
- :silent function /SpecConstructor$/
142
+ :silent function /Spec\(_.*Constructor\|Constructor\)$/
142
143
  :redir END
143
144
 
144
145
  self.add_specs(runner, functions)
@@ -0,0 +1,54 @@
1
+ riml_include 'dsl.riml'
2
+
3
+ class BeforeErrorHookSpec_err
4
+ defm describe
5
+ return 'BeforeErrorHookSpec'
6
+ end
7
+
8
+ defm before
9
+ a = c
10
+ end
11
+
12
+ end
13
+
14
+ class BeforeEachHookSpec_err
15
+ defm describe
16
+ return 'Before_each hooks'
17
+ end
18
+
19
+ defm before_each
20
+ a = b
21
+ end
22
+
23
+ defm it_has_stuff_from_before_each
24
+ expect(self.stuff).to_equal('foo')
25
+ end
26
+
27
+ end
28
+
29
+ class AfterErrorHookSpec_err
30
+ defm describe
31
+ return 'AfterErrorHookSpec'
32
+ end
33
+
34
+ defm after
35
+ a = b
36
+ end
37
+
38
+ end
39
+
40
+ class AfterEachHookSpec_err
41
+ defm describe
42
+ return 'Before_each hooks'
43
+ end
44
+
45
+ defm after_each
46
+ a = b
47
+ end
48
+
49
+ defm it_has_stuff_from_before_each
50
+ expect(self.stuff).to_equal('foo')
51
+ end
52
+
53
+ end
54
+
@@ -0,0 +1,29 @@
1
+ riml_include 'dsl.riml'
2
+
3
+ class VariousErrorsSpec
4
+
5
+ defm describe
6
+ return 'VariousErrorsSpec'
7
+ end
8
+
9
+ defm it_has_unknown_variable
10
+ get_logger().info('unknown variable')
11
+ a = b
12
+ end
13
+
14
+ defm it_has_custom_throw
15
+ get_logger().info('custom throw')
16
+ throw 'some error'
17
+ end
18
+
19
+ defm it_has_unknown_function
20
+ get_logger().error('unknown_function')
21
+ CallFooFunction()
22
+ end
23
+
24
+ defm it_has_assertion_error
25
+ get_logger().info('regular assertion')
26
+ expect(true).to_be_false()
27
+ end
28
+
29
+ end
data/speckle.gemspec CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |s|
21
21
 
22
22
  s.required_ruby_version = '>= 1.9.2'
23
23
 
24
- s.add_dependency 'riml', '~> 0.3.0'
24
+ s.add_dependency 'riml', '~> 0.3.1'
25
25
  s.add_dependency 'rake', '~> 10.1.0'
26
26
  s.add_dependency 'bundler', '~> 1.3'
27
27
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: speckle
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.16
4
+ version: 0.1.17
5
5
  platform: ruby
6
6
  authors:
7
7
  - Darshan Sawardekar
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-09-08 00:00:00.000000000 Z
11
+ date: 2013-09-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: riml
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ~>
18
18
  - !ruby/object:Gem::Version
19
- version: 0.3.0
19
+ version: 0.3.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ~>
25
25
  - !ruby/object:Gem::Version
26
- version: 0.3.0
26
+ version: 0.3.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -130,6 +130,7 @@ files:
130
130
  - lib/matchers/within_matcher.riml
131
131
  - lib/reporters/base_reporter.riml
132
132
  - lib/reporters/dotmatrix_reporter.riml
133
+ - lib/reporters/fivemat_reporter.riml
133
134
  - lib/reporters/min_reporter.riml
134
135
  - lib/reporters/reporter_factory.riml
135
136
  - lib/reporters/spec_reporter.riml
@@ -185,6 +186,8 @@ files:
185
186
  - spec/speckle_mode_spec.riml
186
187
  - spec/stacktrace_spec.riml
187
188
  - spec/tagged_spec.riml
189
+ - spec_errors/hook_errors_spec.riml
190
+ - spec_errors/various_errors_spec.riml
188
191
  - speckle.gemspec
189
192
  homepage: http://github.com/dsawardekar/speckle
190
193
  licenses: