everqueen 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
+
}
|