oojspec 0.0.7 → 0.0.8
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.
@@ -1,4 +1,6 @@
|
|
1
1
|
# =require buster/all
|
2
|
+
# =require_self
|
3
|
+
# =require ./progress
|
2
4
|
|
3
5
|
window.oojspec = new class OojspecRunner
|
4
6
|
constructor: ->
|
@@ -8,12 +10,13 @@ window.oojspec = new class OojspecRunner
|
|
8
10
|
@assertions = buster.assertions
|
9
11
|
(logFormatter = buster.create buster.format).quoteStrings = false
|
10
12
|
@assertions.format = buster.bind logFormatter, "ascii"
|
11
|
-
@assertions.on 'pass', => @stats.
|
12
|
-
@assertions.on 'failure', => @stats.
|
13
|
+
@assertions.on 'pass', => @stats.assertions++
|
14
|
+
@assertions.on 'failure', => @stats.failures++
|
13
15
|
#@runner.on 'context:start', => @stats.contexts++
|
14
|
-
@runner.on 'test:timeout',
|
15
|
-
@runner.on 'test:error',
|
16
|
+
@runner.on 'test:timeout', => @stats.timeouts++; @assertions.emit 'failure'
|
17
|
+
@runner.on 'test:error', => @stats.errors++
|
16
18
|
@runner.on 'test:deferred', => @stats.deferred++
|
19
|
+
@runner.on 'oojspec:examples:add', (count)=> @stats.tests += count
|
17
20
|
|
18
21
|
@stats =
|
19
22
|
contexts: 0
|
@@ -30,13 +33,13 @@ window.oojspec = new class OojspecRunner
|
|
30
33
|
runSpecs: ->
|
31
34
|
@reporter = buster.reporters.html.create detectCssPath: false
|
32
35
|
@reporter.listen @runner
|
36
|
+
d.processDsl @runner for d in @descriptions
|
33
37
|
@runner.emit 'suite:start', name: "Specs"
|
34
38
|
@runNextDescription()
|
35
39
|
|
36
40
|
runNextDescription: =>
|
37
41
|
(@runner.emit 'suite:end', @stats; return) unless @descriptions.length
|
38
|
-
|
39
|
-
@descriptions.shift().run @runner, @assertions, null, false, @runNextDescription
|
42
|
+
@descriptions.shift().run @assertions, @runNextDescription
|
40
43
|
|
41
44
|
describe: (description, block)=>
|
42
45
|
@stats.contexts++ # only root descriptions will be count
|
@@ -53,14 +56,23 @@ class Description
|
|
53
56
|
@block = @description
|
54
57
|
@description = @block.description or @block.name
|
55
58
|
|
56
|
-
|
57
|
-
@runner.emit 'context:start', name: @description
|
59
|
+
processDsl: (@runner, @binding, @bare)->
|
58
60
|
@dsl = new DescribeDsl
|
59
|
-
|
61
|
+
(@block.runSpecs or @block.prototype?.runSpecs) and @detectBindingError()
|
60
62
|
|
61
|
-
|
63
|
+
@binding or= {}
|
64
|
+
@injectDsl() unless @bare
|
65
|
+
if @block.runSpecs or @block.prototype?.runSpecs
|
66
|
+
@binding.runSpecs @dsl
|
67
|
+
else
|
68
|
+
@block.call @binding, @dsl
|
69
|
+
@runner.emit 'oojspec:examples:add', @dsl._examplesCount_
|
70
|
+
@removeDsl() unless @bare
|
71
|
+
@bare or= @binding.bare
|
62
72
|
|
63
|
-
|
73
|
+
d.processDsl @runner, @binding, @bare for d in @dsl._examples_ when d instanceof Description
|
74
|
+
|
75
|
+
detectBindingError: ->
|
64
76
|
try
|
65
77
|
@binding = if @block.prototype then new @block else @block
|
66
78
|
if @binding and not (@bare = @block.bare)
|
@@ -68,10 +80,21 @@ class Description
|
|
68
80
|
throw new Error("'#{reserved}' method is reserved for oojspec usage only")
|
69
81
|
catch e
|
70
82
|
e.name = "syntax error"
|
71
|
-
@
|
72
|
-
|
73
|
-
|
74
|
-
|
83
|
+
@bindingError = e
|
84
|
+
|
85
|
+
injectDsl: -> @binding[p] = v for p, v of @dsl; return
|
86
|
+
|
87
|
+
removeDsl: -> delete @binding[p] for p in RESERVED_FOR_DESCRIPTION_DSL; return
|
88
|
+
|
89
|
+
run: (@assertions, @onFinish, @beforeBlocks = [], @afterBlocks = [])->
|
90
|
+
@runner.emit 'context:start', name: @description
|
91
|
+
if @bindingError
|
92
|
+
@runner.emit 'test:error', name: @description, error: @bindingError
|
93
|
+
@onDescriptionFinished @bindingError
|
94
|
+
else
|
95
|
+
@doRun()
|
96
|
+
|
97
|
+
doRun: -> @runAround @beforeBlocks, @afterBlocks, @onDescriptionFinished, @processDescriptionBlock
|
75
98
|
|
76
99
|
onDescriptionFinished: (error)=>
|
77
100
|
if error and not error.handled
|
@@ -84,29 +107,16 @@ class Description
|
|
84
107
|
new AroundBlock(befores, afters, block).run @runner, @assertions, @binding, @bare, onFinish
|
85
108
|
|
86
109
|
processDescriptionBlock: (onFinish)=>
|
87
|
-
@binding or= {}
|
88
|
-
@injectDsl() unless @bare
|
89
|
-
if @block.runSpecs or @block.prototype?.runSpecs
|
90
|
-
@binding.runSpecs @dsl
|
91
|
-
else
|
92
|
-
@block.call @binding, @dsl
|
93
|
-
@removeDsl() unless @bare
|
94
|
-
@bare or= @binding.bare
|
95
110
|
@runAround @dsl._beforeAllBlocks_, @dsl._afterAllBlocks_, onFinish, (@onExamplesFinished)=>
|
96
111
|
@runNextStep()
|
97
112
|
|
98
|
-
injectDsl: -> @binding[p] = v for p, v of @dsl; return
|
99
|
-
|
100
|
-
removeDsl: -> delete @binding[p] for p in RESERVED_FOR_DESCRIPTION_DSL; return
|
101
|
-
|
102
113
|
runNextStep: =>
|
103
114
|
(@onExamplesFinished(); return) unless @dsl._examples_.length
|
104
115
|
nextStep = @dsl._examples_.shift()
|
105
116
|
(@reportDeferred(nextStep.description); @runNextStep(); return) if nextStep.pending
|
106
117
|
nextTick =
|
107
118
|
if nextStep instanceof Description then =>
|
108
|
-
nextStep.run @
|
109
|
-
@dsl._beforeBlocks_, @dsl._afterBlocks_
|
119
|
+
nextStep.run @assertions, @runNextStep, @dsl._beforeBlocks_, @dsl._afterBlocks_
|
110
120
|
else => # ExampleWithHooks
|
111
121
|
nextStep.run @runner, @assertions, @binding, @bare, @onExampleFinished
|
112
122
|
setTimeout nextTick, 0
|
@@ -138,6 +148,7 @@ class DescribeDsl
|
|
138
148
|
@_afterBlocks_ = []
|
139
149
|
@_afterAllBlocks_ = []
|
140
150
|
@_examples_ = []
|
151
|
+
@_examplesCount_ = 0 # only examples, not describes
|
141
152
|
# aliases:
|
142
153
|
@it = @specify = @example
|
143
154
|
@context = @describe
|
@@ -151,8 +162,11 @@ class DescribeDsl
|
|
151
162
|
@_examples_.push new Description(description, block, @_beforeBlocks_, @_afterBlocks_)
|
152
163
|
example: (description, block)=>
|
153
164
|
throw new Error("Examples must have a description and a block") unless description and block
|
165
|
+
@_examplesCount_++
|
154
166
|
@_examples_.push new ExampleWithHooks(description, @_beforeBlocks_, @_afterBlocks_, block)
|
155
|
-
pending: (description)=>
|
167
|
+
pending: (description)=>
|
168
|
+
@_examplesCount_++
|
169
|
+
@_examples_.push {description, pending: true}
|
156
170
|
|
157
171
|
class AroundBlock
|
158
172
|
constructor: (@beforeBlocks, @afterBlocks, @block)->
|
@@ -0,0 +1,36 @@
|
|
1
|
+
new class ProgressStats
|
2
|
+
constructor: (@eh = oojspec.runner)->
|
3
|
+
@total = @count = 0
|
4
|
+
@eh.on 'suite:start', @createElements
|
5
|
+
@eh.on 'oojspec:examples:add', (count)=> @total += count
|
6
|
+
@eh.on 'test:success', => @addSuccess '. '
|
7
|
+
@eh.on 'test:deferred', => @addSuccess 'd '
|
8
|
+
@eh.on 'test:failure', => @addError 'F '
|
9
|
+
@eh.on 'test:error', => @addError 'E '
|
10
|
+
@eh.on 'test:timeout', => @addError 'T '
|
11
|
+
|
12
|
+
createElements: =>
|
13
|
+
@numericProgress = @addDivTo 'numeric-progress', document.body
|
14
|
+
@progressBar = @addDivTo 'progress-bar', document.body
|
15
|
+
@progress = @addDivTo 'progress', @progressBar
|
16
|
+
|
17
|
+
addDivTo: (id, to)->
|
18
|
+
div = document.createElement 'div'
|
19
|
+
div.id = id
|
20
|
+
to.appendChild div
|
21
|
+
div
|
22
|
+
|
23
|
+
addSuccess: (text)->
|
24
|
+
el = @addAssertElement text
|
25
|
+
el.className = 'deferred' if text is 'd '
|
26
|
+
|
27
|
+
addError: (text)-> e = @addAssertElement text; e.className = @progress.className = 'fail'
|
28
|
+
|
29
|
+
addAssertElement: (text)->
|
30
|
+
@count++
|
31
|
+
e = document.createElement('span')
|
32
|
+
e.textContent = text
|
33
|
+
@progress.appendChild e
|
34
|
+
@progress.style.width = @count / @total * 100 + '%'
|
35
|
+
@numericProgress.textContent = "#{@count} / #{@total}"
|
36
|
+
e
|
@@ -0,0 +1,25 @@
|
|
1
|
+
/* Progress bar */
|
2
|
+
#progress-bar {
|
3
|
+
background-color: yellow;
|
4
|
+
padding: 0;
|
5
|
+
}
|
6
|
+
|
7
|
+
#progress {
|
8
|
+
color: darkgreen;
|
9
|
+
font-weight: bold;
|
10
|
+
background-color: lightgreen;
|
11
|
+
position: relative;
|
12
|
+
width: 0;
|
13
|
+
}
|
14
|
+
|
15
|
+
#progress.fail {
|
16
|
+
background-color: lightpink;
|
17
|
+
}
|
18
|
+
|
19
|
+
#progress > span.fail {
|
20
|
+
color: red;
|
21
|
+
}
|
22
|
+
|
23
|
+
#progress > span.deferred {
|
24
|
+
color: yellow;
|
25
|
+
}
|
@@ -1,21 +1,9 @@
|
|
1
|
-
/*
|
1
|
+
/*
|
2
|
+
=require buster/buster-test
|
3
|
+
=require_tree ./oojspec
|
4
|
+
*/
|
5
|
+
|
2
6
|
/* override background image for supporting IE7 */
|
3
7
|
.buster-test h1 .buster-logo {
|
4
8
|
background-image: url(<%= asset_path "buster/logo.png" %>);
|
5
9
|
}
|
6
|
-
|
7
|
-
/* override margin to use 0.2em on top and bottom instead of 1em at bottom only. */
|
8
|
-
.buster-test h1,
|
9
|
-
.buster-test h2,
|
10
|
-
.buster-test h3,
|
11
|
-
.buster-test h4,
|
12
|
-
.buster-test h5,
|
13
|
-
.buster-test h6,
|
14
|
-
.buster-test p {
|
15
|
-
margin: 0.2em 0;
|
16
|
-
}
|
17
|
-
|
18
|
-
/* was 0 0 1em 15px */
|
19
|
-
.buster-test ul {
|
20
|
-
margin: 0.2em 0 0.2em 15px;
|
21
|
-
}
|
data/lib/oojspec/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oojspec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-08-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: coffee-rails
|
@@ -52,8 +52,10 @@ extensions: []
|
|
52
52
|
extra_rdoc_files: []
|
53
53
|
files:
|
54
54
|
- app/views/oojspec/runner.html.erb
|
55
|
+
- lib/assets/javascripts/progress.js.coffee
|
55
56
|
- lib/assets/javascripts/oojspec.js.coffee
|
56
57
|
- lib/assets/stylesheets/oojspec.css.erb
|
58
|
+
- lib/assets/stylesheets/oojspec/progress.css
|
57
59
|
- lib/tasks/oojspec_tasks.rake
|
58
60
|
- lib/oojspec/engine.rb
|
59
61
|
- lib/oojspec/version.rb
|
@@ -85,7 +87,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
85
87
|
version: '0'
|
86
88
|
segments:
|
87
89
|
- 0
|
88
|
-
hash:
|
90
|
+
hash: -2878099860768326426
|
89
91
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
90
92
|
none: false
|
91
93
|
requirements:
|
@@ -94,7 +96,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
94
96
|
version: '0'
|
95
97
|
segments:
|
96
98
|
- 0
|
97
|
-
hash:
|
99
|
+
hash: -2878099860768326426
|
98
100
|
requirements: []
|
99
101
|
rubyforge_project:
|
100
102
|
rubygems_version: 1.8.24
|