speckle 0.1.10 → 0.1.11
Sign up to get free protection for your applications and to get access to all the features.
- 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
|