js_spec 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +6 -0
- data/README +23 -1
- data/Rakefile +5 -3
- data/bin/js_spec +1 -5
- data/bin/js_spec_server +0 -0
- data/core/JSSpecExtensions.js +70 -25
- data/core/jquery.js +2992 -0
- data/init.rb +0 -0
- data/lib/js_spec/client.rb +50 -0
- data/lib/js_spec/rack/response.rb +5 -0
- data/lib/js_spec/rails_server.rb +3 -3
- data/lib/js_spec/resources/dir.rb +43 -43
- data/lib/js_spec/resources/file.rb +16 -16
- data/lib/js_spec/resources/runners/firefox1_runner.rb +8 -0
- data/lib/js_spec/resources/runners/firefox_runner.rb +49 -72
- data/lib/js_spec/resources/runners.rb +6 -7
- data/lib/js_spec/resources/spec_dir_runner.rb +7 -7
- data/lib/js_spec/resources/spec_file_runner.rb +7 -7
- data/lib/js_spec/resources/spec_runner.rb +16 -11
- data/lib/js_spec/resources/suite.rb +14 -14
- data/lib/js_spec/resources/suite_finish.rb +12 -12
- data/lib/js_spec/server.rb +29 -17
- data/lib/js_spec/thin/backends/js_spec_server.rb +9 -0
- data/lib/js_spec/thin/js_spec_connection.rb +43 -0
- data/lib/js_spec.rb +14 -2
- data/spec/integration/integration_spec.rb +14 -0
- data/spec/integration/integration_spec_helper.rb +52 -0
- data/spec/integration_suite.rb +10 -0
- data/spec/spec_suite.rb +1 -0
- data/spec/unit/js_spec/client_spec.rb +137 -0
- data/spec/unit/{rails_server_spec.rb → js_spec/rails_server_spec.rb} +8 -7
- data/spec/unit/{resources → js_spec/resources}/dir_spec.rb +1 -1
- data/spec/unit/{resources → js_spec/resources}/file_spec.rb +9 -6
- data/spec/unit/js_spec/resources/runner_spec.rb +24 -0
- data/spec/unit/js_spec/resources/runners/firefox_runner_spec.rb +152 -0
- data/spec/unit/js_spec/resources/spec_dir_runner_spec.rb +48 -0
- data/spec/unit/{resources → js_spec/resources}/spec_file_runner_spec.rb +1 -1
- data/spec/unit/{resources → js_spec/resources}/suite_finish_spec.rb +5 -5
- data/spec/unit/{resources → js_spec/resources}/suite_spec.rb +1 -1
- data/spec/unit/{resources → js_spec/resources}/web_root_spec.rb +1 -1
- data/spec/unit/{server_spec.rb → js_spec/server_spec.rb} +29 -92
- data/spec/unit/rack/response_spec.rb +30 -0
- data/spec/unit/thin/js_spec_connection_spec.rb +50 -0
- data/spec/unit/unit_spec_helper.rb +40 -5
- metadata +107 -60
- data/spec/unit/resources/runner_spec.rb +0 -24
- data/spec/unit/resources/runners/firefox_runner_spec.rb +0 -87
- data/spec/unit/resources/spec_dir_runner_spec.rb +0 -43
data/CHANGES
CHANGED
data/README
CHANGED
@@ -4,6 +4,28 @@ The JsSpec ruby library is a server runner for the JsSpec javascript library.
|
|
4
4
|
http://code.google.com/p/jsspec/
|
5
5
|
http://jania.pe.kr/aw/moin.cgi/JSSpec
|
6
6
|
|
7
|
+
== Installing JsSpec
|
8
|
+
You can use JsSpec as a gem or as a Rails plugin.
|
9
|
+
To install the gem, run:
|
10
|
+
sudo gem install js_spec
|
11
|
+
|
12
|
+
To install the plugin, run:
|
13
|
+
script/plugin install svn://rubyforge.org/var/svn/pivotalrb/js_spec/trunk
|
14
|
+
|
15
|
+
The Rails plugin gives you generators when using JsSpec in a Rails environment.
|
16
|
+
|
7
17
|
== Using JsSpec
|
8
18
|
js_spec_server /path/to/your/javascript/spec/files /path/to/your/javascript/implementation/files
|
9
|
-
|
19
|
+
|
20
|
+
Open your browser to http://localhost:8080/specs or run selenium and then run js_spec
|
21
|
+
|
22
|
+
== JsSpec on CI
|
23
|
+
JS spec uses the Selenium gem to automatically control browsers on different machines.
|
24
|
+
|
25
|
+
To use JsSpec in a CI environment,
|
26
|
+
* Install and run the selenium RC server on the machine that you want to run the browsers by using the command:
|
27
|
+
selenium
|
28
|
+
* Run the js_spec_server on the machine that has the files.
|
29
|
+
script/js_spec_server
|
30
|
+
* Run the js_spec client. The js_spec client has --selenium_host, --selenium_port, and --spec_url arguments to specify
|
31
|
+
where the Selenium server is relative to the js_spec server, and where the js_spec server is relative to the browser.
|
data/Rakefile
CHANGED
@@ -26,7 +26,7 @@ def run_suite
|
|
26
26
|
end
|
27
27
|
|
28
28
|
PKG_NAME = "js_spec"
|
29
|
-
PKG_VERSION = "0.
|
29
|
+
PKG_VERSION = "0.2.0"
|
30
30
|
PKG_FILES = FileList[
|
31
31
|
'[A-Z]*',
|
32
32
|
'*.rb',
|
@@ -45,7 +45,7 @@ spec = Gem::Specification.new do |s|
|
|
45
45
|
|
46
46
|
s.files = PKG_FILES.to_a
|
47
47
|
s.require_path = 'lib'
|
48
|
-
s.executables = ['js_spec_server']
|
48
|
+
s.executables = ['js_spec', 'js_spec_server']
|
49
49
|
|
50
50
|
s.has_rdoc = true
|
51
51
|
s.extra_rdoc_files = [ "README", "CHANGES" ]
|
@@ -53,11 +53,13 @@ spec = Gem::Specification.new do |s|
|
|
53
53
|
|
54
54
|
s.test_files = Dir.glob('spec/*_spec.rb')
|
55
55
|
s.require_path = 'lib'
|
56
|
-
s.autorequire = 'js_spec'
|
57
56
|
s.author = "Brian Takita & Nathan Sobo"
|
58
57
|
s.email = "brian@pivotallabs.com"
|
59
58
|
s.homepage = "http://pivotallabs.com"
|
60
59
|
s.rubyforge_project = "pivotalrb"
|
60
|
+
s.add_dependency('Selenium')
|
61
|
+
s.add_dependency('thin')
|
62
|
+
s.add_dependency('uuid')
|
61
63
|
end
|
62
64
|
|
63
65
|
Rake::GemPackageTask.new(spec) do |pkg|
|
data/bin/js_spec
CHANGED
@@ -3,8 +3,4 @@
|
|
3
3
|
dir = File.dirname(__FILE__)
|
4
4
|
$LOAD_PATH.unshift("#{dir}/../lib")
|
5
5
|
require "js_spec"
|
6
|
-
|
7
|
-
|
8
|
-
response = Net::HTTP.start(JsSpec::Server::DEFAULT_HOST, JsSpec::Server::DEFAULT_PORT) do |http|
|
9
|
-
http.post('/runners/firefox', {})
|
10
|
-
end
|
6
|
+
exit JsSpec::Client.run_argv(ARGV)
|
data/bin/js_spec_server
CHANGED
File without changes
|
data/core/JSSpecExtensions.js
CHANGED
@@ -1,20 +1,74 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
function Spec() {
|
2
|
+
}
|
3
|
+
|
4
|
+
Spec.register = function(spec_constructor) {
|
5
|
+
spec_constructor.describe = function(context, definition) {
|
6
|
+
var custom_before = definition['before each'];
|
7
|
+
if(custom_before) {
|
8
|
+
definition['before each'] = function() {
|
9
|
+
if(spec_constructor['before each']) spec_constructor['before each']();
|
10
|
+
custom_before();
|
11
|
+
}
|
12
|
+
} else {
|
13
|
+
definition['before each'] = function() {
|
14
|
+
if(spec_constructor['before each']) spec_constructor['before each']();
|
15
|
+
};
|
16
|
+
}
|
17
|
+
|
18
|
+
var custom_after = definition['after each'];
|
19
|
+
if(custom_after) {
|
20
|
+
definition['after each'] = function() {
|
21
|
+
custom_after();
|
22
|
+
if(spec_constructor['after each']) spec_constructor['after each']();
|
23
|
+
Spec.reset();
|
24
|
+
}
|
25
|
+
} else {
|
26
|
+
definition['after each'] = function() {
|
27
|
+
if(spec_constructor['after each']) spec_constructor['after each']();
|
28
|
+
Spec.reset();
|
29
|
+
}
|
30
|
+
}
|
31
|
+
new spec_constructor();
|
32
|
+
describe(spec_constructor.name.toString() + context.toString(), definition);
|
33
|
+
}
|
34
|
+
}
|
35
|
+
|
36
|
+
Spec.reset = function() {}
|
37
|
+
|
38
|
+
var Assets = {
|
39
|
+
require: function(path_from_javascripts, onload) {
|
40
|
+
if(!Assets.required_paths[path_from_javascripts]) {
|
4
41
|
var full_path = path_from_javascripts + ".js";
|
5
|
-
if (
|
6
|
-
full_path += '?' +
|
42
|
+
if (Assets.use_cache_buster) {
|
43
|
+
full_path += '?' + Assets.cache_buster;
|
7
44
|
}
|
8
45
|
document.write("<script src='" + full_path + "' type='text/javascript'></script>");
|
9
|
-
|
46
|
+
if(onload) {
|
47
|
+
var scripts = document.getElementsByTagName('script');
|
48
|
+
scripts[scripts.length-1].onload = onload;
|
49
|
+
}
|
50
|
+
Assets.required_paths[path_from_javascripts] = true;
|
51
|
+
}
|
52
|
+
},
|
53
|
+
|
54
|
+
stylesheet: function(path_from_stylesheets) {
|
55
|
+
if(!Assets.included_stylesheets[path_from_stylesheets]) {
|
56
|
+
var full_path = path_from_stylesheets + ".css";
|
57
|
+
if(Assets.use_cache_buster) {
|
58
|
+
full_path += '?' + Assets.cache_buster;
|
59
|
+
}
|
60
|
+
document.write("<link rel='stylesheet' type='text/css' href='" + full_path + "' />");
|
61
|
+
Assets.included_stylesheets[path_from_stylesheets] = true;
|
10
62
|
}
|
11
63
|
},
|
12
64
|
|
13
65
|
required_paths: {},
|
14
|
-
|
66
|
+
included_stylesheets: {},
|
67
|
+
use_cache_buster: false, // TODO: NS/CTI - make this configurable from the UI.
|
15
68
|
cache_buster: parseInt(new Date().getTime()/(1*1000))
|
16
69
|
}
|
17
|
-
var require =
|
70
|
+
var require = Assets.require;
|
71
|
+
var stylesheet = Assets.stylesheet;
|
18
72
|
|
19
73
|
var URL_REGEX = /^((\w+):\/\/)(([^:]+):?([^@]+)?@)?([^\/\?:]*):?(\d+)?(\/?[^\?#]+)?\??([^#]+)?#?(.+)?/;
|
20
74
|
function parse_url(url) {
|
@@ -37,21 +91,16 @@ function parse_url(url) {
|
|
37
91
|
JSSpec.Logger.prototype.onRunnerEndWithoutServerNotification = JSSpec.Logger.prototype.onRunnerEnd;
|
38
92
|
JSSpec.Logger.prototype.onRunnerEndWithServerNotification = function() {
|
39
93
|
this.onRunnerEndWithoutServerNotification();
|
40
|
-
var
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
}
|
48
|
-
jQuery.realAjax({
|
49
|
-
type: 'POST',
|
50
|
-
url: '/suites/1/finish',
|
51
|
-
data: data
|
52
|
-
});
|
94
|
+
var xml = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
|
95
|
+
xml.open("POST", '/suites/1/finish', true);
|
96
|
+
xml.setRequestHeader("X-Requested-With", "XMLHttpRequest");
|
97
|
+
var body = [];
|
98
|
+
body.push(encodeURIComponent("guid") + "=" + encodeURIComponent( JSSpec.guid ));
|
99
|
+
body.push(encodeURIComponent("text") + "=" + encodeURIComponent( this.get_error_message_text() ));
|
100
|
+
xml.send(body.join("&"));
|
53
101
|
}
|
54
102
|
JSSpec.Logger.prototype.onRunnerEnd = JSSpec.Logger.prototype.onRunnerEndWithServerNotification;
|
103
|
+
JSSpec.guid = null;
|
55
104
|
|
56
105
|
JSSpec.Logger.prototype.get_error_message_text = function() {
|
57
106
|
var error_messages = [];
|
@@ -140,7 +189,3 @@ JSSpec.DSL.Subject.prototype.should_not_raise = function(expected) {
|
|
140
189
|
throw JSSpec._assertionFailure;
|
141
190
|
}
|
142
191
|
}
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|