finished moving all tests to vows
This commit is contained in:
parent
80305ca376
commit
2e3843205a
@ -12,7 +12,7 @@ npm install log4js
|
|||||||
|
|
||||||
## tests
|
## tests
|
||||||
|
|
||||||
Tests now use [vows](http://vowsjs.org), run with `vows test/logging.js`. I am slowly porting the previous tests from jspec (run those with `node tests.js`), since jspec is no longer maintained.
|
Tests now use [vows](http://vowsjs.org), run with `vows test/logging.js`.
|
||||||
|
|
||||||
## usage
|
## usage
|
||||||
|
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 154 B |
Binary file not shown.
Before Width: | Height: | Size: 321 B |
Binary file not shown.
Before Width: | Height: | Size: 2.5 KiB |
Binary file not shown.
Before Width: | Height: | Size: 4.8 KiB |
Binary file not shown.
Before Width: | Height: | Size: 3.5 KiB |
Binary file not shown.
Before Width: | Height: | Size: 145 B |
@ -1,149 +0,0 @@
|
|||||||
body.jspec {
|
|
||||||
margin: 45px 0;
|
|
||||||
font: 12px "Helvetica Neue Light", "Lucida Grande", "Calibri", "Arial", sans-serif;
|
|
||||||
background: #efefef url(images/bg.png) top left repeat-x;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
#jspec {
|
|
||||||
margin: 0 auto;
|
|
||||||
padding-top: 30px;
|
|
||||||
width: 1008px;
|
|
||||||
background: url(images/vr.png) top left repeat-y;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
#jspec-top {
|
|
||||||
position: relative;
|
|
||||||
margin: 0 auto;
|
|
||||||
width: 1008px;
|
|
||||||
height: 40px;
|
|
||||||
background: url(images/sprites.bg.png) top left no-repeat;
|
|
||||||
}
|
|
||||||
#jspec-bottom {
|
|
||||||
margin: 0 auto;
|
|
||||||
width: 1008px;
|
|
||||||
height: 15px;
|
|
||||||
background: url(images/sprites.bg.png) bottom left no-repeat;
|
|
||||||
}
|
|
||||||
#jspec .loading {
|
|
||||||
margin-top: -45px;
|
|
||||||
width: 1008px;
|
|
||||||
height: 80px;
|
|
||||||
background: url(images/loading.gif) 50% 50% no-repeat;
|
|
||||||
}
|
|
||||||
#jspec-title {
|
|
||||||
position: absolute;
|
|
||||||
top: 15px;
|
|
||||||
left: 20px;
|
|
||||||
width: 160px;
|
|
||||||
font-size: 22px;
|
|
||||||
font-weight: normal;
|
|
||||||
background: url(images/sprites.png) 0 -126px no-repeat;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
#jspec-title em {
|
|
||||||
font-size: 10px;
|
|
||||||
font-style: normal;
|
|
||||||
color: #BCC8D1;
|
|
||||||
}
|
|
||||||
#jspec-report * {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
background: none;
|
|
||||||
border: none;
|
|
||||||
}
|
|
||||||
#jspec-report {
|
|
||||||
padding: 15px 40px;
|
|
||||||
font: 11px "Helvetica Neue Light", "Lucida Grande", "Calibri", "Arial", sans-serif;
|
|
||||||
color: #7B8D9B;
|
|
||||||
}
|
|
||||||
#jspec-report.has-failures {
|
|
||||||
padding-bottom: 30px;
|
|
||||||
}
|
|
||||||
#jspec-report .hidden {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
#jspec-report .heading {
|
|
||||||
margin-bottom: 15px;
|
|
||||||
}
|
|
||||||
#jspec-report .heading span {
|
|
||||||
padding-right: 10px;
|
|
||||||
}
|
|
||||||
#jspec-report .heading .passes em {
|
|
||||||
color: #0ea0eb;
|
|
||||||
}
|
|
||||||
#jspec-report .heading .failures em {
|
|
||||||
color: #FA1616;
|
|
||||||
}
|
|
||||||
#jspec-report table {
|
|
||||||
font-size: 11px;
|
|
||||||
border-collapse: collapse;
|
|
||||||
}
|
|
||||||
#jspec-report td {
|
|
||||||
padding: 8px;
|
|
||||||
text-indent: 30px;
|
|
||||||
color: #7B8D9B;
|
|
||||||
}
|
|
||||||
#jspec-report tr.body {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
#jspec-report tr.body pre {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0 0 5px 25px;
|
|
||||||
}
|
|
||||||
#jspec-report tr.even:hover + tr.body,
|
|
||||||
#jspec-report tr.odd:hover + tr.body {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
#jspec-report tr td:first-child em {
|
|
||||||
display: block;
|
|
||||||
clear: both;
|
|
||||||
font-style: normal;
|
|
||||||
font-weight: normal;
|
|
||||||
color: #7B8D9B;
|
|
||||||
}
|
|
||||||
#jspec-report tr.even:hover,
|
|
||||||
#jspec-report tr.odd:hover {
|
|
||||||
text-shadow: 1px 1px 1px #fff;
|
|
||||||
background: #F2F5F7;
|
|
||||||
}
|
|
||||||
#jspec-report td + td {
|
|
||||||
padding-right: 0;
|
|
||||||
width: 15px;
|
|
||||||
}
|
|
||||||
#jspec-report td.pass {
|
|
||||||
background: url(images/sprites.png) 3px -7px no-repeat;
|
|
||||||
}
|
|
||||||
#jspec-report td.fail {
|
|
||||||
background: url(images/sprites.png) 3px -158px no-repeat;
|
|
||||||
font-weight: bold;
|
|
||||||
color: #FC0D0D;
|
|
||||||
}
|
|
||||||
#jspec-report td.requires-implementation {
|
|
||||||
background: url(images/sprites.png) 3px -333px no-repeat;
|
|
||||||
}
|
|
||||||
#jspec-report tr.description td {
|
|
||||||
margin-top: 25px;
|
|
||||||
padding-top: 25px;
|
|
||||||
font-size: 12px;
|
|
||||||
font-weight: bold;
|
|
||||||
text-indent: 0;
|
|
||||||
color: #1a1a1a;
|
|
||||||
}
|
|
||||||
#jspec-report tr.description:first-child td {
|
|
||||||
border-top: none;
|
|
||||||
}
|
|
||||||
#jspec-report .assertion {
|
|
||||||
display: block;
|
|
||||||
float: left;
|
|
||||||
margin: 0 0 0 1px;
|
|
||||||
padding: 0;
|
|
||||||
width: 1px;
|
|
||||||
height: 5px;
|
|
||||||
background: #7B8D9B;
|
|
||||||
}
|
|
||||||
#jspec-report .assertion.failed {
|
|
||||||
background: red;
|
|
||||||
}
|
|
||||||
.jspec-sandbox {
|
|
||||||
display: none;
|
|
||||||
}
|
|
@ -1,115 +0,0 @@
|
|||||||
|
|
||||||
// JSpec - Growl - Copyright TJ Holowaychuk <tj@vision-media.ca> (MIT Licensed)
|
|
||||||
|
|
||||||
;(function(){
|
|
||||||
|
|
||||||
Growl = {
|
|
||||||
|
|
||||||
// --- Version
|
|
||||||
|
|
||||||
version: '1.0.0',
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Execute the given _cmd_, returning an array of lines from stdout.
|
|
||||||
*
|
|
||||||
* Examples:
|
|
||||||
*
|
|
||||||
* Growl.exec('growlnotify', '-m', msg)
|
|
||||||
*
|
|
||||||
* @param {string ...} cmd
|
|
||||||
* @return {array}
|
|
||||||
* @api public
|
|
||||||
*/
|
|
||||||
|
|
||||||
exec: function(cmd) {
|
|
||||||
var lines = [], line
|
|
||||||
with (JavaImporter(java.lang, java.io)) {
|
|
||||||
var proccess = Runtime.getRuntime().exec(Array.prototype.slice.call(arguments))
|
|
||||||
var stream = new DataInputStream(proccess.getInputStream())
|
|
||||||
while (line = stream.readLine())
|
|
||||||
lines.push(line + '')
|
|
||||||
stream.close()
|
|
||||||
}
|
|
||||||
return lines
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the extension of the given _path_ or null.
|
|
||||||
*
|
|
||||||
* @param {string} path
|
|
||||||
* @return {string}
|
|
||||||
* @api private
|
|
||||||
*/
|
|
||||||
|
|
||||||
extname: function(path) {
|
|
||||||
return path.lastIndexOf('.') != -1 ?
|
|
||||||
path.slice(path.lastIndexOf('.') + 1, path.length) :
|
|
||||||
null
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Version of the 'growlnotify' binary.
|
|
||||||
*
|
|
||||||
* @return {string}
|
|
||||||
* @api private
|
|
||||||
*/
|
|
||||||
|
|
||||||
binVersion: function() {
|
|
||||||
try { return this.exec('growlnotify', '-v')[0].split(' ')[1] } catch (e) {}
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Send growl notification _msg_ with _options_.
|
|
||||||
*
|
|
||||||
* Options:
|
|
||||||
*
|
|
||||||
* - title Notification title
|
|
||||||
* - sticky Make the notification stick (defaults to false)
|
|
||||||
* - name Application name (defaults to growlnotify)
|
|
||||||
* - image
|
|
||||||
* - path to an icon sets --iconpath
|
|
||||||
* - path to an image sets --image
|
|
||||||
* - capitalized word sets --appIcon
|
|
||||||
* - filename uses extname as --icon
|
|
||||||
* - otherwise treated as --icon
|
|
||||||
*
|
|
||||||
* Examples:
|
|
||||||
*
|
|
||||||
* Growl.notify('New email')
|
|
||||||
* Growl.notify('5 new emails', { title: 'Thunderbird' })
|
|
||||||
*
|
|
||||||
* @param {string} msg
|
|
||||||
* @param {options} hash
|
|
||||||
* @api public
|
|
||||||
*/
|
|
||||||
|
|
||||||
notify: function(msg, options) {
|
|
||||||
options = options || {}
|
|
||||||
var args = ['growlnotify', '-m', msg]
|
|
||||||
if (!this.binVersion()) throw new Error('growlnotify executable is required')
|
|
||||||
if (image = options.image) {
|
|
||||||
var flag, ext = this.extname(image)
|
|
||||||
flag = flag || ext == 'icns' && 'iconpath'
|
|
||||||
flag = flag || /^[A-Z]/.test(image) && 'appIcon'
|
|
||||||
flag = flag || /^png|gif|jpe?g$/.test(ext) && 'image'
|
|
||||||
flag = flag || ext && (image = ext) && 'icon'
|
|
||||||
flag = flag || 'icon'
|
|
||||||
args.push('--' + flag, image)
|
|
||||||
}
|
|
||||||
if (options.sticky) args.push('--sticky')
|
|
||||||
if (options.name) args.push('--name', options.name)
|
|
||||||
if (options.title) args.push(options.title)
|
|
||||||
this.exec.apply(this, args)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
JSpec.include({
|
|
||||||
name: 'Growl',
|
|
||||||
reporting: function(options){
|
|
||||||
var stats = JSpec.stats
|
|
||||||
if (stats.failures) Growl.notify('failed ' + stats.failures + ' assertions', { title: 'JSpec'})
|
|
||||||
else Growl.notify('passed ' + stats.passes + ' assertions', { title: 'JSpec' })
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
})()
|
|
@ -1,71 +0,0 @@
|
|||||||
|
|
||||||
// JSpec - jQuery - Copyright TJ Holowaychuk <tj@vision-media.ca> (MIT Licensed)
|
|
||||||
|
|
||||||
JSpec
|
|
||||||
.requires('jQuery', 'when using jspec.jquery.js')
|
|
||||||
.include({
|
|
||||||
name: 'jQuery',
|
|
||||||
|
|
||||||
// --- Initialize
|
|
||||||
|
|
||||||
init : function() {
|
|
||||||
jQuery.ajaxSetup({ async: false })
|
|
||||||
},
|
|
||||||
|
|
||||||
// --- Utilities
|
|
||||||
|
|
||||||
utilities : {
|
|
||||||
element: jQuery,
|
|
||||||
elements: jQuery,
|
|
||||||
sandbox : function() {
|
|
||||||
return jQuery('<div class="sandbox"></div>')
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
// --- Matchers
|
|
||||||
|
|
||||||
matchers : {
|
|
||||||
have_tag : "jQuery(expected, actual).length == 1",
|
|
||||||
have_one : "alias have_tag",
|
|
||||||
have_tags : "jQuery(expected, actual).length > 1",
|
|
||||||
have_many : "alias have_tags",
|
|
||||||
have_child : "jQuery(actual).children(expected).length == 1",
|
|
||||||
have_children : "jQuery(actual).children(expected).length > 1",
|
|
||||||
have_text : "jQuery(actual).text() == expected",
|
|
||||||
have_value : "jQuery(actual).val() == expected",
|
|
||||||
be_enabled : "!jQuery(actual).attr('disabled')",
|
|
||||||
have_class : "jQuery(actual).hasClass(expected)",
|
|
||||||
|
|
||||||
be_visible : function(actual) {
|
|
||||||
return jQuery(actual).css('display') != 'none' &&
|
|
||||||
jQuery(actual).css('visibility') != 'hidden' &&
|
|
||||||
jQuery(actual).attr('type') != 'hidden'
|
|
||||||
},
|
|
||||||
|
|
||||||
be_hidden : function(actual) {
|
|
||||||
return !JSpec.does(actual, 'be_visible')
|
|
||||||
},
|
|
||||||
|
|
||||||
have_classes : function(actual) {
|
|
||||||
return !JSpec.any(JSpec.toArray(arguments, 1), function(arg){
|
|
||||||
return !JSpec.does(actual, 'have_class', arg)
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
have_attr : function(actual, attr, value) {
|
|
||||||
return value ? jQuery(actual).attr(attr) == value:
|
|
||||||
jQuery(actual).attr(attr)
|
|
||||||
},
|
|
||||||
|
|
||||||
'be disabled selected checked' : function(attr) {
|
|
||||||
return 'jQuery(actual).attr("' + attr + '")'
|
|
||||||
},
|
|
||||||
|
|
||||||
'have type id title alt href src sel rev name target' : function(attr) {
|
|
||||||
return function(actual, value) {
|
|
||||||
return JSpec.does(actual, 'have_attr', attr, value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
1773
spec/lib/jspec.js
1773
spec/lib/jspec.js
File diff suppressed because it is too large
Load Diff
@ -1,39 +0,0 @@
|
|||||||
|
|
||||||
// JSpec - Shell - Copyright TJ Holowaychuk <tj@vision-media.ca> (MIT Licensed)
|
|
||||||
|
|
||||||
;(function(){
|
|
||||||
|
|
||||||
var _quit = quit
|
|
||||||
|
|
||||||
Shell = {
|
|
||||||
|
|
||||||
// --- Global
|
|
||||||
|
|
||||||
main: this,
|
|
||||||
|
|
||||||
// --- Commands
|
|
||||||
|
|
||||||
commands: {
|
|
||||||
quit: ['Terminate the shell', function(){ _quit() }],
|
|
||||||
exit: ['Terminate the shell', function(){ _quit() }],
|
|
||||||
p: ['Inspect an object', function(o){ return o.toSource() }]
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Start the interactive shell.
|
|
||||||
*
|
|
||||||
* @api public
|
|
||||||
*/
|
|
||||||
|
|
||||||
start : function() {
|
|
||||||
for (var name in this.commands)
|
|
||||||
if (this.commands.hasOwnProperty(name))
|
|
||||||
this.commands[name][1].length ?
|
|
||||||
this.main[name] = this.commands[name][1] :
|
|
||||||
this.main.__defineGetter__(name, this.commands[name][1])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Shell.start()
|
|
||||||
|
|
||||||
})()
|
|
@ -1,90 +0,0 @@
|
|||||||
|
|
||||||
// JSpec - Mock Timers - Copyright TJ Holowaychuk <tj@vision-media.ca> (MIT Licensed)
|
|
||||||
|
|
||||||
;(function(){
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Version.
|
|
||||||
*/
|
|
||||||
|
|
||||||
mockTimersVersion = '1.0.2'
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Localized timer stack.
|
|
||||||
*/
|
|
||||||
|
|
||||||
var timers = []
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set mock timeout with _callback_ and timeout of _ms_.
|
|
||||||
*
|
|
||||||
* @param {function} callback
|
|
||||||
* @param {int} ms
|
|
||||||
* @return {int}
|
|
||||||
* @api public
|
|
||||||
*/
|
|
||||||
|
|
||||||
setTimeout = function(callback, ms) {
|
|
||||||
var id
|
|
||||||
return id = setInterval(function(){
|
|
||||||
callback()
|
|
||||||
clearInterval(id)
|
|
||||||
}, ms)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set mock interval with _callback_ and interval of _ms_.
|
|
||||||
*
|
|
||||||
* @param {function} callback
|
|
||||||
* @param {int} ms
|
|
||||||
* @return {int}
|
|
||||||
* @api public
|
|
||||||
*/
|
|
||||||
|
|
||||||
setInterval = function(callback, ms) {
|
|
||||||
callback.step = ms, callback.current = callback.last = 0
|
|
||||||
return timers[timers.length] = callback, timers.length
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Destroy timer with _id_.
|
|
||||||
*
|
|
||||||
* @param {int} id
|
|
||||||
* @return {bool}
|
|
||||||
* @api public
|
|
||||||
*/
|
|
||||||
|
|
||||||
clearInterval = clearTimeout = function(id) {
|
|
||||||
return delete timers[--id]
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reset timers.
|
|
||||||
*
|
|
||||||
* @return {array}
|
|
||||||
* @api public
|
|
||||||
*/
|
|
||||||
|
|
||||||
resetTimers = function() {
|
|
||||||
return timers = []
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Increment each timers internal clock by _ms_.
|
|
||||||
*
|
|
||||||
* @param {int} ms
|
|
||||||
* @api public
|
|
||||||
*/
|
|
||||||
|
|
||||||
tick = function(ms) {
|
|
||||||
for (var i = 0, len = timers.length; i < len; ++i)
|
|
||||||
if (timers[i] && (timers[i].current += ms))
|
|
||||||
if (timers[i].current - timers[i].last >= timers[i].step) {
|
|
||||||
var times = Math.floor((timers[i].current - timers[i].last) / timers[i].step)
|
|
||||||
var remainder = (timers[i].current - timers[i].last) % timers[i].step
|
|
||||||
timers[i].last = timers[i].current - remainder
|
|
||||||
while (times-- && timers[i]) timers[i]()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
})()
|
|
@ -1,193 +0,0 @@
|
|||||||
|
|
||||||
// JSpec - XHR - Copyright TJ Holowaychuk <tj@vision-media.ca> (MIT Licensed)
|
|
||||||
|
|
||||||
(function(){
|
|
||||||
|
|
||||||
// --- Original XMLHttpRequest
|
|
||||||
|
|
||||||
var OriginalXMLHttpRequest = 'XMLHttpRequest' in this ?
|
|
||||||
XMLHttpRequest :
|
|
||||||
function(){}
|
|
||||||
var OriginalActiveXObject = 'ActiveXObject' in this ?
|
|
||||||
ActiveXObject :
|
|
||||||
undefined
|
|
||||||
|
|
||||||
// --- MockXMLHttpRequest
|
|
||||||
|
|
||||||
var MockXMLHttpRequest = function() {
|
|
||||||
this.requestHeaders = {}
|
|
||||||
}
|
|
||||||
|
|
||||||
MockXMLHttpRequest.prototype = {
|
|
||||||
status: 0,
|
|
||||||
async: true,
|
|
||||||
readyState: 0,
|
|
||||||
responseText: '',
|
|
||||||
abort: function(){},
|
|
||||||
onreadystatechange: function(){},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return response headers hash.
|
|
||||||
*/
|
|
||||||
|
|
||||||
getAllResponseHeaders : function(){
|
|
||||||
return this.responseHeaders
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return case-insensitive value for header _name_.
|
|
||||||
*/
|
|
||||||
|
|
||||||
getResponseHeader : function(name) {
|
|
||||||
return this.responseHeaders[name.toLowerCase()]
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set case-insensitive _value_ for header _name_.
|
|
||||||
*/
|
|
||||||
|
|
||||||
setRequestHeader : function(name, value) {
|
|
||||||
this.requestHeaders[name.toLowerCase()] = value
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Open mock request.
|
|
||||||
*/
|
|
||||||
|
|
||||||
open : function(method, url, async, user, password) {
|
|
||||||
this.user = user
|
|
||||||
this.password = password
|
|
||||||
this.url = url
|
|
||||||
this.readyState = 1
|
|
||||||
this.method = method.toUpperCase()
|
|
||||||
if (async != undefined) this.async = async
|
|
||||||
if (this.async) this.onreadystatechange()
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Send request _data_.
|
|
||||||
*/
|
|
||||||
|
|
||||||
send : function(data) {
|
|
||||||
var self = this
|
|
||||||
this.data = data
|
|
||||||
this.readyState = 4
|
|
||||||
if (this.method == 'HEAD') this.responseText = null
|
|
||||||
this.responseHeaders['content-length'] = (this.responseText || '').length
|
|
||||||
if(this.async) this.onreadystatechange()
|
|
||||||
lastRequest = function(){
|
|
||||||
return self
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// --- Response status codes
|
|
||||||
|
|
||||||
JSpec.statusCodes = {
|
|
||||||
100: 'Continue',
|
|
||||||
101: 'Switching Protocols',
|
|
||||||
200: 'OK',
|
|
||||||
201: 'Created',
|
|
||||||
202: 'Accepted',
|
|
||||||
203: 'Non-Authoritative Information',
|
|
||||||
204: 'No Content',
|
|
||||||
205: 'Reset Content',
|
|
||||||
206: 'Partial Content',
|
|
||||||
300: 'Multiple Choice',
|
|
||||||
301: 'Moved Permanently',
|
|
||||||
302: 'Found',
|
|
||||||
303: 'See Other',
|
|
||||||
304: 'Not Modified',
|
|
||||||
305: 'Use Proxy',
|
|
||||||
307: 'Temporary Redirect',
|
|
||||||
400: 'Bad Request',
|
|
||||||
401: 'Unauthorized',
|
|
||||||
402: 'Payment Required',
|
|
||||||
403: 'Forbidden',
|
|
||||||
404: 'Not Found',
|
|
||||||
405: 'Method Not Allowed',
|
|
||||||
406: 'Not Acceptable',
|
|
||||||
407: 'Proxy Authentication Required',
|
|
||||||
408: 'Request Timeout',
|
|
||||||
409: 'Conflict',
|
|
||||||
410: 'Gone',
|
|
||||||
411: 'Length Required',
|
|
||||||
412: 'Precondition Failed',
|
|
||||||
413: 'Request Entity Too Large',
|
|
||||||
414: 'Request-URI Too Long',
|
|
||||||
415: 'Unsupported Media Type',
|
|
||||||
416: 'Requested Range Not Satisfiable',
|
|
||||||
417: 'Expectation Failed',
|
|
||||||
422: 'Unprocessable Entity',
|
|
||||||
500: 'Internal Server Error',
|
|
||||||
501: 'Not Implemented',
|
|
||||||
502: 'Bad Gateway',
|
|
||||||
503: 'Service Unavailable',
|
|
||||||
504: 'Gateway Timeout',
|
|
||||||
505: 'HTTP Version Not Supported'
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Mock XMLHttpRequest requests.
|
|
||||||
*
|
|
||||||
* mockRequest().and_return('some data', 'text/plain', 200, { 'X-SomeHeader' : 'somevalue' })
|
|
||||||
*
|
|
||||||
* @return {hash}
|
|
||||||
* @api public
|
|
||||||
*/
|
|
||||||
|
|
||||||
function mockRequest() {
|
|
||||||
return { and_return : function(body, type, status, headers) {
|
|
||||||
XMLHttpRequest = MockXMLHttpRequest
|
|
||||||
ActiveXObject = false
|
|
||||||
status = status || 200
|
|
||||||
headers = headers || {}
|
|
||||||
headers['content-type'] = type
|
|
||||||
JSpec.extend(XMLHttpRequest.prototype, {
|
|
||||||
responseText: body,
|
|
||||||
responseHeaders: headers,
|
|
||||||
status: status,
|
|
||||||
statusText: JSpec.statusCodes[status]
|
|
||||||
})
|
|
||||||
}}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Unmock XMLHttpRequest requests.
|
|
||||||
*
|
|
||||||
* @api public
|
|
||||||
*/
|
|
||||||
|
|
||||||
function unmockRequest() {
|
|
||||||
XMLHttpRequest = OriginalXMLHttpRequest
|
|
||||||
ActiveXObject = OriginalActiveXObject
|
|
||||||
}
|
|
||||||
|
|
||||||
JSpec.include({
|
|
||||||
name: 'Mock XHR',
|
|
||||||
|
|
||||||
// --- Utilities
|
|
||||||
|
|
||||||
utilities : {
|
|
||||||
mockRequest: mockRequest,
|
|
||||||
unmockRequest: unmockRequest
|
|
||||||
},
|
|
||||||
|
|
||||||
// --- Hooks
|
|
||||||
|
|
||||||
afterSpec : function() {
|
|
||||||
unmockRequest()
|
|
||||||
},
|
|
||||||
|
|
||||||
// --- DSLs
|
|
||||||
|
|
||||||
DSLs : {
|
|
||||||
snake : {
|
|
||||||
mock_request: mockRequest,
|
|
||||||
unmock_request: unmockRequest,
|
|
||||||
last_request: function(){ return lastRequest() }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
})
|
|
||||||
})()
|
|
@ -1,113 +0,0 @@
|
|||||||
describe 'log4js'
|
|
||||||
before
|
|
||||||
extend(context, {
|
|
||||||
log4js : require("log4js")()
|
|
||||||
});
|
|
||||||
end
|
|
||||||
|
|
||||||
before_each
|
|
||||||
log4js.clearAppenders();
|
|
||||||
event = '';
|
|
||||||
logger = log4js.getLogger('tests');
|
|
||||||
logger.setLevel("TRACE");
|
|
||||||
logger.addListener("log", function (logEvent) { event = logEvent; });
|
|
||||||
end
|
|
||||||
|
|
||||||
describe 'addAppender'
|
|
||||||
before_each
|
|
||||||
appenderEvent = undefined;
|
|
||||||
appender = function(logEvent) { appenderEvent = logEvent; };
|
|
||||||
end
|
|
||||||
|
|
||||||
describe 'without a category'
|
|
||||||
it 'should register the function as a listener for all loggers'
|
|
||||||
log4js.addAppender(appender);
|
|
||||||
logger.debug("This is a test");
|
|
||||||
appenderEvent.should.be event
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'should also register as an appender for loggers if an appender for that category is defined'
|
|
||||||
var otherEvent;
|
|
||||||
log4js.addAppender(appender);
|
|
||||||
log4js.addAppender(function (evt) { otherEvent = evt; }, 'cheese');
|
|
||||||
|
|
||||||
var cheeseLogger = log4js.getLogger('cheese');
|
|
||||||
cheeseLogger.addListener("log", function (logEvent) { event = logEvent; });
|
|
||||||
|
|
||||||
cheeseLogger.debug('This is a test');
|
|
||||||
|
|
||||||
appenderEvent.should.be event
|
|
||||||
otherEvent.should.be event
|
|
||||||
|
|
||||||
otherEvent = undefined;
|
|
||||||
appenderEvent = undefined;
|
|
||||||
log4js.getLogger('pants').debug("this should not be propagated to otherEvent");
|
|
||||||
otherEvent.should.be undefined
|
|
||||||
appenderEvent.should.not.be undefined
|
|
||||||
appenderEvent.message.should.be "this should not be propagated to otherEvent"
|
|
||||||
|
|
||||||
cheeseLogger = null;
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe 'with a category'
|
|
||||||
it 'should only register the function as a listener for that category'
|
|
||||||
log4js.addAppender(appender, 'tests');
|
|
||||||
|
|
||||||
logger.debug('this is a test');
|
|
||||||
appenderEvent.should.be event
|
|
||||||
|
|
||||||
appenderEvent = undefined;
|
|
||||||
log4js.getLogger('some other category').debug('Cheese');
|
|
||||||
appenderEvent.should.be undefined
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe 'with multiple categories'
|
|
||||||
it 'should register the function as a listener for all the categories'
|
|
||||||
log4js.addAppender(appender, 'tests', 'biscuits');
|
|
||||||
|
|
||||||
logger.debug('this is a test');
|
|
||||||
appenderEvent.should.be event
|
|
||||||
appenderEvent = undefined;
|
|
||||||
|
|
||||||
var otherLogger = log4js.getLogger('biscuits');
|
|
||||||
otherLogger.debug("mmm... garibaldis");
|
|
||||||
appenderEvent.should.not.be undefined
|
|
||||||
appenderEvent.message.should.be "mmm... garibaldis"
|
|
||||||
appenderEvent = undefined;
|
|
||||||
|
|
||||||
otherLogger = null;
|
|
||||||
|
|
||||||
log4js.getLogger("something else").debug("pants");
|
|
||||||
appenderEvent.should.be undefined
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'should register the function when the list of categories is an array'
|
|
||||||
log4js.addAppender(appender, ['tests', 'pants']);
|
|
||||||
|
|
||||||
logger.debug('this is a test');
|
|
||||||
appenderEvent.should.be event
|
|
||||||
appenderEvent = undefined;
|
|
||||||
|
|
||||||
var otherLogger = log4js.getLogger('pants');
|
|
||||||
otherLogger.debug("big pants");
|
|
||||||
appenderEvent.should.not.be undefined
|
|
||||||
appenderEvent.message.should.be "big pants"
|
|
||||||
appenderEvent = undefined;
|
|
||||||
|
|
||||||
otherLogger = null;
|
|
||||||
|
|
||||||
log4js.getLogger("something else").debug("pants");
|
|
||||||
appenderEvent.should.be undefined
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
@ -244,6 +244,91 @@ vows.describe('log4js').addBatch({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
'addAppender' : {
|
||||||
|
topic: function() {
|
||||||
|
var log4js = require('../lib/log4js')();
|
||||||
|
log4js.clearAppenders();
|
||||||
|
return log4js;
|
||||||
|
},
|
||||||
|
'without a category': {
|
||||||
|
'should register the function as a listener for all loggers': function (log4js) {
|
||||||
|
var appenderEvent, appender = function(evt) { appenderEvent = evt; }, logger = log4js.getLogger("tests");
|
||||||
|
log4js.addAppender(appender);
|
||||||
|
logger.debug("This is a test");
|
||||||
|
assert.equal(appenderEvent.message, "This is a test");
|
||||||
|
assert.equal(appenderEvent.categoryName, "tests");
|
||||||
|
assert.equal(appenderEvent.level.toString(), "DEBUG");
|
||||||
|
},
|
||||||
|
'should also register as an appender for loggers if an appender for that category is defined': function (log4js) {
|
||||||
|
var otherEvent, appenderEvent, cheeseLogger;
|
||||||
|
log4js.addAppender(function (evt) { appenderEvent = evt; });
|
||||||
|
log4js.addAppender(function (evt) { otherEvent = evt; }, 'cheese');
|
||||||
|
|
||||||
|
cheeseLogger = log4js.getLogger('cheese');
|
||||||
|
cheeseLogger.debug('This is a test');
|
||||||
|
assert.deepEqual(appenderEvent, otherEvent);
|
||||||
|
assert.equal(otherEvent.message, 'This is a test');
|
||||||
|
assert.equal(otherEvent.categoryName, 'cheese');
|
||||||
|
|
||||||
|
otherEvent = undefined;
|
||||||
|
appenderEvent = undefined;
|
||||||
|
log4js.getLogger('pants').debug("this should not be propagated to otherEvent");
|
||||||
|
assert.isUndefined(otherEvent);
|
||||||
|
assert.equal(appenderEvent.message, "this should not be propagated to otherEvent");
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
'with a category': {
|
||||||
|
'should only register the function as a listener for that category': function(log4js) {
|
||||||
|
var appenderEvent, appender = function(evt) { appenderEvent = evt; }, logger = log4js.getLogger("tests");
|
||||||
|
log4js.addAppender(appender, 'tests');
|
||||||
|
logger.debug('this is a category test');
|
||||||
|
assert.equal(appenderEvent.message, 'this is a category test');
|
||||||
|
|
||||||
|
appenderEvent = undefined;
|
||||||
|
log4js.getLogger('some other category').debug('Cheese');
|
||||||
|
assert.isUndefined(appenderEvent);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
'with multiple categories': {
|
||||||
|
'should register the function as a listener for all the categories': function(log4js) {
|
||||||
|
var appenderEvent, appender = function(evt) { appenderEvent = evt; }, logger = log4js.getLogger('tests');
|
||||||
|
log4js.addAppender(appender, 'tests', 'biscuits');
|
||||||
|
|
||||||
|
logger.debug('this is a test');
|
||||||
|
assert.equal(appenderEvent.message, 'this is a test');
|
||||||
|
appenderEvent = undefined;
|
||||||
|
|
||||||
|
var otherLogger = log4js.getLogger('biscuits');
|
||||||
|
otherLogger.debug("mmm... garibaldis");
|
||||||
|
assert.equal(appenderEvent.message, "mmm... garibaldis");
|
||||||
|
|
||||||
|
appenderEvent = undefined;
|
||||||
|
|
||||||
|
log4js.getLogger("something else").debug("pants");
|
||||||
|
assert.isUndefined(appenderEvent);
|
||||||
|
},
|
||||||
|
'should register the function when the list of categories is an array': function(log4js) {
|
||||||
|
var appenderEvent, appender = function(evt) { appenderEvent = evt; };
|
||||||
|
log4js.addAppender(appender, ['tests', 'pants']);
|
||||||
|
|
||||||
|
log4js.getLogger('tests').debug('this is a test');
|
||||||
|
assert.equal(appenderEvent.message, 'this is a test');
|
||||||
|
|
||||||
|
appenderEvent = undefined;
|
||||||
|
|
||||||
|
log4js.getLogger('pants').debug("big pants");
|
||||||
|
assert.equal(appenderEvent.message, "big pants");
|
||||||
|
|
||||||
|
appenderEvent = undefined;
|
||||||
|
|
||||||
|
log4js.getLogger("something else").debug("pants");
|
||||||
|
assert.isUndefined(appenderEvent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
'default setup': {
|
'default setup': {
|
||||||
topic: function() {
|
topic: function() {
|
||||||
var pathsChecked = [],
|
var pathsChecked = [],
|
||||||
|
43
tests.js
43
tests.js
@ -1,43 +0,0 @@
|
|||||||
require.paths.unshift("./spec/lib", "./lib");
|
|
||||||
require("jspec");
|
|
||||||
|
|
||||||
var sys = require("sys"), fs = require("fs");
|
|
||||||
|
|
||||||
quit = process.exit
|
|
||||||
print = sys.puts
|
|
||||||
|
|
||||||
readFile = function(path) {
|
|
||||||
var result;
|
|
||||||
try {
|
|
||||||
result = fs.readFileSync(path, "utf8");
|
|
||||||
} catch (e) {
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
var specsFound = false;
|
|
||||||
|
|
||||||
if (process.ARGV[2]) {
|
|
||||||
specsFound = true;
|
|
||||||
JSpec.exec('spec/spec.' + process.ARGV[2] + '.js');
|
|
||||||
} else {
|
|
||||||
var files = fs.readdirSync('spec/');
|
|
||||||
files.filter(
|
|
||||||
function (file) {
|
|
||||||
return file.indexOf('spec.') === 0;
|
|
||||||
}
|
|
||||||
).forEach(
|
|
||||||
function(file) {
|
|
||||||
specsFound = true;
|
|
||||||
JSpec.exec('spec/'+file);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if (specsFound) {
|
|
||||||
JSpec.run({ reporter: JSpec.reporters.Terminal, failuresOnly: false });
|
|
||||||
JSpec.report();
|
|
||||||
} else {
|
|
||||||
print("No tests to run. This makes me sad.");
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user