everqueen 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +163 -0
- data/bin/everqueen +18 -0
- data/config/routes.rb +3 -0
- data/lib/everqueen.rb +66 -0
- data/lib/everqueen/application.rb +47 -0
- data/lib/everqueen/assets/elabs.png +0 -0
- data/lib/everqueen/assets/everqueen.scss.css +370 -0
- data/lib/everqueen/assets/jquery.js +152 -0
- data/lib/everqueen/assets/json2.js +25 -0
- data/lib/everqueen/assets/list.js.coffee +35 -0
- data/lib/everqueen/assets/run.js.coffee.erb +39 -0
- data/lib/everqueen/assets/start.js.coffee +6 -0
- data/lib/everqueen/assets/test_helper.js +3 -0
- data/lib/everqueen/cli.rb +29 -0
- data/lib/everqueen/rails.rb +14 -0
- data/lib/everqueen/runner.rb +151 -0
- data/lib/everqueen/server.rb +19 -0
- data/lib/everqueen/suite.rb +32 -0
- data/lib/everqueen/tasks.rb +10 -0
- data/lib/everqueen/test.rb +44 -0
- data/lib/everqueen/version.rb +3 -0
- data/lib/everqueen/views/_test_error.erb +4 -0
- data/lib/everqueen/views/layout.erb +17 -0
- data/lib/everqueen/views/list.erb +19 -0
- data/lib/everqueen/views/run.erb +20 -0
- data/lib/qunit/History.md +330 -0
- data/lib/qunit/README.md +37 -0
- data/lib/qunit/addons/canvas/README.md +16 -0
- data/lib/qunit/addons/canvas/canvas-test.js +76 -0
- data/lib/qunit/addons/canvas/canvas.html +19 -0
- data/lib/qunit/addons/canvas/qunit-canvas.js +6 -0
- data/lib/qunit/addons/close-enough/README.md +17 -0
- data/lib/qunit/addons/close-enough/close-enough-test.js +37 -0
- data/lib/qunit/addons/close-enough/close-enough.html +18 -0
- data/lib/qunit/addons/close-enough/qunit-close-enough.js +32 -0
- data/lib/qunit/addons/composite/README.md +7 -0
- data/lib/qunit/addons/composite/composite-demo-test.html +33 -0
- data/lib/qunit/addons/composite/composite-test.html +20 -0
- data/lib/qunit/addons/composite/composite-test.js +159 -0
- data/lib/qunit/addons/composite/dummy-qunit-test.html +19 -0
- data/lib/qunit/addons/composite/dummy-same-test.html +19 -0
- data/lib/qunit/addons/composite/index.html +35 -0
- data/lib/qunit/addons/composite/qunit-composite.css +13 -0
- data/lib/qunit/addons/composite/qunit-composite.js +82 -0
- data/lib/qunit/addons/step/README.md +18 -0
- data/lib/qunit/addons/step/qunit-step.js +25 -0
- data/lib/qunit/addons/step/step-test.js +13 -0
- data/lib/qunit/addons/step/step.html +19 -0
- data/lib/qunit/package.json +28 -0
- data/lib/qunit/qunit/qunit.css +226 -0
- data/lib/qunit/qunit/qunit.js +1597 -0
- data/lib/qunit/test/headless.html +24 -0
- data/lib/qunit/test/index.html +21 -0
- data/lib/qunit/test/logs.html +17 -0
- data/lib/qunit/test/logs.js +153 -0
- data/lib/qunit/test/same.js +1432 -0
- data/lib/qunit/test/swarminject.js +9 -0
- data/lib/qunit/test/test.js +524 -0
- data/lib/tasks/everqueen.rake +8 -0
- data/spec/everqueen_spec.rb +52 -0
- data/spec/meta_spec.rb +40 -0
- data/spec/runner_spec.rb +32 -0
- data/spec/spec_helper.rb +49 -0
- data/spec/suite1/public/jquery.js +152 -0
- data/spec/suite1/public/styles.css +3 -0
- data/spec/suite1/test/javascripts/bar_test.js +0 -0
- data/spec/suite1/test/javascripts/coffeescript_test.coffee +7 -0
- data/spec/suite1/test/javascripts/failing_test.js +9 -0
- data/spec/suite1/test/javascripts/foo_test.js +0 -0
- data/spec/suite1/test/javascripts/libs/lucid_test.js +0 -0
- data/spec/suite1/test/javascripts/models/game_test.js +0 -0
- data/spec/suite1/test/javascripts/slow_test.coffee +8 -0
- data/spec/suite1/test/javascripts/test_helper.js +1 -0
- data/spec/suite1/test/javascripts/testing_test.js +9 -0
- data/spec/suite1/test/javascripts/transactions_test.js +10 -0
- data/spec/suite1/test/javascripts/with_helper_test.js +4 -0
- data/spec/suite2/config/everqueen.rb +4 -0
- data/spec/suite2/public_html/foo.js +1 -0
- data/spec/suite2/test/awesome_test.js +7 -0
- data/spec/suite2/test/failing_test.js +4 -0
- data/spec/suite_spec.rb +19 -0
- data/spec/test_spec.rb +21 -0
- metadata +295 -0
data/README.rdoc
ADDED
@@ -0,0 +1,163 @@
|
|
1
|
+
= Everqueen
|
2
|
+
|
3
|
+
{<img src="http://travis-ci.org/hornairs/everqueen.png" />}[http://travis-ci.org/hornairs/everqueen]
|
4
|
+
|
5
|
+
"Because QUnit is just really simple."
|
6
|
+
|
7
|
+
Everqueen is a tool to run javascript unit tests for client side JavaScript. It
|
8
|
+
combines a server which allows you to serve up and run your tests in a browser,
|
9
|
+
as well as a runner which uses Capybara and any of its drivers to run your
|
10
|
+
tests. Everqueen uses the QUnit unit testing framework for JavaScript.
|
11
|
+
|
12
|
+
http://github.com/hornairs/everqueen
|
13
|
+
|
14
|
+
== Fork Note
|
15
|
+
|
16
|
+
Everqueen is a serious fork of {Evergreen}[http://github.com/jnicklas/evergreen] by Jonas Nicklas.
|
17
|
+
Evergreen rocks, but we wanted to use QUnit instead of Jasmine, and use Sprockets for serving up
|
18
|
+
test files instead of the homebrew require system in Evergreen. Thank Jonas for his awesome
|
19
|
+
OSS work on Evergreen, because he took us 99% of the way there.
|
20
|
+
|
21
|
+
== Philosophy
|
22
|
+
|
23
|
+
Everqueen is a unit testing tool. Its purpose is to test JavaScript in
|
24
|
+
isolation from your application. If you need a tool that tests how your
|
25
|
+
JavaScript integrates with your application you should use an integration
|
26
|
+
testing framework, such as {Capybara}[http://github.com/jnicklas/capybara].
|
27
|
+
|
28
|
+
== Installation
|
29
|
+
|
30
|
+
Install as a Ruby gem:
|
31
|
+
|
32
|
+
gem install everqueen
|
33
|
+
|
34
|
+
== Usage
|
35
|
+
|
36
|
+
Everqueen assumes a file and directory structure, place all your javascript
|
37
|
+
code inside ./public and all test files inside ./test/javascripts. All test
|
38
|
+
files should end in _test.js. For example:
|
39
|
+
|
40
|
+
public/javascripts/widget.js
|
41
|
+
test/javascripts/widget_test.js
|
42
|
+
|
43
|
+
You can require files from the public directory inside your test file:
|
44
|
+
|
45
|
+
require('/javascripts/widget.js')
|
46
|
+
|
47
|
+
test('a widget', function() {
|
48
|
+
...
|
49
|
+
});
|
50
|
+
|
51
|
+
You can now look at your test files inside a browser by starting up the
|
52
|
+
Everqueen server:
|
53
|
+
|
54
|
+
everqueen serve
|
55
|
+
|
56
|
+
Alternatively you can run the tests headlessly by running:
|
57
|
+
|
58
|
+
everqueen run
|
59
|
+
|
60
|
+
== Integrating with Rails 3
|
61
|
+
|
62
|
+
Add Everqueen to your Gemfile:
|
63
|
+
|
64
|
+
gem 'everqueen', :require => 'everqueen/rails'
|
65
|
+
|
66
|
+
Start your rails application and navigate to /everqueen. You should now see a
|
67
|
+
list of all test files, click on one to run it.
|
68
|
+
|
69
|
+
There's a rake task provided for you that you can use to run your tests:
|
70
|
+
|
71
|
+
rake test:javascripts
|
72
|
+
|
73
|
+
== Integrating with Rails 2
|
74
|
+
|
75
|
+
Add the following line to your Rakefile:
|
76
|
+
|
77
|
+
require 'everqueen/tasks'
|
78
|
+
|
79
|
+
This will give you the `test:javascripts` rake task. Note that mounting is not
|
80
|
+
possible under Rails 2 and that `require 'everqueen/rails'` will fail.
|
81
|
+
|
82
|
+
== Configuration
|
83
|
+
|
84
|
+
By default, Everqueen uses Selenium to run your tests and assumes a certain
|
85
|
+
directory structure. If this standard is fine for you, then you don't need to
|
86
|
+
do anything else. If you need to configure Everqueen to suit your needs,
|
87
|
+
Everqueen will automatically look for and load the following files:
|
88
|
+
|
89
|
+
config/everqueen.rb
|
90
|
+
.everqueen
|
91
|
+
~/.everqueen
|
92
|
+
|
93
|
+
The content of these files could look like this:
|
94
|
+
|
95
|
+
require 'capybara-webkit'
|
96
|
+
|
97
|
+
Everqueen.configure do |config|
|
98
|
+
config.driver = :webkit
|
99
|
+
config.public_dir = 'public_html'
|
100
|
+
config.test_dir = 'test'
|
101
|
+
end
|
102
|
+
|
103
|
+
|
104
|
+
== Test Helper
|
105
|
+
|
106
|
+
If you add a test_helper file like so:
|
107
|
+
|
108
|
+
test/javascripts/test_helper.js
|
109
|
+
|
110
|
+
It will automatically be loaded. This is a great place for adding custom
|
111
|
+
matchers and the like.
|
112
|
+
|
113
|
+
== CoffeeScript
|
114
|
+
|
115
|
+
Everqueen supports tests written in
|
116
|
+
{CoffeeScript}[http://github.com/jashkenas/coffee-script] via Sprockets. Just name your test
|
117
|
+
file _test.coffee and it will automatically be translated for you.
|
118
|
+
|
119
|
+
You can also add a CoffeeScript test helper, but remember that CoffeeScript
|
120
|
+
encloses individual files in a closure, if you need something you define in the
|
121
|
+
test helper to be available in your test files, attach it to the window object:
|
122
|
+
|
123
|
+
# test/javascripts/test_helper.coffee
|
124
|
+
|
125
|
+
MyThing: "foo" # local to test helper
|
126
|
+
window.MyThing: "foo" # global
|
127
|
+
|
128
|
+
== Development
|
129
|
+
|
130
|
+
If you plan to work on Everqueen, you need to checkout the QUnit library, which
|
131
|
+
is added as a git submodule. Run the following command:
|
132
|
+
|
133
|
+
git submodule update --init
|
134
|
+
|
135
|
+
If you're using a version of Everqueen from git with bundler, you need to tell
|
136
|
+
bundler to use submodules, this can be achieved with the following command:
|
137
|
+
|
138
|
+
gem 'everqueen', :submodules => true, :git => 'git://github.com/jnicklas/everqueen.git'
|
139
|
+
|
140
|
+
== License:
|
141
|
+
|
142
|
+
(The MIT License)
|
143
|
+
|
144
|
+
Copyright (c) 2009 Jonas Nicklas
|
145
|
+
|
146
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
147
|
+
a copy of this software and associated documentation files (the
|
148
|
+
'Software'), to deal in the Software without restriction, including
|
149
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
150
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
151
|
+
permit persons to whom the Software is furnished to do so, subject to
|
152
|
+
the following conditions:
|
153
|
+
|
154
|
+
The above copyright notice and this permission notice shall be
|
155
|
+
included in all copies or substantial portions of the Software.
|
156
|
+
|
157
|
+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
158
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
159
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
160
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
161
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
162
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
163
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/bin/everqueen
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$:.unshift(File.dirname(__FILE__) + '/../lib') unless $:.include?(File.dirname(__FILE__) + '/../lib')
|
4
|
+
|
5
|
+
require 'everqueen'
|
6
|
+
|
7
|
+
begin
|
8
|
+
# The dup is to keep ARGV intact, so that tools like ruby-debug can respawn.
|
9
|
+
success = Everqueen::Cli.execute(ARGV.dup)
|
10
|
+
Kernel.exit(success ? 0 : 1)
|
11
|
+
rescue SystemExit => e
|
12
|
+
Kernel.exit(e.status)
|
13
|
+
rescue Exception => e
|
14
|
+
STDERR.puts("#{e.message} (#{e.class})")
|
15
|
+
STDERR.puts(e.backtrace.join("\n"))
|
16
|
+
Kernel.exit(1)
|
17
|
+
end
|
18
|
+
|
data/config/routes.rb
ADDED
data/lib/everqueen.rb
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'sinatra/base'
|
3
|
+
require 'capybara'
|
4
|
+
require 'launchy'
|
5
|
+
require 'coffee-script'
|
6
|
+
require 'everqueen/version'
|
7
|
+
require 'everqueen/application'
|
8
|
+
require 'json'
|
9
|
+
|
10
|
+
module Everqueen
|
11
|
+
autoload :Cli, 'everqueen/cli'
|
12
|
+
autoload :Server, 'everqueen/server'
|
13
|
+
autoload :Runner, 'everqueen/runner'
|
14
|
+
autoload :Suite, 'everqueen/suite'
|
15
|
+
autoload :Test, 'everqueen/test'
|
16
|
+
|
17
|
+
class << self
|
18
|
+
attr_accessor :driver, :public_dir, :test_dir, :root, :mounted_at, :application
|
19
|
+
|
20
|
+
def configure
|
21
|
+
yield self
|
22
|
+
end
|
23
|
+
|
24
|
+
def use_defaults!
|
25
|
+
configure do |config|
|
26
|
+
config.application = Everqueen::Application
|
27
|
+
config.driver = :selenium
|
28
|
+
config.public_dir = 'public'
|
29
|
+
config.test_dir = 'test/javascripts'
|
30
|
+
config.mounted_at = ""
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_dir=(new_dir)
|
35
|
+
update_asset_paths(new_dir, test_dir)
|
36
|
+
@test_dir = new_dir
|
37
|
+
end
|
38
|
+
|
39
|
+
def public_dir=(new_dir)
|
40
|
+
update_asset_paths(new_dir, public_dir)
|
41
|
+
@public_dir = new_dir
|
42
|
+
end
|
43
|
+
|
44
|
+
def root=(new_root)
|
45
|
+
@root = new_root
|
46
|
+
update_asset_paths(test_dir, test_dir)
|
47
|
+
update_asset_paths(public_dir, public_dir)
|
48
|
+
@root
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def update_asset_paths(new_dir, old_dir)
|
54
|
+
return if root.nil?
|
55
|
+
old_dir = File.expand_path(old_dir, root)
|
56
|
+
new_dir = File.expand_path(new_dir, root)
|
57
|
+
old_paths = Everqueen::AssetsEnvironment.clear_paths
|
58
|
+
old_paths.delete(old_dir)
|
59
|
+
old_paths.unshift(new_dir).each do |dir|
|
60
|
+
Everqueen::AssetsEnvironment.append_path(dir)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
Everqueen.use_defaults!
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'sprockets'
|
2
|
+
|
3
|
+
module Everqueen
|
4
|
+
class TestApplication < Sinatra::Base
|
5
|
+
|
6
|
+
set :static, false
|
7
|
+
set :root, File.expand_path('.', File.dirname(__FILE__))
|
8
|
+
|
9
|
+
helpers do
|
10
|
+
def url(path)
|
11
|
+
Everqueen.mounted_at.to_s + path.to_s
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
get '/' do
|
16
|
+
@suite = Everqueen::Suite.new
|
17
|
+
erb :list
|
18
|
+
end
|
19
|
+
|
20
|
+
get '/run/all' do
|
21
|
+
@suite = Everqueen::Suite.new
|
22
|
+
erb :run
|
23
|
+
end
|
24
|
+
|
25
|
+
get '/run/*' do |name|
|
26
|
+
@suite = Everqueen::Suite.new
|
27
|
+
@test = @suite.get_test(name)
|
28
|
+
erb :run
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
AssetsEnvironment = Sprockets::Environment.new
|
33
|
+
assets_path = File.expand_path(File.join(File.dirname(__FILE__), 'assets'))
|
34
|
+
AssetsEnvironment.append_path assets_path
|
35
|
+
qunit_assets_path = File.expand_path(File.join(File.dirname(__FILE__), '..', 'qunit', 'qunit'))
|
36
|
+
AssetsEnvironment.append_path qunit_assets_path
|
37
|
+
|
38
|
+
Application = Rack::Builder.app do
|
39
|
+
map '/assets' do
|
40
|
+
run AssetsEnvironment
|
41
|
+
end
|
42
|
+
|
43
|
+
map '/' do
|
44
|
+
run TestApplication
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
Binary file
|
@@ -0,0 +1,370 @@
|
|
1
|
+
body {
|
2
|
+
font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif;
|
3
|
+
background: #f0f0f0;
|
4
|
+
}
|
5
|
+
|
6
|
+
a {
|
7
|
+
color: #2A24A5;
|
8
|
+
}
|
9
|
+
|
10
|
+
#page, #test, .jasmine_reporter {
|
11
|
+
background: white;
|
12
|
+
-moz-border-radius: 3px;
|
13
|
+
padding: 20px;
|
14
|
+
margin: 10px auto 30px;
|
15
|
+
border: 1px solid #ddd;
|
16
|
+
box-shadow: 0 1px 3px 1px rgba(0,0,0,0.05)
|
17
|
+
}
|
18
|
+
|
19
|
+
#test {
|
20
|
+
min-height: 50px;
|
21
|
+
max-height: 300px;
|
22
|
+
overflow: auto;
|
23
|
+
margin: 30px auto 30px;
|
24
|
+
}
|
25
|
+
|
26
|
+
.jasmine_reporter {
|
27
|
+
margin: 30px auto 30px;
|
28
|
+
}
|
29
|
+
|
30
|
+
#page h1 {
|
31
|
+
font-size: 24px;
|
32
|
+
margin: 0 0 15px;
|
33
|
+
border-bottom: 3px solid #AEAEAE;
|
34
|
+
padding-bottom: 4px;
|
35
|
+
}
|
36
|
+
|
37
|
+
#page a.back {
|
38
|
+
font-size: 12px;
|
39
|
+
}
|
40
|
+
|
41
|
+
#page #all {
|
42
|
+
border-bottom: 3px solid #ECECEC;
|
43
|
+
padding: 12px 0;
|
44
|
+
margin-bottom: 20px;
|
45
|
+
overflow: hidden;
|
46
|
+
}
|
47
|
+
|
48
|
+
#page ul {
|
49
|
+
margin: 0;
|
50
|
+
padding: 0;
|
51
|
+
}
|
52
|
+
|
53
|
+
#page ul li {
|
54
|
+
list-style: none;
|
55
|
+
border-bottom: 1px solid #ECECEC;
|
56
|
+
margin: 1px 0 0;
|
57
|
+
padding: 8px 0;
|
58
|
+
position: relative;
|
59
|
+
overflow: hidden;
|
60
|
+
}
|
61
|
+
|
62
|
+
#page ul li:last-child {
|
63
|
+
border: none;
|
64
|
+
}
|
65
|
+
|
66
|
+
/*#page ul li:hover, #page #all:hover {
|
67
|
+
background: #FBFBFB;
|
68
|
+
}*/
|
69
|
+
|
70
|
+
#page ul li a:first-child, #page #all a:first-child {
|
71
|
+
margin-top: 3px;
|
72
|
+
float: left;
|
73
|
+
padding: 4px 2px;
|
74
|
+
}
|
75
|
+
|
76
|
+
#page ul li a:first-child:hover, #page #all a:first-child:hover {
|
77
|
+
background: #242DA5;
|
78
|
+
color: #fff;
|
79
|
+
text-decoration: none;
|
80
|
+
border-radius: 3px;
|
81
|
+
}
|
82
|
+
|
83
|
+
#page a.run {
|
84
|
+
display: block;
|
85
|
+
float: right;
|
86
|
+
border-radius: 3px;
|
87
|
+
padding: 4px 10px;
|
88
|
+
color: #484848;
|
89
|
+
text-decoration: none;
|
90
|
+
border: 1px solid #CBCBCB;
|
91
|
+
border-bottom-color: #BDBDBD;
|
92
|
+
background: #D8D8D8;
|
93
|
+
background: -moz-linear-gradient(top, #eaeaea 1%, #d1d1d1 100%); /* FF3.6+ */
|
94
|
+
background: -webkit-gradient(linear, left top, left bottom, color-stop(1%,#eaeaea), color-stop(100%,#d1d1d1)); /* Chrome,Safari4+ */
|
95
|
+
background: -webkit-linear-gradient(top, #eaeaea 1%,#d1d1d1 100%); /* Chrome10+,Safari5.1+ */
|
96
|
+
background: -o-linear-gradient(top, #eaeaea 1%,#d1d1d1 100%); /* Opera11.10+ */
|
97
|
+
background: -ms-linear-gradient(top, #eaeaea 1%,#d1d1d1 100%); /* IE10+ */
|
98
|
+
background: linear-gradient(top, #eaeaea 1%,#d1d1d1 100%); /* W3C */
|
99
|
+
}
|
100
|
+
|
101
|
+
#page a.run:hover {
|
102
|
+
box-shadow: inset 0 1px 6px 2px rgba(255,255,255,0.8);
|
103
|
+
text-shadow: 0px 0px 4px rgba(255,255,255,0.7);
|
104
|
+
}
|
105
|
+
|
106
|
+
#page a.run.pass {
|
107
|
+
border-color: #45991E;
|
108
|
+
color: #fff;
|
109
|
+
background: #4DA524;
|
110
|
+
background: -moz-linear-gradient(top, #4DA524 1%, #408B1D 100%); /* FF3.6+ */
|
111
|
+
background: -webkit-gradient(linear, left top, left bottom, color-stop(1%,#4DA524), color-stop(100%,#408B1D)); /* Chrome,Safari4+ */
|
112
|
+
background: -webkit-linear-gradient(top, #4DA524 1%,#408B1D 100%); /* Chrome10+,Safari5.1+ */
|
113
|
+
background: -o-linear-gradient(top, #4DA524 1%,#408B1D 100%); /* Opera11.10+ */
|
114
|
+
background: -ms-linear-gradient(top, #4DA524 1%,#408B1D 100%); /* IE10+ */
|
115
|
+
background: linear-gradient(top, #4DA524 1%,#408B1D 100%); /* W3C */
|
116
|
+
box-shadow: inset 0 1px 6px 1px rgba(255,255,255,0.2);
|
117
|
+
text-shadow: 0px 0px 4px rgba(255,255,255,0.2);
|
118
|
+
}
|
119
|
+
|
120
|
+
#page a.run.fail {
|
121
|
+
border-color: #CB3737;
|
122
|
+
color: #fff;
|
123
|
+
background: #E24040;
|
124
|
+
background: -moz-linear-gradient(top, #E24040 1%, #C53838 100%); /* FF3.6+ */
|
125
|
+
background: -webkit-gradient(linear, left top, left bottom, color-stop(1%,#E24040), color-stop(100%,#C53838)); /* Chrome,Safari4+ */
|
126
|
+
background: -webkit-linear-gradient(top, #E24040 1%,#C53838 100%); /* Chrome10+,Safari5.1+ */
|
127
|
+
background: -o-linear-gradient(top, #E24040 1%,#C53838 100%); /* Opera11.10+ */
|
128
|
+
background: -ms-linear-gradient(top, #E24040 1%,#C53838 100%); /* IE10+ */
|
129
|
+
background: linear-gradient(top, #E24040 1%,#C53838 100%); /* W3C */
|
130
|
+
}
|
131
|
+
|
132
|
+
#page a.run.pass:hover, #page a.run.fail:hover {
|
133
|
+
box-shadow: inset 0 1px 6px 2px rgba(255,255,255,0.3);
|
134
|
+
text-shadow: 0px 0px 4px rgba(255,255,255,0.3)
|
135
|
+
}
|
136
|
+
|
137
|
+
#page a.run.running, #page a.run.running:hover {
|
138
|
+
border-color: blue;
|
139
|
+
background-image: url("data:image/gif,GIF89a%10%00%10%00%F2%00%00%FF%FF%FF%00%00%00%C2%C2%C2BBB%00%00%00bbb%82%82%82%92%92%92!%FE%1ACreated%20with%20ajaxload.info%00!%F9%04%00%0A%00%00%00!%FF%0BNETSCAPE2.0%03%01%00%00%00%2C%00%00%00%00%10%00%10%00%00%033%08%BA%DC%FE0%CAIk%13c%08%3A%08%19%9C%07N%98f%09E%B11%C2%BA%14%99%C1%B6.%60%C4%C2q%D0-%5B%189%DD%A6%079%18%0C%07Jk%E7H%00%00!%F9%04%00%0A%00%01%00%2C%00%00%00%00%10%00%10%00%00%034%08%BA%DC%FEN%8C!%20%1B%84%0C%BB%B0%E6%8ADqBQT%601%19%20%60LE%5B%1A%A8%7C%1C%B5u%DF%EDa%18%07%80%20%D7%18%E2%86C%19%B2%25%24*%12%00!%F9%04%00%0A%00%02%00%2C%00%00%00%00%10%00%10%00%00%036%08%BA2%23%2B%CAA%C8%90%CC%94V%2F%06%85c%1C%0E%F4%19N%F1IBa%98%ABp%1C%F0%0A%CC%B3%BD%1C%C6%A8%2B%02Y%ED%17%FC%01%83%C3%0F2%A9d%1A%9F%BF%04%00!%F9%04%00%0A%00%03%00%2C%00%00%00%00%10%00%10%00%00%033%08%BAb%25%2B%CA2%86%91%EC%9CV_%85%8B%A6%09%85!%0C%041D%87a%1C%11%AAF%82%B0%D1%1F%03bR%5D%F3%3D%1F08%2C%1A%8F%C8%A4r9L%00%00!%F9%04%00%0A%00%04%00%2C%00%00%00%00%10%00%10%00%00%032%08%BAr'%2BJ%E7d%14%F0%18%F3L%81%0C%26v%C3%60%5CbT%94%85%84%B9%1EhYB)%CF%CA%40%10%03%1E%E9%3C%1F%C3%26%2C%1A%8F%C8%A4R%92%00%00!%F9%04%00%0A%00%05%00%2C%00%00%00%00%10%00%10%00%00%033%08%BA%20%C2%909%17%E3t%E7%BC%DA%9E0%19%C7%1C%E0!.B%B6%9D%CAW%AC%A21%0C%06%0B%14sa%BB%B05%F7%95%01%810%B0%09%89%BB%9Fm)J%00%00!%F9%04%00%0A%00%06%00%2C%00%00%00%00%10%00%10%00%00%032%08%BA%DC%FE%F0%09%11%D9%9CU%5D%9A%01%EE%DAqp%95%60%88%DDa%9C%DD4%96%85AF%C50%14%90%60%9B%B6%01%0D%04%C2%40%10%9B1%80%C2%D6%CE%91%00%00!%F9%04%00%0A%00%07%00%2C%00%00%00%00%10%00%10%00%00%032%08%BA%DC%FE0%CAI%ABeB%D4%9C)%D7%1E%08%08%C3%20%8E%C7q%0E%0410%A9%CA%B0%AEP%18%C2a%18%07V%DA%A5%02%20ub%18%82%9E%5B%11%90%00%00%3B%00%00%00%00%00%00%00%00%00");
|
140
|
+
background-repeat: no-repeat;
|
141
|
+
background-position: center center;
|
142
|
+
text-indent: -999999px;
|
143
|
+
padding-right: 14px;
|
144
|
+
padding-left: 14px;
|
145
|
+
border-color: #EDEDED;
|
146
|
+
}
|
147
|
+
|
148
|
+
#footer {
|
149
|
+
margin: 0 auto 30px;
|
150
|
+
width: 600px;
|
151
|
+
text-align: center;
|
152
|
+
font-size: 13px;
|
153
|
+
color: #aaa;
|
154
|
+
}
|
155
|
+
|
156
|
+
#footer a.elabs {
|
157
|
+
position: relative;
|
158
|
+
padding-left: 30px;
|
159
|
+
}
|
160
|
+
|
161
|
+
#footer a.elabs img {
|
162
|
+
width: 23px;
|
163
|
+
opacity: 0.6;
|
164
|
+
position: absolute;
|
165
|
+
top: -4px;
|
166
|
+
left: 3px;
|
167
|
+
}
|
168
|
+
#footer a.elabs:hover img {
|
169
|
+
opacity: 1;
|
170
|
+
}
|
171
|
+
|
172
|
+
/**
|
173
|
+
* QUnit v1.3.0pre - A JavaScript Unit Testing Framework
|
174
|
+
*
|
175
|
+
* http://docs.jquery.com/QUnit
|
176
|
+
*
|
177
|
+
* Copyright (c) 2011 John Resig, Jörn Zaefferer
|
178
|
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
179
|
+
* or GPL (GPL-LICENSE.txt) licenses.
|
180
|
+
*/
|
181
|
+
|
182
|
+
/** Font Family and Sizes */
|
183
|
+
|
184
|
+
|
185
|
+
#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; }
|
186
|
+
#qunit-tests { font-size: smaller; }
|
187
|
+
|
188
|
+
|
189
|
+
/** Resets */
|
190
|
+
|
191
|
+
#qunit-tests, #qunit-tests ol, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult {
|
192
|
+
margin: 0;
|
193
|
+
padding: 0;
|
194
|
+
}
|
195
|
+
|
196
|
+
|
197
|
+
#qunit-header a:hover,
|
198
|
+
#qunit-header a:focus {
|
199
|
+
color: #fff;
|
200
|
+
}
|
201
|
+
|
202
|
+
#qunit-testrunner-toolbar {
|
203
|
+
padding: 0.5em 0 0.5em 2em;
|
204
|
+
color: #5E740B;
|
205
|
+
}
|
206
|
+
|
207
|
+
#qunit-userAgent {
|
208
|
+
padding: 0.5em 0 0.5em 2.5em;
|
209
|
+
color: #366097;
|
210
|
+
border-bottom: 1px solid #fff;
|
211
|
+
}
|
212
|
+
|
213
|
+
|
214
|
+
/** Tests: Pass/Fail */
|
215
|
+
|
216
|
+
#qunit-tests {
|
217
|
+
list-style-position: inside;
|
218
|
+
}
|
219
|
+
|
220
|
+
#qunit-tests li {
|
221
|
+
padding: 0.4em 0.5em 0.4em 2.5em;
|
222
|
+
border-bottom: 1px solid #fff;
|
223
|
+
list-style-position: inside;
|
224
|
+
}
|
225
|
+
|
226
|
+
#qunit-tests.hidepass li.pass, #qunit-tests.hidepass li.running {
|
227
|
+
display: none;
|
228
|
+
}
|
229
|
+
|
230
|
+
#qunit-tests li strong {
|
231
|
+
cursor: pointer;
|
232
|
+
}
|
233
|
+
|
234
|
+
#qunit-tests li a {
|
235
|
+
padding: 0.5em;
|
236
|
+
color: #c2ccd1;
|
237
|
+
text-decoration: none;
|
238
|
+
}
|
239
|
+
#qunit-tests li a:hover,
|
240
|
+
#qunit-tests li a:focus {
|
241
|
+
color: #000;
|
242
|
+
}
|
243
|
+
|
244
|
+
#qunit-tests ol {
|
245
|
+
margin-top: 0.5em;
|
246
|
+
padding: 0.5em;
|
247
|
+
|
248
|
+
background-color: #fff;
|
249
|
+
|
250
|
+
border-radius: 5px;
|
251
|
+
-moz-border-radius: 5px;
|
252
|
+
-webkit-border-radius: 5px;
|
253
|
+
|
254
|
+
box-shadow: inset 0px 2px 3px #999;
|
255
|
+
-moz-box-shadow: inset 0px 2px 3px #999;
|
256
|
+
-webkit-box-shadow: inset 0px 2px 3px #999;
|
257
|
+
}
|
258
|
+
|
259
|
+
#qunit-tests table {
|
260
|
+
border-collapse: collapse;
|
261
|
+
margin-top: .2em;
|
262
|
+
}
|
263
|
+
|
264
|
+
#qunit-tests th {
|
265
|
+
text-align: right;
|
266
|
+
vertical-align: top;
|
267
|
+
padding: 0 .5em 0 0;
|
268
|
+
}
|
269
|
+
|
270
|
+
#qunit-tests td {
|
271
|
+
vertical-align: top;
|
272
|
+
}
|
273
|
+
|
274
|
+
#qunit-tests pre {
|
275
|
+
margin: 0;
|
276
|
+
white-space: pre-wrap;
|
277
|
+
word-wrap: break-word;
|
278
|
+
}
|
279
|
+
|
280
|
+
#qunit-tests del {
|
281
|
+
background-color: #e0f2be;
|
282
|
+
color: #374e0c;
|
283
|
+
text-decoration: none;
|
284
|
+
}
|
285
|
+
|
286
|
+
#qunit-tests ins {
|
287
|
+
background-color: #ffcaca;
|
288
|
+
color: #500;
|
289
|
+
text-decoration: none;
|
290
|
+
}
|
291
|
+
|
292
|
+
/*** Test Counts */
|
293
|
+
|
294
|
+
#qunit-tests b.counts { color: black; }
|
295
|
+
#qunit-tests b.passed { color: #5E740B; }
|
296
|
+
#qunit-tests b.failed { color: #710909; }
|
297
|
+
|
298
|
+
#qunit-tests li li {
|
299
|
+
margin: 0.5em;
|
300
|
+
padding: 0.4em 0.5em 0.4em 0.5em;
|
301
|
+
background-color: #fff;
|
302
|
+
border-bottom: none;
|
303
|
+
list-style-position: inside;
|
304
|
+
}
|
305
|
+
|
306
|
+
/*** Passing Styles */
|
307
|
+
|
308
|
+
#qunit-tests li li.pass {
|
309
|
+
color: #5E740B;
|
310
|
+
background-color: #fff;
|
311
|
+
border-left: 26px solid #C6E746;
|
312
|
+
}
|
313
|
+
|
314
|
+
#qunit-tests .pass { color: #528CE0; background-color: #D2E0E6; }
|
315
|
+
#qunit-tests .pass .test-name { color: #366097; }
|
316
|
+
|
317
|
+
#qunit-tests .pass .test-actual,
|
318
|
+
#qunit-tests .pass .test-expected { color: #999999; }
|
319
|
+
|
320
|
+
#qunit-banner.qunit-pass { background-color: #C6E746; }
|
321
|
+
|
322
|
+
/*** Failing Styles */
|
323
|
+
|
324
|
+
#qunit-tests li li.fail {
|
325
|
+
color: #710909;
|
326
|
+
background-color: #fff;
|
327
|
+
border-left: 26px solid #EE5757;
|
328
|
+
white-space: pre;
|
329
|
+
}
|
330
|
+
|
331
|
+
#qunit-tests > li:last-child {
|
332
|
+
border-radius: 0 0 15px 15px;
|
333
|
+
-moz-border-radius: 0 0 15px 15px;
|
334
|
+
-webkit-border-bottom-right-radius: 15px;
|
335
|
+
-webkit-border-bottom-left-radius: 15px;
|
336
|
+
}
|
337
|
+
|
338
|
+
#qunit-tests .fail { color: #000000; background-color: #EE5757; }
|
339
|
+
#qunit-tests .fail .test-name,
|
340
|
+
#qunit-tests .fail .module-name { color: #000000; }
|
341
|
+
|
342
|
+
#qunit-tests .fail .test-actual { color: #EE5757; }
|
343
|
+
#qunit-tests .fail .test-expected { color: green; }
|
344
|
+
|
345
|
+
#qunit-banner.qunit-fail { background-color: #EE5757; }
|
346
|
+
|
347
|
+
|
348
|
+
/** Result */
|
349
|
+
|
350
|
+
#qunit-testresult {
|
351
|
+
padding: 0.5em 0.5em 0.5em 2.5em;
|
352
|
+
|
353
|
+
color: #2b81af;
|
354
|
+
background-color: #D2E0E6;
|
355
|
+
|
356
|
+
border-bottom: 1px solid white;
|
357
|
+
border-radius: 15px 15px 0 0;
|
358
|
+
-moz-border-radius: 15px 15px 0 0;
|
359
|
+
-webkit-border-top-right-radius: 15px;
|
360
|
+
-webkit-border-top-left-radius: 15px;
|
361
|
+
|
362
|
+
}
|
363
|
+
|
364
|
+
/** Fixture */
|
365
|
+
|
366
|
+
#qunit-fixture {
|
367
|
+
position: absolute;
|
368
|
+
top: -10000px;
|
369
|
+
left: -10000px;
|
370
|
+
}
|