raus22-jspec 2.0.4

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.
Files changed (45) hide show
  1. data/History.rdoc +323 -0
  2. data/Manifest +44 -0
  3. data/README.rdoc +495 -0
  4. data/Rakefile +72 -0
  5. data/bin/jspec +137 -0
  6. data/jspec.gemspec +35 -0
  7. data/lib/images/bg.png +0 -0
  8. data/lib/images/hr.png +0 -0
  9. data/lib/images/loading.gif +0 -0
  10. data/lib/images/sprites.bg.png +0 -0
  11. data/lib/images/sprites.png +0 -0
  12. data/lib/images/vr.png +0 -0
  13. data/lib/jspec.css +145 -0
  14. data/lib/jspec.jquery.js +64 -0
  15. data/lib/jspec.js +1468 -0
  16. data/server/browsers.rb +16 -0
  17. data/server/server.rb +103 -0
  18. data/spec/async +1 -0
  19. data/spec/jquery-1.3.1.js +4241 -0
  20. data/spec/server.html +23 -0
  21. data/spec/spec.grammar-less.js +34 -0
  22. data/spec/spec.grammar.js +179 -0
  23. data/spec/spec.html +27 -0
  24. data/spec/spec.jquery.js +166 -0
  25. data/spec/spec.js +119 -0
  26. data/spec/spec.matchers.js +382 -0
  27. data/spec/spec.rhino.js +12 -0
  28. data/spec/spec.shared-behaviors.js +51 -0
  29. data/spec/spec.utils.js +138 -0
  30. data/templates/default/History.rdoc +4 -0
  31. data/templates/default/README.rdoc +29 -0
  32. data/templates/default/lib/yourlib.core.js +2 -0
  33. data/templates/default/spec/spec.core.js +8 -0
  34. data/templates/default/spec/spec.html +20 -0
  35. data/templates/rhino/History.rdoc +4 -0
  36. data/templates/rhino/README.rdoc +29 -0
  37. data/templates/rhino/lib/yourlib.core.js +2 -0
  38. data/templates/rhino/spec/spec.core.js +8 -0
  39. data/templates/rhino/spec/spec.js +7 -0
  40. data/templates/server/History.rdoc +4 -0
  41. data/templates/server/README.rdoc +29 -0
  42. data/templates/server/lib/yourlib.core.js +2 -0
  43. data/templates/server/spec/spec.core.js +8 -0
  44. data/templates/server/spec/spec.html +15 -0
  45. metadata +120 -0
@@ -0,0 +1,72 @@
1
+
2
+ require 'rubygems'
3
+ require 'rake'
4
+ require 'echoe'
5
+
6
+ def version
7
+ $1 if File.read('lib/jspec.js').match /version *: *'(.*?)'/
8
+ end
9
+
10
+ Echoe.new "jspec", version do |p|
11
+ p.author = "TJ Holowaychuk"
12
+ p.email = "tj@vision-media.ca"
13
+ p.summary = "JavaScript BDD Testing Framework"
14
+ p.url = "http://visionmedia.github.com/jspec"
15
+ p.runtime_dependencies << "visionmedia-commander >=3.2.9"
16
+ end
17
+
18
+ namespace :pkg do
19
+ desc 'Build package'
20
+ task :build => ['pkg:clear'] do
21
+ begin
22
+ sh 'mkdir pkg'
23
+ sh 'cp -fr lib/* pkg'
24
+ minify 'lib/jspec.js', 'pkg/jspec.min.js'
25
+ minify 'lib/jspec.jquery.js', 'pkg/jspec.jquery.min.js'
26
+ compress 'lib/jspec.css', 'pkg/jspec.min.css'
27
+ sh 'git add pkg/.'
28
+ rescue Exception => e
29
+ puts "Failed to package: #{e}."
30
+ else
31
+ puts "Packaging of JSpec-#{version} completed."
32
+ end
33
+ end
34
+
35
+ desc 'Clear packaging'
36
+ task :clear do
37
+ if File.directory? 'pkg'
38
+ sh 'rm -fr pkg/*'
39
+ sh 'rmdir pkg'
40
+ end
41
+ end
42
+
43
+ desc 'Display compression savings of last release'
44
+ task :savings do
45
+ totals = Hash.new { |h, k| h[k] = 0 }
46
+ format = '%-20s : %0.3f kb'
47
+ totals = %w( pkg/jspec.min.js pkg/jspec.jquery.min.js pkg/jspec.min.css ).inject totals do |total, file|
48
+ uncompressed = File.size(file.sub('.min', '')).to_f / 1024
49
+ compressed = File.size(file).to_f / 1024
50
+ saved = uncompressed - compressed
51
+ puts format % [file.sub('pkg/', ''), saved]
52
+ totals[:saved] += saved
53
+ totals[:uncompressed] += uncompressed
54
+ totals[:compressed] += compressed
55
+ totals
56
+ end
57
+ puts
58
+ puts format % ['total uncompressed', totals[:uncompressed]]
59
+ puts format % ['total compressed', totals[:compressed]]
60
+ puts format % ['total saved', totals[:saved]]
61
+ end
62
+ end
63
+
64
+ def minify from, to
65
+ sh "jsmin < #{from} > #{to}"
66
+ end
67
+
68
+ def compress from, to
69
+ File.open(to, 'w+') do |file|
70
+ file.write File.read(from).gsub(/(^[\t ]*)|\n/, '')
71
+ end
72
+ end
@@ -0,0 +1,137 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ JSPEC_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
4
+ $:.unshift JSPEC_ROOT
5
+
6
+ require 'rubygems'
7
+ require 'commander'
8
+ require 'fileutils'
9
+
10
+ RHINO = 'java org.mozilla.javascript.tools.shell.Main'
11
+ program = {}
12
+ program[:name] => 'JSpec'
13
+ program[:version] => '2.0.3'
14
+ program[:description] => 'JavaScript BDD Testing Framework'
15
+ default_command :bind
16
+
17
+ command :init do |c|
18
+ c.syntax = 'jspec init [dest]'
19
+ c.summary = 'Initialize a JSpec project template'
20
+ c.description = 'Initialize a JSpec project template. Defaults to the current directory
21
+ when [dest] is not specified. Currently three templates are available:
22
+
23
+ "default" : runs specs in browser(s) using the DOM formatter.
24
+ "rhino" : runs specs with Rhino using the Terminal formatter.
25
+ "server" : runs specs using a Ruby server/client solution which
26
+ starts each browser and reports back to the terminal.'
27
+ c.example 'Create a directory foo, initialized with a jspec template', 'jspec init foo'
28
+ c.example 'Initialize a rhino based project in the current directory', 'jspec init --template rhino'
29
+ c.example 'Initialize a server based project in foo', 'jspec init foo --template server'
30
+ c.option '-T', '--template name', 'Template to use. Valid choices are default, rhino, and server.'
31
+ c.when_called do |args, options|
32
+ dest = args.shift || '.'
33
+ options.default :template => 'default'
34
+ unless Dir[dest + '/*'].empty?
35
+ abort unless agree "'#{dest}' is not empty; continue? "
36
+ end
37
+ template = File.join JSPEC_ROOT, 'templates', options.template, '.'
38
+ abort "template #{options.template} does not exist" unless File.exists? template
39
+ FileUtils.mkdir_p dest
40
+ FileUtils.cp_r template, dest
41
+ path = case options.template
42
+ when 'default' ; 'spec.html'
43
+ when 'rhino' ; 'spec.js'
44
+ else
45
+ end
46
+ if path
47
+ spec = File.join dest, 'spec', path
48
+ contents = File.read(spec).gsub 'JSPEC_ROOT', JSPEC_ROOT
49
+ File.open(spec, 'w') { |file| file.write contents }
50
+ end
51
+ say "Template initialized at '#{dest}'"
52
+ end
53
+ end
54
+
55
+ command :update do |c|
56
+ c.syntax = 'jspec update [path ...]'
57
+ c.summary = 'Update JSpec releases'
58
+ c.description = 'Update JSpec release in [paths], this will allow you to utilize the latest
59
+ JSpec features. If you have suites running at a path other than the regular
60
+ spec/spec.html simply pass them as arguments to this sub-command.
61
+
62
+ This is only needed when using the default, or rhino project templates.'
63
+ c.when_called do |args, options|
64
+ args = %w( spec/spec.html ) if args.empty?
65
+ args.each do |path|
66
+ next unless File.exists? path
67
+ contents = File.read(path).gsub /visionmedia-jspec-(\d+\.\d+\.\d+)/, "visionmedia-jspec-#{program[:version]}"
68
+ File.open(path, 'r+'){ |file| file.write contents }
69
+ say "Updated #{path} to JSpec #{program[:version]}"
70
+ end
71
+ end
72
+ end
73
+
74
+ command :run do |c|
75
+ c.syntax = 'jspec run [path] [options]'
76
+ c.summary = 'Run specifications'
77
+ c.description = 'Run specifications, defaulting [path] to spec/spec.html. You will need
78
+ supply [path] if your specs do not reside in this location. `run --bind` is
79
+ the default sub-command of jspec so you may simply execute `jspec` in order
80
+ to bind execution of your specs when a file is altered.
81
+
82
+ JSpec supports Rhino execution when installed. The [path] is assumed to be
83
+ spec/spec.js unless specified. See examples below for using the --rhino switch.'
84
+ c.example 'Run once in Safari', 'jspec run'
85
+ c.example 'Run once in Safari and Firefox', 'jspec run --browsers Safari,Firefox'
86
+ c.example 'Run custom spec file', 'jspec run foo.html'
87
+ c.example 'Auto-run browsers when a file is altered', 'jspec run --bind --browsers Safari,Firefox'
88
+ c.example 'Shortcut for the previous example', 'jspec --browsers Safari,Firefox'
89
+ c.example 'Auto-run rhino when a file is altered', 'jspec --rhino'
90
+ c.example 'Run Rhino specs once', 'jspec run --rhino'
91
+ c.option '-b', '--browsers BROWSERS', Array, 'Specify browsers to test, defaults to Safari'
92
+ c.option '-p', '--paths PATHS', Array, 'Specify paths when binding, defaults to javascript within ./lib and ./spec'
93
+ c.option '-B', '--bind', 'Auto-run specs when source files or specs are altered'
94
+ c.option '-R', '--rhino', 'Run specs using Rhino'
95
+ c.option '-S', '--server', 'Run specs using the JSpec server'
96
+ c.option '-s', '--server-only', 'Start JSpec server without running browsers'
97
+ c.when_called do |args, options|
98
+ begin
99
+ require 'bind'
100
+ options.default :browsers => %w( Safari ), :paths => ['lib/**/*.js', 'spec/**/*.js']
101
+
102
+ # Actions
103
+ if options.rhino
104
+ spec = args.shift || 'spec/spec.js'
105
+ action = lambda { rhino spec }
106
+ elsif options.server
107
+ spec = args.shift || 'spec/spec.html'
108
+ action = lambda { start_server options, spec }
109
+ else
110
+ spec = args.shift || 'spec/spec.html'
111
+ action = Bind::Actions::RefreshBrowsers.new spec, *options.browsers
112
+ end
113
+
114
+ # Binding
115
+ if options.bind
116
+ listener = Bind::Listener.new :paths => options.paths, :interval => 1, :actions => [action], :debug => $stdout
117
+ listener.run!
118
+ else
119
+ action.call File.new(spec)
120
+ end
121
+
122
+ rescue LoadError
123
+ abort "jspec run requires the visionmedia-bind gem; http://visionmedia.github.com/bind/"
124
+ end
125
+ end
126
+ end
127
+ alias_command :bind, :run, '--bind'
128
+
129
+ def rhino file
130
+ abort "#{file} not found" unless File.exists? file
131
+ system "#{RHINO} #{file}"
132
+ end
133
+
134
+ def start_server options, spec
135
+ require 'server/server'
136
+ JSpec::Server.start options, spec
137
+ end
@@ -0,0 +1,35 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{jspec}
5
+ s.version = "2.0.4"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["visionmedia raus22"]
9
+ s.date = %q{2009-06-03}
10
+ s.default_executable = %q{jspec}
11
+ s.description = %q{JavaScript BDD Testing Framework}
12
+ s.email = %q{tj@vision-media.ca}
13
+ s.executables = ["jspec"]
14
+ s.extra_rdoc_files = ["bin/jspec", "lib/images/bg.png", "lib/images/hr.png", "lib/images/loading.gif", "lib/images/sprites.bg.png", "lib/images/sprites.png", "lib/images/vr.png", "lib/jspec.css", "lib/jspec.jquery.js", "lib/jspec.js", "README.rdoc"]
15
+ s.files = ["bin/jspec", "History.rdoc", "jspec.gemspec", "lib/images/bg.png", "lib/images/hr.png", "lib/images/loading.gif", "lib/images/sprites.bg.png", "lib/images/sprites.png", "lib/images/vr.png", "lib/jspec.css", "lib/jspec.jquery.js", "lib/jspec.js", "Manifest", "Rakefile", "README.rdoc", "server/browsers.rb", "server/server.rb", "spec/async", "spec/jquery-1.3.1.js", "spec/server.html", "spec/spec.grammar-less.js", "spec/spec.grammar.js", "spec/spec.html", "spec/spec.jquery.js", "spec/spec.js", "spec/spec.matchers.js", "spec/spec.rhino.js", "spec/spec.shared-behaviors.js", "spec/spec.utils.js", "templates/default/History.rdoc", "templates/default/lib/yourlib.core.js", "templates/default/README.rdoc", "templates/default/spec/spec.core.js", "templates/default/spec/spec.html", "templates/rhino/History.rdoc", "templates/rhino/lib/yourlib.core.js", "templates/rhino/README.rdoc", "templates/rhino/spec/spec.core.js", "templates/rhino/spec/spec.js", "templates/server/History.rdoc", "templates/server/lib/yourlib.core.js", "templates/server/README.rdoc", "templates/server/spec/spec.core.js", "templates/server/spec/spec.html"]
16
+ s.homepage = %q{http://github.com/raus22/jspec/tree/master}
17
+ s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Jspec", "--main", "README.rdoc"]
18
+ s.require_paths = ["lib"]
19
+ s.rubyforge_project = %q{jspec}
20
+ s.rubygems_version = %q{1.3.3}
21
+ s.summary = %q{JavaScript BDD Testing Framework}
22
+
23
+ if s.respond_to? :specification_version then
24
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
25
+ s.specification_version = 3
26
+
27
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
28
+ s.add_runtime_dependency(%q<visionmedia-commander>, [">= 3.2.9"])
29
+ else
30
+ s.add_dependency(%q<visionmedia-commander>, [">= 3.2.9"])
31
+ end
32
+ else
33
+ s.add_dependency(%q<visionmedia-commander>, [">= 3.2.9"])
34
+ end
35
+ end
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,145 @@
1
+ body.jspec {
2
+ margin: 45px 0;
3
+ font: 12px "Helvetica Neue Light", "Lucida Grande", "Calibri", "Arial", sans-serif;
4
+ background: #efefef url(images/bg.png) top left repeat-x;
5
+ }
6
+ #jspec {
7
+ margin: 0 auto;
8
+ padding-top: 25px;
9
+ width: 1008px;
10
+ background: url(images/vr.png) top left repeat-y;
11
+ text-align: left;
12
+ }
13
+ #jspec-top {
14
+ position: relative;
15
+ margin: 0 auto;
16
+ width: 1008px;
17
+ height: 40px;
18
+ background: url(images/sprites.bg.png) top left no-repeat;
19
+ }
20
+ #jspec-bottom {
21
+ margin: 0 auto;
22
+ width: 1008px;
23
+ height: 15px;
24
+ background: url(images/sprites.bg.png) bottom left no-repeat;
25
+ }
26
+ #jspec .loading {
27
+ margin-top: -45px;
28
+ width: 1008px;
29
+ height: 80px;
30
+ background: url(images/loading.gif) 50% 50% no-repeat;
31
+ }
32
+ #jspec-title {
33
+ position: relative;
34
+ top: 35px;
35
+ left: 20px;
36
+ width: 160px;
37
+ font-size: 22px;
38
+ font-weight: normal;
39
+ background: url(images/sprites.png) 0 -126px no-repeat;
40
+ text-align: center;
41
+ }
42
+ #jspec-title em {
43
+ font-size: 10px;
44
+ font-style: normal;
45
+ color: #BCC8D1;
46
+ }
47
+ #jspec-report * {
48
+ margin: 0;
49
+ padding: 0;
50
+ background: none;
51
+ border: none;
52
+ }
53
+ #jspec-report {
54
+ padding: 15px 40px;
55
+ font: 11px "Helvetica Neue Light", "Lucida Grande", "Calibri", "Arial", sans-serif;
56
+ color: #7B8D9B;
57
+ }
58
+ #jspec-report.has-failures {
59
+ padding-bottom: 30px;
60
+ }
61
+ #jspec-report .hidden {
62
+ display: none;
63
+ }
64
+ #jspec-report .heading {
65
+ margin-bottom: 15px;
66
+ }
67
+ #jspec-report .heading span {
68
+ padding-right: 10px;
69
+ }
70
+ #jspec-report .heading .passes em {
71
+ color: #0ea0eb;
72
+ }
73
+ #jspec-report .heading .failures em {
74
+ color: #FA1616;
75
+ }
76
+ #jspec-report table {
77
+ width: 100%;
78
+ font-size: 11px;
79
+ border-collapse: collapse;
80
+ }
81
+ #jspec-report td {
82
+ padding: 8px;
83
+ text-indent: 30px;
84
+ color: #7B8D9B;
85
+ }
86
+ #jspec-report tr.body {
87
+ display: none;
88
+ }
89
+ #jspec-report tr.body pre {
90
+ margin: 0;
91
+ padding: 0 0 5px 25px;
92
+ }
93
+ #jspec-report tr:not(.body):hover + tr.body {
94
+ display: block;
95
+ }
96
+ #jspec-report tr td:first-child em {
97
+ font-style: normal;
98
+ font-weight: normal;
99
+ color: #7B8D9B;
100
+ }
101
+ #jspec-report tr:not(.description):hover {
102
+ text-shadow: 1px 1px 1px #fff;
103
+ background: #F2F5F7;
104
+ }
105
+ #jspec-report td + td {
106
+ padding-right: 0;
107
+ width: 15px;
108
+ }
109
+ #jspec-report td.pass {
110
+ background: url(images/sprites.png) 3px -7px no-repeat;
111
+ }
112
+ #jspec-report td.fail {
113
+ background: url(images/sprites.png) 3px -47px no-repeat;
114
+ font-weight: bold;
115
+ color: #FC0D0D;
116
+ }
117
+ #jspec-report td.requires-implementation {
118
+ background: url(images/sprites.png) 3px -87px no-repeat;
119
+ }
120
+ #jspec-report tr.description td {
121
+ margin-top: 25px;
122
+ padding-top: 25px;
123
+ font-size: 12px;
124
+ font-weight: bold;
125
+ text-indent: 0;
126
+ color: #1a1a1a;
127
+ }
128
+ #jspec-report tr.description:first-child td {
129
+ border-top: none;
130
+ }
131
+ #jspec-report .assertion {
132
+ display: block;
133
+ float: left;
134
+ margin: 0 0 0 1px;
135
+ padding: 0;
136
+ width: 1px;
137
+ height: 5px;
138
+ background: #7B8D9B;
139
+ }
140
+ #jspec-report .assertion.failed {
141
+ background: red;
142
+ }
143
+ .jspec-sandbox {
144
+ display: none;
145
+ }
@@ -0,0 +1,64 @@
1
+
2
+ // JSpec - jQuery - Copyright TJ Holowaychuk <tj@vision-media.ca> (MIT Licensed)
3
+
4
+ (function(){
5
+
6
+ // --- Dependencies
7
+
8
+ JSpec.requires('jQuery', 'when using jspec.jquery.js')
9
+
10
+ // --- Async Support
11
+
12
+ jQuery.ajaxSetup({ async : false })
13
+
14
+ // --- Helpers
15
+
16
+ JSpec.defaultContext.element = jQuery
17
+ JSpec.defaultContext.elements = jQuery
18
+ JSpec.defaultContext.sandbox = function() { return jQuery('<div class="sandbox"></div>') }
19
+
20
+ // --- Matchers
21
+
22
+ JSpec.addMatchers({
23
+ have_tag : "jQuery(expected, actual).length == 1",
24
+ have_one : "alias have_tag",
25
+ have_tags : "jQuery(expected, actual).length > 1",
26
+ have_many : "alias have_tags",
27
+ have_child : "jQuery(actual).children(expected).length == 1",
28
+ have_children : "jQuery(actual).children(expected).length > 1",
29
+ have_text : "jQuery(actual).text() == expected",
30
+ have_value : "jQuery(actual).val() == expected",
31
+ be_visible : "!jQuery(actual).is(':hidden')",
32
+ be_hidden : "jQuery(actual).is(':hidden')",
33
+ be_enabled : "!jQuery(actual).attr('disabled')",
34
+ have_class : "jQuery(actual).hasClass(expected)",
35
+
36
+ have_classes : function(actual) {
37
+ return !JSpec.any(JSpec.argumentsToArray(arguments, 1), function(arg){
38
+ return !JSpec.does(actual, 'have_class', arg)
39
+ })
40
+ },
41
+
42
+ have_attr : function(actual, attr, value) {
43
+ return value ? jQuery(actual).attr(attr) == value:
44
+ jQuery(actual).attr(attr)
45
+ }
46
+ })
47
+
48
+ // --- be_BOOLATTR
49
+
50
+ JSpec.each('disabled selected checked', function(attr){
51
+ JSpec.addMatcher('be_' + attr, "jQuery(actual).attr('" + attr + "')")
52
+ })
53
+
54
+ // --- have_ATTR
55
+
56
+ JSpec.each('type id title alt href src rel rev name target', function(attr){
57
+ JSpec.addMatcher('have_' + attr, function(actual, value) {
58
+ return JSpec.matchers.have_attr.match(actual, attr, value)
59
+ })
60
+ })
61
+
62
+ })()
63
+
64
+