evergreen 0.2.2 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (33) hide show
  1. data/README.rdoc +13 -5
  2. data/lib/evergreen.rb +46 -33
  3. data/lib/evergreen/resources/evergreen.css +62 -0
  4. data/lib/evergreen/{evergreen.js → resources/evergreen.js} +17 -2
  5. data/lib/evergreen/runner.rb +2 -5
  6. data/lib/evergreen/spec.rb +4 -8
  7. data/lib/evergreen/template.rb +31 -0
  8. data/lib/evergreen/version.rb +1 -1
  9. data/lib/evergreen/views/layout.erb +18 -0
  10. data/lib/evergreen/views/list.erb +9 -67
  11. data/lib/evergreen/views/spec.erb +28 -70
  12. data/spec/meta_spec.rb +21 -12
  13. data/spec/runner_spec.rb +1 -1
  14. data/spec/spec_helper.rb +5 -3
  15. data/spec/spec_spec.rb +1 -11
  16. data/spec/{fixtures → suite1}/public/jquery.js +0 -0
  17. data/spec/suite1/public/styles.css +3 -0
  18. data/spec/{fixtures → suite1}/spec/javascripts/bar_spec.js +0 -0
  19. data/spec/{fixtures → suite1}/spec/javascripts/coffeescript_spec.coffee +0 -0
  20. data/spec/{fixtures → suite1}/spec/javascripts/failing_spec.js +0 -0
  21. data/spec/{fixtures → suite1}/spec/javascripts/foo_spec.js +0 -0
  22. data/spec/suite1/spec/javascripts/slow_spec.coffee +8 -0
  23. data/spec/{fixtures → suite1}/spec/javascripts/spec_helper.coffee +0 -0
  24. data/spec/{fixtures → suite1}/spec/javascripts/spec_helper.js +0 -0
  25. data/spec/suite1/spec/javascripts/templates/another_template.html +1 -0
  26. data/spec/{fixtures/spec/javascripts/templates_spec.html → suite1/spec/javascripts/templates/one_template.html} +0 -0
  27. data/spec/suite1/spec/javascripts/templates_spec.js +47 -0
  28. data/spec/{fixtures → suite1}/spec/javascripts/testing_spec.js +0 -0
  29. data/spec/{fixtures → suite1}/spec/javascripts/transactions_spec.js +0 -0
  30. data/spec/{fixtures → suite1}/spec/javascripts/with_helper_spec.js +0 -0
  31. data/spec/template_spec.rb +28 -0
  32. metadata +33 -42
  33. data/spec/fixtures/spec/javascripts/templates_spec.js +0 -23
@@ -33,7 +33,7 @@ You can require files from the public directory inside your spec file:
33
33
 
34
34
  You can now look at your spec files inside a browser by starting up the Evergreen server:
35
35
 
36
- evergreen server
36
+ evergreen serve
37
37
 
38
38
  Alternatively you can run the specs headlessly by running:
39
39
 
@@ -69,12 +69,20 @@ One problem often faced when writing unit tests for client side code is that cha
69
69
 
70
70
  == Templates
71
71
 
72
- Even more powerful than that, Evergreen allows you to create HTML templates to go along with your specs. Simply name the template the same as the spec, only with an html extension. For example:
72
+ Even more powerful than that, Evergreen allows you to create HTML templates to go along with your specs. Put the templates in their own folder like this:
73
73
 
74
- spec/javascripts/widget_spec.js
75
- spec/javascripts/widget_spec.html
74
+ spec/javascripts/templates/one_template.html
75
+ spec/javascripts/templates/another_template.html
76
+
77
+ You can then load the template into the test div, by calling the template function in your specs:
78
+
79
+ describe('transactions', function() {
80
+ template('one_template.html')
76
81
 
77
- The template will be placed inside the test div, so that means it should not include html, head, body or similar tags. The template will be restored for each example, so that at the start of each example, the markup inside the test div is identical.
82
+ it("should load the template in this test", function() {
83
+ ...
84
+ });
85
+ });
78
86
 
79
87
  == Spec Helper
80
88
 
@@ -1,7 +1,6 @@
1
1
  require 'rubygems'
2
2
  require 'sinatra/base'
3
3
  require 'capybara'
4
- require 'capybara/envjs'
5
4
  require 'capybara/wait_until'
6
5
  require 'launchy'
7
6
  require 'evergreen/version'
@@ -12,45 +11,59 @@ module Evergreen
12
11
  autoload :Server, 'evergreen/server'
13
12
  autoload :Runner, 'evergreen/runner'
14
13
  autoload :Spec, 'evergreen/spec'
14
+ autoload :Template, 'evergreen/template'
15
15
 
16
16
  class << self
17
- def application(root)
18
- Class.new(Sinatra::Base).tap do |app|
19
- app.reset!
20
- app.class_eval do
21
- set :static, true
22
- set :root, File.expand_path('evergreen', File.dirname(__FILE__))
23
- set :public, File.expand_path(File.join(root, 'public'), File.dirname(__FILE__))
24
-
25
- use Rack::Static, :urls => ["/lib"], :root => File.expand_path('jasmine', File.dirname(__FILE__))
26
- use Rack::Static, :urls => ["/evergreen"], :root => File.dirname(__FILE__)
27
-
28
- helpers do
29
- def url(path)
30
- request.env['SCRIPT_NAME'].to_s + path.to_s
31
- end
32
- end
17
+ def application(root, driver=:serve)
18
+ Rack::Builder.new do
19
+ map "/jasmine" do
20
+ use Rack::Static, :urls => ["/"], :root => File.expand_path('jasmine/lib', File.dirname(__FILE__))
21
+ run lambda { |env| [404, {}, "No such file"]}
22
+ end
33
23
 
34
- get '/' do
35
- @specs = Spec.all(root)
36
- erb :list
37
- end
24
+ map "/resources" do
25
+ use Rack::Static, :urls => ["/"], :root => File.expand_path('evergreen/resources', File.dirname(__FILE__))
26
+ run lambda { |env| [404, {}, "No such file"]}
27
+ end
38
28
 
39
- get '/list' do
40
- @specs = Spec.all(root)
41
- erb :list
42
- end
29
+ map "/" do
30
+ app = Class.new(Sinatra::Base).tap do |app|
31
+ app.reset!
32
+ app.class_eval do
33
+ set :static, true
34
+ set :root, File.expand_path('evergreen', File.dirname(__FILE__))
35
+ set :public, File.expand_path(File.join(root, 'public'), File.dirname(__FILE__))
43
36
 
44
- get '/run/*' do |name|
45
- @spec = Spec.new(root, name)
46
- @js_spec_helper = Spec.new(root, 'spec_helper.js')
47
- @coffee_spec_helper = Spec.new(root, 'spec_helper.coffee')
48
- erb :spec
49
- end
37
+ helpers do
38
+ def url(path)
39
+ request.env['SCRIPT_NAME'].to_s + path.to_s
40
+ end
41
+ end
42
+
43
+ get '/' do
44
+ @specs = Spec.all(root)
45
+ erb :list
46
+ end
47
+
48
+ get '/list' do
49
+ @specs = Spec.all(root)
50
+ erb :list
51
+ end
50
52
 
51
- get '/spec/*' do |name|
52
- Spec.new(root, name).read
53
+ get '/run/*' do |name|
54
+ @spec = Spec.new(root, name)
55
+ @js_spec_helper = Spec.new(root, 'spec_helper.js')
56
+ @coffee_spec_helper = Spec.new(root, 'spec_helper.coffee')
57
+ @driver = driver
58
+ erb :spec
59
+ end
60
+
61
+ get '/spec/*' do |name|
62
+ Spec.new(root, name).read
63
+ end
64
+ end
53
65
  end
66
+ run app
54
67
  end
55
68
  end
56
69
  end
@@ -0,0 +1,62 @@
1
+ body {
2
+ font-family: 'Lucida grande', 'sans-serif';
3
+ background: #f0f0f0;
4
+ }
5
+
6
+ a {
7
+ color: #00A500;
8
+ }
9
+
10
+ #page, #test, .jasmine_reporter {
11
+ width: 800px;
12
+ background: white;
13
+ -moz-border-radius: 3px;
14
+ padding: 20px;
15
+ margin: 50px auto 30px;
16
+ border: 1px solid #ddd
17
+ }
18
+
19
+ #test {
20
+ min-height: 50px;
21
+ margin: 30px auto 30px;
22
+ }
23
+
24
+ .jasmine_reporter {
25
+ margin: 30px auto 30px;
26
+ }
27
+
28
+ #page h1 {
29
+ font-size: 24px;
30
+ margin: 0 0 15px;
31
+ }
32
+
33
+ #page a.back {
34
+ font-size: 12px;
35
+ }
36
+
37
+ #page ul {
38
+ margin: 0;
39
+ padding: 0;
40
+ }
41
+
42
+ #page ul li {
43
+ list-style: none;
44
+ border: 1px solid #ddd;
45
+ -moz-border-radius: 3px;
46
+ margin: 10px 0;
47
+ background: #f5f5f5;
48
+ }
49
+
50
+ #page ul li a {
51
+ padding: 7px 10px;
52
+ display: block;
53
+ text-decoration: none;
54
+ }
55
+
56
+ #footer {
57
+ margin: 0 auto 30px;
58
+ width: 600px;
59
+ text-align: center;
60
+ font-size: 13px;
61
+ color: #aaa;
62
+ }
@@ -16,20 +16,35 @@ Evergreen.ReflectiveReporter = function() {
16
16
  trace: item.trace
17
17
  });
18
18
  };
19
+ this.reportRunnerResults = function(runner) {
20
+ Evergreen.done = true;
21
+ };
19
22
  };
23
+
24
+ Evergreen.templates = {};
25
+
20
26
  Evergreen.getResults = function() {
21
27
  return JSON.stringify(Evergreen.results);
22
28
  };
23
29
 
24
30
  beforeEach(function() {
25
- var test = document.getElementById('test');
26
- test.innerHTML = Evergreen.template;
31
+ document.getElementById('test').innerHTML = "";
27
32
  });
28
33
 
34
+ var template = function(name) {
35
+ beforeEach(function() {
36
+ document.getElementById('test').innerHTML = Evergreen.templates[name]
37
+ });
38
+ };
39
+
29
40
  var require = function(file) {
30
41
  document.write('<script type="text/javascript" src="' + file + '"></script>');
31
42
  };
32
43
 
44
+ var stylesheet = function(file) {
45
+ document.write('<link rel="stylesheet" type="text/css" href="' + file + '"/>');
46
+ };
47
+
33
48
  // === JSON ===
34
49
 
35
50
  (function(){function f(n){return n<10?'0'+n:n;}
@@ -49,15 +49,12 @@ module Evergreen
49
49
 
50
50
  def results
51
51
  @results ||= begin
52
- session = Capybara::Session.new(:envjs, Evergreen.application(spec.root))
52
+ session = Capybara::Session.new(:selenium, Evergreen.application(spec.root, :selenium))
53
53
  session.visit(spec.url)
54
+ session.wait_until(180) { session.evaluate_script('Evergreen.done') }
54
55
  JSON.parse(session.evaluate_script('Evergreen.getResults()'))
55
56
  end
56
57
  end
57
58
 
58
59
  end
59
60
  end
60
-
61
-
62
-
63
-
@@ -18,14 +18,6 @@ module Evergreen
18
18
  File.join(root, 'spec/javascripts', name)
19
19
  end
20
20
 
21
- def template_path
22
- full_path.sub(/\..+$/, '.html')
23
- end
24
-
25
- def template
26
- if File.exist?(template_path) then File.read(template_path) else "" end
27
- end
28
-
29
21
  def read
30
22
  if full_path =~ /\.coffee$/
31
23
  %x(coffee -p #{full_path})
@@ -43,5 +35,9 @@ module Evergreen
43
35
  File.exist?(full_path)
44
36
  end
45
37
 
38
+ def templates
39
+ Evergreen::Template.all(root)
40
+ end
41
+
46
42
  end
47
43
  end
@@ -0,0 +1,31 @@
1
+ module Evergreen
2
+ class Template
3
+
4
+ def self.all(root)
5
+ Dir.glob(File.join(root, 'spec/javascripts/templates', '*')).map do |path|
6
+ new(root, File.basename(path))
7
+ end
8
+ end
9
+
10
+ attr_reader :name, :root
11
+
12
+ def initialize(root, name)
13
+ @root = root
14
+ @name = name
15
+ end
16
+
17
+ def full_path
18
+ File.join(root, 'spec/javascripts/templates', name)
19
+ end
20
+
21
+ def read
22
+ File.read(full_path)
23
+ end
24
+ alias_method :contents, :read
25
+
26
+ def exist?
27
+ File.exist?(full_path)
28
+ end
29
+
30
+ end
31
+ end
@@ -1,3 +1,3 @@
1
1
  module Evergreen
2
- VERSION = '0.2.2'
2
+ VERSION = '0.3.0'
3
3
  end
@@ -0,0 +1,18 @@
1
+ <!doctype html>
2
+
3
+ <html>
4
+ <head>
5
+ <title>Evergreen</title>
6
+ <link rel="stylesheet" type="text/css" href="<%= url('/jasmine/jasmine.css') %>"/>
7
+ <link rel="stylesheet" type="text/css" href="<%= url('/resources/evergreen.css') %>"/>
8
+ </head>
9
+ <body>
10
+ <%= yield %>
11
+
12
+ <div id="footer">
13
+ Powered by <a href="http://github.com/jnicklas/evergreen">Evergreen</a>.
14
+ Evergreen is sponsored by <a href="http://elabs.se">Elabs</a>.
15
+ </div>
16
+ </body>
17
+ </html>
18
+
@@ -1,67 +1,9 @@
1
- <!doctype html>
2
-
3
- <html>
4
- <head>
5
- <title>Evergreen</title>
6
- <style type="text/css">
7
- * { margin: 0; padding: 0; }
8
- body {
9
- font-family: 'Lucida grande', 'sans-serif';
10
- background: #f0f0f0;
11
- }
12
- a {
13
- color: #00A500;
14
- }
15
-
16
- #page {
17
- width: 800px;
18
- background: white;
19
- -moz-border-radius: 3px;
20
- padding: 20px;
21
- margin: 50px auto 30px;
22
- border: 1px solid #ddd
23
- }
24
-
25
- #page h1 {
26
- margin: 0 0 30px;
27
- }
28
-
29
- #page ul li {
30
- list-style: none;
31
- border: 1px solid #ddd;
32
- -moz-border-radius: 3px;
33
- margin: 10px 0;
34
- background: #f5f5f5;
35
- }
36
-
37
- #page ul li a {
38
- padding: 7px 10px;
39
- display: block;
40
- text-decoration: none;
41
- }
42
-
43
- #footer {
44
- margin: 0 auto 30px;
45
- width: 600px;
46
- text-align: center;
47
- font-size: 13px;
48
- color: #aaa;
49
- }
50
- </style>
51
- </head>
52
- <body>
53
- <div id="page">
54
- <h1>Evergreen</h1>
55
-
56
- <ul id="specs">
57
- <% @specs.each do |spec| %>
58
- <li><a href="<%= url(spec.url) %>"><%= spec.name %></a></li>
59
- <% end %>
60
- </ul>
61
- </div>
62
- <div id="footer">
63
- Powered by <a href="http://github.com/jnicklas/evergreen">Evergreen</a>.
64
- Evergreen is sponsored by <a href="http://elabs.se">Elabs</a>.
65
- </div>
66
- </body>
67
- </html>
1
+ <div id="page">
2
+ <h1>Evergreen</h1>
3
+
4
+ <ul id="specs">
5
+ <% @specs.each do |spec| %>
6
+ <li><a href="<%= url(spec.url) %>"><%= spec.name %></a></li>
7
+ <% end %>
8
+ </ul>
9
+ </div>
@@ -1,72 +1,30 @@
1
- <!doctype html>
1
+ <script type="text/javascript" src="<%= url("/jasmine/jasmine.js") %>"></script>
2
+ <script type="text/javascript" src="<%= url("/jasmine/jasmine-html.js") %>"></script>
3
+ <script type="text/javascript" src="<%= url("/resources/evergreen.js") %>"></script>
4
+ <% if @js_spec_helper.exist? %>
5
+ <script type="text/javascript" src="<%= url("/spec/#{@js_spec_helper.name}") %>"></script>
6
+ <% end %>
7
+ <% if @coffee_spec_helper.exist? %>
8
+ <script type="text/javascript" src="<%= url("/spec/#{@coffee_spec_helper.name}") %>"></script>
9
+ <% end %>
10
+ <script type="text/javascript" src="<%= url("/spec/#{@spec.name}") %>"></script>
2
11
 
3
- <html>
4
- <head>
5
- <link rel="stylesheet" type="text/css" href="<%= url('/lib/jasmine.css') %>">
6
- <script type="text/javascript" src="<%= url("/lib/jasmine.js") %>"></script>
7
- <script type="text/javascript" src="<%= url("/lib/jasmine-html.js") %>"></script>
8
- <script type="text/javascript" src="<%= url("/evergreen/evergreen.js") %>"></script>
9
- <script type="text/javascript" src="<%= url("/spec/#{@spec.name}") %>"></script>
10
- <% if @js_spec_helper.exist? %>
11
- <script type="text/javascript" src="<%= url("/spec/#{@js_spec_helper.name}") %>"></script>
12
- <% end %>
13
- <% if @coffee_spec_helper.exist? %>
14
- <script type="text/javascript" src="<%= url("/spec/#{@coffee_spec_helper.name}") %>"></script>
15
- <% end %>
16
- <style>
17
- body {
18
- font-family: 'Lucida grande', 'sans-serif';
19
- background: #f0f0f0;
20
- margin: 0;
21
- padding: 0;
22
- }
23
- a {
24
- color: #00A500;
25
- }
12
+ <div id="page">
13
+ <h1>Evergreen</h1>
14
+ <a class="back" href="<%= url("/list") %>">Back to list</a>
15
+ </div>
26
16
 
27
- .jasmine_reporter {
28
- width: 800px;
29
- background: white;
30
- padding: 20px;
31
- min-height: 50px;
32
- margin: 30px auto 30px;
33
- border: 1px solid #ddd;
34
- -moz-border-radius: 3px;
35
- width: 800px;
36
- }
37
- #test {
38
- width: 800px;
39
- background: white;
40
- -moz-border-radius: 3px;
41
- padding: 20px;
42
- min-height: 50px;
43
- margin: 50px auto 30px;
44
- border: 1px solid #ddd
45
- }
46
- #footer {
47
- margin: 0 auto 30px;
48
- width: 600px;
49
- text-align: center;
50
- font-size: 13px;
51
- color: #aaa;
52
- }
53
- </style>
54
- </head>
55
- <body>
56
- <div id="test">
57
- </div>
58
- <script type="text/javascript">
59
- (function() {
60
- Evergreen.template = <%= @spec.template.to_json %>;
61
- var jasmineEnv = jasmine.getEnv();
62
- jasmineEnv.addReporter(new jasmine.TrivialReporter());
63
- jasmineEnv.addReporter(new Evergreen.ReflectiveReporter());
64
- jasmineEnv.execute();
65
- })();
66
- </script>
67
- <div id="footer">
68
- Powered by <a href="http://github.com/jnicklas/evergreen">Evergreen</a>.
69
- Evergreen is sponsored by <a href="http://elabs.se">Elabs</a>.
70
- </div>
71
- </body>
72
- </html>
17
+ <div id="test"></div>
18
+
19
+ <script type="text/javascript">
20
+ (function() {
21
+ Evergreen.driver = <%= @driver.to_json %>;
22
+ <% @spec.templates.each do |template| %>
23
+ Evergreen.templates[<%= template.name.to_json %>] = <%= template.read.to_json %>;
24
+ <% end %>
25
+ var jasmineEnv = jasmine.getEnv();
26
+ jasmineEnv.addReporter(new jasmine.TrivialReporter());
27
+ jasmineEnv.addReporter(new Evergreen.ReflectiveReporter());
28
+ jasmineEnv.execute();
29
+ })();
30
+ </script>
@@ -2,21 +2,30 @@ require 'spec_helper'
2
2
 
3
3
  describe Evergreen::Runner do
4
4
  subject { Evergreen::Runner.new(spec) }
5
- let(:root) { File.expand_path('fixtures', File.dirname(__FILE__)) }
5
+ let(:spec) { Evergreen::Spec.new(root, template) }
6
6
 
7
- context "with transactions spec" do
8
- let(:spec) { Evergreen::Spec.new(root, 'transactions_spec.js') }
9
- it { should pass }
10
- end
7
+ context "with standard setup" do
8
+ let(:root) { File.expand_path('suite1', File.dirname(__FILE__)) }
11
9
 
12
- context "with spec helper" do
13
- let(:spec) { Evergreen::Spec.new(root, 'with_helper_spec.js') }
14
- it { should pass }
15
- end
10
+ context "with transactions spec" do
11
+ let(:template) { 'transactions_spec.js' }
12
+ it { should pass }
13
+ end
14
+
15
+ context "with spec helper" do
16
+ let(:template) { 'with_helper_spec.js' }
17
+ it { should pass }
18
+ end
19
+
20
+ context "with template spec" do
21
+ let(:template) { 'templates_spec.js' }
22
+ it { should pass }
23
+ end
16
24
 
17
- context "with template spec" do
18
- let(:spec) { Evergreen::Spec.new(root, 'templates_spec.js') }
19
- it { should pass }
25
+ context "with slow failing spec" do
26
+ let(:template) { 'slow_spec.coffee' }
27
+ it { should_not pass }
28
+ end
20
29
  end
21
30
  end
22
31
 
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Evergreen::Runner do
4
- let(:root) { File.expand_path('fixtures', File.dirname(__FILE__)) }
4
+ let(:root) { File.expand_path('suite1', File.dirname(__FILE__)) }
5
5
 
6
6
  context "with passing spec" do
7
7
  let(:spec) { Evergreen::Spec.new(root, 'testing_spec.js') }
@@ -1,11 +1,13 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
1
4
  require 'evergreen'
2
5
  require 'rspec'
3
6
 
4
7
  require 'capybara/dsl'
5
- require 'capybara/envjs'
6
8
 
7
- Capybara.app = Evergreen.application(File.expand_path('fixtures', File.dirname(__FILE__)))
8
- Capybara.default_driver = :envjs
9
+ Capybara.app = Evergreen.application(File.expand_path('suite1', File.dirname(__FILE__)))
10
+ Capybara.default_driver = :selenium
9
11
 
10
12
  module EvergreenMatchers
11
13
  class PassSpec # :nodoc:
@@ -1,13 +1,12 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Evergreen::Spec do
4
- let(:root) { File.expand_path('fixtures', File.dirname(__FILE__)) }
4
+ let(:root) { File.expand_path('suite1', File.dirname(__FILE__)) }
5
5
  subject { Evergreen::Spec.new(root, 'testing_spec.js') }
6
6
 
7
7
  its(:name) { should == 'testing_spec.js' }
8
8
  its(:root) { should == root }
9
9
  its(:full_path) { should == "#{root}/spec/javascripts/testing_spec.js" }
10
- its(:template_path) { should == "#{root}/spec/javascripts/testing_spec.html" }
11
10
  its(:url) { should == "/run/testing_spec.js" }
12
11
  its(:contents) { should =~ /describe\('testing'/ }
13
12
 
@@ -19,20 +18,11 @@ describe Evergreen::Spec do
19
18
  end
20
19
  end
21
20
 
22
- context "with a template" do
23
- subject { Evergreen::Spec.new(root, 'templates_spec.js') }
24
- its(:template) { should == %(<h1 id="from-template">This is from the template</h1>\n) }
25
- end
26
-
27
21
  context "with coffeescript" do
28
22
  subject { Evergreen::Spec.new(root, 'coffeescript_spec.coffee') }
29
23
  its(:contents) { should =~ /describe\('coffeescript', function/ }
30
24
  end
31
25
 
32
- context "without a template" do
33
- its(:template) { should == '' }
34
- end
35
-
36
26
  context "with existing spec file" do
37
27
  it { should exist }
38
28
  end
@@ -0,0 +1,3 @@
1
+ #from-template {
2
+ width: 300px;
3
+ }
@@ -0,0 +1,8 @@
1
+ describe 'slow specs', ->
2
+
3
+ it "should wait for results to show", ->
4
+ runs ->
5
+ expect('foo').toEqual('foo')
6
+ waits 1000
7
+ runs ->
8
+ expect('bar').toEqual('baz')
@@ -0,0 +1 @@
1
+ <h1 id="another-template">This is from another template</h1>
@@ -0,0 +1,47 @@
1
+ require('/jquery.js');
2
+ stylesheet('/styles.css')
3
+
4
+ describe('templates', function() {
5
+
6
+ describe('with template', function() {
7
+ template('one_template.html')
8
+
9
+ it("should append the template to the test div", function() {
10
+ expect($('#test h1#from-template').length).toEqual(1);
11
+ });
12
+
13
+ it("should change stuff in one test...", function() {
14
+ expect($('#test h1#from-template').length).toEqual(1);
15
+
16
+ $('#test h1#from-template').attr('id', 'changed');
17
+
18
+ expect($('#test h1#changed').length).toEqual(1);
19
+ expect($('#test h1#from-template').length).toEqual(0);
20
+ });
21
+
22
+ it("... should have been removed before the next starts", function() {
23
+ expect($('#test h1#changed').length).toEqual(0);
24
+ expect($('#test h1#from-template').length).toEqual(1);
25
+ });
26
+ });
27
+
28
+ describe('with another template', function() {
29
+ template('another_template.html')
30
+
31
+ it("should append the template to the test div", function() {
32
+ expect($('#test h1#another-template').length).toEqual(1);
33
+ });
34
+ });
35
+
36
+ });
37
+
38
+ describe('stylesheet', function() {
39
+ template('one_template.html')
40
+
41
+ it("should style the template", function() {
42
+ // Env-js does not have support for stylesheets
43
+ if (Evergreen.driver != "envjs") {
44
+ expect(document.getElementById('from-template').offsetWidth).toEqual(300)
45
+ }
46
+ });
47
+ });
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ describe Evergreen::Template do
4
+ let(:root) { File.expand_path('suite1', File.dirname(__FILE__)) }
5
+ subject { Evergreen::Template.new(root, 'one_template.html') }
6
+
7
+ its(:name) { should == 'one_template.html' }
8
+ its(:root) { should == root }
9
+ its(:full_path) { should == "#{root}/spec/javascripts/templates/one_template.html" }
10
+ its(:contents) { should =~ %r(<h1 id="from\-template">This is from the template</h1>) }
11
+ describe '.all' do
12
+ subject { Evergreen::Template.all(root) }
13
+
14
+ it "should find all specs in the given root directory" do
15
+ subject.map(&:name).should include('one_template.html', 'another_template.html')
16
+ end
17
+ end
18
+
19
+ context "with existing spec file" do
20
+ it { should exist }
21
+ end
22
+
23
+ context "with missing spec file" do
24
+ subject { Evergreen::Template.new(root, 'does_not_exist.html') }
25
+ it { should_not exist }
26
+ end
27
+
28
+ end
metadata CHANGED
@@ -5,9 +5,9 @@ version: !ruby/object:Gem::Version
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 2
9
- - 2
10
- version: 0.2.2
8
+ - 3
9
+ - 0
10
+ version: 0.3.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Jonas Nicklas
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-07-11 00:00:00 +02:00
18
+ date: 2010-08-16 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -34,26 +34,10 @@ dependencies:
34
34
  version: 0.3.9
35
35
  type: :runtime
36
36
  version_requirements: *id001
37
- - !ruby/object:Gem::Dependency
38
- name: capybara-envjs
39
- prerelease: false
40
- requirement: &id002 !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ">="
44
- - !ruby/object:Gem::Version
45
- hash: 17
46
- segments:
47
- - 0
48
- - 1
49
- - 5
50
- version: 0.1.5
51
- type: :runtime
52
- version_requirements: *id002
53
37
  - !ruby/object:Gem::Dependency
54
38
  name: launchy
55
39
  prerelease: false
56
- requirement: &id003 !ruby/object:Gem::Requirement
40
+ requirement: &id002 !ruby/object:Gem::Requirement
57
41
  none: false
58
42
  requirements:
59
43
  - - ">="
@@ -65,11 +49,11 @@ dependencies:
65
49
  - 5
66
50
  version: 0.3.5
67
51
  type: :runtime
68
- version_requirements: *id003
52
+ version_requirements: *id002
69
53
  - !ruby/object:Gem::Dependency
70
54
  name: sinatra
71
55
  prerelease: false
72
- requirement: &id004 !ruby/object:Gem::Requirement
56
+ requirement: &id003 !ruby/object:Gem::Requirement
73
57
  none: false
74
58
  requirements:
75
59
  - - ">="
@@ -80,11 +64,11 @@ dependencies:
80
64
  - 0
81
65
  version: "1.0"
82
66
  type: :runtime
83
- version_requirements: *id004
67
+ version_requirements: *id003
84
68
  - !ruby/object:Gem::Dependency
85
- name: json
69
+ name: json_pure
86
70
  prerelease: false
87
- requirement: &id005 !ruby/object:Gem::Requirement
71
+ requirement: &id004 !ruby/object:Gem::Requirement
88
72
  none: false
89
73
  requirements:
90
74
  - - ">="
@@ -96,11 +80,11 @@ dependencies:
96
80
  - 0
97
81
  version: 1.0.0
98
82
  type: :runtime
99
- version_requirements: *id005
83
+ version_requirements: *id004
100
84
  - !ruby/object:Gem::Dependency
101
85
  name: rspec
102
86
  prerelease: false
103
- requirement: &id006 !ruby/object:Gem::Requirement
87
+ requirement: &id005 !ruby/object:Gem::Requirement
104
88
  none: false
105
89
  requirements:
106
90
  - - ">="
@@ -114,7 +98,7 @@ dependencies:
114
98
  - 15
115
99
  version: 2.0.0.beta.15
116
100
  type: :development
117
- version_requirements: *id006
101
+ version_requirements: *id005
118
102
  description: Run Jasmine JavaScript unit tests, integrate them into Ruby applications.
119
103
  email:
120
104
  - jonas.nicklas@gmail.com
@@ -126,12 +110,15 @@ extra_rdoc_files:
126
110
  - README.rdoc
127
111
  files:
128
112
  - lib/evergreen/cli.rb
129
- - lib/evergreen/evergreen.js
130
113
  - lib/evergreen/rails.rb
114
+ - lib/evergreen/resources/evergreen.css
115
+ - lib/evergreen/resources/evergreen.js
131
116
  - lib/evergreen/runner.rb
132
117
  - lib/evergreen/server.rb
133
118
  - lib/evergreen/spec.rb
119
+ - lib/evergreen/template.rb
134
120
  - lib/evergreen/version.rb
121
+ - lib/evergreen/views/layout.erb
135
122
  - lib/evergreen/views/list.erb
136
123
  - lib/evergreen/views/spec.erb
137
124
  - lib/evergreen.rb
@@ -201,22 +188,26 @@ files:
201
188
  - lib/jasmine/src/WaitsForBlock.js
202
189
  - lib/tasks/evergreen.rake
203
190
  - spec/evergreen_spec.rb
204
- - spec/fixtures/public/jquery.js
205
- - spec/fixtures/spec/javascripts/bar_spec.js
206
- - spec/fixtures/spec/javascripts/coffeescript_spec.coffee
207
- - spec/fixtures/spec/javascripts/failing_spec.js
208
- - spec/fixtures/spec/javascripts/foo_spec.js
209
- - spec/fixtures/spec/javascripts/spec_helper.coffee
210
- - spec/fixtures/spec/javascripts/spec_helper.js
211
- - spec/fixtures/spec/javascripts/templates_spec.html
212
- - spec/fixtures/spec/javascripts/templates_spec.js
213
- - spec/fixtures/spec/javascripts/testing_spec.js
214
- - spec/fixtures/spec/javascripts/transactions_spec.js
215
- - spec/fixtures/spec/javascripts/with_helper_spec.js
216
191
  - spec/meta_spec.rb
217
192
  - spec/runner_spec.rb
218
193
  - spec/spec_helper.rb
219
194
  - spec/spec_spec.rb
195
+ - spec/suite1/public/jquery.js
196
+ - spec/suite1/public/styles.css
197
+ - spec/suite1/spec/javascripts/bar_spec.js
198
+ - spec/suite1/spec/javascripts/coffeescript_spec.coffee
199
+ - spec/suite1/spec/javascripts/failing_spec.js
200
+ - spec/suite1/spec/javascripts/foo_spec.js
201
+ - spec/suite1/spec/javascripts/slow_spec.coffee
202
+ - spec/suite1/spec/javascripts/spec_helper.coffee
203
+ - spec/suite1/spec/javascripts/spec_helper.js
204
+ - spec/suite1/spec/javascripts/templates/another_template.html
205
+ - spec/suite1/spec/javascripts/templates/one_template.html
206
+ - spec/suite1/spec/javascripts/templates_spec.js
207
+ - spec/suite1/spec/javascripts/testing_spec.js
208
+ - spec/suite1/spec/javascripts/transactions_spec.js
209
+ - spec/suite1/spec/javascripts/with_helper_spec.js
210
+ - spec/template_spec.rb
220
211
  - config/routes.rb
221
212
  - README.rdoc
222
213
  - bin/evergreen
@@ -1,23 +0,0 @@
1
- require('/jquery.js');
2
-
3
- describe('templates', function() {
4
-
5
- it("should append the template to the test div", function() {
6
- expect($('#test h1#from-template').length).toEqual(1);
7
- });
8
-
9
- it("should change stuff in one test...", function() {
10
- expect($('#test h1#from-template').length).toEqual(1);
11
-
12
- $('#test h1#from-template').attr('id', 'changed');
13
-
14
- expect($('#test h1#changed').length).toEqual(1);
15
- expect($('#test h1#from-template').length).toEqual(0);
16
- });
17
-
18
- it("... should have been removed before the next starts", function() {
19
- expect($('#test h1#changed').length).toEqual(0);
20
- expect($('#test h1#from-template').length).toEqual(1);
21
- });
22
-
23
- });