VimUnDo 3qAm2gLJl%e;vNϚF_M}var COLOR_BLANK = '\033[0;30m'5_M ~5_M 'use strict';5_M5_M5_M5_VM2'/* vim:set ts=2 sw=2 sts=2 expandtab */L/*jshint asi: true newcap: true undef: true es5: true node: true devel: true forin: true *//*global define: true */var COLOR_BLANK = '\033[0;30m' , COLOR_RED = '\033[0;31m' , COLOR_GREEN = '\033[0;32m' , COLOR_YELLOW = '\033[0;33m' , COLOR_BLUE = '\033[0;34m' , COLOR_PURPLE = '\033[0;35m' , COLOR_CYAN = '\033[0;36m' , COLOR_WHITE = '\033[0;37m' , COLOR_RESET = '\033[m' , COLOR_PASS = COLOR_GREEN , COLOR_FAIL = COLOR_RED , COLOR_ERROR = COLOR_PURPLE , ICON_PASS = '✓ ' , ICON_FAIL = '✗ ' , ICON_ERROR = '⚡ ' , ICON_SECTION = '* ' , INDENT = ' ' function Color(color, message) {8 return color ? color + message + COLOR_RESET : message}"function Indent(message, indent) {0 indent = undefined == indent ? INDENT : indent' return message.replace(/^/gm, indent)}/**5 * Internal utility function that is used to generate1 * textual representation of things passed to it. */+function toSource(thing, indent, visited) {4 indent = undefined !== indent ? indent + ' ' : '' var result, index, root if (!visited) { root = true visited = [] } index = visited.indexOf(thing), if (0 <= index) return '#' + ++index + '#' switch(typeof(thing)) { case 'string': result = '"' + thing + '"' break case 'number': result = '' + thing break case 'object': if (null === thing) { result = 'null' break }! if (Array.isArray(thing)) { result = '['Z result += thing.map(function($) { return toSource($, indent, visited) }).join(',') result += ']' break } visited.push(thing) var names = []. for (var name in thing) names.push(name)B result = thing + '' !== {} + '' ? '/* ' + thing + ' */' : '' if (names.length > 0) {& result += '\n' + indent + '{ ', result += names.map(function(name) {) var repr = '\'' + name + '\': ' try {: repr += toSource(thing[name], indent, visited) } catch(e) {" repr += '[Exception!]' } return repr% }).join('\n' + indent + ', ')% result += '\n' + indent + '}' } break case "function":? result = thing.toString().split('\n').join('\n' + indent) break default: result = '' + thing }G return root && '\n' === result.charAt(0) ? result.substr(1) : result}function Log(options) { options = options || {}% return Object.create(Log.prototype,# { name: { value: options.name }? , indent: { value: options.indent || Log.prototype.indent } } )}Log.prototype ={ constructor: Log , indent: ''", print: function print(message) {= process.stdout.write(Indent(message, this.indent) + '\n') } , pass: function pass(message) {> this.print(Indent(Color(COLOR_PASS, ICON_PASS + message))) }, fail: function fail(e) { var message = e.message if ('expected' in e)B message += '\n Expected: \n' + toSource(e.expected, INDENT) if ('actual' in e)> message += '\n Actual: \n' + toSource(e.actual, INDENT) if ('operator' in e)@ message += '\n Operator: ' + toSource(e.operator, INDENT)> this.print(Indent(Color(COLOR_FAIL, ICON_FAIL + message))) }, error: function error(e) {D this.print(Indent(Color(COLOR_ERROR, ICON_ERROR + toSource(e)))) }&, section: function section(options) { options = options || {}) options.indent = this.indent + INDENT return Log(options) }}exports.Log = Log5_ VM;  5_ VM>  COLOR_RESET = '\033[m', , ,5_ VM@ 5_ VMB 5_ VMD COLOR_ERROR = COLOR_PURPLE,, ,5_  VMF5_ VMI 5_VMK ICON_SECTION = '* '5_VML ,5_VMN INDENT = ' '5_VMO INDENT = ' ',5_VMQ 5_VMR 5_VMS 5_VMmvar COLOR_BLANK = '\033[0;30m',5_VMq COLOR_RED = '\033[0;31m',5_VMr COLOR_GREEN = '\033[0;32m',5_VMt  COLOR_YELLOW = '\033[0;33m',5_ VMu  COLOR_BLUE = '\033[0;34m',5_ VMw  COLOR_PURPLE = '\033[0;35m',5_ VMx  COLOR_CYAN = '\033[0;36m',5_ VMz  COLOR_WHITE = '\033[0;37m',5_! VM{   COLOR_RESET = '\033[m',5_"!!VM  "0 indent = undefined == indent ? INDENT : indent5_!#"VM  forin: true */5_"$#VM var COLOR_BLANK = '\\033[0;30m',5_#%$VM COLOR_RED = '\\033[0;31m',5_$&%VM COLOR_RED = '\\\033[0;31m',5_%'&VM!var COLOR_BLANK = '\\\033[0;30m',5_&('VM COLOR_GREEN = '\\033[0;32m',5_')(VM ! COLOR_YELLOW = '\\033[0;33m',5_(*) VM  COLOR_BLUE = '\\033[0;34m',5_)+* VM ! COLOR_PURPLE = '\\033[0;35m',5_*,+ VM  COLOR_CYAN = '\\033[0;36m',5_+-, VM  COLOR_WHITE = '\\033[0;37m',5_,.- VM   COLOR_RESET = '\\033[m',5_-/.VMvar toSource = require5_.0/VMvar toSource = require()5_/10VMvar toSource = require('')5_021''bvM&(=/**5 * Internal utility function that is used to generate1 * textual representation of things passed to it. */+function toSource(thing, indent, visited) {4 indent = undefined !== indent ? indent + ' ' : '' var result, index, root if (!visited) { root = true visited = [] } index = visited.indexOf(thing), if (0 <= index) return '#' + ++index + '#' switch (typeof (thing)) { case 'string': result = '"' + thing + '"' break case 'number': result = '' + thing break case 'object': if (null === thing) { result = 'null' break } if (Array.isArray(thing)) { result = '['( result += thing.map(function ($) {+ return toSource($, indent, visited) }).join(',') result += ']' break } visited.push(thing) var names = [], for (var name in thing) names.push(name)@ result = thing + '' !== {} + '' ? '/* ' + thing + ' */' : '' if (names.length > 0) {$ result += '\n' + indent + '{ '+ result += names.map(function (name) {' var repr = '\'' + name + '\': ' try {8 repr += toSource(thing[name], indent, visited) } catch (e) { repr += '[Exception!]' } return repr# }).join('\n' + indent + ', ')# result += '\n' + indent + '}' } break case "function":= result = thing.toString().split('\n').join('\n' + indent) break default: result = '' + thing }F return root && '\n' === result.charAt(0) ? result.substr(1) : result}5_132'''vM&'5_243''vML5_354((vM5_465''vML5_576!((vMM!var toSource = require('./utils')5_687D>((vMCEMD this.print(Indent(Color(COLOR_ERROR, ICON_ERROR + toSource(e))))5_798D7((vMCEM; this.print(Indent(Color(COLOR_ERROR, ICON_ERROR + e))))5_8:9D7((vMCEM: this.print(Indent(Color(COLOR_ERROR, ICON_ERROR + e)))5_9;:DA((vMCEMD this.print(Indent(Color(COLOR_ERROR, ICON_ERROR + e + e.stack)))5_:<;D8((vMCEMI this.print(Indent(Color(COLOR_ERROR, ICON_ERROR + e + e.stack || e)))5_;=<D6((vMCEME this.print(Indent(Color(COLOR_ERROR, ICON_ERROR + e.stack || e)))5_<>=DF((vMCEMF this.print(Indent(Color(COLOR_ERROR, ICON_ERROR + (e.stack || e)))5_=?>((vM NM5_>@?Q,,vMQSQS5_?A@R,,vMQS})5_@BA@,,vM@BS @BR5_ACBA,,vM@BS console.log()5_BDCA,,vM@A console.log(e)5_CEDD7,,vM mCERS if ('operator' in e) message += '\n Operator: ' + toSource(e.operator, INDENT)5_DFED`,,vM uCERa if ('operator' in e) message += '\n Operator: ' + Indent(INDENT(toSource(e.operator, INDENT)5_EGFDY,,vM zCERY if ('operator' in e) message += '\n Operator: ' + Indent(INDENT(toSource(e.operator)5_FHGDZ,,vM }CERZ if ('operator' in e) message += '\n Operator: ' + Indent(INDENT(toSource(e.operator))5_GIHDE,,vM CERZ if ('operator' in e) message += '\n Operator: ' + Indent(INDENT(toSource(e.operator))5_HJIC5D7DDvDM BDRO if ('actual' in e) message += '\n Actual: \n' + toSource(e.actual, INDENT)5_IKJCUD7DDvDM BDR^ if ('actual' in e) message += '\n Actual: \n' + Indent(INDENT, toSource(e.actual, INDENT)5_JLKCWD7DDvDM BDRW if ('actual' in e) message += '\n Actual: \n' + Indent(INDENT, toSource(e.actual))5_KMLB9D7DDvDM ACRU if ('expected' in e) message += '\n Expected: \n' + toSource(e.expected, INDENT)5_LNMBGD7DDvDM ACRc if ('expected' in e) message += '\n Expected: \n' + Indent(INDENT,toSource(e.expected, INDENT)5_MONBcD7DDvDM ACRd if ('expected' in e) message += '\n Expected: \n' + Indent(INDENT, toSource(e.expected, INDENT)5_NPOB\D7DDvDM ACR\ if ('expected' in e) message += '\n Expected: \n' + Indent(INDENT, toSource(e.expected)5_OQPBHD7DDvDM ACR] if ('expected' in e) message += '\n Expected: \n' + Indent(INDENT, toSource(e.expected))5_PRQCDD7DDvDM BDRX if ('actual' in e) message += '\n Actual: \n' + Indent(INDENT, toSource(e.actual)))5_QSRDFD7DDvDM CER[ if ('operator' in e) message += '\n Operator: ' + Indent(INDENT, toSource(e.operator))5_RTSCPD7DDvDM BDRP if ('actual' in e) message += '\n Actual: \n' + Indent(toSource(e.actual)))5_SUTBD7DDvDM ADRU if ('expected' in e) message += '\n Expected: \n' + Indent(toSource(e.expected))5_TVUDE7EDvDM CFSO if ('actual' in e) message += '\n Actual: \n' + Indent(toSource(e.actual))5_UWVFF7FDvDM EHTS if ('operator' in e) message += '\n Operator: ' + Indent(toSource(e.operator))5_VXWG,F7FDvDM FHU@ message += '\n Operator: ' + Indent(toSource(e.operator))5_WYXE+E2E+v+M DFU> message += '\n Actual: \n' + Indent(toSource(e.actual))5_XZYC-C4C-v-M  BDUB message += '\n Expected: \n' + Indent(toSource(e.expected))5_Y[Z C4C-v-M ! U(var toSource = require('./utils').source5_Z\[ %C4C-v-M # U%var utils = require('./utils').source5_[]\ vM $ Uvar utils = require('./utils')5_\^],,SvN%+.+-U(function Log(options) { options = options || {}' return Object.create(Log.prototype, { name: { value: options.name }, indent: {3 value: options.indent || Log.prototype.indent } })}Log.prototype = { constructor: Log, indent: ''," print: function print(message) {= process.stdout.write(Indent(message, this.indent) + '\n') }, pass: function pass(message) {> this.print(Indent(Color(COLOR_PASS, ICON_PASS + message))) }, fail: function fail(e) { var message = e.message if ('expected' in e)F message += '\n Expected: \n' + Indent(utils.source(e.expected)) if ('actual' in e)B message += '\n Actual: \n' + Indent(utils.source(e.actual)) if ('operator' in e)D message += '\n Operator: ' + Indent(utils.source(e.operator))> this.print(Indent(Color(COLOR_FAIL, ICON_FAIL + message))) }, error: function error(e) {G this.print(Indent(Color(COLOR_ERROR, ICON_ERROR + (e.stack || e)))) },& section: function section(options) { options = options || {}) options.indent = this.indent + INDENT return Log(options) }}exports.Log = Log5_]_^y,,vNxz if ('operator' in e)5_^`_w,,vNvx if ('actual' in e)5__a`u,,vN&tv if ('expected' in e)5_`bav0,,vNuwB message += '\n Expected: \n' + toSource(e.expected, INDENT)5_acbx.,,vNwy> message += '\n Actual: \n' + toSource(e.actual, INDENT)5_bdcz.,,vN'y{@ message += '\n Operator: ' + toSource(e.operator, INDENT)5_ced;,,vN(~? print(Indent(Color(COLOR_ERROR, ICON_ERROR + toSource(e))))5_dfe# ,,vN)"$ function Color(color, message) {5_egf' ,,vN*&("function Indent(message, indent) {5_fhgp,,vN ~C print(Indent(Color(COLOR_ERROR, ICON_ERROR + toSource(error))))z|9 print(Indent(Color(COLOR_FAIL, ICON_FAIL + message)))oq9 print(Indent(Color(COLOR_PASS, ICON_PASS + message)))5_gihi,,vN+~C print(Indent(color(COLOR_ERROR, ICON_ERROR + toSource(error))))z|9 print(Indent(color(COLOR_FAIL, ICON_FAIL + message)))oq9 print(Indent(color(COLOR_PASS, ICON_PASS + message)))hj1 line.innerHTML = Indent(message, this.indent)5_hji~#,,vN%}& this.error = function error(error) {5_ikj?~~&v&N+,~C print(indent(color(COLOR_ERROR, ICON_ERROR + toSource(error))))5_jlk~~&v&NS( logger.indent = INDENT + this.indent5_kml&~~&v&NW-& logger.indent = indent(this.indent5_lnml~~&v&Nr.kmfunction Logger(print) {5_monl~~&v&Nw/km function Logger(print, indent) {5_npoo~~&v&N0np this.pass = function pass() {5_oqpf~~&v&Neffunction print(message) {5_prqf}}&v&Nef, var line = document.createElement('div')5_qsrf||&v&Nef+ ;(output || Output()).appendChild(line)5_rtsf{{&v&Nef1 line.innerHTML = indent(message, this.indent)5_sutfzz&v&Nef}5_tvufyy&v&N1ef5_uwv'xx&v&N&("function indent(message, indent) {5_vxw(1''#v#N')1 indent = undefined === indent ? INDENT : indent5_wyx(''#v#N')6 indent = undefined === indent ? INDENT : indentation5_xzy(''#v#N'); indent = undefined === indentation ? INDENT : indentation5_y{z)&''#v#N2(*' return message.replace(/^/gm, indent)5_z|{ ''#v#N !var utils = require('./utils.js')5_{}| &&#v#N3 5_|~}6%%#v#N57, if (0 <= index) return '#' + ++index + '#'5_}~6!%%#v#N57. if (0 <= index) return '#' + ()++index + '#'5_~6'%%#v#N457- if (0 <= index) return '#' + (++index + '#'5_|||&v&N {}' logger.indent = indent(this.indent)5_{!||&v&Nz|" var logger = new Logger(print)5_|||&v&N5{| logger.indent = 5_{5||&v&N6z|7 var logger = new Logger(print, indent(this.indent))5_{||&v&N'7z|< var logger = new Logger(print, indent(this.indentation))5_||&v&NM    5_ ~~&v&NP8 ""5_ ~~&v&NW var COLOR_BLANK = '\033[0;30m',5_ ~~&v&NX  COLOR_RED = '\033[0;31m',5_ ~~&v&N[ var COLOR_RED = '\033[0;31m',5_~~&v&N\  COLOR_GREEN = '\033[0;32m',5_~~&v&N^ var COLOR_GREEN = '\033[0;32m',5_~~&v&N_ COLOR_YELLOW = '\033[0;33m',5_ ~~&v&Na var COLOR_YELLOW = '\033[0;33m',5_~~&v&Nc COLOR_BLUE = '\033[0;34m',5_~~&v&Nevar COLOR_BLUE = '\033[0;34m',5_~~&v&Ng COLOR_PURPLE = '\033[0;35m',5_ ~~&v&Ni var COLOR_PURPLE = '\033[0;35m',5_~~&v&Nj COLOR_CYAN = '\033[0;36m',5_~~&v&Nlvar COLOR_CYAN = '\033[0;36m',5_~~&v&Nm COLOR_WHITE = '\033[0;37m',5_~~&v&Nova COLOR_WHITE = '\033[0;37m',5_~~&v&Npvar COLOR_WHITE = '\033[0;37m',5_~~&v&Nr COLOR_RESET = '\033[m',5_~~&v&Nvvar COLOR_RESET = '\033[m',5_~~&v&N| COLOR_PASS = COLOR_GREEN,5_~~&v&Nvar COLOR_PASS = COLOR_GREEN,5_~~&v&N COLOR_FAIL = COLOR_RED,5_~~&v&Nvar COLOR_FAIL = COLOR_RED,5_~~&v&N COLOR_ERROR = COLOR_PURPLE,5_~~&v&Nvar COLOR_ERROR = COLOR_PURPLE,5_~~&v&N ICON_PASS = '✓ ',5_~~&v&N ICON_PASS = '✓ '5_~~&v&N ICON_FAIL = '✗ ',5_~~&v&N ICON_ERROR = '⚡ ',5_~~&v&Nvar ICON_FAIL = '✗ ',5_~~&v&Nvar ICON_ERROR = '⚡ ',5_~~&v&N ICON_SECTION = '* ',5_~~&v&Nvar ICON_SECTION = '* ',5_~~&v&N9  INDENT = ' '5_~~&v&Nvar ICON_PASS = '✓ '5_~~&v&N:var ICON_PASS = '\✓ '5_ ~~&v&N  5_ &v&N var ESCAPE = ''5_ &v&N var ESCAPE = '\033'5_ &v&N var ESCAPE = '033'5_ &v&N var ESCAPE = '\\'033'5_ &v&N;  "use strict"5_ vN var ESCAPE = '\\' + '033'5_fvNfhfh5_gvNfhfunction print()5_gvNfhfunction print()5_gvNfifunction print() {}5_gvNgi gi5_hvNgi process.stdout.write()5_h"vNgi$ process.stdout.write(message + '')5_gvNfhfunction print() {5_  vNbvar COLOR_GREEN = '\033[0;32m'5_vN var COLOR_RED = '\033[0;31m'5_   vN var COLOR_BLANK = '\033[0;30m'5_vNvar COLOR_YELLOW = '\033[0;33m'5_vNvar COLOR_BLUE = '\033[0;34m'5_vNvar COLOR_PURPLE = '\033[0;35m'5_vNvar COLOR_CYAN = '\033[0;36m'5_vNvar COLOR_WHITE = '\033[0;37m'5_vN@var COLOR_RESET = '\033[m'5_!vN=A !5_ vNPB var ESCAPE = '\\' + '033['5_   vN 5_   vN var font = require()5_   vN var font = require('')5_   vN  var COLOR_BLANK = '\u001b[0;30m'5_   vN var COLOR_RED = '\u001b[0;31m'5_   vN  var COLOR_GREEN = '\u001b[0;32m'5_   vN !var COLOR_YELLOW = '\u001b[0;33m'5_   vN var COLOR_BLUE = '\u001b[0;34m'5_   vN !var COLOR_PURPLE = '\u001b[0;35m'5_   vN var COLOR_CYAN = '\u001b[0;36m'5_   vN  var COLOR_WHITE = '\u001b[0;37m'5_   vN var COLOR_RESET = '\u001b[m'5_  vN |{5_  vN}|5_   vN'} var fail = 5_  vN*}var pass = font.green5_  vN.}var fail = font.5_  vN3}var failed = font.5_   vN9~ var errored5_  vNR~var errored = font.5_  vNX~5_   vN_ var COLOR_PASS = COLOR_GREEN5_   vN` var COLOR_FAIL = COLOR_RED5_   vNb var COLOR_ERROR = COLOR_PURPLE5_   vNc 5_  vNg function color(color, message) {5_  vNh8 return color ? color + message + COLOR_RESET : message5_  vNh}5_  vNi5_j  vN{ikw9 print(indent(color(COLOR_FAIL, ICON_FAIL + message)))5_j$  vN΀ikw: print(indent(failed(COLOR_FAIL, ICON_FAIL + message)))5_n$  vN΍mowG print(indent(color(COLOR_ERROR, ICON_ERROR + toSource(exception))))5_n<  vNΑmow< print(indent(errored(ICON_ERROR + toSource(exception))))5_n;  vNΗmow; print(indent(errored(ICON_ERROR + toSource(exception)))5__!  vNΡ^`w9 print(indent(color(COLOR_PASS, ICON_PASS + message)))5__  vNΦC^`w1 print(indent(passed(), ICON_PASS + message)))5_  vNw5_  vNwfunction passed()5_  vNwfunction passed() {}5_  vNy x5_  vNy return font.green()5_  vNy return font.green('')5_  vN return font.green('')5_  vNfunction passed() {5_  vND}5_   vN vvar passed = font.green5_   vN wfunction passed() {5_   vN x  w5_  vN x return font.green()5_vN! x return font.green('')5_#vN&y x5_vN(zy5_vN,zfunction failed()5_vN.zfunction failed(message)5_vN.zfunction failed(message) {}5_vN0| {5_vN=| return font.red()5_vNM}|5_vNS}function errored()5_vNU}function errored(message)5_ vNU}function errored(message) {}5_  vNV ~5_   vN] return font.magenta()5_   vNh return font.magenta('')5_   vNj return font.magenta('⚡ ')5_  vN}  5_  vNσ !var font = require('./ansi-font')5_ vNϐ  var errored5_vNϕ~var failed = font.red var passed = font.green5_vNϖvar failed = font.red5_vNϖ|var errored = font.magenta5_vNϗ5_vNϗvar ICON_PASS = '✓ '5_vNϗvar ICON_FAIL = '✗ '5_vNϗvar ICON_ERROR = '⚡ '5_vNϘvar ICON_SECTION = '* '5_vNϙF5_ "vNυ (var color = require('./ansi-font').color5_ vNω 5_ vNϊ  var pa5_vNvar ICON_PASS = '\u2713 '✓ '5_vN"var ICON_PASS = '\u2713 ' // ✓ '5_"vN< var ICON_PASS = '\u2713 ' // ✓5_vN'5_vN)>5_vN1?var ICON_PASS = '\u2713 '// ✓5_ vN*=var ICON_PASS = '\u2713 ' // 5_&v&N(typeof define === "undefined" ''? function ($) { $(require, exports, module) } : define)(function (require, exports, module, undefined) {5_ !VM ICON_PASS = '\✓ ',5_ VM ICON_PASS = '\\✓ ',5