speckle 0.1.10 → 0.1.11
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 +8 -8
- data/Rakefile +22 -6
- data/lib/dsl.riml +10 -1
- data/lib/logger/echo_log_writer.riml +10 -0
- data/lib/logger/file_log_writer.riml +27 -0
- data/lib/logger/logger.riml +114 -0
- data/lib/reporters/base_reporter.riml +30 -0
- data/lib/reporters/dotmatrix_reporter.riml +3 -0
- data/lib/reporters/min_reporter.riml +5 -0
- data/lib/reporters/spec_reporter.riml +9 -0
- data/lib/reporters/tap_reporter.riml +3 -1
- data/lib/runners/spec_runner.riml +2 -3
- data/lib/speckle/cli/environment.rb +1 -1
- data/lib/speckle/version.rb +1 -1
- data/lib/speckle.riml +6 -0
- data/lib/writers/file_writer.riml +2 -2
- data/spec/logger/logger_spec.riml +15 -0
- data/spec/speckle/cli/environment_spec.rb +8 -1
- data/spec/speckle_mode_spec.riml +12 -0
- metadata +9 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
OGZjMjdkZTQ4NmZlZTI0NjIxYTMxYmI2ZTFmYTUxMDBmMTNhNTc1Zg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZDU0ZmUxZWY1MGU2ODJmMTMzMDQ3OTEwMWU0OTQ1MGQ4NjdkNzhiYw==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZjI3MWU4OTBhMzc0NDI0MzA4OTE1OWI1YmVjZTU2NGI5NDg4NWUxYzFkN2Vh
|
10
|
+
MzlhYWM4NmZhZjhiOWU3NWNiN2Q1NzA3YTc3M2ZlZGUwMjFlZTNlOGZhYzVh
|
11
|
+
ZjVkMWUwMmVjYWMxZDVhNmI5OGUwYzJmNjMyNTM4MTk4Mjk3OWU=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
OWMxYTk3MGEzZGYyNzJmNjFjYjI4ZWFjNWIxNmQzZDJjNjI1NWYwZmRiN2Rj
|
14
|
+
YTYyMDAyYWYwMDcxOTUzYWVmN2Q0MzBiMjBmOGYzNDE1ZjdkZGZiYzZiNmZk
|
15
|
+
ZjNhZDQ3ZGJhZGUwY2IyMjRiNWYyMGEzOTVmOGQ5MGM5YzI3YTY=
|
data/Rakefile
CHANGED
@@ -1,16 +1,30 @@
|
|
1
1
|
require 'bundler/setup'
|
2
2
|
require 'bundler/gem_tasks'
|
3
|
-
require 'rspec/core/rake_task'
|
4
3
|
|
5
4
|
desc 'Default task :compile_and_test'
|
6
5
|
task :default => :test
|
7
6
|
|
8
|
-
#
|
9
|
-
|
10
|
-
|
7
|
+
# We need the RSpec rake tasks to run spec
|
8
|
+
# but we don't want users of speckle to need rspec
|
9
|
+
# Eventually we want to switch from the cli calling
|
10
|
+
# the Rakefile to the Rakefile calling the cli.
|
11
|
+
begin
|
12
|
+
# :spec task from rspec
|
13
|
+
require 'rspec/core/rake_task'
|
14
|
+
desc "Run speckle's rspec tests"
|
15
|
+
RSpec::Core::RakeTask.new(:spec)
|
16
|
+
|
17
|
+
desc 'Run rspec and speckle tests'
|
18
|
+
task :test => [:spec, 'speckle:vim_version', 'speckle:compile_and_test']
|
19
|
+
rescue LoadError
|
20
|
+
if ENV.has_key?('DEBUG')
|
21
|
+
puts 'rspec/core/rake_task not found'
|
22
|
+
end
|
11
23
|
|
12
|
-
|
13
|
-
|
24
|
+
# no spec task in chain without rspec
|
25
|
+
desc 'Run rspec and speckle tests'
|
26
|
+
task :test => ['speckle:vim_version', 'speckle:compile_and_test']
|
27
|
+
end
|
14
28
|
|
15
29
|
desc 'Clean temporary files'
|
16
30
|
task :clean => ['speckle:clean']
|
@@ -176,6 +190,8 @@ namespace :speckle do
|
|
176
190
|
cmd += "-u NONE -i NONE"
|
177
191
|
end
|
178
192
|
|
193
|
+
cmd += " --cmd 'let g:speckle_mode = 1'"
|
194
|
+
|
179
195
|
cmd
|
180
196
|
end
|
181
197
|
|
data/lib/dsl.riml
CHANGED
@@ -4,7 +4,6 @@ if !exists("g:speckle_env")
|
|
4
4
|
g:speckle_env.assertions = 0
|
5
5
|
end
|
6
6
|
|
7
|
-
|
8
7
|
def expect(actual)
|
9
8
|
env = g:speckle_env
|
10
9
|
env.actual = actual
|
@@ -27,3 +26,13 @@ def define_matcher(ok_name, not_ok_name, matcher)
|
|
27
26
|
matchers = get_matchers()
|
28
27
|
matchers.define_pair(ok_name, not_ok_name, matcher)
|
29
28
|
end
|
29
|
+
|
30
|
+
def get_logger()
|
31
|
+
unless exists('g:logger')
|
32
|
+
g:logger = g:LoggerConstructor()
|
33
|
+
end
|
34
|
+
|
35
|
+
return g:logger
|
36
|
+
end
|
37
|
+
|
38
|
+
logger = get_logger()
|
@@ -0,0 +1,27 @@
|
|
1
|
+
class FileLogWriter
|
2
|
+
def initialize
|
3
|
+
self.writer = new FileWriter()
|
4
|
+
self.colorize = true
|
5
|
+
end
|
6
|
+
|
7
|
+
defm set_log_file(log_file)
|
8
|
+
self.writer.set_output_file(log_file)
|
9
|
+
end
|
10
|
+
|
11
|
+
defm set_colorize(colorize)
|
12
|
+
self.colorize = colorize
|
13
|
+
end
|
14
|
+
|
15
|
+
defm get_colorize()
|
16
|
+
return self.colorize
|
17
|
+
end
|
18
|
+
|
19
|
+
defm log(message)
|
20
|
+
self.writer.writeln(message)
|
21
|
+
end
|
22
|
+
|
23
|
+
defm flush()
|
24
|
+
self.writer.flush()
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
@@ -0,0 +1,114 @@
|
|
1
|
+
class Logger
|
2
|
+
def initialize
|
3
|
+
self.messages = []
|
4
|
+
self.log_writers = []
|
5
|
+
self.level = 'info'
|
6
|
+
|
7
|
+
self.levels = {}
|
8
|
+
self.levels.all = 0
|
9
|
+
self.levels.debug = 1
|
10
|
+
self.levels.info = 2
|
11
|
+
self.levels.warn = 3
|
12
|
+
self.levels.error = 4
|
13
|
+
self.levels.fatal = 5
|
14
|
+
self.levels.off = 6
|
15
|
+
|
16
|
+
self.colors = {}
|
17
|
+
self.colors.all = 0
|
18
|
+
self.colors.debug = 0
|
19
|
+
self.colors.info = 0
|
20
|
+
self.colors.warn = '31m'
|
21
|
+
self.colors.error = '31m'
|
22
|
+
self.colors.fatal = '31m'
|
23
|
+
self.colors.off = 0
|
24
|
+
end
|
25
|
+
|
26
|
+
defm add_log_writer(log_writer)
|
27
|
+
add(self.log_writers, log_writer)
|
28
|
+
end
|
29
|
+
|
30
|
+
defm set_level(level)
|
31
|
+
self.level = level
|
32
|
+
end
|
33
|
+
|
34
|
+
defm get_level
|
35
|
+
return self.level
|
36
|
+
end
|
37
|
+
|
38
|
+
defm get_level_num(level)
|
39
|
+
return self.levels[level]
|
40
|
+
end
|
41
|
+
|
42
|
+
defm is_loggable(level)
|
43
|
+
return self.get_level_num(level) >= self.get_level_num(self.level)
|
44
|
+
end
|
45
|
+
|
46
|
+
defm do_log(args, level)
|
47
|
+
if self.is_loggable(level)
|
48
|
+
msg = self.args_to_message(args)
|
49
|
+
self.send_log(msg, level)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
defm args_to_message(args)
|
54
|
+
return join(args, ' ')
|
55
|
+
end
|
56
|
+
|
57
|
+
defm send_log(msg, level)
|
58
|
+
color_msg = self.to_color(msg, level)
|
59
|
+
|
60
|
+
for log_writer in self.log_writers
|
61
|
+
if log_writer.get_colorize()
|
62
|
+
log_writer.log(color_msg)
|
63
|
+
else
|
64
|
+
log_writer.log(msg)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
defm to_color(msg, level)
|
70
|
+
color = self.colors[level]
|
71
|
+
echo "msg=#{msg}, color=#{color}"
|
72
|
+
if color != 0
|
73
|
+
return "[#{color}#{msg}[0m"
|
74
|
+
else
|
75
|
+
return msg
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
defm debug(...)
|
80
|
+
self.do_log(a:000, 'debug')
|
81
|
+
end
|
82
|
+
|
83
|
+
defm info(...)
|
84
|
+
self.do_log(a:000, 'info')
|
85
|
+
end
|
86
|
+
|
87
|
+
defm log(...)
|
88
|
+
self.do_log(a:000, 'info')
|
89
|
+
end
|
90
|
+
|
91
|
+
defm warn(...)
|
92
|
+
self.do_log(a:000, 'warn')
|
93
|
+
end
|
94
|
+
|
95
|
+
defm error(...)
|
96
|
+
self.do_log(a:000, 'error')
|
97
|
+
end
|
98
|
+
|
99
|
+
defm fatal(...)
|
100
|
+
self.do_log(a:000, 'fatal')
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
104
|
+
|
105
|
+
def get_logger()
|
106
|
+
unless exists('g:logger')
|
107
|
+
g:logger = new Logger()
|
108
|
+
end
|
109
|
+
|
110
|
+
return g:logger
|
111
|
+
end
|
112
|
+
|
113
|
+
logger = get_logger()
|
114
|
+
|
@@ -1,6 +1,7 @@
|
|
1
1
|
class BaseReporter
|
2
2
|
def initialize()
|
3
3
|
self.colorize_output = true
|
4
|
+
self.log_buffer = []
|
4
5
|
end
|
5
6
|
|
6
7
|
defm set_writer(writer)
|
@@ -122,5 +123,34 @@ class BaseReporter
|
|
122
123
|
return self.to_red(self.get_cross_icon())
|
123
124
|
end
|
124
125
|
|
126
|
+
" log writer interface "
|
127
|
+
defm get_colorize
|
128
|
+
return self.get_colorize_output()
|
129
|
+
end
|
130
|
+
|
131
|
+
defm log(message)
|
132
|
+
add(self.log_buffer, message)
|
133
|
+
end
|
134
|
+
|
135
|
+
defm has_logs
|
136
|
+
return len(self.log_buffer) > 0
|
137
|
+
end
|
138
|
+
|
139
|
+
defm flush_log_buffer
|
140
|
+
if self.has_logs()
|
141
|
+
self.writer.writeln('')
|
142
|
+
|
143
|
+
for line in self.log_buffer
|
144
|
+
self.write_log_line(line)
|
145
|
+
end
|
146
|
+
|
147
|
+
self.writer.writeln('')
|
148
|
+
self.log_buffer = []
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
defm write_log_line(line)
|
153
|
+
self.writer.writeln("log: #{line}")
|
154
|
+
end
|
125
155
|
end
|
126
156
|
|
@@ -4,6 +4,7 @@ class DotMatrixReporter < BaseReporter
|
|
4
4
|
super()
|
5
5
|
self.dots = 0
|
6
6
|
self.line_buffer = []
|
7
|
+
self.log_messages = []
|
7
8
|
end
|
8
9
|
|
9
10
|
defm write(msg)
|
@@ -36,6 +37,8 @@ class DotMatrixReporter < BaseReporter
|
|
36
37
|
end
|
37
38
|
|
38
39
|
defm write_epilogue_separator()
|
40
|
+
self.flush_log_buffer()
|
41
|
+
|
39
42
|
self.writer.writeln('')
|
40
43
|
for line in self.line_buffer
|
41
44
|
self.writer.writeln(line)
|
@@ -3,6 +3,7 @@ class SpecReporter < BaseReporter
|
|
3
3
|
def initialize()
|
4
4
|
super()
|
5
5
|
self.indents = 0
|
6
|
+
self.log_buffer = []
|
6
7
|
end
|
7
8
|
|
8
9
|
defm write(msg)
|
@@ -25,12 +26,16 @@ class SpecReporter < BaseReporter
|
|
25
26
|
defm on_spec_pass(meta, stats)
|
26
27
|
duration_msg = self.get_duration_msg(meta)
|
27
28
|
self.write("#{self.get_tick()} #{meta.get_sentence()} #{duration_msg}")
|
29
|
+
self.indent(2)
|
30
|
+
self.flush_log_buffer()
|
31
|
+
self.unindent(2)
|
28
32
|
end
|
29
33
|
|
30
34
|
defm on_spec_failure(meta, err, stats)
|
31
35
|
self.write("#{self.get_cross()} #{self.to_red(meta.get_sentence())}")
|
32
36
|
self.indent(2)
|
33
37
|
self.write(self.to_red(err))
|
38
|
+
self.flush_log_buffer()
|
34
39
|
self.unindent(2)
|
35
40
|
end
|
36
41
|
|
@@ -55,4 +60,8 @@ class SpecReporter < BaseReporter
|
|
55
60
|
super()
|
56
61
|
end
|
57
62
|
|
63
|
+
defm write_log_line(line)
|
64
|
+
self.write("log: #{line}")
|
65
|
+
end
|
66
|
+
|
58
67
|
end
|
@@ -13,25 +13,27 @@ class TAPReporter < BaseReporter
|
|
13
13
|
duration_msg = self.get_duration_msg(meta)
|
14
14
|
preamble = self.get_preamble('ok', stats.get_count(), meta.get_context())
|
15
15
|
self.writer.writeln("#{preamble} ##{name} #{duration_msg}")
|
16
|
+
self.flush_log_buffer()
|
16
17
|
end
|
17
18
|
|
18
19
|
defm on_spec_failure(meta, err, stats)
|
19
20
|
name = meta.get_sentence()
|
20
21
|
preamble = self.get_preamble('not ok', stats.get_count(), meta.get_context())
|
21
22
|
self.writer.writeln("#{preamble} ##{name} - #{err}")
|
23
|
+
self.flush_log_buffer()
|
22
24
|
end
|
23
25
|
|
24
26
|
defm on_spec_error(meta, err, stats)
|
25
27
|
name = meta.get_sentence()
|
26
28
|
preamble = self.get_preamble('not ok', stats.get_count(), meta.get_context())
|
27
29
|
self.writer.writeln("#{preamble} ##{name} - #{err}")
|
30
|
+
self.flush_log_buffer()
|
28
31
|
end
|
29
32
|
|
30
33
|
defm on_spec_pending(meta, stats)
|
31
34
|
end
|
32
35
|
|
33
36
|
defm get_preamble(status, count, context)
|
34
|
-
""status = status . repeat(' ', 6 - len(status))
|
35
37
|
msg = "#{status} #{count} - #{context}"
|
36
38
|
return msg
|
37
39
|
end
|
@@ -40,13 +40,12 @@ class SpecRunner
|
|
40
40
|
result = 0
|
41
41
|
|
42
42
|
try
|
43
|
-
timer.start()
|
44
|
-
|
45
43
|
self.call_hook('before_each')
|
44
|
+
timer.start()
|
46
45
|
eval("spec.#{method}()")
|
46
|
+
timer.stop()
|
47
47
|
self.call_hook('after_each')
|
48
48
|
|
49
|
-
timer.stop()
|
50
49
|
meta.set_duration(timer.get_duration())
|
51
50
|
|
52
51
|
stats.inc_passes()
|
data/lib/speckle/version.rb
CHANGED
data/lib/speckle.riml
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
"" utils
|
2
|
+
riml_include 'logger.riml'
|
3
|
+
riml_include 'echo_log_writer.riml'
|
2
4
|
riml_include 'spec_timer.riml'
|
3
5
|
riml_include 'spec_meta.riml'
|
4
6
|
riml_include 'statistician.riml'
|
@@ -27,6 +29,7 @@ riml_include 'file_writer.riml'
|
|
27
29
|
riml_include 'console_writer.riml'
|
28
30
|
riml_include 'buffer_writer.riml'
|
29
31
|
riml_include 'writer_factory.riml'
|
32
|
+
riml_include 'file_log_writer.riml'
|
30
33
|
|
31
34
|
"" reporters
|
32
35
|
riml_include 'base_reporter.riml'
|
@@ -87,6 +90,9 @@ class Speckle
|
|
87
90
|
reporter = factory.get_reporter(self.get_reporter_name())
|
88
91
|
reporter.set_writer(writer)
|
89
92
|
|
93
|
+
logger = get_logger()
|
94
|
+
logger.add_log_writer(reporter)
|
95
|
+
|
90
96
|
return reporter
|
91
97
|
end
|
92
98
|
|
@@ -0,0 +1,15 @@
|
|
1
|
+
riml_include 'dsl.riml'
|
2
|
+
|
3
|
+
class LoggerSpec
|
4
|
+
defm describe
|
5
|
+
return 'LoggerSpec'
|
6
|
+
end
|
7
|
+
|
8
|
+
defm it_logs_a_message
|
9
|
+
logger = get_logger()
|
10
|
+
logger.info('Hello World')
|
11
|
+
logger.debug('A debug message')
|
12
|
+
logger.warn('A test warning')
|
13
|
+
logger.error('An error warning')
|
14
|
+
end
|
15
|
+
end
|
@@ -261,10 +261,16 @@ module Speckle
|
|
261
261
|
expect('').to_not have_default_option('tag')
|
262
262
|
end
|
263
263
|
|
264
|
-
it 'takes tag
|
264
|
+
it 'takes tag from --tag' do
|
265
265
|
expect(['--tag', 'focus']).to yield_option_value('tag', 'focus')
|
266
266
|
end
|
267
267
|
|
268
|
+
it 'does not have duplicate inputs', :foo => true do
|
269
|
+
env = Environment.new
|
270
|
+
opts = env.load(['spec', 'spec'])
|
271
|
+
expect(opts.inputs.length).to eq(1)
|
272
|
+
end
|
273
|
+
|
268
274
|
end
|
269
275
|
|
270
276
|
describe 'Complete CLI options' do
|
@@ -300,5 +306,6 @@ module Speckle
|
|
300
306
|
end
|
301
307
|
|
302
308
|
end
|
309
|
+
|
303
310
|
end
|
304
311
|
end
|
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.
|
4
|
+
version: 0.1.11
|
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-08-
|
11
|
+
date: 2013-08-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: riml
|
@@ -110,6 +110,9 @@ files:
|
|
110
110
|
- bin/speckle
|
111
111
|
- lib/dsl.riml
|
112
112
|
- lib/expectation.riml
|
113
|
+
- lib/logger/echo_log_writer.riml
|
114
|
+
- lib/logger/file_log_writer.riml
|
115
|
+
- lib/logger/logger.riml
|
113
116
|
- lib/matchers/above_matcher.riml
|
114
117
|
- lib/matchers/atleast_matcher.riml
|
115
118
|
- lib/matchers/atmost_matcher.riml
|
@@ -157,6 +160,7 @@ files:
|
|
157
160
|
- lib/writers/writer_factory.riml
|
158
161
|
- spec/after_hooks_spec.riml
|
159
162
|
- spec/before_hooks_spec.riml
|
163
|
+
- spec/logger/logger_spec.riml
|
160
164
|
- spec/matchers/above_matcher_spec.riml
|
161
165
|
- spec/matchers/atleast_matcher_spec.riml
|
162
166
|
- spec/matchers/atmost_matcher_spec.riml
|
@@ -178,6 +182,7 @@ files:
|
|
178
182
|
- spec/speckle/list/extension_transformer_spec.rb
|
179
183
|
- spec/speckle/list/file_content_filter_spec.rb
|
180
184
|
- spec/speckle/list/pattern_filter_spec.rb
|
185
|
+
- spec/speckle_mode_spec.riml
|
181
186
|
- spec/tagged_spec.riml
|
182
187
|
- speckle.gemspec
|
183
188
|
homepage: http://github.com/dsawardekar/speckle
|
@@ -207,6 +212,7 @@ summary: Compiles *_spec.riml spec files into *.vim files and runs them inside v
|
|
207
212
|
test_files:
|
208
213
|
- spec/after_hooks_spec.riml
|
209
214
|
- spec/before_hooks_spec.riml
|
215
|
+
- spec/logger/logger_spec.riml
|
210
216
|
- spec/matchers/above_matcher_spec.riml
|
211
217
|
- spec/matchers/atleast_matcher_spec.riml
|
212
218
|
- spec/matchers/atmost_matcher_spec.riml
|
@@ -228,4 +234,5 @@ test_files:
|
|
228
234
|
- spec/speckle/list/extension_transformer_spec.rb
|
229
235
|
- spec/speckle/list/file_content_filter_spec.rb
|
230
236
|
- spec/speckle/list/pattern_filter_spec.rb
|
237
|
+
- spec/speckle_mode_spec.riml
|
231
238
|
- spec/tagged_spec.riml
|