xultestrunner 0.2.8
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -0
- data/.gitmodules +3 -0
- data/LICENSE +21 -0
- data/README +17 -0
- data/Rakefile +50 -0
- data/VERSION +1 -0
- data/bin/xultest +13 -0
- data/lib/xultestrunner.rb +1 -0
- data/xulapp/application.ini +9 -0
- data/xulapp/chrome/chrome.manifest +2 -0
- data/xulapp/chrome/content/interface/boot.xul +20 -0
- data/xulapp/chrome/content/interface/testharness.html +30 -0
- data/xulapp/chrome/content/lib/xultestcase.js +140 -0
- data/xulapp/chrome/content/lib/xultestrunner.js +120 -0
- data/xulapp/chrome/content/vendor/prototype/LICENSE +16 -0
- data/xulapp/chrome/content/vendor/prototype/prototype.js +4874 -0
- data/xulapp/chrome/content/vendor/scriptaculous/LICENSE +20 -0
- data/xulapp/chrome/content/vendor/scriptaculous/test.css +90 -0
- data/xulapp/chrome/content/vendor/scriptaculous/unittest.js +566 -0
- data/xulapp/chrome/content/vendor/xpcomcore/LICENSE +21 -0
- data/xulapp/chrome/content/vendor/xpcomcore/README +27 -0
- data/xulapp/chrome/content/vendor/xpcomcore/Rakefile +83 -0
- data/xulapp/chrome/content/vendor/xpcomcore/VERSION.yml +5 -0
- data/xulapp/chrome/content/vendor/xpcomcore/bootstrapper.js +32 -0
- data/xulapp/chrome/content/vendor/xpcomcore/components/XPCOMCore.js +120 -0
- data/xulapp/chrome/content/vendor/xpcomcore/doc/files.html +241 -0
- data/xulapp/chrome/content/vendor/xpcomcore/doc/index.html +243 -0
- data/xulapp/chrome/content/vendor/xpcomcore/doc/symbols/Error.html +256 -0
- data/xulapp/chrome/content/vendor/xpcomcore/doc/symbols/Kernel.html +1030 -0
- data/xulapp/chrome/content/vendor/xpcomcore/doc/symbols/LoadError.html +319 -0
- data/xulapp/chrome/content/vendor/xpcomcore/doc/symbols/SelfConceptError.html +319 -0
- data/xulapp/chrome/content/vendor/xpcomcore/doc/symbols/_global_.html +316 -0
- data/xulapp/chrome/content/vendor/xpcomcore/doc/symbols/src/lib_file.js.html +53 -0
- data/xulapp/chrome/content/vendor/xpcomcore/doc/symbols/src/lib_kernel.js.html +251 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/README.txt +186 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/frame.js +33 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/frame/Chain.js +102 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/frame/Dumper.js +144 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/frame/Hash.js +84 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/frame/Link.js +153 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/frame/Namespace.js +10 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/frame/Opt.js +134 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/frame/Reflection.js +26 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/frame/String.js +93 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/frame/Testrun.js +129 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/handlers/FOODOC.js +26 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/handlers/XMLDOC.js +26 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/handlers/XMLDOC/DomReader.js +159 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/handlers/XMLDOC/XMLDoc.js +16 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/handlers/XMLDOC/XMLParse.js +292 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/lib/JSDOC.js +104 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/lib/JSDOC/DocComment.js +200 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/lib/JSDOC/DocTag.js +294 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/lib/JSDOC/JsDoc.js +126 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/lib/JSDOC/JsPlate.js +109 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/lib/JSDOC/Lang.js +144 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/lib/JSDOC/Parser.js +145 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/lib/JSDOC/PluginManager.js +33 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/lib/JSDOC/Symbol.js +645 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/lib/JSDOC/SymbolSet.js +241 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/lib/JSDOC/TextStream.js +41 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/lib/JSDOC/Token.js +18 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/lib/JSDOC/TokenReader.js +332 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/lib/JSDOC/TokenStream.js +133 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/lib/JSDOC/Util.js +32 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/lib/JSDOC/Walker.js +474 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/main.js +111 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/plugins/commentSrcJson.js +20 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/plugins/frameworkPrototype.js +16 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/plugins/functionCall.js +10 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/plugins/publishSrcHilite.js +62 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/plugins/symbolLink.js +10 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/plugins/tagParamConfig.js +31 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/plugins/tagSynonyms.js +43 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/run.js +348 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/t/TestDoc.js +144 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/t/runner.js +13 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test.js +325 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/addon.js +24 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/anon_inner.js +14 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/augments.js +31 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/augments2.js +26 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/borrows.js +46 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/borrows2.js +23 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/config.js +22 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/constructs.js +18 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/encoding.js +10 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/encoding_other.js +12 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/event.js +54 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/exports.js +14 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/functions_anon.js +39 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/functions_nested.js +33 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/global.js +13 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/globals.js +25 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/ignore.js +10 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/inner.js +16 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/jsdoc_test.js +477 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/lend.js +33 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/memberof.js +19 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/memberof_constructor.js +17 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/module.js +17 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/name.js +19 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/namespace_nested.js +23 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/nocode.js +13 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/oblit_anon.js +20 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/overview.js +20 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/param_inline.js +37 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/params_optional.js +8 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/prototype.js +17 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/prototype_nested.js +9 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/prototype_oblit.js +13 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/prototype_oblit_constructor.js +24 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/public.js +10 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/scripts/code.js +5 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/scripts/notcode.txt +5 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/shared.js +42 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/shared2.js +2 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/shortcuts.js +22 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/static_this.js +13 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/synonyms.js +31 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/tosource.js +23 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/variable_redefine.js +14 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/changes.txt +96 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/conf/sample.conf +31 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/java/build.xml +36 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/java/build_1.4.xml +36 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/java/classes/js.jar +0 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/java/src/JsDebugRun.java +21 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/java/src/JsRun.java +21 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/jsdebug.jar +0 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/jsrun.jar +0 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/jsrun.sh +52 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/templates/jsdoc/allclasses.tmpl +17 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/templates/jsdoc/allfiles.tmpl +56 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/templates/jsdoc/class.tmpl +646 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/templates/jsdoc/index.tmpl +39 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/templates/jsdoc/publish.js +200 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/templates/jsdoc/static/default.css +162 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/templates/jsdoc/static/header.html +2 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/templates/jsdoc/static/index.html +19 -0
- data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/templates/jsdoc/symbol.tmpl +35 -0
- data/xulapp/chrome/content/vendor/xpcomcore/lib/file.js +46 -0
- data/xulapp/chrome/content/vendor/xpcomcore/lib/kernel.js +244 -0
- data/xulapp/chrome/content/vendor/xpcomcore/test/file_test.js +16 -0
- data/xulapp/chrome/content/vendor/xpcomcore/test/fixtures/love.js +1 -0
- data/xulapp/chrome/content/vendor/xpcomcore/test/fixtures/mad_love.js +1 -0
- data/xulapp/chrome/content/vendor/xpcomcore/test/fixtures/mad_world.js +1 -0
- data/xulapp/chrome/content/vendor/xpcomcore/test/fixtures/syntax_error.js +1 -0
- data/xulapp/chrome/content/vendor/xpcomcore/test/kernel_test.js +88 -0
- data/xulapp/components/bootstrap.js +93 -0
- data/xulapp/defaults/preferences/prefs.js +14 -0
- data/xultestrunner.gemspec +190 -0
- metadata +207 -0
data/.gitignore
ADDED
data/.gitmodules
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License
|
2
|
+
|
3
|
+
Copyright (c) <2009> <Gabriel Gironda>
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
XULTestRunner
|
2
|
+
=============
|
3
|
+
|
4
|
+
This is a XUL based test runner for running the quasi-scriptaculous-unittest.js-based tests that Conflagration and WaterTower and XPCOMCore use.
|
5
|
+
|
6
|
+
Yes, it is a XUL app in a RubyGem, yes I am in touch with this.
|
7
|
+
|
8
|
+
NOTE
|
9
|
+
====
|
10
|
+
|
11
|
+
This project uses git submodules. Remember to 'git submodule init' and 'git submodule update'.
|
12
|
+
|
13
|
+
TODO
|
14
|
+
====
|
15
|
+
|
16
|
+
* Better error output.
|
17
|
+
* Write its own tests in itself.
|
data/Rakefile
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
begin
|
2
|
+
require 'jeweler'
|
3
|
+
require 'uuidtools'
|
4
|
+
require 'pathname'
|
5
|
+
|
6
|
+
Jeweler::Tasks.new do |s|
|
7
|
+
s.name = "xultestrunner"
|
8
|
+
s.executables = "xultest"
|
9
|
+
s.summary = "XUL based test runner for running your JS unit tests."
|
10
|
+
s.email = "contact@gironda.org"
|
11
|
+
s.homepage = "http://github.com/gabrielg/xultestrunner"
|
12
|
+
s.description = "XUL based test runner for running your JS unit tests."
|
13
|
+
s.authors = ["Gabriel Gironda"]
|
14
|
+
# FIXME - weird hack around jeweler ignoring the submoduled in xpcomcore.
|
15
|
+
s.files = (s.files + FileList["xulapp/chrome/content/vendor/**/*"]).uniq
|
16
|
+
end
|
17
|
+
Jeweler::GemcutterTasks.new
|
18
|
+
|
19
|
+
application_ini_path = (Pathname(__FILE__).parent + "xulapp/application.ini").expand_path
|
20
|
+
|
21
|
+
desc "Writes out a random UUID for the Build ID when we release to the XUL application's application.ini"
|
22
|
+
task :write_xul_build_id do
|
23
|
+
build_id = UUIDTools::UUID.random_create.to_s
|
24
|
+
ini_contents = application_ini_path.read
|
25
|
+
application_ini_path.open('w') do |f|
|
26
|
+
f << ini_contents.sub(/^BuildID=.*$/, "BuildID=#{build_id}")
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
desc "Writes out the gem version to the XUL application's application.ini"
|
31
|
+
task :write_xul_version do
|
32
|
+
version = (Pathname(__FILE__).parent + "VERSION").read.chomp
|
33
|
+
ini_contents = application_ini_path.read
|
34
|
+
application_ini_path.open('w') do |f|
|
35
|
+
f << ini_contents.sub(/^Version=.*$/, "Version=#{version}")
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
desc "Commits the application ini before a release"
|
40
|
+
task :commit_application_ini do
|
41
|
+
system("git", "add", application_ini_path.to_s)
|
42
|
+
system("git", "commit", "-m", "Bumping application.ini", application_ini_path.to_s)
|
43
|
+
end
|
44
|
+
|
45
|
+
task :release => [:write_xul_build_id, :write_xul_version, :commit_application_ini]
|
46
|
+
|
47
|
+
rescue LoadError
|
48
|
+
puts "Jeweler, or one of its dependencies, is not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
|
49
|
+
end
|
50
|
+
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.2.8
|
data/bin/xultest
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'pathname'
|
3
|
+
|
4
|
+
firefox_location = [`which firefox-bin`.chomp, `which firefox`.chomp].detect do |loc|
|
5
|
+
!loc.length.zero?
|
6
|
+
end
|
7
|
+
|
8
|
+
raise "Could not find `firefox-bin` or `firefox` in your path. Please rectify this and try again." unless firefox_location
|
9
|
+
|
10
|
+
xulapp_ini_path = (Pathname(__FILE__).parent.parent + "xulapp/application.ini").expand_path
|
11
|
+
|
12
|
+
puts("")
|
13
|
+
exec(firefox_location, *["-app", xulapp_ini_path, *ARGV])
|
@@ -0,0 +1 @@
|
|
1
|
+
warn("There isn't much here, buddy. Just us lonely old Ruby files.")
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
|
3
|
+
|
4
|
+
<window id="main" title="XULTestRunner Console" width="800" height="600" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
5
|
+
<script type="text/javascript">XPCOMCore({scope: this});</script>
|
6
|
+
<script type="text/javascript" src="resource://xultestrunner/vendor/prototype/prototype.js" />
|
7
|
+
<script type="text/javascript" src="resource://xultestrunner/lib/xultestrunner.js" />
|
8
|
+
<script type="text/javascript">
|
9
|
+
window.addEventListener('load', function(){
|
10
|
+
var cmdService = $Cc["@conflagrationjs.org/xultestrunner/app-startup-clh;1"].getService().wrappedJSObject;
|
11
|
+
var harnessURI = "chrome://xultestrunner/content/interface/testharness.html";
|
12
|
+
var xulTestRunner = XULTestRunner.initializeFromCmdArgs(cmdService.args, {browser: $('test-browser'), harnessURI: harnessURI});
|
13
|
+
xulTestRunner.go();
|
14
|
+
}, false);
|
15
|
+
</script>
|
16
|
+
|
17
|
+
<caption label="XULTestRunner Console" />
|
18
|
+
<browser src="about:blank" id="test-browser" type="content-primary" flex="1" />
|
19
|
+
|
20
|
+
</window>
|
@@ -0,0 +1,30 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
3
|
+
<head>
|
4
|
+
<title>Unit Test Harness</title>
|
5
|
+
<script type="text/javascript">XPCOMCore({scope: this});</script>
|
6
|
+
<script type="text/javascript" src="resource://xultestrunner/vendor/prototype/prototype.js"></script>
|
7
|
+
<script type="text/javascript" src="resource://xultestrunner/vendor/scriptaculous/unittest.js"></script>
|
8
|
+
<link rel="stylesheet" href="resource://xultestrunner/vendor/scriptaculous/test.css" type="text/css" />
|
9
|
+
<script type="text/javascript">
|
10
|
+
$(document).observe('dom:loaded', function(){
|
11
|
+
// FIXME - add stuff to xpcomcore for doing this jacked up crap
|
12
|
+
var ioService = $Cc["@mozilla.org/network/io-service;1"].getService($Ci.nsIIOService);
|
13
|
+
var resProt = ioService.getProtocolHandler("resource").QueryInterface($Ci.nsIResProtocolHandler);
|
14
|
+
var libPath = ioService.newURI(resProt.resolveURI(ioService.newURI("resource://xultestrunner/lib", null, null)), null, null).QueryInterface(Components.interfaces.nsIURL).path;
|
15
|
+
|
16
|
+
$LOAD_PATH.push(libPath);
|
17
|
+
require("xultestcase");
|
18
|
+
|
19
|
+
var qp = window.location.search.toQueryParams();
|
20
|
+
var testCase = XULTestCase.loadFromFile(qp.testFile);
|
21
|
+
testCase.go();
|
22
|
+
});
|
23
|
+
</script>
|
24
|
+
</head>
|
25
|
+
<body>
|
26
|
+
<h1>Unit Test Harness</h1>
|
27
|
+
<!-- Log output -->
|
28
|
+
<div id="testlog"></div>
|
29
|
+
</body>
|
30
|
+
</html>
|
@@ -0,0 +1,140 @@
|
|
1
|
+
var XULTestCase = Class.create({
|
2
|
+
initialize: function(testName, testDef) {
|
3
|
+
this.testRunner = new XULTestCase.TestRunner(testDef);
|
4
|
+
this.testRunner.name = testName;
|
5
|
+
},
|
6
|
+
|
7
|
+
go: function() {
|
8
|
+
this.testRunner.runTests();
|
9
|
+
}
|
10
|
+
|
11
|
+
});
|
12
|
+
|
13
|
+
Object.extend(XULTestCase, {
|
14
|
+
create: function(testName, testDefinitionFunc) {
|
15
|
+
var tests = {};
|
16
|
+
var setupCollector = function(givenSetup) { tests['setup'] = givenSetup; };
|
17
|
+
var teardownCollector = function(givenTeardown) { tests['teardown'] = givenTeardown; };
|
18
|
+
var testCollector = function(testName, testDef) { tests["test " + testName] = testDef; };
|
19
|
+
testDefinitionFunc(setupCollector, teardownCollector, testCollector);
|
20
|
+
var testCase = new XULTestCase(testName, tests);
|
21
|
+
this.__LAST_DEFINED_TESTCASE__ = testCase;
|
22
|
+
return testCase
|
23
|
+
},
|
24
|
+
|
25
|
+
loadFromFile: function(fileURI) {
|
26
|
+
try {
|
27
|
+
load(fileURI);
|
28
|
+
if (this.__LAST_DEFINED_TESTCASE__) {
|
29
|
+
return this.__LAST_DEFINED_TESTCASE__;
|
30
|
+
} else {
|
31
|
+
throw("Wuh Oh");
|
32
|
+
}
|
33
|
+
} catch (e) {
|
34
|
+
this._handleTestLoadError(fileURI, e);
|
35
|
+
} finally {
|
36
|
+
this.__LAST_DEFINED_TESTCASE__ = null;
|
37
|
+
}
|
38
|
+
},
|
39
|
+
|
40
|
+
_handleTestLoadError: function(fileURI, e) {
|
41
|
+
// Notify observers we failed and hope for the best
|
42
|
+
// FIXME - this sucks error reporting wise
|
43
|
+
var observerService = $Cc["@mozilla.org/observer-service;1"].getService($Ci.nsIObserverService);
|
44
|
+
observerService.notifyObservers(null, "xultestrunner-testloaderror", Object.toJSON({file: fileURI, exception: e.toString()}));
|
45
|
+
}
|
46
|
+
|
47
|
+
});
|
48
|
+
|
49
|
+
XULTestCase.Logger = Class.create(Test.Unit.Logger, {
|
50
|
+
consoleOutputMapping: {failed: 'F', error: 'E', passed: '.'},
|
51
|
+
|
52
|
+
initialize: function($super, log) {
|
53
|
+
$super(log);
|
54
|
+
this.unpassedTests = [];
|
55
|
+
},
|
56
|
+
|
57
|
+
finish: function ($super, status, summary) {
|
58
|
+
$super(status, summary);
|
59
|
+
print(this.consoleOutputMapping[status]);
|
60
|
+
if (status != "passed") {
|
61
|
+
this.unpassedTests.push({name: this.testName, status: status, summary: summary});
|
62
|
+
}
|
63
|
+
}
|
64
|
+
});
|
65
|
+
|
66
|
+
var testUnitInspect = Test.Unit.inspect;
|
67
|
+
Test.Unit.inspect = function(object) {
|
68
|
+
// FIXME - kinda seedy way to check if we got an Error rather than
|
69
|
+
// anything else and inspect it differently
|
70
|
+
if (object.stack && object.message) {
|
71
|
+
return "#{name}: #{message}\nFile: #{fileName} - Line: #{lineNumber}\n#{stack}".interpolate(object);
|
72
|
+
} else {
|
73
|
+
return testUnitInspect(object);
|
74
|
+
}
|
75
|
+
};
|
76
|
+
|
77
|
+
XULTestCase.TestRunner = Class.create(Test.Unit.Runner, {
|
78
|
+
// FIXME - ugh. straight rip from unittest.js just so we can ditch the settimeout
|
79
|
+
// and instantiate our own logger.
|
80
|
+
|
81
|
+
initialize: function(testcases) {
|
82
|
+
this.options = Object.extend({
|
83
|
+
testLog: 'testlog'
|
84
|
+
}, arguments[1] || {});
|
85
|
+
this.options.resultsURL = this.parseResultsURLQueryParameter();
|
86
|
+
this.options.tests = this.parseTestsQueryParameter();
|
87
|
+
if (this.options.testLog) {
|
88
|
+
this.options.testLog = $(this.options.testLog) || null;
|
89
|
+
}
|
90
|
+
if(this.options.tests) {
|
91
|
+
this.tests = [];
|
92
|
+
for(var i = 0; i < this.options.tests.length; i++) {
|
93
|
+
if(/^test/.test(this.options.tests[i])) {
|
94
|
+
this.tests.push(new Test.Unit.Testcase(this.options.tests[i], testcases[this.options.tests[i]], testcases["setup"], testcases["teardown"]));
|
95
|
+
}
|
96
|
+
}
|
97
|
+
} else {
|
98
|
+
if (this.options.test) {
|
99
|
+
this.tests = [new Test.Unit.Testcase(this.options.test, testcases[this.options.test], testcases["setup"], testcases["teardown"])];
|
100
|
+
} else {
|
101
|
+
this.tests = [];
|
102
|
+
for(var testcase in testcases) {
|
103
|
+
if(/^test/.test(testcase)) {
|
104
|
+
this.tests.push(
|
105
|
+
new Test.Unit.Testcase(
|
106
|
+
this.options.context ? ' -> ' + this.options.titles[testcase] : testcase,
|
107
|
+
testcases[testcase], testcases["setup"], testcases["teardown"]
|
108
|
+
));
|
109
|
+
}
|
110
|
+
}
|
111
|
+
}
|
112
|
+
}
|
113
|
+
this.currentTest = 0;
|
114
|
+
this.logger = new XULTestCase.Logger(this.options.testLog);
|
115
|
+
},
|
116
|
+
|
117
|
+
postResults: function($super) {
|
118
|
+
$super();
|
119
|
+
this._finishUpTestCase();
|
120
|
+
},
|
121
|
+
|
122
|
+
_finishUpTestCase: function() {
|
123
|
+
var observerService = $Cc["@mozilla.org/observer-service;1"].getService($Ci.nsIObserverService);
|
124
|
+
var data = {name: this.name, unpassedTests: this.logger.unpassedTests,
|
125
|
+
summary: this._summaryData(), testLength: this.tests.length};
|
126
|
+
// Need to pass between observers as JSON to avoid crashes. Wee.
|
127
|
+
observerService.notifyObservers(null, "xultestrunner-testdone", Object.toJSON(data));
|
128
|
+
},
|
129
|
+
|
130
|
+
_summaryData: function() {
|
131
|
+
var assertions = 0, failures = 0, errors = 0;
|
132
|
+
$A(this.tests).each(function(test) {
|
133
|
+
assertions += test.assertions;
|
134
|
+
failures += test.failures;
|
135
|
+
errors += test.errors;
|
136
|
+
});
|
137
|
+
return {assertions: assertions, failures: failures, errors: errors};
|
138
|
+
}
|
139
|
+
|
140
|
+
});
|
@@ -0,0 +1,120 @@
|
|
1
|
+
var XULTestRunner = Class.create({
|
2
|
+
initialize: function(options) {
|
3
|
+
this.options = options;
|
4
|
+
this._testResults = [];
|
5
|
+
this.appStartup = $Cc["@mozilla.org/toolkit/app-startup;1"].getService($Ci.nsIAppStartup);
|
6
|
+
},
|
7
|
+
|
8
|
+
handleExit: function (exitWithFailure) {
|
9
|
+
if (exitWithFailure) {
|
10
|
+
puts("Test Failures!");
|
11
|
+
// We kill ourselves this way because we need a non-zero exit status. This is really hacky.
|
12
|
+
// Really, really hacky.
|
13
|
+
var envFile = $Cc["@mozilla.org/file/local;1"].createInstance($Ci.nsILocalFile);
|
14
|
+
envFile.initWithPath("/usr/bin/env");
|
15
|
+
var process = $Cc["@mozilla.org/process/util;1"].createInstance($Ci.nsIProcess);
|
16
|
+
process.init(envFile);
|
17
|
+
process.run(true, ["ruby", "-e", "Process.kill(9, Process.ppid)"], 3);
|
18
|
+
}
|
19
|
+
this.appStartup.quit($Ci.nsIAppStartup.eForceQuit);
|
20
|
+
},
|
21
|
+
|
22
|
+
|
23
|
+
go: function () {
|
24
|
+
this._registerObservers();
|
25
|
+
var testsToRun = $A(this.options.tests).collect(function(testFile) { return '"' + testFile.path + '"'; });
|
26
|
+
puts("Running tests...");
|
27
|
+
puts(testsToRun.join(" ") + "\n");
|
28
|
+
this._runNextTest();
|
29
|
+
},
|
30
|
+
|
31
|
+
observe: function(subject, topic, data) {
|
32
|
+
// Need to pass between observers as JSON to avoid XPCOM crashes. Wee.
|
33
|
+
var data = data.evalJSON();
|
34
|
+
if (topic == "xultestrunner-testdone") {
|
35
|
+
this._testResults.push(data);
|
36
|
+
} else if (topic == "xultestrunner-testloaderror") {
|
37
|
+
puts("There was an error loading test '#{file}': #{exception}".interpolate(data));
|
38
|
+
}
|
39
|
+
this._runNextTest();
|
40
|
+
},
|
41
|
+
|
42
|
+
_runNextTest: function() {
|
43
|
+
var testFile = this.options.tests.shift();
|
44
|
+
if (testFile) {
|
45
|
+
this._runTest(testFile);
|
46
|
+
} else {
|
47
|
+
this._finishTestRun()
|
48
|
+
}
|
49
|
+
},
|
50
|
+
|
51
|
+
_runTest: function(testFile) {
|
52
|
+
var qs = Object.toQueryString({testFile: encodeURI(testFile.path)});
|
53
|
+
var harnessWithPath = this.options.harnessURI + "?" + qs;
|
54
|
+
this.options.browser.loadURI(harnessWithPath);
|
55
|
+
},
|
56
|
+
|
57
|
+
_finishTestRun: function() {
|
58
|
+
print("\n\n");
|
59
|
+
var exitWithFailure = this._doSummary();
|
60
|
+
this.handleExit(exitWithFailure);
|
61
|
+
},
|
62
|
+
|
63
|
+
_doSummary: function() {
|
64
|
+
var testRunners = 0, testCases = 0, unpassedLength = 0, assertions = 0, failures = 0, errors = 0;
|
65
|
+
$A(this._testResults).each(function(testResult) {
|
66
|
+
$A(testResult.unpassedTests).each(function(unpassedTest) {
|
67
|
+
unpassedLength += 1;
|
68
|
+
this._showSummaryForTestResult(testResult.name, unpassedTest, unpassedLength);
|
69
|
+
}, this);
|
70
|
+
testRunners++;
|
71
|
+
testCases += testResult.testLength;
|
72
|
+
assertions += testResult.summary.assertions;
|
73
|
+
failures += testResult.summary.failures;
|
74
|
+
errors += testResult.summary.errors;
|
75
|
+
}, this);
|
76
|
+
|
77
|
+
var overallSummary = "\n\n#{runners} runners, #{cases} cases, #{unpassed} unpassed, #{assertions} assertions, #{failures} failures, #{errors} errors.\n";
|
78
|
+
puts(overallSummary.interpolate({runners: testRunners, cases: testCases,
|
79
|
+
unpassed: unpassedLength, assertions: assertions, failures: failures, errors: errors}));
|
80
|
+
return unpassedLength > 0;
|
81
|
+
},
|
82
|
+
|
83
|
+
_showSummaryForTestResult: function(testName, testResult, failureIndex) {
|
84
|
+
puts("#{index}) #{testName} - #{name}".interpolate({index: failureIndex, testName: testName, name: testResult.name}));
|
85
|
+
puts(" " + testResult.status.toUpperCase() + ":\n");
|
86
|
+
puts(testResult.summary.replace(/^/mg, " ") + "\n\n");
|
87
|
+
},
|
88
|
+
|
89
|
+
_registerObservers: function() {
|
90
|
+
var observerService = $Cc["@mozilla.org/observer-service;1"].getService($Ci.nsIObserverService);
|
91
|
+
observerService.addObserver(this, "xultestrunner-testdone", false);
|
92
|
+
observerService.addObserver(this, "xultestrunner-testloaderror", false);
|
93
|
+
}
|
94
|
+
});
|
95
|
+
|
96
|
+
Object.extend(XULTestRunner, {
|
97
|
+
testFileMatcher: /_test\.js$/,
|
98
|
+
initializeFromCmdArgs: function(cmdArgs, options) {
|
99
|
+
if (cmdArgs.testDir) {
|
100
|
+
var tests = this._findTestsFromDir(cmdArgs.testDir);
|
101
|
+
} else if (cmdArgs.testFile) {
|
102
|
+
var tests = [cmdArgs.testFile];
|
103
|
+
}
|
104
|
+
return new this(Object.extend({tests: $A(tests)}, options));
|
105
|
+
},
|
106
|
+
|
107
|
+
_findTestsFromDir: function(rootDir) {
|
108
|
+
var testFiles = [];
|
109
|
+
var entries = rootDir.directoryEntries;
|
110
|
+
while (entries.hasMoreElements()) {
|
111
|
+
var entry = entries.getNext().QueryInterface($Ci.nsIFile);
|
112
|
+
if (entry.isDirectory()) {
|
113
|
+
testFiles = testFiles.concat(this._findTestsFromDir(entry));
|
114
|
+
} else if (this.testFileMatcher.test(entry.path)) {
|
115
|
+
testFiles.push(entry);
|
116
|
+
}
|
117
|
+
}
|
118
|
+
return testFiles;
|
119
|
+
}
|
120
|
+
});
|