opal-spec 0.2.12 → 0.2.13

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -1,3 +1,14 @@
1
+ ## 0.2.13 2013-02-23
2
+
3
+ * Re-write Opal::Spec::Server to inherit from Opal::Server. Opal::Server is
4
+ a standard rack-app which configures Opal and load paths in a more
5
+ consistent manner.
6
+
7
+ * Add respond_to and be_empty matchers for Spec.
8
+
9
+ * Added Spec::Pending as a standard way to mark specs as not compliant or
10
+ working. Pending specs are simply ignored when running.
11
+
1
12
  ## 0.2.11 2013-02-20
2
13
 
3
14
  * Added TestCase class to allow unit tests. OpalTest::Spec now inherits from
data/Gemfile CHANGED
@@ -2,5 +2,4 @@ source :rubygems
2
2
  gemspec
3
3
 
4
4
  gem 'rake'
5
- gem 'opal'
6
-
5
+ gem 'opal', '~> 0.3.40'
@@ -1,14 +1,8 @@
1
- module OpalTest
2
- class Matcher
3
- def initialize(actual)
4
- @actual = actual
5
- end
6
-
7
- def failure(message)
8
- raise Spec::ExpectationNotMetError, message
9
- end
10
- end
1
+ require 'opal/spec/matchers/base'
2
+ require 'opal/spec/matchers/be_empty'
3
+ require 'opal/spec/matchers/respond_to'
11
4
 
5
+ module OpalTest
12
6
  class PositiveOperatorMatcher < Matcher
13
7
  def == expected
14
8
  if @actual == expected
@@ -0,0 +1,11 @@
1
+ module OpalTest
2
+ class Matcher
3
+ def initialize(actual)
4
+ @actual = actual
5
+ end
6
+
7
+ def failure(message)
8
+ raise Spec::ExpectationNotMetError, message
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,15 @@
1
+ module OpalTest
2
+ class BeEmptyMatcher < Matcher
3
+ def match(actual)
4
+ unless actual.empty?
5
+ failure "Expected #{actual.inspect} to be empty"
6
+ end
7
+ end
8
+ end
9
+ end
10
+
11
+ class Object
12
+ def be_empty
13
+ OpalTest::BeEmptyMatcher.new
14
+ end
15
+ end
@@ -0,0 +1,19 @@
1
+ module OpalTest
2
+ class RespondToMatcher < Matcher
3
+ def initialize(expected)
4
+ @expected = expected
5
+ end
6
+
7
+ def match(actual)
8
+ unless actual.respond_to?(@expected)
9
+ failure "Expected #{actual.inspect} (#{actual.class}) to respond to #{@expected}"
10
+ end
11
+ end
12
+ end
13
+ end
14
+
15
+ class Object
16
+ def respond_to(expected)
17
+ OpalTest::RespondToMatcher.new expected
18
+ end
19
+ end
@@ -34,6 +34,11 @@ module OpalTest
34
34
  end
35
35
  end
36
36
 
37
+ def self.pending(desc, &block)
38
+ @pending ||= []
39
+ @pending << [desc, block]
40
+ end
41
+
37
42
  def self.let(name, &block)
38
43
  define_method(name) do
39
44
  @_memoized ||= {}
@@ -1,63 +1,23 @@
1
1
  require 'opal/spec'
2
- require 'erb'
2
+ require 'opal'
3
3
 
4
4
  module Opal
5
5
  module Spec
6
- class Server
7
- class Index
8
- def initialize(app, server)
9
- @app = app
10
- @server = server
11
- end
12
-
13
- def call(env)
14
- if env['PATH_INFO'] == '/'
15
- [200, { 'Content-Type' => 'text/html' }, [self.html]]
16
- else
17
- @app.call env
18
- end
19
- end
20
-
21
- def html
22
- source = File.read File.join(VENDOR_PATH, 'spec_runner.html.erb')
23
- ERB.new(source).result binding
24
- end
25
-
26
- def javascript_include_tag(source)
27
- if @server.debug
28
- paths = sprockets[source].to_a.map { |d| "#{d.logical_path}?body=1" }
29
- tags = paths.map { |p| "<script src=\"/assets/#{p}\"></script>" }
30
- tags.join "\n"
31
- else
32
- "<script src=\"/assets/#{source}.js\"></script>"
33
- end
34
- end
35
6
 
36
- def sprockets
37
- @server.sprockets
7
+ # Custom Opal::Server subclass which adds the 'spec' dir as a
8
+ # directory for testing (adds to load path). Specs run through this
9
+ # server are not run in debug mode (all scripts loaded in a single
10
+ # file). This can be overriden in the supplied block.
11
+ class Server < Opal::Server
12
+ def initialize(*args, &block)
13
+ super(*args) do |s|
14
+ s.append_path 'spec'
15
+ s.main = 'opal/spec/sprockets_runner'
16
+ s.debug = false
17
+
18
+ yield s if block_given?
38
19
  end
39
20
  end
40
-
41
- attr_reader :sprockets
42
- attr_reader :debug
43
-
44
- def initialize(debug = true)
45
- @debug = debug
46
- server = self
47
-
48
- @sprockets = sprockets = Opal::Environment.new
49
- @sprockets.append_path 'spec'
50
-
51
- @app = Rack::Builder.app do
52
- map('/assets') { run sprockets }
53
- use Index, server
54
- run Rack::Directory.new('spec')
55
- end
56
- end
57
-
58
- def call(env)
59
- @app.call env
60
- end
61
21
  end
62
22
  end
63
23
  end
@@ -1,5 +1,5 @@
1
1
  module Opal
2
2
  module Spec
3
- VERSION = '0.2.12'
3
+ VERSION = '0.2.13'
4
4
  end
5
5
  end
@@ -0,0 +1,9 @@
1
+ describe "be_empty" do
2
+ it "should pass if the object is empty?" do
3
+ [].should be_empty
4
+ end
5
+
6
+ it "should fail if the object is not empty?" do
7
+ lambda { [1].should be_empty }.should raise_error(Exception)
8
+ end
9
+ end
@@ -0,0 +1,15 @@
1
+ class RespondToSpecs
2
+ def foo; end
3
+ end
4
+
5
+ describe "respond_to" do
6
+ it "should pass if the object responds to method" do
7
+ RespondToSpecs.new.should respond_to(:foo)
8
+ end
9
+
10
+ it "should fail if the object does not respond to method" do
11
+ lambda {
12
+ RespondToSpecs.new.should respond_to(:bar)
13
+ }.should raise_error(Exception)
14
+ end
15
+ end
data/spec/specs.rb CHANGED
@@ -88,4 +88,22 @@ describe "before" do
88
88
  it "should run multiple before blocks" do
89
89
  @bar.should == 200
90
90
  end
91
+
92
+ describe "nested" do
93
+ before { @nested = 300 }
94
+
95
+ it "should inherit before blocks" do
96
+ @foo.should eq(100)
97
+ end
98
+
99
+ it "should also run nested before blocks" do
100
+ @nested.should eq(300)
101
+ end
102
+ end
103
+ end
104
+
105
+ describe "pending" do
106
+ pending "these tests are not run" do
107
+ raise "otherwise this error would be raised"
108
+ end
91
109
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opal-spec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.12
4
+ version: 0.2.13
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: 2013-02-20 00:00:00.000000000 Z
12
+ date: 2013-02-23 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Opal compatible spec library
15
15
  email: adam.beynon@gmail.com
@@ -29,6 +29,9 @@ files:
29
29
  - lib/assets/javascripts/opal/spec/expectations.rb
30
30
  - lib/assets/javascripts/opal/spec/kernel.rb
31
31
  - lib/assets/javascripts/opal/spec/matchers.rb
32
+ - lib/assets/javascripts/opal/spec/matchers/base.rb
33
+ - lib/assets/javascripts/opal/spec/matchers/be_empty.rb
34
+ - lib/assets/javascripts/opal/spec/matchers/respond_to.rb
32
35
  - lib/assets/javascripts/opal/spec/phantom_formatter.rb
33
36
  - lib/assets/javascripts/opal/spec/runner.rb
34
37
  - lib/assets/javascripts/opal/spec/scratch_pad.rb
@@ -41,9 +44,10 @@ files:
41
44
  - lib/opal/spec/server.rb
42
45
  - lib/opal/spec/version.rb
43
46
  - opal-spec.gemspec
47
+ - spec/matchers/be_empty_spec.rb
48
+ - spec/matchers/respond_to_spec.rb
44
49
  - spec/specs.rb
45
50
  - spec/tests.rb
46
- - vendor/spec_runner.html.erb
47
51
  - vendor/spec_runner.js
48
52
  homepage: http://opalrb.org
49
53
  licenses: []
@@ -1,9 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <title>opal-spec</title>
5
- </head>
6
- <body>
7
- <%= javascript_include_tag 'opal/spec/sprockets_runner' %>
8
- </body>
9
- </html>