oojspec 0.0.9 → 0.1.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: 8744b2c6b9c6be58bbd8eb3b566c54bae6dda38e
4
- data.tar.gz: 9e6d34de2357feeb77a41663e8024dc16bf389fe
3
+ metadata.gz: 5095c2b9f5123ab0c683a7585bd33f32b9946fa8
4
+ data.tar.gz: b4dd0179a1f8bbf269a7c08e87160460a410e0cb
5
5
  SHA512:
6
- metadata.gz: b93bcf5981587f22cf10e3fbd2a901c869c965804e34d6f05c69c620a48b0e28b904c760c5b1b134f275eb4dfc6052ae24f602995e2c6a428cc68b05edf5e4ae
7
- data.tar.gz: e02c4ded0fce6d1b47b649bded82d9190ab38b553beb5ddcecec975e8b737f8c0863e2c5be66686fa827869b3197b37513fe7dc0778641227a181f438b2a4d9c
6
+ metadata.gz: 929c92a8a444716ff67357d63ee03642b0eaf7ce53fa9d4d1f5abb35c29bec1929396ba8b98eefc2776dc5b1d610809b12bcbb8bb15d2f70982c133824470036
7
+ data.tar.gz: 1b6257da1a39b80d4f8599384207ebad5ba5fe22dc63887430f073cd68290d2588a57d4d66acf5e663291295f3abd1f394817820fa4af414cd48b46e5671ce0d
data/README.md CHANGED
@@ -88,7 +88,23 @@ context.
88
88
  In contrast `oojspec` will only export `describe`. The other allowed features will be available
89
89
  depending on the context. Inside a description `example`, `specify`, `it`, `xit`, `pending` and
90
90
  `describe` will be available. Inside an example `expect`, `assert`, `waitsFor` and `runs` will be
91
- available .
91
+ available.
92
+
93
+ # Custom events
94
+
95
+ Oojspec supports custom events as well since v0.1.0 in case you want to notify and
96
+ listen to custom events:
97
+
98
+ ```coffeescript
99
+ oojspec.on 'my-suite-start', (opts)-> console.log 'suite has started', opts
100
+ oojspec.on 'my-suite-end', -> console.log 'suite has ended'
101
+ oojspec.notify 'my-suite-start', option1: 1, option2: 'any'
102
+ oojspec.describe 'some description', -> @example 'it passes', -> @console.log 'suite is running'
103
+ oojspec.notify 'my-suite-end'
104
+
105
+ # this will log 'suite has started', {option1: 1, option2: 'any'},
106
+ 'suite is running' and finally 'suite has ended'
107
+ ```
92
108
 
93
109
  # CoffeeScript?! Really?!
94
110
 
@@ -0,0 +1,20 @@
1
+ <!doctype html>
2
+ <html>
3
+ <head>
4
+ <meta http-equiv="content-type" content="text/html; charset=utf-8">
5
+
6
+ <title>OOJSpec Test Runner</title>
7
+
8
+ <%= javascript_include_tag "oojspec/iframe-runner" %>
9
+ <%= javascript_tag "oojspec.exposeAll()" unless Rails.configuration.sandbox_assets.options[:skip_oojspec_expose] %>
10
+
11
+ <% @stylesheets.each do |css| -%>
12
+ <%= stylesheet_link_tag css %>
13
+ <% end -%>
14
+
15
+ <%= javascript_include_tag @tests.first %>
16
+
17
+ </head>
18
+ <body>
19
+ </body>
20
+ </html>
@@ -8,18 +8,12 @@
8
8
  <%= stylesheet_link_tag "oojspec" %>
9
9
  <%= javascript_include_tag "oojspec" %>
10
10
  <%= javascript_tag "oojspec.exposeAll()" unless Rails.configuration.sandbox_assets.options[:skip_oojspec_expose] %>
11
-
12
- <% @stylesheets.each do |css| -%>
13
- <%= stylesheet_link_tag css %>
14
- <% end -%>
15
-
16
- <% @tests.each do |test| -%>
17
- <%= javascript_include_tag test %>
18
- <% end -%>
19
11
  </head>
20
12
  <body>
21
-
22
- <%= javascript_tag "oojspec.autorun()" %>
13
+ <% @tests.each do |test| -%>
14
+ <iframe src="<%= sandbox_assets_engine.sandbox_assets_iframe_path test %>"
15
+ onload="oojspec.onIFrameLoaded(this)" style="display: none"
16
+ width="100%" height="500px"></iframe>
17
+ <% end -%>
23
18
  </body>
24
19
  </html>
25
-
@@ -0,0 +1,18 @@
1
+ extend = (extended, extender)-> extended[p] = v for p, v of extender when p[0] isnt '_'
2
+
3
+ @oojspec or= new class IFrameOojspec
4
+ constructor: (@_oojspec = parent.oojspec)->
5
+ @_originalAssertions_ = @_oojspec.assertions
6
+ extend (@assertions = {}), @_originalAssertions_
7
+ @_deferredCalls_ = []
8
+ for m in ['describe', 'notify', 'on']
9
+ this[m] = do (m)=> => @_deferredCalls_.push [m, arguments]
10
+
11
+ run: ->
12
+ @_oojspec.on 'iframe-start', (w)=> @_oojspec.assertions = @assertions if w is window
13
+ @_oojspec.on 'iframe-end', (w)=> @_oojspec.assertions = @_originalAssertions_ if w is window
14
+ @_oojspec.notify 'iframe-start', window
15
+ @_oojspec[method] args... for [method, args] in @_deferredCalls_
16
+ @_oojspec.notify 'iframe-end', window
17
+
18
+ exposeAll: -> window.describe = @describe
@@ -14,6 +14,14 @@ _.extend oojspec, new class OojspecRunner
14
14
  # avoid too much parameters between methods, acts like a context:
15
15
  @params.events = @events
16
16
  @params.assertions = @assertions
17
+ @_initializeIFrameSupport()
18
+
19
+ _initializeIFrameSupport: ->
20
+ @_iframesLoadedCount = 0
21
+ @_iframeByWindow = {}
22
+ @_iframeWindows = []
23
+ @on 'iframe-start', (w)=> @_iframeByWindow[w].style.display = ''
24
+ @on 'iframe-end', (w)=> @_iframeByWindow[w].style.display = 'none'
17
25
 
18
26
  _registerEventHandlers: ->
19
27
  @assertions = buster.assertions
@@ -40,10 +48,24 @@ _.extend oojspec, new class OojspecRunner
40
48
  exposeAll: => window.describe = @describe
41
49
  autorun: => @runSpecs() unless @disableAutorun
42
50
 
51
+ # for tests in iframe support:
52
+ onIFrameLoaded: (iframe)=>
53
+ @_iframeByWindow[iframe.contentWindow] = iframe
54
+ @_iframeWindows.push(iframe.contentWindow)
55
+ if ++@_iframesLoadedCount is document.getElementsByTagName('iframe').length
56
+ w.oojspec.run() for w in @_iframeWindows
57
+ @autorun()
58
+
59
+ notify: (eventName, options)->
60
+ @descriptions.push new Notification(@events, eventName, options)
61
+
62
+ on: (eventName, eventHandler)->
63
+ @events.on "notification:#{eventName}", eventHandler
64
+
43
65
  runSpecs: =>
44
66
  @reporter = buster.reporters.html.create detectCssPath: false
45
67
  @reporter.listen @events
46
- d.processDsl @params for d in @descriptions
68
+ d.processDsl? @params for d in @descriptions
47
69
  @events.emit 'suite:start', name: "Specs"
48
70
  @_runNextDescription()
49
71
 
@@ -55,6 +77,13 @@ _.extend oojspec, new class OojspecRunner
55
77
  @stats.contexts++ # only root descriptions will be count
56
78
  @descriptions.push new Description(description, block)
57
79
 
80
+ class Notification
81
+ constructor: (@events, @eventName, @options)->
82
+
83
+ run: (_, onFinish)->
84
+ @events.emit "notification:#{@eventName}", @options
85
+ onFinish()
86
+
58
87
  RESERVED_FOR_DESCRIPTION_DSL = ['beforeAll', 'before', 'after', 'afterAll', 'describe', 'context',
59
88
  'example', 'it', 'specify', 'pending', 'xit']
60
89
  RESERVED_FOR_EXAMPLE_DSL = ['assert', 'expect', 'fail', 'refute', 'waitsFor', 'runs']
@@ -1,3 +1,3 @@
1
1
  module Oojspec
2
- VERSION = "0.0.9"
2
+ VERSION = "0.1.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oojspec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rodrigo Rosenfeld Rosas
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-28 00:00:00.000000000 Z
11
+ date: 2014-01-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: coffee-rails
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - '>='
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: 0.1.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '>='
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: 0.1.0
41
41
  description: |2-
42
42
  A test runner similar to RSpec for client-side code built
43
43
  on top of Buster.js that is more suited for integration tests.
@@ -48,6 +48,8 @@ extensions: []
48
48
  extra_rdoc_files: []
49
49
  files:
50
50
  - app/views/oojspec/runner.html.erb
51
+ - app/views/oojspec/iframe.html.erb
52
+ - lib/assets/javascripts/oojspec/iframe-runner.js.coffee
51
53
  - lib/assets/javascripts/oojspec/utils.js.coffee
52
54
  - lib/assets/javascripts/oojspec/runner.js.coffee
53
55
  - lib/assets/javascripts/oojspec/progress.js.coffee