opal-spec 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -1,8 +1,5 @@
1
1
  .DS_Store
2
2
  doc
3
3
  /pkg
4
- /tmp
5
- .yardoc
6
- extras
7
- /opal-test*.js
8
-
4
+ /*.js
5
+ /*.gem
data/README.md CHANGED
@@ -1,4 +1,18 @@
1
- OpalSpec
1
+ opal-spec
2
2
  =========
3
3
 
4
- Spec framework for opal.
4
+ opal-spec is a minimal spec lib for opal, inspired by RSpec and MSpec.
5
+ It is designed to run on [opal][http://opalrb.org], and provides the
6
+ bare minimum to get specs running.
7
+
8
+ Change Log
9
+ ----------
10
+
11
+ ### 0.0.2
12
+
13
+ * Added seperate BrowserFormatter class for cleaner output
14
+ * Update Rake tasks to use new Opal::Builder class
15
+
16
+ ### 0.0.1
17
+
18
+ Initial release
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ require 'opal'
2
+
3
+ desc "Build latest opal-spec to current dir"
4
+ task :opal do
5
+ Opal::Builder.new('lib', :join => "opal-spec.js").build
6
+ end
7
+
8
+ desc "Get all running dependnecies"
9
+ task :dependencies do
10
+ Opal::DependencyBuilder.new(opal: true, verbose: true).build
11
+ end
@@ -1,26 +1,7 @@
1
1
  require 'opal/spec'
2
2
 
3
- ##
4
- # If running in the browser then capture test output straight to the
5
- # page.
6
-
7
- if RUBY_ENGINE =~ /opal-browser/
8
- raise "Body not loaded. Add tests into <body> element" unless `document.body`
9
-
10
- def $stdout.puts(*a)
11
- a.each do |str|
12
- `var elem = document.createElement('pre');
13
- elem.textContent == null ? elem.innerText = str : elem.textContent = str;
14
- elem.style.margin = "0px";
15
- document.body.appendChild(elem);`
16
- end
17
- end # $stdout
18
- end
19
-
20
- ##
21
3
  # If autorun is the main file (entry point), then automatically load all
22
4
  # specs from spec/
23
-
24
5
  if $0 == __FILE__
25
6
  Dir['spec/**/*.rb'].each do |spec|
26
7
  require spec
@@ -0,0 +1,155 @@
1
+ require 'opal/spec/formatter'
2
+
3
+ module OpalSpec
4
+ class BrowserFormatter < Formatter
5
+ CSS = <<-EOS
6
+
7
+ body {
8
+ font-size: 14px;
9
+ font-family: Helvetica Neue, Helvetica, Arial, sans-serif;
10
+ }
11
+
12
+ pre {
13
+ font-family: "Bitstream Vera Sans Mono", Monaco, "Lucida Console", monospace;
14
+ font-size: 12px;
15
+ color: #444444;
16
+ white-space: pre;
17
+ padding: 3px 0px 3px 12px;
18
+ margin: 0px 0px 8px;
19
+
20
+ background: #FAFAFA;
21
+ -webkit-box-shadow: rgba(0,0,0,0.07) 0 1px 2px inset;
22
+ -webkit-border-radius: 3px;
23
+ -moz-border-radius: 3px;
24
+ border-radius: 3px;
25
+ border: 1px solid #DDDDDD;
26
+ }
27
+
28
+ ul.example_groups {
29
+ list-style-type: none;
30
+ }
31
+
32
+ li.group.passed .group_description {
33
+ color: #597800;
34
+ font-weight: bold;
35
+ }
36
+
37
+ li.group.failed .group_description {
38
+ color: #FF000E;
39
+ font-weight: bold;
40
+ }
41
+
42
+ li.example.passed {
43
+ color: #597800;
44
+ }
45
+
46
+ li.example.failed {
47
+ color: #FF000E;
48
+ }
49
+
50
+ .examples {
51
+ list-style-type: none;
52
+ }
53
+ EOS
54
+
55
+ def start
56
+ %x{
57
+ if (!document || !document.body) {
58
+ #{ raise "Not running in browser." };
59
+ }
60
+
61
+ var groups_element = document.createElement('ul');
62
+ groups_element.className = 'example_groups';
63
+ document.body.appendChild(groups_element);
64
+
65
+ var styles = document.createElement('style');
66
+ styles.innerHTML = #{ CSS };
67
+ document.head.appendChild(styles);
68
+ }
69
+ @groups_element = `groups_element`
70
+ end
71
+
72
+ def finish
73
+ end
74
+
75
+ def example_group_started group
76
+ @example_group = group
77
+ @example_group_failed = false
78
+
79
+ %x{
80
+ var group_element = document.createElement('li');
81
+
82
+ var description = document.createElement('span');
83
+ description.className = 'group_description';
84
+ description.innerHTML = #{group.description};
85
+ group_element.appendChild(description);
86
+
87
+ var example_list = document.createElement('ul');
88
+ example_list.className = 'examples';
89
+ example_list.style.display = 'none';
90
+ group_element.appendChild(example_list);
91
+
92
+ #@groups_element.appendChild(group_element);
93
+ }
94
+
95
+ @group_element = `group_element`
96
+ @example_list = `example_list`
97
+ end
98
+
99
+ def example_group_finished group
100
+ if @example_group_failed
101
+ `#@group_element.className = 'group failed';`
102
+ else
103
+ `#@group_element.className = 'group passed';`
104
+ end
105
+ end
106
+
107
+ def example_failed example
108
+ @failed_examples << example
109
+ @example_group_failed = true
110
+
111
+ exception = example.exception
112
+
113
+ case exception
114
+ when OpalSpec::ExpectationNotMetError
115
+ output = exception.message
116
+ else
117
+ output = "#{exception.class}: #{exception.message}\n"
118
+ output += " #{exception.backtrace.join "\n "}\n"
119
+ end
120
+
121
+ %x{
122
+ var wrapper = document.createElement('li');
123
+ wrapper.className = 'example failed';
124
+
125
+ var description = document.createElement('span');
126
+ description.className = 'example_description';
127
+ description.innerHTML = #{example.description};
128
+
129
+ var exception = document.createElement('pre');
130
+ exception.className = 'exception';
131
+ exception.innerHTML = output;
132
+
133
+ wrapper.appendChild(description);
134
+ wrapper.appendChild(exception);
135
+
136
+ #@example_list.appendChild(wrapper);
137
+ #@example_list.style.display = 'list-item';
138
+ }
139
+ end
140
+
141
+ def example_passed example
142
+ %x{
143
+ var wrapper = document.createElement('li');
144
+ wrapper.className = 'example passed';
145
+
146
+ var description = document.createElement('span');
147
+ description.className = 'example_description';
148
+ description.innerHTML = #{example.description};
149
+
150
+ wrapper.appendChild(description);
151
+ #@example_list.appendChild(wrapper);
152
+ }
153
+ end
154
+ end
155
+ end
@@ -9,6 +9,23 @@ module OpalSpec
9
9
  end
10
10
 
11
11
  def finish
12
+ @failed_examples.each_with_index do |example, i|
13
+ exception = example.exception
14
+ description = example.description
15
+ group = example.example_group
16
+
17
+ case exception
18
+ when OpalSpec::ExpectationNotMetError
19
+ puts "\n#{i + 1}) Failure:\n#{group.description} #{description}:"
20
+ puts "#{exception.message}\n"
21
+ else
22
+ puts "\n#{i + 1}) Error:\n#{group.description} #{description}:"
23
+ puts "#{exception.class}: #{exception.message}\n"
24
+ puts " #{exception.backtrace.join "\n "}\n"
25
+ end
26
+ end
27
+
28
+ puts "\n#{example_count} examples, #{@failed_examples.size} failures"
12
29
  end
13
30
 
14
31
  def example_group_started group
@@ -20,6 +37,7 @@ module OpalSpec
20
37
 
21
38
  def example_started example
22
39
  @examples << example
40
+ @example = example
23
41
  end
24
42
 
25
43
  def example_passed example
@@ -33,26 +51,4 @@ module OpalSpec
33
51
  @examples.size
34
52
  end
35
53
  end
36
-
37
- class ConsoleFormatter < Formatter
38
- def finish
39
- @failed_examples.each_with_index do |example, i|
40
- exception = example.exception
41
- description = example.description
42
- group = example.example_group
43
-
44
- case exception
45
- when OpalSpec::ExpectationNotMetError
46
- puts "\n#{i + 1}) Failure:\n#{group.description} #{description}:"
47
- puts "#{exception.message}\n"
48
- else
49
- puts "\n#{i + 1}) Error:\n#{group.description} #{description}:"
50
- puts "#{exception.class}: #{exception.message}\n"
51
- puts " #{exception.backtrace.join "\n "}\n"
52
- end
53
- end
54
-
55
- puts "\n#{example_count} specifications, #{@failed_examples.size} failures"
56
- end
57
- end
58
54
  end
@@ -5,7 +5,11 @@ module OpalSpec
5
5
  end
6
6
 
7
7
  def initialize
8
- @formatters = [ConsoleFormatter.new]
8
+ if RUBY_ENGINE == 'opal-browser'
9
+ @formatters = [BrowserFormatter.new]
10
+ else
11
+ @formatters = [Formatter.new]
12
+ end
9
13
  end
10
14
 
11
15
  def run
@@ -1,3 +1,3 @@
1
1
  module OpalSpec
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/lib/opal/spec.rb CHANGED
@@ -5,4 +5,5 @@ require 'opal/spec/example'
5
5
  require 'opal/spec/expectations'
6
6
  require 'opal/spec/matchers'
7
7
  require 'opal/spec/formatter'
8
+ require 'opal/spec/browser_formatter'
8
9
  require 'opal/spec/scratch_pad'
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.0.1
4
+ version: 0.0.2
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: 2011-12-21 00:00:00.000000000Z
12
+ date: 2012-01-10 00:00:00.000000000Z
13
13
  dependencies: []
14
14
  description: Opal spec lib
15
15
  email:
@@ -20,8 +20,10 @@ extra_rdoc_files: []
20
20
  files:
21
21
  - .gitignore
22
22
  - README.md
23
+ - Rakefile
23
24
  - lib/opal/spec.rb
24
25
  - lib/opal/spec/autorun.rb
26
+ - lib/opal/spec/browser_formatter.rb
25
27
  - lib/opal/spec/example.rb
26
28
  - lib/opal/spec/example_group.rb
27
29
  - lib/opal/spec/expectations.rb