oojspec 0.0.9 → 0.1.0

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