diff options
author | Matthieu Aubry <mattab@users.noreply.github.com> | 2017-04-26 09:52:46 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-04-26 09:52:46 +0300 |
commit | 317700513cc732bb2371edbe645555feadbbc545 (patch) | |
tree | efc28c578903563cd72d8436dbefcec32ab161c7 | |
parent | bc8222d451337185db343486319af6782b009148 (diff) | |
parent | 199e43ef5809d09803416db72ce0ace6c9a4d895 (diff) |
Merge pull request #11651 from piwik/3.x-dev3.0.4-b1
Release Piwik 3.0.4-b1
407 files changed, 4842 insertions, 4390 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 11bcfef2c6..156e979540 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,13 @@ This is the Developer Changelog for Piwik platform developers. All changes in ou The Product Changelog at **[piwik.org/changelog](http://piwik.org/changelog)** lets you see more details about any Piwik release, such as the list of new guides and FAQs, security fixes, and links to all closed issues. +## Piwik 3.0.4 + +### New APIs +* A new event `Db.getActionReferenceColumnsByTable` has been added in case a plugin defines a custom log table which references data to the log_action table +* A new JavaScript tracker method `getPiwikUrl` has been added to retrieve the URL of where the Piwik instance is located +* A new JavaScript tracker method `getCurrentUrl` has been added to retrieve the current URL of the website. + ## Piwik 3.0.3 ### Breaking Changes diff --git a/core/FileIntegrity.php b/core/FileIntegrity.php index 23238e5781..ee37ca9887 100644 --- a/core/FileIntegrity.php +++ b/core/FileIntegrity.php @@ -65,6 +65,7 @@ class FileIntegrity '.bowerrc', '.phpstorm.meta.php', 'config/config.ini.php', + 'config/config.php', 'config/common.ini.php', 'config/*.config.ini.php', 'config/manifest.inc.php', diff --git a/core/Plugin/Dimension/DimensionMetadataProvider.php b/core/Plugin/Dimension/DimensionMetadataProvider.php index 089c60c0a6..119063ba2d 100644 --- a/core/Plugin/Dimension/DimensionMetadataProvider.php +++ b/core/Plugin/Dimension/DimensionMetadataProvider.php @@ -7,6 +7,7 @@ */ namespace Piwik\Plugin\Dimension; +use Piwik\Piwik; /** * Provides metadata about dimensions for the LogDataPurger class. @@ -73,6 +74,22 @@ class DimensionMetadataProvider } } + /** + * Triggered when detecting which log_action entries to keep. Any log tables that use the log_action + * table to reference text via an ID should add their table info so no actions that are still in use + * will be accidentally deleted. + * + * **Example** + * + * Piwik::addAction('Db.getActionReferenceColumnsByTable', function(&$result) { + * $tableNameUnprefixed = 'log_example'; + * $columnNameThatReferencesIdActionInLogActionTable = 'idaction_example'; + * $result[$tableNameUnprefixed] = array($columnNameThatReferencesIdActionInLogActionTable); + * }); + * @param array $result + */ + Piwik::postEvent('Db.getActionReferenceColumnsByTable', array(&$result)); + return $result; } diff --git a/core/Version.php b/core/Version.php index 93f5b9c95c..5c0fe9f073 100644 --- a/core/Version.php +++ b/core/Version.php @@ -20,7 +20,7 @@ final class Version * The current Piwik version. * @var string */ - const VERSION = '3.0.3'; + const VERSION = '3.0.4-b1'; public function isStableVersion($version) { diff --git a/js/piwik.js b/js/piwik.js index ffe6bdbdc9..c5a0e2351d 100644 --- a/js/piwik.js +++ b/js/piwik.js @@ -982,7 +982,7 @@ if (typeof JSON_PIWIK !== 'object' && typeof window.JSON === 'object' && window. setCustomVariable, getCustomVariable, deleteCustomVariable, storeCustomVariablesInCookie, setCustomDimension, getCustomDimension, deleteCustomVariables, deleteCustomDimension, setDownloadExtensions, addDownloadExtensions, removeDownloadExtensions, setDomains, setIgnoreClasses, setRequestMethod, setRequestContentType, - setReferrerUrl, setCustomUrl, setAPIUrl, setDocumentTitle, + setReferrerUrl, setCustomUrl, setAPIUrl, setDocumentTitle, getPiwikUrl, getCurrentUrl, setDownloadClasses, setLinkClasses, setCampaignNameKey, setCampaignKeywordKey, discardHashTag, @@ -2853,6 +2853,8 @@ if (typeof window.Piwik !== 'object') { return apiUrl; } + trackerUrl = content.toAbsoluteUrl(trackerUrl); + // if eg http://www.example.com/js/tracker.php?version=232323 => http://www.example.com/js/tracker.php if (stringContains(trackerUrl, '?')) { var posQuery = trackerUrl.indexOf('?'); @@ -5629,7 +5631,7 @@ if (typeof window.Piwik !== 'object') { }; /** - * Specify the Piwik server URL + * Specify the Piwik tracking URL * * @param string trackerUrl */ @@ -5638,7 +5640,7 @@ if (typeof window.Piwik !== 'object') { }; /** - * Returns the Piwik server URL + * Returns the Piwik tracking URL * @returns string */ this.getTrackerUrl = function () { @@ -5646,6 +5648,15 @@ if (typeof window.Piwik !== 'object') { }; /** + * Returns the Piwik server URL. + * + * @returns string + */ + this.getPiwikUrl = function () { + return getPiwikUrlForOverlay(this.getTrackerUrl(), configApiUrl); + }; + + /** * Adds a new tracker. All sent requests will be also sent to the given siteId and piwikUrl. * * @param string piwikUrl The tracker URL of the current tracker instance @@ -6142,6 +6153,14 @@ if (typeof window.Piwik !== 'object') { }; /** + * Returns the current url of the page that is currently being visited. If a custom URL was set, the + * previously defined custom URL will be returned. + */ + this.getCurrentUrl = function () { + return configCustomUrl || locationHrefAlias; + }; + + /** * Override document.title * * @param string title diff --git a/js/piwik.min.js b/js/piwik.min.js index 5cbcd0a3fa..c876ba8251 100644 --- a/js/piwik.min.js +++ b/js/piwik.min.js @@ -37,7 +37,7 @@ var aj=this.findMediaUrlInNode(ah);if(aj){return this.toAbsoluteUrl(aj)}},findCo }var aj=["img","embed","video","audio"];var ah=al.nodeName.toLowerCase();if(-1!==J(aj,ah)&&Y.findFirstNodeHavingAttributeWithValue(al,"src")){var ak=Y.findFirstNodeHavingAttributeWithValue(al,"src");return Y.getAttributeValueFromNode(ak,"src")}if(ah==="object"&&Y.hasNodeAttributeWithValue(al,"data")){return Y.getAttributeValueFromNode(al,"data")}if(ah==="object"){var am=Y.findNodesByTagName(al,"param");if(am&&am.length){var ai;for(ai=0;ai<am.length;ai++){if("movie"===Y.getAttributeValueFromNode(am[ai],"name")&&Y.hasNodeAttributeWithValue(am[ai],"value")){return Y.getAttributeValueFromNode(am[ai],"value")}}}var an=Y.findNodesByTagName(al,"embed");if(an&&an.length){return this.findMediaUrlInNode(an[0])}}},trim:function(ah){if(ah&&String(ah)===ah){return ah.replace(/^\s+|\s+$/g,"")}return ah},isOrWasNodeInViewport:function(am){if(!am||!am.getBoundingClientRect||am.nodeType!==1){return true}var al=am.getBoundingClientRect();var ak=D.documentElement||{};var aj=al.top<0;if(aj&&am.offsetTop){aj=(am.offsetTop+al.height)>0 }var ai=ak.clientWidth;if(Q.innerWidth&&ai>Q.innerWidth){ai=Q.innerWidth}var ah=ak.clientHeight;if(Q.innerHeight&&ah>Q.innerHeight){ah=Q.innerHeight}return((al.bottom>0||aj)&&al.right>0&&al.left<ai&&((al.top<ah)||aj))},isNodeVisible:function(ai){var ah=i(ai);var aj=this.isOrWasNodeInViewport(ai);return ah&&aj},buildInteractionRequestParams:function(ah,ai,aj,ak){var al="";if(ah){al+="c_i="+r(ah)}if(ai){if(al){al+="&"}al+="c_n="+r(ai)}if(aj){if(al){al+="&"}al+="c_p="+r(aj)}if(ak){if(al){al+="&"}al+="c_t="+r(ak)}return al},buildImpressionRequestParams:function(ah,ai,aj){var ak="c_n="+r(ah)+"&c_p="+r(ai);if(aj){ak+="&c_t="+r(aj)}return ak},buildContentBlock:function(aj){if(!aj){return}var ah=this.findContentName(aj);var ai=this.findContentPiece(aj);var ak=this.findContentTarget(aj);ah=this.trim(ah);ai=this.trim(ai);ak=this.trim(ak);return{name:ah||"Unknown",piece:ai||"Unknown",target:ak||""}},collectContent:function(ak){if(!ak||!ak.length){return[]}var aj=[];var ah,ai;for(ah=0;ah<ak.length; ah++){ai=this.buildContentBlock(ak[ah]);if(G(ai)){aj.push(ai)}}return aj},setLocation:function(ah){this.location=ah},getLocation:function(){var ah=this.location||Q.location;if(!ah.origin){ah.origin=ah.protocol+"//"+ah.hostname+(ah.port?":"+ah.port:"")}return ah},toAbsoluteUrl:function(ai){if((!ai||String(ai)!==ai)&&ai!==""){return ai}if(""===ai){return this.getLocation().href}if(ai.search(/^\/\//)!==-1){return this.getLocation().protocol+ai}if(ai.search(/:\/\//)!==-1){return ai}if(0===ai.indexOf("#")){return this.getLocation().origin+this.getLocation().pathname+ai}if(0===ai.indexOf("?")){return this.getLocation().origin+this.getLocation().pathname+ai}if(0===ai.search("^[a-zA-Z]{2,11}:")){return ai}if(ai.search(/^\//)!==-1){return this.getLocation().origin+ai}var ah="(.*/)";var aj=this.getLocation().origin+this.getLocation().pathname.match(new RegExp(ah))[0];return aj+ai},isUrlToCurrentDomain:function(ai){var aj=this.toAbsoluteUrl(ai);if(!aj){return false}var ah=this.getLocation().origin; -if(ah===aj){return true}if(0===String(aj).indexOf(ah)){if(":"===String(aj).substr(ah.length,1)){return false}return true}return false},setHrefAttribute:function(ai,ah){if(!ai||!ah){return}Y.setAnyAttribute(ai,"href",ah)},shouldIgnoreInteraction:function(aj){var ai=Y.hasNodeAttribute(aj,this.CONTENT_IGNOREINTERACTION_ATTR);var ah=Y.hasNodeCssClass(aj,this.CONTENT_IGNOREINTERACTION_CLASS);return ai||ah}};function L(ai,al){if(al){return al}if(w(ai,"?")){var ak=ai.indexOf("?");ai=ai.slice(0,ak)}if(O(ai,"piwik.php")){ai=f(ai,"piwik.php".length)}else{if(O(ai,".php")){var ah=ai.lastIndexOf("/");var aj=1;ai=ai.slice(0,ah+aj)}}if(O(ai,"/js/")){ai=f(ai,"js/".length)}return ai}function K(an){var ap="Piwik_Overlay";var ai=new RegExp("index\\.php\\?module=Overlay&action=startOverlaySession&idSite=([0-9]+)&period=([^&]+)&date=([^&]+)(&segment=.*)?$");var aj=ai.exec(D.referrer);if(aj){var al=aj[1];if(al!==String(an)){return false}var am=aj[2],ah=aj[3],ak=aj[4];if(!ak){ak=""}else{if(ak.indexOf("&segment=")===0){ak=ak.substr("&segment=".length) +if(ah===aj){return true}if(0===String(aj).indexOf(ah)){if(":"===String(aj).substr(ah.length,1)){return false}return true}return false},setHrefAttribute:function(ai,ah){if(!ai||!ah){return}Y.setAnyAttribute(ai,"href",ah)},shouldIgnoreInteraction:function(aj){var ai=Y.hasNodeAttribute(aj,this.CONTENT_IGNOREINTERACTION_ATTR);var ah=Y.hasNodeCssClass(aj,this.CONTENT_IGNOREINTERACTION_CLASS);return ai||ah}};function L(ai,al){if(al){return al}ai=t.toAbsoluteUrl(ai);if(w(ai,"?")){var ak=ai.indexOf("?");ai=ai.slice(0,ak)}if(O(ai,"piwik.php")){ai=f(ai,"piwik.php".length)}else{if(O(ai,".php")){var ah=ai.lastIndexOf("/");var aj=1;ai=ai.slice(0,ah+aj)}}if(O(ai,"/js/")){ai=f(ai,"js/".length)}return ai}function K(an){var ap="Piwik_Overlay";var ai=new RegExp("index\\.php\\?module=Overlay&action=startOverlaySession&idSite=([0-9]+)&period=([^&]+)&date=([^&]+)(&segment=.*)?$");var aj=ai.exec(D.referrer);if(aj){var al=aj[1];if(al!==String(an)){return false}var am=aj[2],ah=aj[3],ak=aj[4];if(!ak){ak=""}else{if(ak.indexOf("&segment=")===0){ak=ak.substr("&segment=".length) }}Q.name=ap+"###"+am+"###"+ah+"###"+ak}var ao=Q.name.split("###");return ao.length===4&&ao[0]===ap}function U(ai,ao,ak){var an=Q.name.split("###"),am=an[1],ah=an[2],al=an[3],aj=L(ai,ao);m(aj+"plugins/Overlay/client/client.js?v=1",function(){Piwik_Overlay_Client.initialize(aj,ak,am,ah,al)})}function s(){var aj;try{aj=Q.frameElement}catch(ai){return true}if(G(aj)){return(aj&&String(aj.nodeName).toLowerCase()==="iframe")?true:false}try{return Q.self!==Q.top}catch(ah){return true}}function N(bV,bP){var bq=this,bL=V(D.domain,Q.location.href,H()),cw=I(bL[0]),bv=n(bL[1]),a9=n(bL[2]),cu=false,bZ="GET",cJ=bZ,az="application/x-www-form-urlencoded; charset=UTF-8",cd=az,av=bV||"",bp="",cA="",bN=bP||"",bi="",bw="",aT,a5="",cG=["7z","aac","apk","arc","arj","asf","asx","avi","azw3","bin","csv","deb","dmg","doc","docx","epub","exe","flv","gif","gz","gzip","hqx","ibooks","jar","jpg","jpeg","js","mobi","mp2","mp3","mp4","mpg","mpeg","mov","movie","msi","msp","odb","odf","odg","ods","odt","ogg","ogv","pdf","phps","png","ppt","pptx","qt","qtm","ra","ram","rar","rpm","sea","sit","tar","tbz","tbz2","bz","bz2","tgz","torrent","txt","wav","wma","wmv","wpd","xls","xlsx","xml","z","zip"],ao=[cw],bj=[],bt=[],aW=[],br=500,cm,aU,bz,bx,ah,b8=["pk_campaign","piwik_campaign","utm_campaign","utm_source","utm_medium"],bo=["pk_kwd","piwik_kwd","utm_term"],a6="_pk_",an="pk_vid",cy,bb,a7=false,cs,a1,bf,cn=33955200000,b6=1800000,cF=15768000000,aR=true,b4=0,by=false,aG=false,bS,bD={},b3={},a8={},be=200,cB={},cH={},bR=[],bW=false,cg=false,ai=false,cI=false,cp=false,aE=false,a0=s(),cz=null,bT,aH,bk,bO=af,ba,aB; try{a5=D.title}catch(ce){a5=""}function cM(cX,cU,cT,cW,cS,cV){if(a7){return}var cR;if(cT){cR=new Date();cR.setTime(cR.getTime()+cT)}D.cookie=cX+"="+r(cU)+(cT?";expires="+cR.toGMTString():"")+";path="+(cW||"/")+(cS?";domain="+cS:"")+(cV?";secure":"")}function au(cT){if(a7){return 0}var cR=new RegExp("(^|;)[ ]*"+cT+"=([^;]*)"),cS=cR.exec(D.cookie);return cS?P(cS[2]):0}function bJ(cR){var cS;cR=j(cR,an);if(bx){cS=new RegExp("#.*");return cR.replace(cS,"")}return cR}function bC(cT,cR){var cU=q(cR),cS;if(cU){return cR}if(cR.slice(0,1)==="/"){return q(cT)+"://"+c(cT)+cR}cT=bJ(cT);cS=cT.indexOf("?");if(cS>=0){cT=cT.slice(0,cS)}cS=cT.lastIndexOf("/");if(cS!==cT.length-1){cT=cT.slice(0,cS+1)}return cT+cR}function cl(cT,cR){var cS;cT=String(cT).toLowerCase();cR=String(cR).toLowerCase();if(cT===cR){return true}if(cR.slice(0,1)==="."){if(cT===cR.slice(1)){return true}cS=cT.length-cR.length;if((cS>0)&&(cT.slice(cS)===cR)){return true}}return false}function b2(cR){var cS=document.createElement("a");if(cR.indexOf("//")!==0&&cR.indexOf("http")!==0){if(cR.indexOf("*")===0){cR=cR.substr(1) }if(cR.indexOf(".")===0){cR=cR.substr(1)}cR="http://"+cR}cS.href=t.toAbsoluteUrl(cR);if(cS.pathname){return cS.pathname}return""}function aS(cS,cR){if(!ac(cR,"/")){cR="/"+cR}if(!ac(cS,"/")){cS="/"+cS}var cT=(cR==="/"||cR==="/*");if(cT){return true}if(cS===cR){return true}cR=String(cR).toLowerCase();cS=String(cS).toLowerCase();if(O(cR,"*")){cR=cR.slice(0,-1);cT=(!cR||cR==="/");if(cT){return true}if(cS===cR){return true}return cS.indexOf(cR)===0}if(!O(cS,"/")){cS+="/"}if(!O(cR,"/")){cR+="/"}return cS.indexOf(cR)===0}function ak(cV,cX){var cS,cR,cT,cU,cW;for(cS=0;cS<ao.length;cS++){cU=I(ao[cS]);cW=b2(ao[cS]);if(cl(cV,cU)&&aS(cX,cW)){return true}}return false}function aL(cU){var cS,cR,cT;for(cS=0;cS<ao.length;cS++){cR=I(ao[cS].toLowerCase());if(cU===cR){return true}if(cR.slice(0,1)==="."){if(cU===cR.slice(1)){return true}cT=cU.length-cR.length;if((cT>0)&&(cU.slice(cT)===cR)){return true}}}return false}function b7(cR,cT){var cS=new Image(1,1);cS.onload=function(){B=0;if(typeof cT==="function"){cT() @@ -58,19 +58,19 @@ bn(cS,br)}function cC(cU,cR,cY,cX,cT){var cW=cR+"="+r(bJ(cU));var cS=cb(cT,"clic if(!cS){return false}var cR=cU.pathname||b2(cU.href);var cT=(cU.hostname||c(cU.href)).toLowerCase();if(ak(cT,cR)){if(!cl(cw,I(cT))){return true}return false}return false}function ck(cR){var cS=cK(cR);if(cS&&cS.type){cS.href=n(cS.href);cC(cS.href,cS.type,undefined,null,cR);return}if(cp){cR=al(cR);if(ar(cR)){b0(cR)}}}function cc(){return D.all&&!D.addEventListener}function cx(cR){var cT=cR.which;var cS=(typeof cR.button);if(!cT&&cS!=="undefined"){if(cc()){if(cR.button&1){cT=1}else{if(cR.button&2){cT=3}else{if(cR.button&4){cT=2}}}}else{if(cR.button===0||cR.button==="0"){cT=1}else{if(cR.button&1){cT=2}else{if(cR.button&2){cT=3}}}}}return cT}function bA(cR){switch(cx(cR)){case 1:return"left";case 2:return"middle";case 3:return"right"}}function aQ(cR){return cR.target||cR.srcElement}function at(cR){return function(cU){cU=cU||Q.event;var cT=bA(cU);var cV=aQ(cU);if(cU.type==="click"){var cS=false;if(cR&&cT==="middle"){cS=true}if(cV&&!cS){ck(cV)}}else{if(cU.type==="mousedown"){if(cT==="middle"&&cV){aH=cT; bk=cV}else{aH=bk=null}}else{if(cU.type==="mouseup"){if(cT===aH&&cV===bk){ck(cV)}aH=bk=null}else{if(cU.type==="contextmenu"){ck(cV)}}}}}}function aj(cT,cS){var cR=typeof cS;if(cR==="undefined"){cS=true}ag(cT,"click",at(cS),false);if(cS){ag(cT,"mouseup",at(cS),false);ag(cT,"mousedown",at(cS),false);ag(cT,"contextmenu",at(cS),false)}}function bl(cT,cV){ai=true;var cU,cS=aP(bj,"ignore"),cW=D.links,cR=null,cX=null;if(cW){for(cU=0;cU<cW.length;cU++){cR=cW[cU];if(!cS.test(cR.className)){cX=typeof cR.piwikTrackers;if("undefined"===cX){cR.piwikTrackers=[]}if(-1===J(cR.piwikTrackers,cV)){cR.piwikTrackers.push(cV);aj(cR,cT)}}}}}function aI(cT,cV,cW){if(bW){return true}bW=true;var cX=false;var cU,cS;function cR(){cX=true}l(function(){function cY(c0){setTimeout(function(){if(!bW){return}cX=false;cW.trackVisibleContentImpressions();cY(c0)},c0)}function cZ(c0){setTimeout(function(){if(!bW){return}if(cX){cX=false;cW.trackVisibleContentImpressions()}cZ(c0)},c0)}if(cT){cU=["scroll","resize"];for(cS=0;cS<cU.length; cS++){if(D.addEventListener){D.addEventListener(cU[cS],cR)}else{Q.attachEvent("on"+cU[cS],cR)}}cZ(100)}if(cV&&cV>0){cV=parseInt(cV,10);cY(cV)}})}function cj(){var cS,cU,cV={pdf:"application/pdf",qt:"video/quicktime",realp:"audio/x-pn-realaudio-plugin",wma:"application/x-mplayer2",dir:"application/x-director",fla:"application/x-shockwave-flash",java:"application/x-java-vm",gears:"application/x-googlegears",ag:"application/x-silverlight"};if(!((new RegExp("MSIE")).test(g.userAgent))){if(g.mimeTypes&&g.mimeTypes.length){for(cS in cV){if(Object.prototype.hasOwnProperty.call(cV,cS)){cU=g.mimeTypes[cV[cS]];cH[cS]=(cU&&cU.enabledPlugin)?"1":"0"}}}if(typeof navigator.javaEnabled!=="unknown"&&G(g.javaEnabled)&&g.javaEnabled()){cH.java="1"}if(x(Q.GearsFactory)){cH.gears="1"}cH.cookie=bM()}var cT=parseInt(T.width,10);var cR=parseInt(T.height,10);cH.res=parseInt(cT,10)+"x"+parseInt(cR,10)}cj();a4();aC();this.getVisitorId=function(){return aN().uuid};this.getVisitorInfo=function(){return cq()};this.getAttributionInfo=function(){return bu() -};this.getAttributionCampaignName=function(){return bu()[0]};this.getAttributionCampaignKeyword=function(){return bu()[1]};this.getAttributionReferrerTimestamp=function(){return bu()[2]};this.getAttributionReferrerUrl=function(){return bu()[3]};this.setTrackerUrl=function(cR){av=cR};this.getTrackerUrl=function(){return av};this.addTracker=function(cR,cT){if(!cT){throw new Error("A siteId must be given to add a new tracker")}if(!G(cR)||null===cR){cR=this.getTrackerUrl()}var cS=new N(cR,cT);F.push(cS);return cS};this.getSiteId=function(){return bN};this.setSiteId=function(cR){bK(cR)};this.setUserId=function(cR){if(!G(cR)||!cR.length){return}bi=cR;bw=bO(bi).substr(0,16)};this.getUserId=function(){return bi};this.setCustomData=function(cR,cS){if(S(cR)){ah=cR}else{if(!ah){ah={}}ah[cR]=cS}};this.getCustomData=function(){return ah};this.setCustomRequestProcessing=function(cR){bS=cR};this.appendToTrackingUrl=function(cR){cA=cR};this.getRequest=function(cR){return b9(cR)};this.addPlugin=function(cR,cS){a[cR]=cS -};this.setCustomDimension=function(cR,cS){cR=parseInt(cR,10);if(cR>0){if(!G(cS)){cS=""}if(!u(cS)){cS=String(cS)}a8[cR]=cS}};this.getCustomDimension=function(cR){cR=parseInt(cR,10);if(cR>0&&Object.prototype.hasOwnProperty.call(a8,cR)){return a8[cR]}};this.deleteCustomDimension=function(cR){cR=parseInt(cR,10);if(cR>0){delete a8[cR]}};this.setCustomVariable=function(cS,cR,cV,cT){var cU;if(!G(cT)){cT="visit"}if(!G(cR)){return}if(!G(cV)){cV=""}if(cS>0){cR=!u(cR)?String(cR):cR;cV=!u(cV)?String(cV):cV;cU=[cR.slice(0,be),cV.slice(0,be)];if(cT==="visit"||cT===2){ci();aG[cS]=cU}else{if(cT==="page"||cT===3){bD[cS]=cU}else{if(cT==="event"){b3[cS]=cU}}}}};this.getCustomVariable=function(cS,cT){var cR;if(!G(cT)){cT="visit"}if(cT==="page"||cT===3){cR=bD[cS]}else{if(cT==="event"){cR=b3[cS]}else{if(cT==="visit"||cT===2){ci();cR=aG[cS]}}}if(!G(cR)||(cR&&cR[0]==="")){return false}return cR};this.deleteCustomVariable=function(cR,cS){if(this.getCustomVariable(cR,cS)){this.setCustomVariable(cR,"","",cS)}};this.deleteCustomVariables=function(cR){if(cR==="page"||cR===3){bD={} -}else{if(cR==="event"){b3={}}else{if(cR==="visit"||cR===2){aG={}}}}};this.storeCustomVariablesInCookie=function(){by=true};this.setLinkTrackingTimer=function(cR){br=cR};this.getLinkTrackingTimer=function(){return br};this.setDownloadExtensions=function(cR){if(u(cR)){cR=cR.split("|")}cG=cR};this.addDownloadExtensions=function(cS){var cR;if(u(cS)){cS=cS.split("|")}for(cR=0;cR<cS.length;cR++){cG.push(cS[cR])}};this.removeDownloadExtensions=function(cT){var cS,cR=[];if(u(cT)){cT=cT.split("|")}for(cS=0;cS<cG.length;cS++){if(J(cT,cG[cS])===-1){cR.push(cG[cS])}}cG=cR};this.setDomains=function(cR){ao=u(cR)?[cR]:cR;var cV=false,cT=0,cS;for(cT;cT<ao.length;cT++){cS=String(ao[cT]);if(cl(cw,I(cS))){cV=true;break}var cU=b2(cS);if(cU&&cU!=="/"&&cU!=="/*"){cV=true;break}}if(!cV){ao.push(cw)}};this.enableCrossDomainLinking=function(){cp=true};this.disableCrossDomainLinking=function(){cp=false};this.isCrossDomainLinkingEnabled=function(){return cp};this.setIgnoreClasses=function(cR){bj=u(cR)?[cR]:cR};this.setRequestMethod=function(cR){cJ=cR||bZ -};this.setRequestContentType=function(cR){cd=cR||az};this.setReferrerUrl=function(cR){a9=cR};this.setCustomUrl=function(cR){aT=bC(bv,cR)};this.setDocumentTitle=function(cR){a5=cR};this.setAPIUrl=function(cR){bp=cR};this.setDownloadClasses=function(cR){bt=u(cR)?[cR]:cR};this.setLinkClasses=function(cR){aW=u(cR)?[cR]:cR};this.setCampaignNameKey=function(cR){b8=u(cR)?[cR]:cR};this.setCampaignKeywordKey=function(cR){bo=u(cR)?[cR]:cR};this.discardHashTag=function(cR){bx=cR};this.setCookieNamePrefix=function(cR){a6=cR;aG=bE()};this.setCookieDomain=function(cR){var cS=I(cR);if(bg(cS)){cy=cS;a4()}};this.setCookiePath=function(cR){bb=cR;a4()};this.setVisitorCookieTimeout=function(cR){cn=cR*1000};this.setSessionCookieTimeout=function(cR){b6=cR*1000};this.setReferralCookieTimeout=function(cR){cF=cR*1000};this.setConversionAttributionFirstReferrer=function(cR){bf=cR};this.disableCookies=function(){a7=true;cH.cookie="0";if(bN){aw()}};this.deleteCookies=function(){aw()};this.setDoNotTrack=function(cS){var cR=g.doNotTrack||g.msDoNotTrack; -cs=cS&&(cR==="yes"||cR==="1");if(cs){this.disableCookies()}};this.addListener=function(cS,cR){aj(cS,cR)};this.enableLinkTracking=function(cS){cI=true;var cR=this;bY(function(){o(function(){bl(cS,cR)})})};this.enableJSErrorTracking=function(){if(cu){return}cu=true;var cR=Q.onerror;Q.onerror=function(cW,cU,cT,cV,cS){bY(function(){var cX="JavaScript Errors";var cY=cU+":"+cT;if(cV){cY+=":"+cV}am(cX,cY,cW)});if(cR){return cR(cW,cU,cT,cV,cS)}return false}};this.disablePerformanceTracking=function(){aR=false};this.setGenerationTimeMs=function(cR){b4=parseInt(cR,10)};this.enableHeartBeatTimer=function(cR){cR=Math.max(cR,1);aU=(cR||15)*1000;if(cz!==null){cO()}};this.disableHeartBeatTimer=function(){bs();if(aU||aE){if(Q.removeEventListener){Q.removeEventListener("focus",aY,true);Q.removeEventListener("blur",ap,true)}else{if(Q.detachEvent){Q.detachEvent("onfocus",aY);Q.detachEvent("onblur",ap)}}}aU=null;aE=false};this.killFrame=function(){if(Q.location!==Q.top.location){Q.top.location=Q.location}}; -this.redirectFile=function(cR){if(Q.location.protocol==="file:"){Q.location=cR}};this.setCountPreRendered=function(cR){a1=cR};this.trackGoal=function(cR,cT,cS){bY(function(){cv(cR,cT,cS)})};this.trackLink=function(cS,cR,cU,cT){bY(function(){cC(cS,cR,cU,cT)})};this.trackPageView=function(cR,cT,cS){bR=[];if(K(bN)){bY(function(){U(av,bp,bN)})}else{bY(function(){bH(cR,cT,cS)})}};this.trackAllContentImpressions=function(){if(K(bN)){return}bY(function(){o(function(){var cR=t.findContentNodes();var cS=cf(cR);cN(cS,br)})})};this.trackVisibleContentImpressions=function(cR,cS){if(K(bN)){return}if(!G(cR)){cR=true}if(!G(cS)){cS=750}aI(cR,cS,this);bY(function(){l(function(){var cT=t.findContentNodes();var cU=aX(cT);cN(cU,br)})})};this.trackContentImpression=function(cT,cR,cS){if(K(bN)){return}if(!cT){return}cR=cR||"Unknown";bY(function(){var cU=ax(cT,cR,cS);bn(cU,br)})};this.trackContentImpressionsWithinNode=function(cR){if(K(bN)||!cR){return}bY(function(){if(bW){l(function(){var cS=t.findContentNodesWithinNode(cR); -var cT=aX(cS);cN(cT,br)})}else{o(function(){var cS=t.findContentNodesWithinNode(cR);var cT=cf(cS);cN(cT,br)})}})};this.trackContentInteraction=function(cT,cU,cR,cS){if(K(bN)){return}if(!cT||!cU){return}cR=cR||"Unknown";bY(function(){var cV=aF(cT,cU,cR,cS);bn(cV,br)})};this.trackContentInteractionNode=function(cS,cR){if(K(bN)||!cS){return}bY(function(){var cT=cL(cS,cR);bn(cT,br)})};this.logAllContentBlocksOnPage=function(){var cS=t.findContentNodes();var cR=t.collectContent(cS);if(console!==undefined&&console&&console.log){console.log(cR)}};this.trackEvent=function(cS,cU,cR,cT,cW,cV){bY(function(){am(cS,cU,cR,cT,cW,cV)})};this.trackSiteSearch=function(cR,cT,cS,cU){bY(function(){bQ(cR,cT,cS,cU)})};this.setEcommerceView=function(cU,cR,cT,cS){if(!G(cT)||!cT.length){cT=""}else{if(cT instanceof Array){cT=JSON_PIWIK.stringify(cT)}}bD[5]=["_pkc",cT];if(G(cS)&&String(cS).length){bD[2]=["_pkp",cS]}if((!G(cU)||!cU.length)&&(!G(cR)||!cR.length)){return}if(G(cU)&&cU.length){bD[3]=["_pks",cU]}if(!G(cR)||!cR.length){cR="" -}bD[4]=["_pkn",cR]};this.addEcommerceItem=function(cV,cR,cT,cS,cU){if(cV.length){cB[cV]=[cV,cR,cT,cS,cU]}};this.trackEcommerceOrder=function(cR,cV,cU,cT,cS,cW){bG(cR,cV,cU,cT,cS,cW)};this.trackEcommerceCartUpdate=function(cR){bd(cR)};this.trackRequest=function(cS,cU,cT,cR){bY(function(){var cV=b9(cS,cU,cR);bn(cV,br,cT)})};d.trigger("TrackerSetup",[this])}function E(){return{push:Z}}function b(am,al){var an={};var aj,ak;for(aj=0;aj<al.length;aj++){var ah=al[aj];an[ah]=1;for(ak=0;ak<am.length;ak++){if(am[ak]&&am[ak][0]){var ai=am[ak][0];if(ah===ai){Z(am[ak]);delete am[ak];if(an[ai]>1){ad("The method "+ai+' is registered more than once in "_paq" variable. Only the last call has an effect. Please have a look at the multiple Piwik trackers documentation: http://developer.piwik.org/guides/tracking-javascript-guide#multiple-piwik-trackers')}an[ai]++}}}}return am}var z=["addTracker","disableCookies","setTrackerUrl","setAPIUrl","enableCrossDomainLinking","setCookiePath","setCookieDomain","setDomains","setUserId","setSiteId","enableLinkTracking"]; -function X(ah,aj){var ai=new N(ah,aj);F.push(ai);_paq=b(_paq,z);for(B=0;B<_paq.length;B++){if(_paq[B]){Z(_paq[B])}}_paq=new E();return ai}ag(Q,"beforeunload",ab,false);Date.prototype.getTimeAlias=Date.prototype.getTime;d={initialized:false,JSON:JSON_PIWIK,DOM:{addEventListener:function(ak,aj,ai,ah){var al=typeof ah;if(al==="undefined"){ah=false}ag(ak,aj,ai,ah)},onLoad:l,onReady:o,isNodeVisible:i,isOrWasNodeVisible:t.isNodeVisible},on:function(ai,ah){if(!v[ai]){v[ai]=[]}v[ai].push(ah)},off:function(aj,ai){if(!v[aj]){return}var ah=0;for(ah;ah<v[aj].length;ah++){if(v[aj][ah]===ai){v[aj].splice(ah,1)}}},trigger:function(aj,ak,ai){if(!v[aj]){return}var ah=0;for(ah;ah<v[aj].length;ah++){v[aj][ah].apply(ai||Q,ak)}},addPlugin:function(ah,ai){a[ah]=ai},getTracker:function(ah,ai){if(!G(ai)){ai=this.getAsyncTracker().getSiteId()}if(!G(ah)){ah=this.getAsyncTracker().getTrackerUrl()}return new N(ah,ai)},getAsyncTrackers:function(){return F},addTracker:function(ah,ai){if(!F.length){X(ah,ai)}else{F[0].addTracker(ah,ai) -}},getAsyncTracker:function(ai,al){var ak;if(F&&F.length&&F[0]){ak=F[0]}else{return X(ai,al)}if(!al&&!ai){return ak}if((!G(al)||null===al)&&ak){al=ak.getSiteId()}if((!G(ai)||null===ai)&&ak){ai=ak.getTrackerUrl()}var aj,ah=0;for(ah;ah<F.length;ah++){aj=F[ah];if(aj&&String(aj.getSiteId())===String(al)&&aj.getTrackerUrl()===ai){return aj}}},retryMissedPluginCalls:function(){var ai=aa;aa=[];var ah=0;for(ah;ah<ai.length;ah++){Z(ai[ah])}}};if(typeof define==="function"&&define.amd){define("piwik",[],function(){return d})}return d}()); +};this.getAttributionCampaignName=function(){return bu()[0]};this.getAttributionCampaignKeyword=function(){return bu()[1]};this.getAttributionReferrerTimestamp=function(){return bu()[2]};this.getAttributionReferrerUrl=function(){return bu()[3]};this.setTrackerUrl=function(cR){av=cR};this.getTrackerUrl=function(){return av};this.getPiwikUrl=function(){return L(this.getTrackerUrl(),bp)};this.addTracker=function(cR,cT){if(!cT){throw new Error("A siteId must be given to add a new tracker")}if(!G(cR)||null===cR){cR=this.getTrackerUrl()}var cS=new N(cR,cT);F.push(cS);return cS};this.getSiteId=function(){return bN};this.setSiteId=function(cR){bK(cR)};this.setUserId=function(cR){if(!G(cR)||!cR.length){return}bi=cR;bw=bO(bi).substr(0,16)};this.getUserId=function(){return bi};this.setCustomData=function(cR,cS){if(S(cR)){ah=cR}else{if(!ah){ah={}}ah[cR]=cS}};this.getCustomData=function(){return ah};this.setCustomRequestProcessing=function(cR){bS=cR};this.appendToTrackingUrl=function(cR){cA=cR};this.getRequest=function(cR){return b9(cR) +};this.addPlugin=function(cR,cS){a[cR]=cS};this.setCustomDimension=function(cR,cS){cR=parseInt(cR,10);if(cR>0){if(!G(cS)){cS=""}if(!u(cS)){cS=String(cS)}a8[cR]=cS}};this.getCustomDimension=function(cR){cR=parseInt(cR,10);if(cR>0&&Object.prototype.hasOwnProperty.call(a8,cR)){return a8[cR]}};this.deleteCustomDimension=function(cR){cR=parseInt(cR,10);if(cR>0){delete a8[cR]}};this.setCustomVariable=function(cS,cR,cV,cT){var cU;if(!G(cT)){cT="visit"}if(!G(cR)){return}if(!G(cV)){cV=""}if(cS>0){cR=!u(cR)?String(cR):cR;cV=!u(cV)?String(cV):cV;cU=[cR.slice(0,be),cV.slice(0,be)];if(cT==="visit"||cT===2){ci();aG[cS]=cU}else{if(cT==="page"||cT===3){bD[cS]=cU}else{if(cT==="event"){b3[cS]=cU}}}}};this.getCustomVariable=function(cS,cT){var cR;if(!G(cT)){cT="visit"}if(cT==="page"||cT===3){cR=bD[cS]}else{if(cT==="event"){cR=b3[cS]}else{if(cT==="visit"||cT===2){ci();cR=aG[cS]}}}if(!G(cR)||(cR&&cR[0]==="")){return false}return cR};this.deleteCustomVariable=function(cR,cS){if(this.getCustomVariable(cR,cS)){this.setCustomVariable(cR,"","",cS) +}};this.deleteCustomVariables=function(cR){if(cR==="page"||cR===3){bD={}}else{if(cR==="event"){b3={}}else{if(cR==="visit"||cR===2){aG={}}}}};this.storeCustomVariablesInCookie=function(){by=true};this.setLinkTrackingTimer=function(cR){br=cR};this.getLinkTrackingTimer=function(){return br};this.setDownloadExtensions=function(cR){if(u(cR)){cR=cR.split("|")}cG=cR};this.addDownloadExtensions=function(cS){var cR;if(u(cS)){cS=cS.split("|")}for(cR=0;cR<cS.length;cR++){cG.push(cS[cR])}};this.removeDownloadExtensions=function(cT){var cS,cR=[];if(u(cT)){cT=cT.split("|")}for(cS=0;cS<cG.length;cS++){if(J(cT,cG[cS])===-1){cR.push(cG[cS])}}cG=cR};this.setDomains=function(cR){ao=u(cR)?[cR]:cR;var cV=false,cT=0,cS;for(cT;cT<ao.length;cT++){cS=String(ao[cT]);if(cl(cw,I(cS))){cV=true;break}var cU=b2(cS);if(cU&&cU!=="/"&&cU!=="/*"){cV=true;break}}if(!cV){ao.push(cw)}};this.enableCrossDomainLinking=function(){cp=true};this.disableCrossDomainLinking=function(){cp=false};this.isCrossDomainLinkingEnabled=function(){return cp +};this.setIgnoreClasses=function(cR){bj=u(cR)?[cR]:cR};this.setRequestMethod=function(cR){cJ=cR||bZ};this.setRequestContentType=function(cR){cd=cR||az};this.setReferrerUrl=function(cR){a9=cR};this.setCustomUrl=function(cR){aT=bC(bv,cR)};this.getCurrentUrl=function(){return aT||bv};this.setDocumentTitle=function(cR){a5=cR};this.setAPIUrl=function(cR){bp=cR};this.setDownloadClasses=function(cR){bt=u(cR)?[cR]:cR};this.setLinkClasses=function(cR){aW=u(cR)?[cR]:cR};this.setCampaignNameKey=function(cR){b8=u(cR)?[cR]:cR};this.setCampaignKeywordKey=function(cR){bo=u(cR)?[cR]:cR};this.discardHashTag=function(cR){bx=cR};this.setCookieNamePrefix=function(cR){a6=cR;aG=bE()};this.setCookieDomain=function(cR){var cS=I(cR);if(bg(cS)){cy=cS;a4()}};this.setCookiePath=function(cR){bb=cR;a4()};this.setVisitorCookieTimeout=function(cR){cn=cR*1000};this.setSessionCookieTimeout=function(cR){b6=cR*1000};this.setReferralCookieTimeout=function(cR){cF=cR*1000};this.setConversionAttributionFirstReferrer=function(cR){bf=cR +};this.disableCookies=function(){a7=true;cH.cookie="0";if(bN){aw()}};this.deleteCookies=function(){aw()};this.setDoNotTrack=function(cS){var cR=g.doNotTrack||g.msDoNotTrack;cs=cS&&(cR==="yes"||cR==="1");if(cs){this.disableCookies()}};this.addListener=function(cS,cR){aj(cS,cR)};this.enableLinkTracking=function(cS){cI=true;var cR=this;bY(function(){o(function(){bl(cS,cR)})})};this.enableJSErrorTracking=function(){if(cu){return}cu=true;var cR=Q.onerror;Q.onerror=function(cW,cU,cT,cV,cS){bY(function(){var cX="JavaScript Errors";var cY=cU+":"+cT;if(cV){cY+=":"+cV}am(cX,cY,cW)});if(cR){return cR(cW,cU,cT,cV,cS)}return false}};this.disablePerformanceTracking=function(){aR=false};this.setGenerationTimeMs=function(cR){b4=parseInt(cR,10)};this.enableHeartBeatTimer=function(cR){cR=Math.max(cR,1);aU=(cR||15)*1000;if(cz!==null){cO()}};this.disableHeartBeatTimer=function(){bs();if(aU||aE){if(Q.removeEventListener){Q.removeEventListener("focus",aY,true);Q.removeEventListener("blur",ap,true)}else{if(Q.detachEvent){Q.detachEvent("onfocus",aY); +Q.detachEvent("onblur",ap)}}}aU=null;aE=false};this.killFrame=function(){if(Q.location!==Q.top.location){Q.top.location=Q.location}};this.redirectFile=function(cR){if(Q.location.protocol==="file:"){Q.location=cR}};this.setCountPreRendered=function(cR){a1=cR};this.trackGoal=function(cR,cT,cS){bY(function(){cv(cR,cT,cS)})};this.trackLink=function(cS,cR,cU,cT){bY(function(){cC(cS,cR,cU,cT)})};this.trackPageView=function(cR,cT,cS){bR=[];if(K(bN)){bY(function(){U(av,bp,bN)})}else{bY(function(){bH(cR,cT,cS)})}};this.trackAllContentImpressions=function(){if(K(bN)){return}bY(function(){o(function(){var cR=t.findContentNodes();var cS=cf(cR);cN(cS,br)})})};this.trackVisibleContentImpressions=function(cR,cS){if(K(bN)){return}if(!G(cR)){cR=true}if(!G(cS)){cS=750}aI(cR,cS,this);bY(function(){l(function(){var cT=t.findContentNodes();var cU=aX(cT);cN(cU,br)})})};this.trackContentImpression=function(cT,cR,cS){if(K(bN)){return}if(!cT){return}cR=cR||"Unknown";bY(function(){var cU=ax(cT,cR,cS);bn(cU,br)}) +};this.trackContentImpressionsWithinNode=function(cR){if(K(bN)||!cR){return}bY(function(){if(bW){l(function(){var cS=t.findContentNodesWithinNode(cR);var cT=aX(cS);cN(cT,br)})}else{o(function(){var cS=t.findContentNodesWithinNode(cR);var cT=cf(cS);cN(cT,br)})}})};this.trackContentInteraction=function(cT,cU,cR,cS){if(K(bN)){return}if(!cT||!cU){return}cR=cR||"Unknown";bY(function(){var cV=aF(cT,cU,cR,cS);bn(cV,br)})};this.trackContentInteractionNode=function(cS,cR){if(K(bN)||!cS){return}bY(function(){var cT=cL(cS,cR);bn(cT,br)})};this.logAllContentBlocksOnPage=function(){var cS=t.findContentNodes();var cR=t.collectContent(cS);if(console!==undefined&&console&&console.log){console.log(cR)}};this.trackEvent=function(cS,cU,cR,cT,cW,cV){bY(function(){am(cS,cU,cR,cT,cW,cV)})};this.trackSiteSearch=function(cR,cT,cS,cU){bY(function(){bQ(cR,cT,cS,cU)})};this.setEcommerceView=function(cU,cR,cT,cS){if(!G(cT)||!cT.length){cT=""}else{if(cT instanceof Array){cT=JSON_PIWIK.stringify(cT)}}bD[5]=["_pkc",cT]; +if(G(cS)&&String(cS).length){bD[2]=["_pkp",cS]}if((!G(cU)||!cU.length)&&(!G(cR)||!cR.length)){return}if(G(cU)&&cU.length){bD[3]=["_pks",cU]}if(!G(cR)||!cR.length){cR=""}bD[4]=["_pkn",cR]};this.addEcommerceItem=function(cV,cR,cT,cS,cU){if(cV.length){cB[cV]=[cV,cR,cT,cS,cU]}};this.trackEcommerceOrder=function(cR,cV,cU,cT,cS,cW){bG(cR,cV,cU,cT,cS,cW)};this.trackEcommerceCartUpdate=function(cR){bd(cR)};this.trackRequest=function(cS,cU,cT,cR){bY(function(){var cV=b9(cS,cU,cR);bn(cV,br,cT)})};d.trigger("TrackerSetup",[this])}function E(){return{push:Z}}function b(am,al){var an={};var aj,ak;for(aj=0;aj<al.length;aj++){var ah=al[aj];an[ah]=1;for(ak=0;ak<am.length;ak++){if(am[ak]&&am[ak][0]){var ai=am[ak][0];if(ah===ai){Z(am[ak]);delete am[ak];if(an[ai]>1){ad("The method "+ai+' is registered more than once in "_paq" variable. Only the last call has an effect. Please have a look at the multiple Piwik trackers documentation: http://developer.piwik.org/guides/tracking-javascript-guide#multiple-piwik-trackers') +}an[ai]++}}}}return am}var z=["addTracker","disableCookies","setTrackerUrl","setAPIUrl","enableCrossDomainLinking","setCookiePath","setCookieDomain","setDomains","setUserId","setSiteId","enableLinkTracking"];function X(ah,aj){var ai=new N(ah,aj);F.push(ai);_paq=b(_paq,z);for(B=0;B<_paq.length;B++){if(_paq[B]){Z(_paq[B])}}_paq=new E();return ai}ag(Q,"beforeunload",ab,false);Date.prototype.getTimeAlias=Date.prototype.getTime;d={initialized:false,JSON:JSON_PIWIK,DOM:{addEventListener:function(ak,aj,ai,ah){var al=typeof ah;if(al==="undefined"){ah=false}ag(ak,aj,ai,ah)},onLoad:l,onReady:o,isNodeVisible:i,isOrWasNodeVisible:t.isNodeVisible},on:function(ai,ah){if(!v[ai]){v[ai]=[]}v[ai].push(ah)},off:function(aj,ai){if(!v[aj]){return}var ah=0;for(ah;ah<v[aj].length;ah++){if(v[aj][ah]===ai){v[aj].splice(ah,1)}}},trigger:function(aj,ak,ai){if(!v[aj]){return}var ah=0;for(ah;ah<v[aj].length;ah++){v[aj][ah].apply(ai||Q,ak)}},addPlugin:function(ah,ai){a[ah]=ai},getTracker:function(ah,ai){if(!G(ai)){ai=this.getAsyncTracker().getSiteId() +}if(!G(ah)){ah=this.getAsyncTracker().getTrackerUrl()}return new N(ah,ai)},getAsyncTrackers:function(){return F},addTracker:function(ah,ai){if(!F.length){X(ah,ai)}else{F[0].addTracker(ah,ai)}},getAsyncTracker:function(ai,al){var ak;if(F&&F.length&&F[0]){ak=F[0]}else{return X(ai,al)}if(!al&&!ai){return ak}if((!G(al)||null===al)&&ak){al=ak.getSiteId()}if((!G(ai)||null===ai)&&ak){ai=ak.getTrackerUrl()}var aj,ah=0;for(ah;ah<F.length;ah++){aj=F[ah];if(aj&&String(aj.getSiteId())===String(al)&&aj.getTrackerUrl()===ai){return aj}}},retryMissedPluginCalls:function(){var ai=aa;aa=[];var ah=0;for(ah;ah<ai.length;ah++){Z(ai[ah])}}};if(typeof define==="function"&&define.amd){define("piwik",[],function(){return d})}return d}()); /*!!! pluginTrackerHook */ -}(function(){function b(){if("object"!==typeof _paq){return false}var c=typeof _paq.length;if("undefined"===c){return false}return !!_paq.length}if(window&&"object"===typeof window.piwikPluginAsyncInit&&window.piwikPluginAsyncInit.length){var a=0;for(a;a<window.piwikPluginAsyncInit.length;a++){if(typeof window.piwikPluginAsyncInit[a]==="function"){window.piwikPluginAsyncInit[a]()}}}if(window&&window.piwikAsyncInit){window.piwikAsyncInit() -}if(!window.Piwik.getAsyncTrackers().length){if(b()){window.Piwik.addTracker()}else{_paq={push:function(c){if(console!==undefined&&console&&console.error){console.error("_paq.push() was used but Piwik tracker was not initialized before the piwik.js file was loaded. Make sure to configure the tracker via _paq.push before loading piwik.js. Alternatively, you can create a tracker via Piwik.addTracker() manually and then use _paq.push but it may not fully work as tracker methods may not be executed in the correct order.",c)}}}}}window.Piwik.trigger("PiwikInitialized",[]);window.Piwik.initialized=true}());(function(){var a=(typeof AnalyticsTracker);if(a==="undefined"){AnalyticsTracker=window.Piwik}}());if(typeof piwik_log!=="function"){piwik_log=function(b,f,d,g){function a(h){try{if(window["piwik_"+h]){return window["piwik_"+h]}}catch(i){}return}var c,e=window.Piwik.getTracker(d,f);e.setDocumentTitle(b);e.setCustomData(g);c=a("tracker_pause");if(c){e.setLinkTrackingTimer(c)}c=a("download_extensions"); -if(c){e.setDownloadExtensions(c)}c=a("hosts_alias");if(c){e.setDomains(c)}c=a("ignore_classes");if(c){e.setIgnoreClasses(c)}e.trackPageView();if(a("install_tracker")){piwik_track=function(i,k,j,h){e.setSiteId(k);e.setTrackerUrl(j);e.trackLink(i,h)};e.enableLinkTracking()}}; +}(function(){function b(){if("object"!==typeof _paq){return false}var c=typeof _paq.length;if("undefined"===c){return false}return !!_paq.length}if(window&&"object"===typeof window.piwikPluginAsyncInit&&window.piwikPluginAsyncInit.length){var a=0;for(a; +a<window.piwikPluginAsyncInit.length;a++){if(typeof window.piwikPluginAsyncInit[a]==="function"){window.piwikPluginAsyncInit[a]()}}}if(window&&window.piwikAsyncInit){window.piwikAsyncInit()}if(!window.Piwik.getAsyncTrackers().length){if(b()){window.Piwik.addTracker()}else{_paq={push:function(c){if(console!==undefined&&console&&console.error){console.error("_paq.push() was used but Piwik tracker was not initialized before the piwik.js file was loaded. Make sure to configure the tracker via _paq.push before loading piwik.js. Alternatively, you can create a tracker via Piwik.addTracker() manually and then use _paq.push but it may not fully work as tracker methods may not be executed in the correct order.",c)}}}}}window.Piwik.trigger("PiwikInitialized",[]);window.Piwik.initialized=true}());(function(){var a=(typeof AnalyticsTracker);if(a==="undefined"){AnalyticsTracker=window.Piwik}}());if(typeof piwik_log!=="function"){piwik_log=function(b,f,d,g){function a(h){try{if(window["piwik_"+h]){return window["piwik_"+h] +}}catch(i){}return}var c,e=window.Piwik.getTracker(d,f);e.setDocumentTitle(b);e.setCustomData(g);c=a("tracker_pause");if(c){e.setLinkTrackingTimer(c)}c=a("download_extensions");if(c){e.setDownloadExtensions(c)}c=a("hosts_alias");if(c){e.setDomains(c)}c=a("ignore_classes");if(c){e.setIgnoreClasses(c)}e.trackPageView();if(a("install_tracker")){piwik_track=function(i,k,j,h){e.setSiteId(k);e.setTrackerUrl(j);e.trackLink(i,h)};e.enableLinkTracking()}}; /*!! @license-end */ };
\ No newline at end of file diff --git a/misc/log-analytics b/misc/log-analytics -Subproject 55a410cf6fcd4249a0b6f820c6b88d56ee7cdf2 +Subproject f724b5d2ae0de60cd4fec2f0eb340481eda3d21 @@ -37,7 +37,7 @@ var aj=this.findMediaUrlInNode(ah);if(aj){return this.toAbsoluteUrl(aj)}},findCo }var aj=["img","embed","video","audio"];var ah=al.nodeName.toLowerCase();if(-1!==J(aj,ah)&&Y.findFirstNodeHavingAttributeWithValue(al,"src")){var ak=Y.findFirstNodeHavingAttributeWithValue(al,"src");return Y.getAttributeValueFromNode(ak,"src")}if(ah==="object"&&Y.hasNodeAttributeWithValue(al,"data")){return Y.getAttributeValueFromNode(al,"data")}if(ah==="object"){var am=Y.findNodesByTagName(al,"param");if(am&&am.length){var ai;for(ai=0;ai<am.length;ai++){if("movie"===Y.getAttributeValueFromNode(am[ai],"name")&&Y.hasNodeAttributeWithValue(am[ai],"value")){return Y.getAttributeValueFromNode(am[ai],"value")}}}var an=Y.findNodesByTagName(al,"embed");if(an&&an.length){return this.findMediaUrlInNode(an[0])}}},trim:function(ah){if(ah&&String(ah)===ah){return ah.replace(/^\s+|\s+$/g,"")}return ah},isOrWasNodeInViewport:function(am){if(!am||!am.getBoundingClientRect||am.nodeType!==1){return true}var al=am.getBoundingClientRect();var ak=D.documentElement||{};var aj=al.top<0;if(aj&&am.offsetTop){aj=(am.offsetTop+al.height)>0 }var ai=ak.clientWidth;if(Q.innerWidth&&ai>Q.innerWidth){ai=Q.innerWidth}var ah=ak.clientHeight;if(Q.innerHeight&&ah>Q.innerHeight){ah=Q.innerHeight}return((al.bottom>0||aj)&&al.right>0&&al.left<ai&&((al.top<ah)||aj))},isNodeVisible:function(ai){var ah=i(ai);var aj=this.isOrWasNodeInViewport(ai);return ah&&aj},buildInteractionRequestParams:function(ah,ai,aj,ak){var al="";if(ah){al+="c_i="+r(ah)}if(ai){if(al){al+="&"}al+="c_n="+r(ai)}if(aj){if(al){al+="&"}al+="c_p="+r(aj)}if(ak){if(al){al+="&"}al+="c_t="+r(ak)}return al},buildImpressionRequestParams:function(ah,ai,aj){var ak="c_n="+r(ah)+"&c_p="+r(ai);if(aj){ak+="&c_t="+r(aj)}return ak},buildContentBlock:function(aj){if(!aj){return}var ah=this.findContentName(aj);var ai=this.findContentPiece(aj);var ak=this.findContentTarget(aj);ah=this.trim(ah);ai=this.trim(ai);ak=this.trim(ak);return{name:ah||"Unknown",piece:ai||"Unknown",target:ak||""}},collectContent:function(ak){if(!ak||!ak.length){return[]}var aj=[];var ah,ai;for(ah=0;ah<ak.length; ah++){ai=this.buildContentBlock(ak[ah]);if(G(ai)){aj.push(ai)}}return aj},setLocation:function(ah){this.location=ah},getLocation:function(){var ah=this.location||Q.location;if(!ah.origin){ah.origin=ah.protocol+"//"+ah.hostname+(ah.port?":"+ah.port:"")}return ah},toAbsoluteUrl:function(ai){if((!ai||String(ai)!==ai)&&ai!==""){return ai}if(""===ai){return this.getLocation().href}if(ai.search(/^\/\//)!==-1){return this.getLocation().protocol+ai}if(ai.search(/:\/\//)!==-1){return ai}if(0===ai.indexOf("#")){return this.getLocation().origin+this.getLocation().pathname+ai}if(0===ai.indexOf("?")){return this.getLocation().origin+this.getLocation().pathname+ai}if(0===ai.search("^[a-zA-Z]{2,11}:")){return ai}if(ai.search(/^\//)!==-1){return this.getLocation().origin+ai}var ah="(.*/)";var aj=this.getLocation().origin+this.getLocation().pathname.match(new RegExp(ah))[0];return aj+ai},isUrlToCurrentDomain:function(ai){var aj=this.toAbsoluteUrl(ai);if(!aj){return false}var ah=this.getLocation().origin; -if(ah===aj){return true}if(0===String(aj).indexOf(ah)){if(":"===String(aj).substr(ah.length,1)){return false}return true}return false},setHrefAttribute:function(ai,ah){if(!ai||!ah){return}Y.setAnyAttribute(ai,"href",ah)},shouldIgnoreInteraction:function(aj){var ai=Y.hasNodeAttribute(aj,this.CONTENT_IGNOREINTERACTION_ATTR);var ah=Y.hasNodeCssClass(aj,this.CONTENT_IGNOREINTERACTION_CLASS);return ai||ah}};function L(ai,al){if(al){return al}if(w(ai,"?")){var ak=ai.indexOf("?");ai=ai.slice(0,ak)}if(O(ai,"piwik.php")){ai=f(ai,"piwik.php".length)}else{if(O(ai,".php")){var ah=ai.lastIndexOf("/");var aj=1;ai=ai.slice(0,ah+aj)}}if(O(ai,"/js/")){ai=f(ai,"js/".length)}return ai}function K(an){var ap="Piwik_Overlay";var ai=new RegExp("index\\.php\\?module=Overlay&action=startOverlaySession&idSite=([0-9]+)&period=([^&]+)&date=([^&]+)(&segment=.*)?$");var aj=ai.exec(D.referrer);if(aj){var al=aj[1];if(al!==String(an)){return false}var am=aj[2],ah=aj[3],ak=aj[4];if(!ak){ak=""}else{if(ak.indexOf("&segment=")===0){ak=ak.substr("&segment=".length) +if(ah===aj){return true}if(0===String(aj).indexOf(ah)){if(":"===String(aj).substr(ah.length,1)){return false}return true}return false},setHrefAttribute:function(ai,ah){if(!ai||!ah){return}Y.setAnyAttribute(ai,"href",ah)},shouldIgnoreInteraction:function(aj){var ai=Y.hasNodeAttribute(aj,this.CONTENT_IGNOREINTERACTION_ATTR);var ah=Y.hasNodeCssClass(aj,this.CONTENT_IGNOREINTERACTION_CLASS);return ai||ah}};function L(ai,al){if(al){return al}ai=t.toAbsoluteUrl(ai);if(w(ai,"?")){var ak=ai.indexOf("?");ai=ai.slice(0,ak)}if(O(ai,"piwik.php")){ai=f(ai,"piwik.php".length)}else{if(O(ai,".php")){var ah=ai.lastIndexOf("/");var aj=1;ai=ai.slice(0,ah+aj)}}if(O(ai,"/js/")){ai=f(ai,"js/".length)}return ai}function K(an){var ap="Piwik_Overlay";var ai=new RegExp("index\\.php\\?module=Overlay&action=startOverlaySession&idSite=([0-9]+)&period=([^&]+)&date=([^&]+)(&segment=.*)?$");var aj=ai.exec(D.referrer);if(aj){var al=aj[1];if(al!==String(an)){return false}var am=aj[2],ah=aj[3],ak=aj[4];if(!ak){ak=""}else{if(ak.indexOf("&segment=")===0){ak=ak.substr("&segment=".length) }}Q.name=ap+"###"+am+"###"+ah+"###"+ak}var ao=Q.name.split("###");return ao.length===4&&ao[0]===ap}function U(ai,ao,ak){var an=Q.name.split("###"),am=an[1],ah=an[2],al=an[3],aj=L(ai,ao);m(aj+"plugins/Overlay/client/client.js?v=1",function(){Piwik_Overlay_Client.initialize(aj,ak,am,ah,al)})}function s(){var aj;try{aj=Q.frameElement}catch(ai){return true}if(G(aj)){return(aj&&String(aj.nodeName).toLowerCase()==="iframe")?true:false}try{return Q.self!==Q.top}catch(ah){return true}}function N(bV,bP){var bq=this,bL=V(D.domain,Q.location.href,H()),cw=I(bL[0]),bv=n(bL[1]),a9=n(bL[2]),cu=false,bZ="GET",cJ=bZ,az="application/x-www-form-urlencoded; charset=UTF-8",cd=az,av=bV||"",bp="",cA="",bN=bP||"",bi="",bw="",aT,a5="",cG=["7z","aac","apk","arc","arj","asf","asx","avi","azw3","bin","csv","deb","dmg","doc","docx","epub","exe","flv","gif","gz","gzip","hqx","ibooks","jar","jpg","jpeg","js","mobi","mp2","mp3","mp4","mpg","mpeg","mov","movie","msi","msp","odb","odf","odg","ods","odt","ogg","ogv","pdf","phps","png","ppt","pptx","qt","qtm","ra","ram","rar","rpm","sea","sit","tar","tbz","tbz2","bz","bz2","tgz","torrent","txt","wav","wma","wmv","wpd","xls","xlsx","xml","z","zip"],ao=[cw],bj=[],bt=[],aW=[],br=500,cm,aU,bz,bx,ah,b8=["pk_campaign","piwik_campaign","utm_campaign","utm_source","utm_medium"],bo=["pk_kwd","piwik_kwd","utm_term"],a6="_pk_",an="pk_vid",cy,bb,a7=false,cs,a1,bf,cn=33955200000,b6=1800000,cF=15768000000,aR=true,b4=0,by=false,aG=false,bS,bD={},b3={},a8={},be=200,cB={},cH={},bR=[],bW=false,cg=false,ai=false,cI=false,cp=false,aE=false,a0=s(),cz=null,bT,aH,bk,bO=af,ba,aB; try{a5=D.title}catch(ce){a5=""}function cM(cX,cU,cT,cW,cS,cV){if(a7){return}var cR;if(cT){cR=new Date();cR.setTime(cR.getTime()+cT)}D.cookie=cX+"="+r(cU)+(cT?";expires="+cR.toGMTString():"")+";path="+(cW||"/")+(cS?";domain="+cS:"")+(cV?";secure":"")}function au(cT){if(a7){return 0}var cR=new RegExp("(^|;)[ ]*"+cT+"=([^;]*)"),cS=cR.exec(D.cookie);return cS?P(cS[2]):0}function bJ(cR){var cS;cR=j(cR,an);if(bx){cS=new RegExp("#.*");return cR.replace(cS,"")}return cR}function bC(cT,cR){var cU=q(cR),cS;if(cU){return cR}if(cR.slice(0,1)==="/"){return q(cT)+"://"+c(cT)+cR}cT=bJ(cT);cS=cT.indexOf("?");if(cS>=0){cT=cT.slice(0,cS)}cS=cT.lastIndexOf("/");if(cS!==cT.length-1){cT=cT.slice(0,cS+1)}return cT+cR}function cl(cT,cR){var cS;cT=String(cT).toLowerCase();cR=String(cR).toLowerCase();if(cT===cR){return true}if(cR.slice(0,1)==="."){if(cT===cR.slice(1)){return true}cS=cT.length-cR.length;if((cS>0)&&(cT.slice(cS)===cR)){return true}}return false}function b2(cR){var cS=document.createElement("a");if(cR.indexOf("//")!==0&&cR.indexOf("http")!==0){if(cR.indexOf("*")===0){cR=cR.substr(1) }if(cR.indexOf(".")===0){cR=cR.substr(1)}cR="http://"+cR}cS.href=t.toAbsoluteUrl(cR);if(cS.pathname){return cS.pathname}return""}function aS(cS,cR){if(!ac(cR,"/")){cR="/"+cR}if(!ac(cS,"/")){cS="/"+cS}var cT=(cR==="/"||cR==="/*");if(cT){return true}if(cS===cR){return true}cR=String(cR).toLowerCase();cS=String(cS).toLowerCase();if(O(cR,"*")){cR=cR.slice(0,-1);cT=(!cR||cR==="/");if(cT){return true}if(cS===cR){return true}return cS.indexOf(cR)===0}if(!O(cS,"/")){cS+="/"}if(!O(cR,"/")){cR+="/"}return cS.indexOf(cR)===0}function ak(cV,cX){var cS,cR,cT,cU,cW;for(cS=0;cS<ao.length;cS++){cU=I(ao[cS]);cW=b2(ao[cS]);if(cl(cV,cU)&&aS(cX,cW)){return true}}return false}function aL(cU){var cS,cR,cT;for(cS=0;cS<ao.length;cS++){cR=I(ao[cS].toLowerCase());if(cU===cR){return true}if(cR.slice(0,1)==="."){if(cU===cR.slice(1)){return true}cT=cU.length-cR.length;if((cT>0)&&(cU.slice(cT)===cR)){return true}}}return false}function b7(cR,cT){var cS=new Image(1,1);cS.onload=function(){B=0;if(typeof cT==="function"){cT() @@ -58,19 +58,19 @@ bn(cS,br)}function cC(cU,cR,cY,cX,cT){var cW=cR+"="+r(bJ(cU));var cS=cb(cT,"clic if(!cS){return false}var cR=cU.pathname||b2(cU.href);var cT=(cU.hostname||c(cU.href)).toLowerCase();if(ak(cT,cR)){if(!cl(cw,I(cT))){return true}return false}return false}function ck(cR){var cS=cK(cR);if(cS&&cS.type){cS.href=n(cS.href);cC(cS.href,cS.type,undefined,null,cR);return}if(cp){cR=al(cR);if(ar(cR)){b0(cR)}}}function cc(){return D.all&&!D.addEventListener}function cx(cR){var cT=cR.which;var cS=(typeof cR.button);if(!cT&&cS!=="undefined"){if(cc()){if(cR.button&1){cT=1}else{if(cR.button&2){cT=3}else{if(cR.button&4){cT=2}}}}else{if(cR.button===0||cR.button==="0"){cT=1}else{if(cR.button&1){cT=2}else{if(cR.button&2){cT=3}}}}}return cT}function bA(cR){switch(cx(cR)){case 1:return"left";case 2:return"middle";case 3:return"right"}}function aQ(cR){return cR.target||cR.srcElement}function at(cR){return function(cU){cU=cU||Q.event;var cT=bA(cU);var cV=aQ(cU);if(cU.type==="click"){var cS=false;if(cR&&cT==="middle"){cS=true}if(cV&&!cS){ck(cV)}}else{if(cU.type==="mousedown"){if(cT==="middle"&&cV){aH=cT; bk=cV}else{aH=bk=null}}else{if(cU.type==="mouseup"){if(cT===aH&&cV===bk){ck(cV)}aH=bk=null}else{if(cU.type==="contextmenu"){ck(cV)}}}}}}function aj(cT,cS){var cR=typeof cS;if(cR==="undefined"){cS=true}ag(cT,"click",at(cS),false);if(cS){ag(cT,"mouseup",at(cS),false);ag(cT,"mousedown",at(cS),false);ag(cT,"contextmenu",at(cS),false)}}function bl(cT,cV){ai=true;var cU,cS=aP(bj,"ignore"),cW=D.links,cR=null,cX=null;if(cW){for(cU=0;cU<cW.length;cU++){cR=cW[cU];if(!cS.test(cR.className)){cX=typeof cR.piwikTrackers;if("undefined"===cX){cR.piwikTrackers=[]}if(-1===J(cR.piwikTrackers,cV)){cR.piwikTrackers.push(cV);aj(cR,cT)}}}}}function aI(cT,cV,cW){if(bW){return true}bW=true;var cX=false;var cU,cS;function cR(){cX=true}l(function(){function cY(c0){setTimeout(function(){if(!bW){return}cX=false;cW.trackVisibleContentImpressions();cY(c0)},c0)}function cZ(c0){setTimeout(function(){if(!bW){return}if(cX){cX=false;cW.trackVisibleContentImpressions()}cZ(c0)},c0)}if(cT){cU=["scroll","resize"];for(cS=0;cS<cU.length; cS++){if(D.addEventListener){D.addEventListener(cU[cS],cR)}else{Q.attachEvent("on"+cU[cS],cR)}}cZ(100)}if(cV&&cV>0){cV=parseInt(cV,10);cY(cV)}})}function cj(){var cS,cU,cV={pdf:"application/pdf",qt:"video/quicktime",realp:"audio/x-pn-realaudio-plugin",wma:"application/x-mplayer2",dir:"application/x-director",fla:"application/x-shockwave-flash",java:"application/x-java-vm",gears:"application/x-googlegears",ag:"application/x-silverlight"};if(!((new RegExp("MSIE")).test(g.userAgent))){if(g.mimeTypes&&g.mimeTypes.length){for(cS in cV){if(Object.prototype.hasOwnProperty.call(cV,cS)){cU=g.mimeTypes[cV[cS]];cH[cS]=(cU&&cU.enabledPlugin)?"1":"0"}}}if(typeof navigator.javaEnabled!=="unknown"&&G(g.javaEnabled)&&g.javaEnabled()){cH.java="1"}if(x(Q.GearsFactory)){cH.gears="1"}cH.cookie=bM()}var cT=parseInt(T.width,10);var cR=parseInt(T.height,10);cH.res=parseInt(cT,10)+"x"+parseInt(cR,10)}cj();a4();aC();this.getVisitorId=function(){return aN().uuid};this.getVisitorInfo=function(){return cq()};this.getAttributionInfo=function(){return bu() -};this.getAttributionCampaignName=function(){return bu()[0]};this.getAttributionCampaignKeyword=function(){return bu()[1]};this.getAttributionReferrerTimestamp=function(){return bu()[2]};this.getAttributionReferrerUrl=function(){return bu()[3]};this.setTrackerUrl=function(cR){av=cR};this.getTrackerUrl=function(){return av};this.addTracker=function(cR,cT){if(!cT){throw new Error("A siteId must be given to add a new tracker")}if(!G(cR)||null===cR){cR=this.getTrackerUrl()}var cS=new N(cR,cT);F.push(cS);return cS};this.getSiteId=function(){return bN};this.setSiteId=function(cR){bK(cR)};this.setUserId=function(cR){if(!G(cR)||!cR.length){return}bi=cR;bw=bO(bi).substr(0,16)};this.getUserId=function(){return bi};this.setCustomData=function(cR,cS){if(S(cR)){ah=cR}else{if(!ah){ah={}}ah[cR]=cS}};this.getCustomData=function(){return ah};this.setCustomRequestProcessing=function(cR){bS=cR};this.appendToTrackingUrl=function(cR){cA=cR};this.getRequest=function(cR){return b9(cR)};this.addPlugin=function(cR,cS){a[cR]=cS -};this.setCustomDimension=function(cR,cS){cR=parseInt(cR,10);if(cR>0){if(!G(cS)){cS=""}if(!u(cS)){cS=String(cS)}a8[cR]=cS}};this.getCustomDimension=function(cR){cR=parseInt(cR,10);if(cR>0&&Object.prototype.hasOwnProperty.call(a8,cR)){return a8[cR]}};this.deleteCustomDimension=function(cR){cR=parseInt(cR,10);if(cR>0){delete a8[cR]}};this.setCustomVariable=function(cS,cR,cV,cT){var cU;if(!G(cT)){cT="visit"}if(!G(cR)){return}if(!G(cV)){cV=""}if(cS>0){cR=!u(cR)?String(cR):cR;cV=!u(cV)?String(cV):cV;cU=[cR.slice(0,be),cV.slice(0,be)];if(cT==="visit"||cT===2){ci();aG[cS]=cU}else{if(cT==="page"||cT===3){bD[cS]=cU}else{if(cT==="event"){b3[cS]=cU}}}}};this.getCustomVariable=function(cS,cT){var cR;if(!G(cT)){cT="visit"}if(cT==="page"||cT===3){cR=bD[cS]}else{if(cT==="event"){cR=b3[cS]}else{if(cT==="visit"||cT===2){ci();cR=aG[cS]}}}if(!G(cR)||(cR&&cR[0]==="")){return false}return cR};this.deleteCustomVariable=function(cR,cS){if(this.getCustomVariable(cR,cS)){this.setCustomVariable(cR,"","",cS)}};this.deleteCustomVariables=function(cR){if(cR==="page"||cR===3){bD={} -}else{if(cR==="event"){b3={}}else{if(cR==="visit"||cR===2){aG={}}}}};this.storeCustomVariablesInCookie=function(){by=true};this.setLinkTrackingTimer=function(cR){br=cR};this.getLinkTrackingTimer=function(){return br};this.setDownloadExtensions=function(cR){if(u(cR)){cR=cR.split("|")}cG=cR};this.addDownloadExtensions=function(cS){var cR;if(u(cS)){cS=cS.split("|")}for(cR=0;cR<cS.length;cR++){cG.push(cS[cR])}};this.removeDownloadExtensions=function(cT){var cS,cR=[];if(u(cT)){cT=cT.split("|")}for(cS=0;cS<cG.length;cS++){if(J(cT,cG[cS])===-1){cR.push(cG[cS])}}cG=cR};this.setDomains=function(cR){ao=u(cR)?[cR]:cR;var cV=false,cT=0,cS;for(cT;cT<ao.length;cT++){cS=String(ao[cT]);if(cl(cw,I(cS))){cV=true;break}var cU=b2(cS);if(cU&&cU!=="/"&&cU!=="/*"){cV=true;break}}if(!cV){ao.push(cw)}};this.enableCrossDomainLinking=function(){cp=true};this.disableCrossDomainLinking=function(){cp=false};this.isCrossDomainLinkingEnabled=function(){return cp};this.setIgnoreClasses=function(cR){bj=u(cR)?[cR]:cR};this.setRequestMethod=function(cR){cJ=cR||bZ -};this.setRequestContentType=function(cR){cd=cR||az};this.setReferrerUrl=function(cR){a9=cR};this.setCustomUrl=function(cR){aT=bC(bv,cR)};this.setDocumentTitle=function(cR){a5=cR};this.setAPIUrl=function(cR){bp=cR};this.setDownloadClasses=function(cR){bt=u(cR)?[cR]:cR};this.setLinkClasses=function(cR){aW=u(cR)?[cR]:cR};this.setCampaignNameKey=function(cR){b8=u(cR)?[cR]:cR};this.setCampaignKeywordKey=function(cR){bo=u(cR)?[cR]:cR};this.discardHashTag=function(cR){bx=cR};this.setCookieNamePrefix=function(cR){a6=cR;aG=bE()};this.setCookieDomain=function(cR){var cS=I(cR);if(bg(cS)){cy=cS;a4()}};this.setCookiePath=function(cR){bb=cR;a4()};this.setVisitorCookieTimeout=function(cR){cn=cR*1000};this.setSessionCookieTimeout=function(cR){b6=cR*1000};this.setReferralCookieTimeout=function(cR){cF=cR*1000};this.setConversionAttributionFirstReferrer=function(cR){bf=cR};this.disableCookies=function(){a7=true;cH.cookie="0";if(bN){aw()}};this.deleteCookies=function(){aw()};this.setDoNotTrack=function(cS){var cR=g.doNotTrack||g.msDoNotTrack; -cs=cS&&(cR==="yes"||cR==="1");if(cs){this.disableCookies()}};this.addListener=function(cS,cR){aj(cS,cR)};this.enableLinkTracking=function(cS){cI=true;var cR=this;bY(function(){o(function(){bl(cS,cR)})})};this.enableJSErrorTracking=function(){if(cu){return}cu=true;var cR=Q.onerror;Q.onerror=function(cW,cU,cT,cV,cS){bY(function(){var cX="JavaScript Errors";var cY=cU+":"+cT;if(cV){cY+=":"+cV}am(cX,cY,cW)});if(cR){return cR(cW,cU,cT,cV,cS)}return false}};this.disablePerformanceTracking=function(){aR=false};this.setGenerationTimeMs=function(cR){b4=parseInt(cR,10)};this.enableHeartBeatTimer=function(cR){cR=Math.max(cR,1);aU=(cR||15)*1000;if(cz!==null){cO()}};this.disableHeartBeatTimer=function(){bs();if(aU||aE){if(Q.removeEventListener){Q.removeEventListener("focus",aY,true);Q.removeEventListener("blur",ap,true)}else{if(Q.detachEvent){Q.detachEvent("onfocus",aY);Q.detachEvent("onblur",ap)}}}aU=null;aE=false};this.killFrame=function(){if(Q.location!==Q.top.location){Q.top.location=Q.location}}; -this.redirectFile=function(cR){if(Q.location.protocol==="file:"){Q.location=cR}};this.setCountPreRendered=function(cR){a1=cR};this.trackGoal=function(cR,cT,cS){bY(function(){cv(cR,cT,cS)})};this.trackLink=function(cS,cR,cU,cT){bY(function(){cC(cS,cR,cU,cT)})};this.trackPageView=function(cR,cT,cS){bR=[];if(K(bN)){bY(function(){U(av,bp,bN)})}else{bY(function(){bH(cR,cT,cS)})}};this.trackAllContentImpressions=function(){if(K(bN)){return}bY(function(){o(function(){var cR=t.findContentNodes();var cS=cf(cR);cN(cS,br)})})};this.trackVisibleContentImpressions=function(cR,cS){if(K(bN)){return}if(!G(cR)){cR=true}if(!G(cS)){cS=750}aI(cR,cS,this);bY(function(){l(function(){var cT=t.findContentNodes();var cU=aX(cT);cN(cU,br)})})};this.trackContentImpression=function(cT,cR,cS){if(K(bN)){return}if(!cT){return}cR=cR||"Unknown";bY(function(){var cU=ax(cT,cR,cS);bn(cU,br)})};this.trackContentImpressionsWithinNode=function(cR){if(K(bN)||!cR){return}bY(function(){if(bW){l(function(){var cS=t.findContentNodesWithinNode(cR); -var cT=aX(cS);cN(cT,br)})}else{o(function(){var cS=t.findContentNodesWithinNode(cR);var cT=cf(cS);cN(cT,br)})}})};this.trackContentInteraction=function(cT,cU,cR,cS){if(K(bN)){return}if(!cT||!cU){return}cR=cR||"Unknown";bY(function(){var cV=aF(cT,cU,cR,cS);bn(cV,br)})};this.trackContentInteractionNode=function(cS,cR){if(K(bN)||!cS){return}bY(function(){var cT=cL(cS,cR);bn(cT,br)})};this.logAllContentBlocksOnPage=function(){var cS=t.findContentNodes();var cR=t.collectContent(cS);if(console!==undefined&&console&&console.log){console.log(cR)}};this.trackEvent=function(cS,cU,cR,cT,cW,cV){bY(function(){am(cS,cU,cR,cT,cW,cV)})};this.trackSiteSearch=function(cR,cT,cS,cU){bY(function(){bQ(cR,cT,cS,cU)})};this.setEcommerceView=function(cU,cR,cT,cS){if(!G(cT)||!cT.length){cT=""}else{if(cT instanceof Array){cT=JSON_PIWIK.stringify(cT)}}bD[5]=["_pkc",cT];if(G(cS)&&String(cS).length){bD[2]=["_pkp",cS]}if((!G(cU)||!cU.length)&&(!G(cR)||!cR.length)){return}if(G(cU)&&cU.length){bD[3]=["_pks",cU]}if(!G(cR)||!cR.length){cR="" -}bD[4]=["_pkn",cR]};this.addEcommerceItem=function(cV,cR,cT,cS,cU){if(cV.length){cB[cV]=[cV,cR,cT,cS,cU]}};this.trackEcommerceOrder=function(cR,cV,cU,cT,cS,cW){bG(cR,cV,cU,cT,cS,cW)};this.trackEcommerceCartUpdate=function(cR){bd(cR)};this.trackRequest=function(cS,cU,cT,cR){bY(function(){var cV=b9(cS,cU,cR);bn(cV,br,cT)})};d.trigger("TrackerSetup",[this])}function E(){return{push:Z}}function b(am,al){var an={};var aj,ak;for(aj=0;aj<al.length;aj++){var ah=al[aj];an[ah]=1;for(ak=0;ak<am.length;ak++){if(am[ak]&&am[ak][0]){var ai=am[ak][0];if(ah===ai){Z(am[ak]);delete am[ak];if(an[ai]>1){ad("The method "+ai+' is registered more than once in "_paq" variable. Only the last call has an effect. Please have a look at the multiple Piwik trackers documentation: http://developer.piwik.org/guides/tracking-javascript-guide#multiple-piwik-trackers')}an[ai]++}}}}return am}var z=["addTracker","disableCookies","setTrackerUrl","setAPIUrl","enableCrossDomainLinking","setCookiePath","setCookieDomain","setDomains","setUserId","setSiteId","enableLinkTracking"]; -function X(ah,aj){var ai=new N(ah,aj);F.push(ai);_paq=b(_paq,z);for(B=0;B<_paq.length;B++){if(_paq[B]){Z(_paq[B])}}_paq=new E();return ai}ag(Q,"beforeunload",ab,false);Date.prototype.getTimeAlias=Date.prototype.getTime;d={initialized:false,JSON:JSON_PIWIK,DOM:{addEventListener:function(ak,aj,ai,ah){var al=typeof ah;if(al==="undefined"){ah=false}ag(ak,aj,ai,ah)},onLoad:l,onReady:o,isNodeVisible:i,isOrWasNodeVisible:t.isNodeVisible},on:function(ai,ah){if(!v[ai]){v[ai]=[]}v[ai].push(ah)},off:function(aj,ai){if(!v[aj]){return}var ah=0;for(ah;ah<v[aj].length;ah++){if(v[aj][ah]===ai){v[aj].splice(ah,1)}}},trigger:function(aj,ak,ai){if(!v[aj]){return}var ah=0;for(ah;ah<v[aj].length;ah++){v[aj][ah].apply(ai||Q,ak)}},addPlugin:function(ah,ai){a[ah]=ai},getTracker:function(ah,ai){if(!G(ai)){ai=this.getAsyncTracker().getSiteId()}if(!G(ah)){ah=this.getAsyncTracker().getTrackerUrl()}return new N(ah,ai)},getAsyncTrackers:function(){return F},addTracker:function(ah,ai){if(!F.length){X(ah,ai)}else{F[0].addTracker(ah,ai) -}},getAsyncTracker:function(ai,al){var ak;if(F&&F.length&&F[0]){ak=F[0]}else{return X(ai,al)}if(!al&&!ai){return ak}if((!G(al)||null===al)&&ak){al=ak.getSiteId()}if((!G(ai)||null===ai)&&ak){ai=ak.getTrackerUrl()}var aj,ah=0;for(ah;ah<F.length;ah++){aj=F[ah];if(aj&&String(aj.getSiteId())===String(al)&&aj.getTrackerUrl()===ai){return aj}}},retryMissedPluginCalls:function(){var ai=aa;aa=[];var ah=0;for(ah;ah<ai.length;ah++){Z(ai[ah])}}};if(typeof define==="function"&&define.amd){define("piwik",[],function(){return d})}return d}()); +};this.getAttributionCampaignName=function(){return bu()[0]};this.getAttributionCampaignKeyword=function(){return bu()[1]};this.getAttributionReferrerTimestamp=function(){return bu()[2]};this.getAttributionReferrerUrl=function(){return bu()[3]};this.setTrackerUrl=function(cR){av=cR};this.getTrackerUrl=function(){return av};this.getPiwikUrl=function(){return L(this.getTrackerUrl(),bp)};this.addTracker=function(cR,cT){if(!cT){throw new Error("A siteId must be given to add a new tracker")}if(!G(cR)||null===cR){cR=this.getTrackerUrl()}var cS=new N(cR,cT);F.push(cS);return cS};this.getSiteId=function(){return bN};this.setSiteId=function(cR){bK(cR)};this.setUserId=function(cR){if(!G(cR)||!cR.length){return}bi=cR;bw=bO(bi).substr(0,16)};this.getUserId=function(){return bi};this.setCustomData=function(cR,cS){if(S(cR)){ah=cR}else{if(!ah){ah={}}ah[cR]=cS}};this.getCustomData=function(){return ah};this.setCustomRequestProcessing=function(cR){bS=cR};this.appendToTrackingUrl=function(cR){cA=cR};this.getRequest=function(cR){return b9(cR) +};this.addPlugin=function(cR,cS){a[cR]=cS};this.setCustomDimension=function(cR,cS){cR=parseInt(cR,10);if(cR>0){if(!G(cS)){cS=""}if(!u(cS)){cS=String(cS)}a8[cR]=cS}};this.getCustomDimension=function(cR){cR=parseInt(cR,10);if(cR>0&&Object.prototype.hasOwnProperty.call(a8,cR)){return a8[cR]}};this.deleteCustomDimension=function(cR){cR=parseInt(cR,10);if(cR>0){delete a8[cR]}};this.setCustomVariable=function(cS,cR,cV,cT){var cU;if(!G(cT)){cT="visit"}if(!G(cR)){return}if(!G(cV)){cV=""}if(cS>0){cR=!u(cR)?String(cR):cR;cV=!u(cV)?String(cV):cV;cU=[cR.slice(0,be),cV.slice(0,be)];if(cT==="visit"||cT===2){ci();aG[cS]=cU}else{if(cT==="page"||cT===3){bD[cS]=cU}else{if(cT==="event"){b3[cS]=cU}}}}};this.getCustomVariable=function(cS,cT){var cR;if(!G(cT)){cT="visit"}if(cT==="page"||cT===3){cR=bD[cS]}else{if(cT==="event"){cR=b3[cS]}else{if(cT==="visit"||cT===2){ci();cR=aG[cS]}}}if(!G(cR)||(cR&&cR[0]==="")){return false}return cR};this.deleteCustomVariable=function(cR,cS){if(this.getCustomVariable(cR,cS)){this.setCustomVariable(cR,"","",cS) +}};this.deleteCustomVariables=function(cR){if(cR==="page"||cR===3){bD={}}else{if(cR==="event"){b3={}}else{if(cR==="visit"||cR===2){aG={}}}}};this.storeCustomVariablesInCookie=function(){by=true};this.setLinkTrackingTimer=function(cR){br=cR};this.getLinkTrackingTimer=function(){return br};this.setDownloadExtensions=function(cR){if(u(cR)){cR=cR.split("|")}cG=cR};this.addDownloadExtensions=function(cS){var cR;if(u(cS)){cS=cS.split("|")}for(cR=0;cR<cS.length;cR++){cG.push(cS[cR])}};this.removeDownloadExtensions=function(cT){var cS,cR=[];if(u(cT)){cT=cT.split("|")}for(cS=0;cS<cG.length;cS++){if(J(cT,cG[cS])===-1){cR.push(cG[cS])}}cG=cR};this.setDomains=function(cR){ao=u(cR)?[cR]:cR;var cV=false,cT=0,cS;for(cT;cT<ao.length;cT++){cS=String(ao[cT]);if(cl(cw,I(cS))){cV=true;break}var cU=b2(cS);if(cU&&cU!=="/"&&cU!=="/*"){cV=true;break}}if(!cV){ao.push(cw)}};this.enableCrossDomainLinking=function(){cp=true};this.disableCrossDomainLinking=function(){cp=false};this.isCrossDomainLinkingEnabled=function(){return cp +};this.setIgnoreClasses=function(cR){bj=u(cR)?[cR]:cR};this.setRequestMethod=function(cR){cJ=cR||bZ};this.setRequestContentType=function(cR){cd=cR||az};this.setReferrerUrl=function(cR){a9=cR};this.setCustomUrl=function(cR){aT=bC(bv,cR)};this.getCurrentUrl=function(){return aT||bv};this.setDocumentTitle=function(cR){a5=cR};this.setAPIUrl=function(cR){bp=cR};this.setDownloadClasses=function(cR){bt=u(cR)?[cR]:cR};this.setLinkClasses=function(cR){aW=u(cR)?[cR]:cR};this.setCampaignNameKey=function(cR){b8=u(cR)?[cR]:cR};this.setCampaignKeywordKey=function(cR){bo=u(cR)?[cR]:cR};this.discardHashTag=function(cR){bx=cR};this.setCookieNamePrefix=function(cR){a6=cR;aG=bE()};this.setCookieDomain=function(cR){var cS=I(cR);if(bg(cS)){cy=cS;a4()}};this.setCookiePath=function(cR){bb=cR;a4()};this.setVisitorCookieTimeout=function(cR){cn=cR*1000};this.setSessionCookieTimeout=function(cR){b6=cR*1000};this.setReferralCookieTimeout=function(cR){cF=cR*1000};this.setConversionAttributionFirstReferrer=function(cR){bf=cR +};this.disableCookies=function(){a7=true;cH.cookie="0";if(bN){aw()}};this.deleteCookies=function(){aw()};this.setDoNotTrack=function(cS){var cR=g.doNotTrack||g.msDoNotTrack;cs=cS&&(cR==="yes"||cR==="1");if(cs){this.disableCookies()}};this.addListener=function(cS,cR){aj(cS,cR)};this.enableLinkTracking=function(cS){cI=true;var cR=this;bY(function(){o(function(){bl(cS,cR)})})};this.enableJSErrorTracking=function(){if(cu){return}cu=true;var cR=Q.onerror;Q.onerror=function(cW,cU,cT,cV,cS){bY(function(){var cX="JavaScript Errors";var cY=cU+":"+cT;if(cV){cY+=":"+cV}am(cX,cY,cW)});if(cR){return cR(cW,cU,cT,cV,cS)}return false}};this.disablePerformanceTracking=function(){aR=false};this.setGenerationTimeMs=function(cR){b4=parseInt(cR,10)};this.enableHeartBeatTimer=function(cR){cR=Math.max(cR,1);aU=(cR||15)*1000;if(cz!==null){cO()}};this.disableHeartBeatTimer=function(){bs();if(aU||aE){if(Q.removeEventListener){Q.removeEventListener("focus",aY,true);Q.removeEventListener("blur",ap,true)}else{if(Q.detachEvent){Q.detachEvent("onfocus",aY); +Q.detachEvent("onblur",ap)}}}aU=null;aE=false};this.killFrame=function(){if(Q.location!==Q.top.location){Q.top.location=Q.location}};this.redirectFile=function(cR){if(Q.location.protocol==="file:"){Q.location=cR}};this.setCountPreRendered=function(cR){a1=cR};this.trackGoal=function(cR,cT,cS){bY(function(){cv(cR,cT,cS)})};this.trackLink=function(cS,cR,cU,cT){bY(function(){cC(cS,cR,cU,cT)})};this.trackPageView=function(cR,cT,cS){bR=[];if(K(bN)){bY(function(){U(av,bp,bN)})}else{bY(function(){bH(cR,cT,cS)})}};this.trackAllContentImpressions=function(){if(K(bN)){return}bY(function(){o(function(){var cR=t.findContentNodes();var cS=cf(cR);cN(cS,br)})})};this.trackVisibleContentImpressions=function(cR,cS){if(K(bN)){return}if(!G(cR)){cR=true}if(!G(cS)){cS=750}aI(cR,cS,this);bY(function(){l(function(){var cT=t.findContentNodes();var cU=aX(cT);cN(cU,br)})})};this.trackContentImpression=function(cT,cR,cS){if(K(bN)){return}if(!cT){return}cR=cR||"Unknown";bY(function(){var cU=ax(cT,cR,cS);bn(cU,br)}) +};this.trackContentImpressionsWithinNode=function(cR){if(K(bN)||!cR){return}bY(function(){if(bW){l(function(){var cS=t.findContentNodesWithinNode(cR);var cT=aX(cS);cN(cT,br)})}else{o(function(){var cS=t.findContentNodesWithinNode(cR);var cT=cf(cS);cN(cT,br)})}})};this.trackContentInteraction=function(cT,cU,cR,cS){if(K(bN)){return}if(!cT||!cU){return}cR=cR||"Unknown";bY(function(){var cV=aF(cT,cU,cR,cS);bn(cV,br)})};this.trackContentInteractionNode=function(cS,cR){if(K(bN)||!cS){return}bY(function(){var cT=cL(cS,cR);bn(cT,br)})};this.logAllContentBlocksOnPage=function(){var cS=t.findContentNodes();var cR=t.collectContent(cS);if(console!==undefined&&console&&console.log){console.log(cR)}};this.trackEvent=function(cS,cU,cR,cT,cW,cV){bY(function(){am(cS,cU,cR,cT,cW,cV)})};this.trackSiteSearch=function(cR,cT,cS,cU){bY(function(){bQ(cR,cT,cS,cU)})};this.setEcommerceView=function(cU,cR,cT,cS){if(!G(cT)||!cT.length){cT=""}else{if(cT instanceof Array){cT=JSON_PIWIK.stringify(cT)}}bD[5]=["_pkc",cT]; +if(G(cS)&&String(cS).length){bD[2]=["_pkp",cS]}if((!G(cU)||!cU.length)&&(!G(cR)||!cR.length)){return}if(G(cU)&&cU.length){bD[3]=["_pks",cU]}if(!G(cR)||!cR.length){cR=""}bD[4]=["_pkn",cR]};this.addEcommerceItem=function(cV,cR,cT,cS,cU){if(cV.length){cB[cV]=[cV,cR,cT,cS,cU]}};this.trackEcommerceOrder=function(cR,cV,cU,cT,cS,cW){bG(cR,cV,cU,cT,cS,cW)};this.trackEcommerceCartUpdate=function(cR){bd(cR)};this.trackRequest=function(cS,cU,cT,cR){bY(function(){var cV=b9(cS,cU,cR);bn(cV,br,cT)})};d.trigger("TrackerSetup",[this])}function E(){return{push:Z}}function b(am,al){var an={};var aj,ak;for(aj=0;aj<al.length;aj++){var ah=al[aj];an[ah]=1;for(ak=0;ak<am.length;ak++){if(am[ak]&&am[ak][0]){var ai=am[ak][0];if(ah===ai){Z(am[ak]);delete am[ak];if(an[ai]>1){ad("The method "+ai+' is registered more than once in "_paq" variable. Only the last call has an effect. Please have a look at the multiple Piwik trackers documentation: http://developer.piwik.org/guides/tracking-javascript-guide#multiple-piwik-trackers') +}an[ai]++}}}}return am}var z=["addTracker","disableCookies","setTrackerUrl","setAPIUrl","enableCrossDomainLinking","setCookiePath","setCookieDomain","setDomains","setUserId","setSiteId","enableLinkTracking"];function X(ah,aj){var ai=new N(ah,aj);F.push(ai);_paq=b(_paq,z);for(B=0;B<_paq.length;B++){if(_paq[B]){Z(_paq[B])}}_paq=new E();return ai}ag(Q,"beforeunload",ab,false);Date.prototype.getTimeAlias=Date.prototype.getTime;d={initialized:false,JSON:JSON_PIWIK,DOM:{addEventListener:function(ak,aj,ai,ah){var al=typeof ah;if(al==="undefined"){ah=false}ag(ak,aj,ai,ah)},onLoad:l,onReady:o,isNodeVisible:i,isOrWasNodeVisible:t.isNodeVisible},on:function(ai,ah){if(!v[ai]){v[ai]=[]}v[ai].push(ah)},off:function(aj,ai){if(!v[aj]){return}var ah=0;for(ah;ah<v[aj].length;ah++){if(v[aj][ah]===ai){v[aj].splice(ah,1)}}},trigger:function(aj,ak,ai){if(!v[aj]){return}var ah=0;for(ah;ah<v[aj].length;ah++){v[aj][ah].apply(ai||Q,ak)}},addPlugin:function(ah,ai){a[ah]=ai},getTracker:function(ah,ai){if(!G(ai)){ai=this.getAsyncTracker().getSiteId() +}if(!G(ah)){ah=this.getAsyncTracker().getTrackerUrl()}return new N(ah,ai)},getAsyncTrackers:function(){return F},addTracker:function(ah,ai){if(!F.length){X(ah,ai)}else{F[0].addTracker(ah,ai)}},getAsyncTracker:function(ai,al){var ak;if(F&&F.length&&F[0]){ak=F[0]}else{return X(ai,al)}if(!al&&!ai){return ak}if((!G(al)||null===al)&&ak){al=ak.getSiteId()}if((!G(ai)||null===ai)&&ak){ai=ak.getTrackerUrl()}var aj,ah=0;for(ah;ah<F.length;ah++){aj=F[ah];if(aj&&String(aj.getSiteId())===String(al)&&aj.getTrackerUrl()===ai){return aj}}},retryMissedPluginCalls:function(){var ai=aa;aa=[];var ah=0;for(ah;ah<ai.length;ah++){Z(ai[ah])}}};if(typeof define==="function"&&define.amd){define("piwik",[],function(){return d})}return d}()); /*!!! pluginTrackerHook */ -}(function(){function b(){if("object"!==typeof _paq){return false}var c=typeof _paq.length;if("undefined"===c){return false}return !!_paq.length}if(window&&"object"===typeof window.piwikPluginAsyncInit&&window.piwikPluginAsyncInit.length){var a=0;for(a;a<window.piwikPluginAsyncInit.length;a++){if(typeof window.piwikPluginAsyncInit[a]==="function"){window.piwikPluginAsyncInit[a]()}}}if(window&&window.piwikAsyncInit){window.piwikAsyncInit() -}if(!window.Piwik.getAsyncTrackers().length){if(b()){window.Piwik.addTracker()}else{_paq={push:function(c){if(console!==undefined&&console&&console.error){console.error("_paq.push() was used but Piwik tracker was not initialized before the piwik.js file was loaded. Make sure to configure the tracker via _paq.push before loading piwik.js. Alternatively, you can create a tracker via Piwik.addTracker() manually and then use _paq.push but it may not fully work as tracker methods may not be executed in the correct order.",c)}}}}}window.Piwik.trigger("PiwikInitialized",[]);window.Piwik.initialized=true}());(function(){var a=(typeof AnalyticsTracker);if(a==="undefined"){AnalyticsTracker=window.Piwik}}());if(typeof piwik_log!=="function"){piwik_log=function(b,f,d,g){function a(h){try{if(window["piwik_"+h]){return window["piwik_"+h]}}catch(i){}return}var c,e=window.Piwik.getTracker(d,f);e.setDocumentTitle(b);e.setCustomData(g);c=a("tracker_pause");if(c){e.setLinkTrackingTimer(c)}c=a("download_extensions"); -if(c){e.setDownloadExtensions(c)}c=a("hosts_alias");if(c){e.setDomains(c)}c=a("ignore_classes");if(c){e.setIgnoreClasses(c)}e.trackPageView();if(a("install_tracker")){piwik_track=function(i,k,j,h){e.setSiteId(k);e.setTrackerUrl(j);e.trackLink(i,h)};e.enableLinkTracking()}}; +}(function(){function b(){if("object"!==typeof _paq){return false}var c=typeof _paq.length;if("undefined"===c){return false}return !!_paq.length}if(window&&"object"===typeof window.piwikPluginAsyncInit&&window.piwikPluginAsyncInit.length){var a=0;for(a; +a<window.piwikPluginAsyncInit.length;a++){if(typeof window.piwikPluginAsyncInit[a]==="function"){window.piwikPluginAsyncInit[a]()}}}if(window&&window.piwikAsyncInit){window.piwikAsyncInit()}if(!window.Piwik.getAsyncTrackers().length){if(b()){window.Piwik.addTracker()}else{_paq={push:function(c){if(console!==undefined&&console&&console.error){console.error("_paq.push() was used but Piwik tracker was not initialized before the piwik.js file was loaded. Make sure to configure the tracker via _paq.push before loading piwik.js. Alternatively, you can create a tracker via Piwik.addTracker() manually and then use _paq.push but it may not fully work as tracker methods may not be executed in the correct order.",c)}}}}}window.Piwik.trigger("PiwikInitialized",[]);window.Piwik.initialized=true}());(function(){var a=(typeof AnalyticsTracker);if(a==="undefined"){AnalyticsTracker=window.Piwik}}());if(typeof piwik_log!=="function"){piwik_log=function(b,f,d,g){function a(h){try{if(window["piwik_"+h]){return window["piwik_"+h] +}}catch(i){}return}var c,e=window.Piwik.getTracker(d,f);e.setDocumentTitle(b);e.setCustomData(g);c=a("tracker_pause");if(c){e.setLinkTrackingTimer(c)}c=a("download_extensions");if(c){e.setDownloadExtensions(c)}c=a("hosts_alias");if(c){e.setDomains(c)}c=a("ignore_classes");if(c){e.setIgnoreClasses(c)}e.trackPageView();if(a("install_tracker")){piwik_track=function(i,k,j,h){e.setSiteId(k);e.setTrackerUrl(j);e.trackLink(i,h)};e.enableLinkTracking()}}; /*!! @license-end */ };
\ No newline at end of file diff --git a/plugins/Contents/tests/System/expected/test_Contents__Live.getLastVisitsDetails_day.xml b/plugins/Contents/tests/System/expected/test_Contents__Live.getLastVisitsDetails_day.xml index b16427cf44..0513e6b34b 100644 --- a/plugins/Contents/tests/System/expected/test_Contents__Live.getLastVisitsDetails_day.xml +++ b/plugins/Contents/tests/System/expected/test_Contents__Live.getLastVisitsDetails_day.xml @@ -56,7 +56,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -168,7 +168,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> diff --git a/plugins/Contents/tests/System/expected/test_Contents__Live.getLastVisitsDetails_month.xml b/plugins/Contents/tests/System/expected/test_Contents__Live.getLastVisitsDetails_month.xml index b16427cf44..0513e6b34b 100644 --- a/plugins/Contents/tests/System/expected/test_Contents__Live.getLastVisitsDetails_month.xml +++ b/plugins/Contents/tests/System/expected/test_Contents__Live.getLastVisitsDetails_month.xml @@ -56,7 +56,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -168,7 +168,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> diff --git a/plugins/Contents/tests/System/expected/test_Contents_contentInteractionMatch__Live.getLastVisitsDetails_day.xml b/plugins/Contents/tests/System/expected/test_Contents_contentInteractionMatch__Live.getLastVisitsDetails_day.xml index b16427cf44..0513e6b34b 100644 --- a/plugins/Contents/tests/System/expected/test_Contents_contentInteractionMatch__Live.getLastVisitsDetails_day.xml +++ b/plugins/Contents/tests/System/expected/test_Contents_contentInteractionMatch__Live.getLastVisitsDetails_day.xml @@ -56,7 +56,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -168,7 +168,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> diff --git a/plugins/Contents/tests/System/expected/test_Contents_contentTargetMatch__Live.getLastVisitsDetails_day.xml b/plugins/Contents/tests/System/expected/test_Contents_contentTargetMatch__Live.getLastVisitsDetails_day.xml index b16427cf44..0513e6b34b 100644 --- a/plugins/Contents/tests/System/expected/test_Contents_contentTargetMatch__Live.getLastVisitsDetails_day.xml +++ b/plugins/Contents/tests/System/expected/test_Contents_contentTargetMatch__Live.getLastVisitsDetails_day.xml @@ -56,7 +56,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -168,7 +168,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> diff --git a/plugins/Contents/tests/System/expected/test_ContentscontentNameOrPieceMatch__Live.getLastVisitsDetails_day.xml b/plugins/Contents/tests/System/expected/test_ContentscontentNameOrPieceMatch__Live.getLastVisitsDetails_day.xml index b16427cf44..0513e6b34b 100644 --- a/plugins/Contents/tests/System/expected/test_ContentscontentNameOrPieceMatch__Live.getLastVisitsDetails_day.xml +++ b/plugins/Contents/tests/System/expected/test_ContentscontentNameOrPieceMatch__Live.getLastVisitsDetails_day.xml @@ -56,7 +56,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -168,7 +168,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> diff --git a/plugins/CoreHome/angularjs/reporting-menu/reportingmenu-model.js b/plugins/CoreHome/angularjs/reporting-menu/reportingmenu-model.js index ca26581da0..d2979772bb 100644 --- a/plugins/CoreHome/angularjs/reporting-menu/reportingmenu-model.js +++ b/plugins/CoreHome/angularjs/reporting-menu/reportingmenu-model.js @@ -147,6 +147,7 @@ var pagesPromise = reportingPagesModel.reloadAllPages(); return pagesPromise.then(function (pages) { model.menu = buildMenuFromPages(pages); + return model.menu; }); } diff --git a/plugins/CoreHome/angularjs/reporting-menu/reportingmenu.controller.js b/plugins/CoreHome/angularjs/reporting-menu/reportingmenu.controller.js index dd2b685dc5..1c94136827 100644 --- a/plugins/CoreHome/angularjs/reporting-menu/reportingmenu.controller.js +++ b/plugins/CoreHome/angularjs/reporting-menu/reportingmenu.controller.js @@ -120,6 +120,21 @@ } }); + $rootScope.$on('updateReportingMenu', function () { + menuModel.reloadMenuItems().then(function (menu) { + var $search = $location.search(); + var category = $search.category; + var subcategory = $search.subcategory; + // we need to make sure to select same categories again + if (category && subcategory) { + var found = menuModel.findSubcategory(category, subcategory); + if (found) { + enterSubcategory(found.category, found.subcategory, found.subsubcategory); + } + } + }); + }); + $rootScope.$on('$locationChangeSuccess', function () { var $search = $location.search(); var category = $search.category; diff --git a/plugins/CoreHome/templates/_dataTableCell.twig b/plugins/CoreHome/templates/_dataTableCell.twig index 8b1c2b99e3..2db3545136 100644 --- a/plugins/CoreHome/templates/_dataTableCell.twig +++ b/plugins/CoreHome/templates/_dataTableCell.twig @@ -46,7 +46,7 @@ {{ piwik.logoHtml(row.getMetadata(), row.getColumn('label')) }} {% if row.getMetadata('html_label_prefix') %}<span class='label-prefix'>{{ row.getMetadata('html_label_prefix') | raw }} </span>{% endif -%} {% endif %}<span class="value"> - {%- if row.getColumn(column) or (column=='label' and row.getColumn(column) is same as("0")) %}{% if column=='label' %}{{- row.getColumn(column)|rawSafeDecoded -}}{% else %}{{- row.getColumn(column)|number(2,0)|raw -}}{% endif %} + {%- if row.getColumn(column) or (column=='label' and row.getColumn(column) is same as("0")) %}{% if column=='label' %}{{- row.getColumn(column)|rawSafeDecoded -}}{% else %}{% if row.getMetadata('html_column_' ~ column ~ '_prefix') %}<span class='column-prefix'>{{ row.getMetadata('html_column_' ~ column ~ '_prefix') | raw }} </span>{% endif -%}{{- row.getColumn(column)|number(2,0)|rawSafeDecoded -}}{% endif %} {%- else -%}- {%- endif -%}</span> {% if column=='label' %}{%- if row.getMetadata('html_label_suffix') %}<span class='label-suffix'>{{ row.getMetadata('html_label_suffix') | raw }}</span>{% endif -%}</span>{% endif %} diff --git a/plugins/CustomDimensions b/plugins/CustomDimensions -Subproject ebc37665207419a365d74d7d595b038715de20b +Subproject 25f77f15039c714b6f7a73ec2bf2a06da9034ee diff --git a/plugins/CustomVariables/tests/System/expected/test_CustomVariablesSystemTest__Live.getLastVisitsDetails_day.xml b/plugins/CustomVariables/tests/System/expected/test_CustomVariablesSystemTest__Live.getLastVisitsDetails_day.xml index 4a884ae177..3c1c505115 100644 --- a/plugins/CustomVariables/tests/System/expected/test_CustomVariablesSystemTest__Live.getLastVisitsDetails_day.xml +++ b/plugins/CustomVariables/tests/System/expected/test_CustomVariablesSystemTest__Live.getLastVisitsDetails_day.xml @@ -97,7 +97,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> diff --git a/plugins/DevicesDetection/functions.php b/plugins/DevicesDetection/functions.php index af821c43c7..8aa6f312d3 100644 --- a/plugins/DevicesDetection/functions.php +++ b/plugins/DevicesDetection/functions.php @@ -155,26 +155,13 @@ function getDeviceTypeLogo($label) { if (is_numeric($label) && in_array($label, DeviceParser::getAvailableDeviceTypes())) { $label = array_search($label, DeviceParser::getAvailableDeviceTypes()); - } - - $label = strtolower($label); - - $deviceTypeLogos = Array( - "desktop" => "normal.png", - "smartphone" => "smartphone.png", - "tablet" => "tablet.png", - "tv" => "tv.png", - "feature phone" => "mobile.png", - "console" => "console.png", - "car browser" => "carbrowser.png", - "camera" => "camera.png"); - - if (!array_key_exists($label, $deviceTypeLogos)) { - $label = 'unknown.png'; + $label = strtolower($label); + $label = str_replace(' ', '_', $label); } else { - $label = $deviceTypeLogos[$label]; + $label = "unknown"; } - $path = 'plugins/DevicesDetection/images/screens/' . $label; + + $path = 'plugins/Morpheus/icons/dist/devices/' . $label . ".png"; return $path; } diff --git a/plugins/DevicesDetection/images/screens/camera.png b/plugins/DevicesDetection/images/screens/camera.png Binary files differdeleted file mode 100644 index bd9deed867..0000000000 --- a/plugins/DevicesDetection/images/screens/camera.png +++ /dev/null diff --git a/plugins/DevicesDetection/images/screens/carbrowser.png b/plugins/DevicesDetection/images/screens/carbrowser.png Binary files differdeleted file mode 100644 index 4200115cc8..0000000000 --- a/plugins/DevicesDetection/images/screens/carbrowser.png +++ /dev/null diff --git a/plugins/DevicesDetection/images/screens/computer.png b/plugins/DevicesDetection/images/screens/computer.png Binary files differdeleted file mode 100644 index 9763689e6f..0000000000 --- a/plugins/DevicesDetection/images/screens/computer.png +++ /dev/null diff --git a/plugins/DevicesDetection/images/screens/console.png b/plugins/DevicesDetection/images/screens/console.png Binary files differdeleted file mode 100644 index 78bcdfa660..0000000000 --- a/plugins/DevicesDetection/images/screens/console.png +++ /dev/null diff --git a/plugins/DevicesDetection/images/screens/dual.png b/plugins/DevicesDetection/images/screens/dual.png Binary files differdeleted file mode 100644 index 0311d7c599..0000000000 --- a/plugins/DevicesDetection/images/screens/dual.png +++ /dev/null diff --git a/plugins/DevicesDetection/images/screens/mobile.png b/plugins/DevicesDetection/images/screens/mobile.png Binary files differdeleted file mode 100644 index 77e59f4b84..0000000000 --- a/plugins/DevicesDetection/images/screens/mobile.png +++ /dev/null diff --git a/plugins/DevicesDetection/images/screens/normal.png b/plugins/DevicesDetection/images/screens/normal.png Binary files differdeleted file mode 100644 index a89b2421c5..0000000000 --- a/plugins/DevicesDetection/images/screens/normal.png +++ /dev/null diff --git a/plugins/DevicesDetection/images/screens/smartphone.png b/plugins/DevicesDetection/images/screens/smartphone.png Binary files differdeleted file mode 100644 index c5bfb31ca4..0000000000 --- a/plugins/DevicesDetection/images/screens/smartphone.png +++ /dev/null diff --git a/plugins/DevicesDetection/images/screens/tablet.png b/plugins/DevicesDetection/images/screens/tablet.png Binary files differdeleted file mode 100644 index e6ac30bdd8..0000000000 --- a/plugins/DevicesDetection/images/screens/tablet.png +++ /dev/null diff --git a/plugins/DevicesDetection/images/screens/tv.png b/plugins/DevicesDetection/images/screens/tv.png Binary files differdeleted file mode 100644 index fb6db07cf4..0000000000 --- a/plugins/DevicesDetection/images/screens/tv.png +++ /dev/null diff --git a/plugins/DevicesDetection/images/screens/unknown.png b/plugins/DevicesDetection/images/screens/unknown.png Binary files differdeleted file mode 100644 index 166a505bbc..0000000000 --- a/plugins/DevicesDetection/images/screens/unknown.png +++ /dev/null diff --git a/plugins/DevicesDetection/images/screens/wide.png b/plugins/DevicesDetection/images/screens/wide.png Binary files differdeleted file mode 100644 index 8a7bb13d7e..0000000000 --- a/plugins/DevicesDetection/images/screens/wide.png +++ /dev/null diff --git a/plugins/DevicesDetection/tests/System/expected/test___DevicesDetection.getType_day.xml b/plugins/DevicesDetection/tests/System/expected/test___DevicesDetection.getType_day.xml index 7db59b5306..bab8a9f0cf 100644 --- a/plugins/DevicesDetection/tests/System/expected/test___DevicesDetection.getType_day.xml +++ b/plugins/DevicesDetection/tests/System/expected/test___DevicesDetection.getType_day.xml @@ -19,7 +19,7 @@ <nb_conversions>2</nb_conversions> <revenue>52.26</revenue> <segment>deviceType==tablet</segment> - <logo>plugins/DevicesDetection/images/screens/tablet.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/tablet.png</logo> </row> <row> <label>Smartphone</label> @@ -40,7 +40,7 @@ <nb_conversions>2</nb_conversions> <revenue>52.26</revenue> <segment>deviceType==smartphone</segment> - <logo>plugins/DevicesDetection/images/screens/smartphone.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/smartphone.png</logo> </row> <row> <label>Unknown</label> @@ -60,7 +60,7 @@ </goals> <nb_conversions>2</nb_conversions> <revenue>52.26</revenue> - <logo>plugins/DevicesDetection/images/screens/unknown.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/unknown.png</logo> </row> <row> <label>Desktop</label> @@ -81,7 +81,7 @@ <nb_conversions>1</nb_conversions> <revenue>10</revenue> <segment>deviceType==desktop</segment> - <logo>plugins/DevicesDetection/images/screens/normal.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/desktop.png</logo> </row> <row> <label>Tv</label> @@ -94,48 +94,48 @@ <bounce_count>1</bounce_count> <nb_visits_converted>0</nb_visits_converted> <segment>deviceType==tv</segment> - <logo>plugins/DevicesDetection/images/screens/tv.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/tv.png</logo> </row> <row> <label>Camera</label> <nb_visits>0</nb_visits> <segment>deviceType==camera</segment> - <logo>plugins/DevicesDetection/images/screens/camera.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/camera.png</logo> </row> <row> <label>Car browser</label> <nb_visits>0</nb_visits> <segment>deviceType==car+browser</segment> - <logo>plugins/DevicesDetection/images/screens/carbrowser.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/car_browser.png</logo> </row> <row> <label>Console</label> <nb_visits>0</nb_visits> <segment>deviceType==console</segment> - <logo>plugins/DevicesDetection/images/screens/console.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/console.png</logo> </row> <row> <label>Feature phone</label> <nb_visits>0</nb_visits> <segment>deviceType==feature+phone</segment> - <logo>plugins/DevicesDetection/images/screens/mobile.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/feature_phone.png</logo> </row> <row> <label>Phablet</label> <nb_visits>0</nb_visits> <segment>deviceType==phablet</segment> - <logo>plugins/DevicesDetection/images/screens/unknown.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/phablet.png</logo> </row> <row> <label>Portable media player</label> <nb_visits>0</nb_visits> <segment>deviceType==portable+media+player</segment> - <logo>plugins/DevicesDetection/images/screens/unknown.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/portable_media_player.png</logo> </row> <row> <label>Smart display</label> <nb_visits>0</nb_visits> <segment>deviceType==smart+display</segment> - <logo>plugins/DevicesDetection/images/screens/unknown.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/smart_display.png</logo> </row> </result>
\ No newline at end of file diff --git a/plugins/Live/tests/System/expected/test___Live.getVisitorProfile.xml b/plugins/Live/tests/System/expected/test___Live.getVisitorProfile.xml index 6d2f99e5d5..95e3605e4c 100644 --- a/plugins/Live/tests/System/expected/test___Live.getVisitorProfile.xml +++ b/plugins/Live/tests/System/expected/test___Live.getVisitorProfile.xml @@ -110,7 +110,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Unknown</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Unknown</operatingSystem> @@ -218,7 +218,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Unknown</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Unknown</operatingSystem> @@ -326,7 +326,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Unknown</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Unknown</operatingSystem> @@ -434,7 +434,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Unknown</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Unknown</operatingSystem> @@ -542,7 +542,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Unknown</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Unknown</operatingSystem> @@ -650,7 +650,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Unknown</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Unknown</operatingSystem> @@ -758,7 +758,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Unknown</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Unknown</operatingSystem> @@ -866,7 +866,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Unknown</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Unknown</operatingSystem> @@ -974,7 +974,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Unknown</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Unknown</operatingSystem> @@ -1082,7 +1082,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Unknown</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Unknown</operatingSystem> diff --git a/plugins/Live/tests/System/expected/test_higherLimit__Live.getVisitorProfile.xml b/plugins/Live/tests/System/expected/test_higherLimit__Live.getVisitorProfile.xml index 1e3914be4c..42517f659c 100644 --- a/plugins/Live/tests/System/expected/test_higherLimit__Live.getVisitorProfile.xml +++ b/plugins/Live/tests/System/expected/test_higherLimit__Live.getVisitorProfile.xml @@ -110,7 +110,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Unknown</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Unknown</operatingSystem> @@ -218,7 +218,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Unknown</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Unknown</operatingSystem> @@ -326,7 +326,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Unknown</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Unknown</operatingSystem> @@ -434,7 +434,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Unknown</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Unknown</operatingSystem> @@ -542,7 +542,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Unknown</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Unknown</operatingSystem> @@ -650,7 +650,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Unknown</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Unknown</operatingSystem> @@ -758,7 +758,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Unknown</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Unknown</operatingSystem> @@ -866,7 +866,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Unknown</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Unknown</operatingSystem> @@ -974,7 +974,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Unknown</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Unknown</operatingSystem> @@ -1082,7 +1082,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Unknown</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Unknown</operatingSystem> @@ -1190,7 +1190,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Unknown</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Unknown</operatingSystem> @@ -1298,7 +1298,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Unknown</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Unknown</operatingSystem> @@ -1406,7 +1406,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Unknown</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Unknown</operatingSystem> @@ -1514,7 +1514,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Unknown</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Unknown</operatingSystem> @@ -1622,7 +1622,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Unknown</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Unknown</operatingSystem> @@ -1730,7 +1730,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Unknown</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Unknown</operatingSystem> @@ -1838,7 +1838,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Unknown</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Unknown</operatingSystem> @@ -1946,7 +1946,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Unknown</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Unknown</operatingSystem> @@ -2054,7 +2054,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Unknown</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Unknown</operatingSystem> @@ -2162,7 +2162,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Unknown</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Unknown</operatingSystem> diff --git a/plugins/Marketplace/stylesheets/marketplace.less b/plugins/Marketplace/stylesheets/marketplace.less index 2a4115e60f..e5302fa270 100644 --- a/plugins/Marketplace/stylesheets/marketplace.less +++ b/plugins/Marketplace/stylesheets/marketplace.less @@ -108,7 +108,7 @@ list-style: none; li { text-overflow: ellipsis; - overflow-x: hidden; + overflow: hidden; white-space: nowrap; line-height: 18px; font-size: 13px; diff --git a/plugins/Morpheus/icons b/plugins/Morpheus/icons -Subproject 10891baaf590cc0026bb7caefc2edf597d79a7e +Subproject 3937b5daef048afb3446fbbeb6cdca5b9f6d6f5 diff --git a/plugins/SEO/API.php b/plugins/SEO/API.php index fdadbf518f..574b014454 100644 --- a/plugins/SEO/API.php +++ b/plugins/SEO/API.php @@ -23,7 +23,7 @@ require_once PIWIK_INCLUDE_PATH . '/plugins/Referrers/functions.php'; /** * The SEO API lets you access a list of SEO metrics for the specified URL: Google PageRank, Google/Bing indexed pages - * Alexa Rank, age of the Domain name and count of DMOZ entries. + * Alexa Rank and age of the Domain name. * * @method static API getInstance() */ diff --git a/plugins/SEO/Metric/Aggregator.php b/plugins/SEO/Metric/Aggregator.php index ef3c93e606..6b81744087 100644 --- a/plugins/SEO/Metric/Aggregator.php +++ b/plugins/SEO/Metric/Aggregator.php @@ -50,7 +50,6 @@ class Aggregator implements MetricsProvider $container->get('Piwik\Plugins\SEO\Metric\Bing'), $container->get('Piwik\Plugins\SEO\Metric\Alexa'), $container->get('Piwik\Plugins\SEO\Metric\DomainAge'), - $container->get('Piwik\Plugins\SEO\Metric\Dmoz'), ); /** diff --git a/plugins/SEO/Metric/Dmoz.php b/plugins/SEO/Metric/Dmoz.php deleted file mode 100644 index c14792aa31..0000000000 --- a/plugins/SEO/Metric/Dmoz.php +++ /dev/null @@ -1,62 +0,0 @@ -<?php -/** - * Piwik - free/libre analytics platform - * - * @link http://piwik.org - * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - */ - -namespace Piwik\Plugins\SEO\Metric; - -use Piwik\Http; -use Piwik\NumberFormatter; -use Psr\Log\LoggerInterface; - -/** - * Retrieves the number of Dmoz.org entries. - */ -class Dmoz implements MetricsProvider -{ - const URL = 'http://www.dmoz.org/search?q='; - - /** - * @var LoggerInterface - */ - private $logger; - - /** - * @param LoggerInterface $logger - */ - public function __construct(LoggerInterface $logger) - { - $this->logger = $logger; - } - - public function getMetrics($domain) - { - try { - $response = Http::sendHttpRequest(self::URL . urlencode($domain), $timeout = 10, @$_SERVER['HTTP_USER_AGENT']); - - preg_match('#[0-9] - [0-9]+ of ([0-9]+)#', $response, $p); - if (!empty($p[1])) { - $value = NumberFormatter::getInstance()->formatNumber((int)$p[1]); - } else { - $value = 0; - } - - // Add DMOZ only if > 0 entries found - if ($value == 0) { - return array(); - } - } catch (\Exception $e) { - $this->logger->warning('Error while getting Dmoz SEO stats: {message}', array('message' => $e->getMessage())); - $value = null; - } - - $logo = "plugins/Morpheus/icons/dist/SEO/dmoz.org.png"; - - return array( - new Metric('dmoz', 'SEO_Dmoz', $value, $logo) - ); - } -} diff --git a/plugins/SEO/lang/en.json b/plugins/SEO/lang/en.json index 7007ad48f2..589d445fd2 100644 --- a/plugins/SEO/lang/en.json +++ b/plugins/SEO/lang/en.json @@ -3,11 +3,10 @@ "PluginDescription": "This Plugin extracts and displays SEO metrics: Alexa web ranking, Google Pagerank, number of Indexed pages and backlinks of the currently selected website.", "AlexaRank": "Alexa Rank", "Bing_IndexedPages": "Bing indexed pages", - "Dmoz": "DMOZ entries", "DomainAge": "Domain Age", "Google_IndexedPages": "Google indexed pages", "Rank": "Rank", "SeoRankings": "SEO Rankings", "SEORankingsFor": "SEO Rankings for %s" } -}
\ No newline at end of file +} diff --git a/plugins/TreemapVisualization b/plugins/TreemapVisualization -Subproject 1b92d94a0a927563accf9507664f40a7c3eb2d2 +Subproject 5dca6c69cc1dcd002518846afe181b591485438 diff --git a/tests/PHPUnit/System/expected/test_ArchiveCronTest_preArchivedSegment_noOptions__Live.getLastVisitsDetails_day.xml b/tests/PHPUnit/System/expected/test_ArchiveCronTest_preArchivedSegment_noOptions__Live.getLastVisitsDetails_day.xml index 1b1925d1ec..15e90fc5dc 100644 --- a/tests/PHPUnit/System/expected/test_ArchiveCronTest_preArchivedSegment_noOptions__Live.getLastVisitsDetails_day.xml +++ b/tests/PHPUnit/System/expected/test_ArchiveCronTest_preArchivedSegment_noOptions__Live.getLastVisitsDetails_day.xml @@ -69,7 +69,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Mac 10.8</operatingSystem> @@ -183,7 +183,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>GNU/Linux</operatingSystem> @@ -297,7 +297,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>GNU/Linux</operatingSystem> @@ -411,7 +411,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>GNU/Linux</operatingSystem> @@ -525,7 +525,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows 7</operatingSystem> @@ -639,7 +639,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>GNU/Linux</operatingSystem> @@ -753,7 +753,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>GNU/Linux</operatingSystem> @@ -867,7 +867,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Smartphone</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/smartphone.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/smartphone.png</deviceTypeIcon> <deviceBrand>HTC</deviceBrand> <deviceModel>Vision</deviceModel> <operatingSystem>Android 2.3</operatingSystem> @@ -981,7 +981,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Mac 10.6</operatingSystem> diff --git a/tests/PHPUnit/System/expected/test_ArchiveCronTest_preArchivedSegment_noOptions__Live.getLastVisitsDetails_year.xml b/tests/PHPUnit/System/expected/test_ArchiveCronTest_preArchivedSegment_noOptions__Live.getLastVisitsDetails_year.xml index 20a0ff9335..c1ae816b8f 100644 --- a/tests/PHPUnit/System/expected/test_ArchiveCronTest_preArchivedSegment_noOptions__Live.getLastVisitsDetails_year.xml +++ b/tests/PHPUnit/System/expected/test_ArchiveCronTest_preArchivedSegment_noOptions__Live.getLastVisitsDetails_year.xml @@ -260,7 +260,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Unknown</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Unknown</operatingSystem> @@ -382,7 +382,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -509,7 +509,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Mac 10.6</operatingSystem> @@ -627,7 +627,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Mac 10.6</operatingSystem> @@ -764,7 +764,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Mac 10.6</operatingSystem> @@ -909,7 +909,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Mac 10.6</operatingSystem> @@ -1027,7 +1027,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Unknown</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Bot</operatingSystem> @@ -1145,7 +1145,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows 7</operatingSystem> @@ -1252,7 +1252,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Unknown</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Unknown</operatingSystem> @@ -1370,7 +1370,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Smartphone</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/smartphone.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/smartphone.png</deviceTypeIcon> <deviceBrand>HTC</deviceBrand> <deviceModel>Vision</deviceModel> <operatingSystem>Android 2.3</operatingSystem> diff --git a/tests/PHPUnit/System/expected/test_AutoSuggestAPITest__Live.getLastVisitsDetails_range.xml b/tests/PHPUnit/System/expected/test_AutoSuggestAPITest__Live.getLastVisitsDetails_range.xml index acfde7e3fc..e9722c1864 100644 --- a/tests/PHPUnit/System/expected/test_AutoSuggestAPITest__Live.getLastVisitsDetails_range.xml +++ b/tests/PHPUnit/System/expected/test_AutoSuggestAPITest__Live.getLastVisitsDetails_range.xml @@ -63,7 +63,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -248,7 +248,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -379,7 +379,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -553,7 +553,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -684,7 +684,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -877,7 +877,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -1008,7 +1008,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -1182,7 +1182,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -1313,7 +1313,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -1506,7 +1506,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -1637,7 +1637,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -1811,7 +1811,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -1985,7 +1985,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Unknown</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Unknown</operatingSystem> @@ -2108,7 +2108,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -2239,7 +2239,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Tablet</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/tablet.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/tablet.png</deviceTypeIcon> <deviceBrand>Sony</deviceBrand> <deviceModel>Xperia Tablet S</deviceModel> <operatingSystem>Android 4.1</operatingSystem> @@ -2432,7 +2432,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -2625,7 +2625,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Unknown</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Unknown</operatingSystem> @@ -2748,7 +2748,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -2879,7 +2879,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Dell</deviceBrand> <deviceModel /> <operatingSystem>Windows 7</operatingSystem> @@ -3053,7 +3053,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -3227,7 +3227,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Smartphone</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/smartphone.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/smartphone.png</deviceTypeIcon> <deviceBrand>HTC</deviceBrand> <deviceModel>Desire</deviceModel> <operatingSystem>MildWild 8.0</operatingSystem> @@ -3401,7 +3401,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Unknown</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Unknown</operatingSystem> @@ -3567,7 +3567,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Ubuntu 9.04</operatingSystem> @@ -3698,7 +3698,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -3829,7 +3829,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Smartphone</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/smartphone.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/smartphone.png</deviceTypeIcon> <deviceBrand>HTC</deviceBrand> <deviceModel>Desire</deviceModel> <operatingSystem>MildWild 8.0</operatingSystem> @@ -3960,7 +3960,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows Vista</operatingSystem> @@ -4091,7 +4091,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Ubuntu 9.04</operatingSystem> @@ -4284,7 +4284,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -4477,7 +4477,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Smartphone</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/smartphone.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/smartphone.png</deviceTypeIcon> <deviceBrand>Google</deviceBrand> <deviceModel>Nexus 4</deviceModel> <operatingSystem>Android 4.4</operatingSystem> @@ -4670,7 +4670,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Unknown</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Unknown</operatingSystem> @@ -4855,7 +4855,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Phablet</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Samsung</deviceBrand> <deviceModel>GALAXY Note 3</deviceModel> <operatingSystem>Android 4.3</operatingSystem> @@ -4986,7 +4986,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -5117,7 +5117,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Smartphone</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/smartphone.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/smartphone.png</deviceTypeIcon> <deviceBrand>Google</deviceBrand> <deviceModel>Nexus 4</deviceModel> <operatingSystem>Android 4.4</operatingSystem> @@ -5248,7 +5248,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows 8.1</operatingSystem> @@ -5379,7 +5379,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Phablet</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Samsung</deviceBrand> <deviceModel>GALAXY Note 3</deviceModel> <operatingSystem>Android 4.3</operatingSystem> diff --git a/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_day.xml b/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_day.xml index f6e2c74e73..5f77ec4ff9 100644 --- a/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_day.xml +++ b/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_day.xml @@ -53,7 +53,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -166,7 +166,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -357,7 +357,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -470,7 +470,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -874,7 +874,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -987,7 +987,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -1096,7 +1096,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -1283,7 +1283,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -1392,7 +1392,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -1741,7 +1741,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> diff --git a/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_month.xml b/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_month.xml index 6256dca24b..5dacd5cf62 100644 --- a/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_month.xml +++ b/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_month.xml @@ -53,7 +53,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -162,7 +162,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -349,7 +349,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -458,7 +458,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -807,7 +807,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -916,7 +916,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -1029,7 +1029,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -1220,7 +1220,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -1333,7 +1333,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -1737,7 +1737,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> diff --git a/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getType_month.xml b/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getType_month.xml index d4b21903a5..927bb5670a 100644 --- a/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getType_month.xml +++ b/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getType_month.xml @@ -19,7 +19,7 @@ <sum_daily_nb_uniq_visitors>29</sum_daily_nb_uniq_visitors> <sum_daily_nb_users>2</sum_daily_nb_users> <segment>deviceType==desktop</segment> - <logo>plugins/DevicesDetection/images/screens/normal.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/desktop.png</logo> </row> <row> <label>Smartphone</label> @@ -40,7 +40,7 @@ <sum_daily_nb_uniq_visitors>4</sum_daily_nb_uniq_visitors> <sum_daily_nb_users>1</sum_daily_nb_users> <segment>deviceType==smartphone</segment> - <logo>plugins/DevicesDetection/images/screens/smartphone.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/smartphone.png</logo> </row> <row> <label>Unknown</label> @@ -61,60 +61,60 @@ <sum_daily_nb_uniq_visitors>4</sum_daily_nb_uniq_visitors> <sum_daily_nb_users>0</sum_daily_nb_users> <nb_visits_converted>0</nb_visits_converted> - <logo>plugins/DevicesDetection/images/screens/unknown.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/unknown.png</logo> </row> <row> <label>Camera</label> <nb_visits>0</nb_visits> <segment>deviceType==camera</segment> - <logo>plugins/DevicesDetection/images/screens/camera.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/camera.png</logo> </row> <row> <label>Car browser</label> <nb_visits>0</nb_visits> <segment>deviceType==car+browser</segment> - <logo>plugins/DevicesDetection/images/screens/carbrowser.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/car_browser.png</logo> </row> <row> <label>Console</label> <nb_visits>0</nb_visits> <segment>deviceType==console</segment> - <logo>plugins/DevicesDetection/images/screens/console.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/console.png</logo> </row> <row> <label>Feature phone</label> <nb_visits>0</nb_visits> <segment>deviceType==feature+phone</segment> - <logo>plugins/DevicesDetection/images/screens/mobile.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/feature_phone.png</logo> </row> <row> <label>Phablet</label> <nb_visits>0</nb_visits> <segment>deviceType==phablet</segment> - <logo>plugins/DevicesDetection/images/screens/unknown.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/phablet.png</logo> </row> <row> <label>Portable media player</label> <nb_visits>0</nb_visits> <segment>deviceType==portable+media+player</segment> - <logo>plugins/DevicesDetection/images/screens/unknown.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/portable_media_player.png</logo> </row> <row> <label>Smart display</label> <nb_visits>0</nb_visits> <segment>deviceType==smart+display</segment> - <logo>plugins/DevicesDetection/images/screens/unknown.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/smart_display.png</logo> </row> <row> <label>Tablet</label> <nb_visits>0</nb_visits> <segment>deviceType==tablet</segment> - <logo>plugins/DevicesDetection/images/screens/tablet.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/tablet.png</logo> </row> <row> <label>Tv</label> <nb_visits>0</nb_visits> <segment>deviceType==tv</segment> - <logo>plugins/DevicesDetection/images/screens/tv.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/tv.png</logo> </row> </result>
\ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_ImportLogs__Live.getLastVisitsDetails_range.xml b/tests/PHPUnit/System/expected/test_ImportLogs__Live.getLastVisitsDetails_range.xml index 4b2ba500d1..412dafe2df 100644 --- a/tests/PHPUnit/System/expected/test_ImportLogs__Live.getLastVisitsDetails_range.xml +++ b/tests/PHPUnit/System/expected/test_ImportLogs__Live.getLastVisitsDetails_range.xml @@ -71,7 +71,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows 8.1</operatingSystem> @@ -223,7 +223,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows 7</operatingSystem> @@ -345,7 +345,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows 7</operatingSystem> @@ -509,7 +509,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Mac 10.9</operatingSystem> @@ -635,7 +635,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows 7</operatingSystem> @@ -774,7 +774,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Mac 10.9</operatingSystem> @@ -919,7 +919,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Mac 10.9</operatingSystem> @@ -1054,7 +1054,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Smartphone</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/smartphone.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/smartphone.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Android</operatingSystem> @@ -1181,7 +1181,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows 7</operatingSystem> @@ -1368,7 +1368,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows 8</operatingSystem> @@ -1499,7 +1499,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows 7</operatingSystem> @@ -1638,7 +1638,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows 7</operatingSystem> @@ -1966,7 +1966,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Unknown</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Unknown</operatingSystem> @@ -2084,7 +2084,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Mac</operatingSystem> @@ -2219,7 +2219,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows</operatingSystem> @@ -2345,7 +2345,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Mac 10.10</operatingSystem> @@ -2515,7 +2515,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Smartphone</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/smartphone.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/smartphone.png</deviceTypeIcon> <deviceBrand>Samsung</deviceBrand> <deviceModel>GALAXY S5</deviceModel> <operatingSystem>Android 4.4</operatingSystem> @@ -2637,7 +2637,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Mac 10.10</operatingSystem> @@ -2784,7 +2784,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Mac 10.10</operatingSystem> @@ -2908,7 +2908,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Mac 10.10</operatingSystem> @@ -3036,7 +3036,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -3165,7 +3165,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -3312,7 +3312,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -3430,7 +3430,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Smartphone</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/smartphone.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/smartphone.png</deviceTypeIcon> <deviceBrand>Apple</deviceBrand> <deviceModel>iPhone</deviceModel> <operatingSystem>iOS 7.1</operatingSystem> @@ -3537,7 +3537,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Unknown</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Unknown</operatingSystem> @@ -3643,7 +3643,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Unknown</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Unknown</operatingSystem> @@ -3759,7 +3759,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Mac 10.6</operatingSystem> @@ -3879,7 +3879,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Mac 10.6</operatingSystem> @@ -4018,7 +4018,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Mac 10.6</operatingSystem> @@ -4165,7 +4165,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Mac 10.6</operatingSystem> @@ -4285,7 +4285,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Unknown</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Bot</operatingSystem> @@ -4405,7 +4405,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows 7</operatingSystem> @@ -4514,7 +4514,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Unknown</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Unknown</operatingSystem> @@ -4634,7 +4634,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Smartphone</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/smartphone.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/smartphone.png</deviceTypeIcon> <deviceBrand>HTC</deviceBrand> <deviceModel>Vision</deviceModel> <operatingSystem>Android 2.3</operatingSystem> @@ -4754,7 +4754,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Mac 10.6</operatingSystem> @@ -4874,7 +4874,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows 7</operatingSystem> @@ -4990,7 +4990,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>GNU/Linux</operatingSystem> @@ -5106,7 +5106,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows 7</operatingSystem> @@ -5222,7 +5222,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>GNU/Linux</operatingSystem> @@ -5338,7 +5338,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows 7</operatingSystem> @@ -5454,7 +5454,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>GNU/Linux</operatingSystem> @@ -5570,7 +5570,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows 7</operatingSystem> @@ -5686,7 +5686,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows 7</operatingSystem> @@ -5802,7 +5802,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Mac 10.8</operatingSystem> @@ -5918,7 +5918,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>GNU/Linux</operatingSystem> @@ -6034,7 +6034,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>GNU/Linux</operatingSystem> @@ -6150,7 +6150,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>GNU/Linux</operatingSystem> @@ -6266,7 +6266,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows 7</operatingSystem> @@ -6382,7 +6382,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>GNU/Linux</operatingSystem> @@ -6498,7 +6498,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>GNU/Linux</operatingSystem> @@ -6614,7 +6614,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Smartphone</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/smartphone.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/smartphone.png</deviceTypeIcon> <deviceBrand>HTC</deviceBrand> <deviceModel>Vision</deviceModel> <operatingSystem>Android 2.3</operatingSystem> @@ -6730,7 +6730,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Mac 10.6</operatingSystem> diff --git a/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Live.getLastVisitsDetails_range.xml b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Live.getLastVisitsDetails_range.xml index fcc6864644..5d892a0c33 100644 --- a/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Live.getLastVisitsDetails_range.xml +++ b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Live.getLastVisitsDetails_range.xml @@ -60,7 +60,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows 8.1</operatingSystem> @@ -201,7 +201,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows 7</operatingSystem> @@ -312,7 +312,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows 7</operatingSystem> @@ -465,7 +465,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Mac 10.9</operatingSystem> @@ -591,7 +591,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows 7</operatingSystem> @@ -719,7 +719,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Mac 10.9</operatingSystem> @@ -853,7 +853,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Mac 10.9</operatingSystem> @@ -977,7 +977,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Smartphone</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/smartphone.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/smartphone.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Android</operatingSystem> @@ -1093,7 +1093,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows 7</operatingSystem> @@ -1269,7 +1269,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows 8</operatingSystem> @@ -1389,7 +1389,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows 7</operatingSystem> @@ -1517,7 +1517,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows 7</operatingSystem> @@ -1651,7 +1651,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -1769,7 +1769,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -1945,7 +1945,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Mac 10.6</operatingSystem> diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_offsetAndLimit_1__Live.getLastVisitsDetails_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_offsetAndLimit_1__Live.getLastVisitsDetails_month.xml index da66ef187d..1478e307b3 100644 --- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_offsetAndLimit_1__Live.getLastVisitsDetails_month.xml +++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_offsetAndLimit_1__Live.getLastVisitsDetails_month.xml @@ -135,7 +135,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -272,7 +272,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -452,7 +452,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_offsetAndLimit_2__Live.getLastVisitsDetails_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_offsetAndLimit_2__Live.getLastVisitsDetails_month.xml index 2e513ce895..4ec6fe3ed8 100644 --- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_offsetAndLimit_2__Live.getLastVisitsDetails_month.xml +++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_offsetAndLimit_2__Live.getLastVisitsDetails_month.xml @@ -73,7 +73,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -272,7 +272,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -409,7 +409,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortByIdVisitAsc__Live.getLastVisitsDetails_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortByIdVisitAsc__Live.getLastVisitsDetails_month.xml index 50a69b836c..33ca293b65 100644 --- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortByIdVisitAsc__Live.getLastVisitsDetails_month.xml +++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortByIdVisitAsc__Live.getLastVisitsDetails_month.xml @@ -69,7 +69,7 @@ <referrerSearchEngineUrl /> <referrerSearchEngineIcon /> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -231,7 +231,7 @@ <referrerSearchEngineUrl /> <referrerSearchEngineIcon /> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -359,7 +359,7 @@ <referrerSearchEngineUrl /> <referrerSearchEngineIcon /> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -521,7 +521,7 @@ <referrerSearchEngineUrl /> <referrerSearchEngineIcon /> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -649,7 +649,7 @@ <referrerSearchEngineUrl /> <referrerSearchEngineIcon /> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -811,7 +811,7 @@ <referrerSearchEngineUrl /> <referrerSearchEngineIcon /> <deviceType>Unknown</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Unknown</operatingSystem> @@ -931,7 +931,7 @@ <referrerSearchEngineUrl /> <referrerSearchEngineIcon /> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortByIdVisit__Live.getLastVisitsDetails_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortByIdVisit__Live.getLastVisitsDetails_month.xml index 198d996bfc..e153c8625b 100644 --- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortByIdVisit__Live.getLastVisitsDetails_month.xml +++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortByIdVisit__Live.getLastVisitsDetails_month.xml @@ -63,7 +63,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -254,7 +254,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -391,7 +391,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -571,7 +571,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -708,7 +708,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -907,7 +907,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -1044,7 +1044,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortByVisitCount__Live.getLastVisitsDetails_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortByVisitCount__Live.getLastVisitsDetails_month.xml index f73ae2256a..d9b0894b91 100644 --- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortByVisitCount__Live.getLastVisitsDetails_month.xml +++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortByVisitCount__Live.getLastVisitsDetails_month.xml @@ -103,7 +103,7 @@ <referrerSearchEngineUrl /> <referrerSearchEngineIcon /> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -233,7 +233,7 @@ <referrerSearchEngineUrl /> <referrerSearchEngineIcon /> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -397,7 +397,7 @@ <referrerSearchEngineUrl /> <referrerSearchEngineIcon /> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -543,7 +543,7 @@ <referrerSearchEngineUrl /> <referrerSearchEngineIcon /> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -673,7 +673,7 @@ <referrerSearchEngineUrl /> <referrerSearchEngineIcon /> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -803,7 +803,7 @@ <referrerSearchEngineUrl /> <referrerSearchEngineIcon /> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -923,7 +923,7 @@ <referrerSearchEngineUrl>http://google.com</referrerSearchEngineUrl> <referrerSearchEngineIcon>plugins/Morpheus/icons/dist/searchEngines/google.com.png</referrerSearchEngineIcon> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortDesc__Live.getLastVisitsDetails_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortDesc__Live.getLastVisitsDetails_month.xml index 198d996bfc..e153c8625b 100644 --- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortDesc__Live.getLastVisitsDetails_month.xml +++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortDesc__Live.getLastVisitsDetails_month.xml @@ -63,7 +63,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -254,7 +254,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -391,7 +391,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -571,7 +571,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -708,7 +708,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -907,7 +907,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -1044,7 +1044,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__Live.getLastVisitsDetails_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__Live.getLastVisitsDetails_month.xml index 608a2b87f4..17c182de49 100644 --- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__Live.getLastVisitsDetails_month.xml +++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__Live.getLastVisitsDetails_month.xml @@ -63,7 +63,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -254,7 +254,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -391,7 +391,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -571,7 +571,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -708,7 +708,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -907,7 +907,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -1044,7 +1044,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -1224,7 +1224,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -1361,7 +1361,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -1560,7 +1560,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> diff --git a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__DevicesDetection.getType_day.xml b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__DevicesDetection.getType_day.xml index 719b3d6e76..6d304e257f 100644 --- a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__DevicesDetection.getType_day.xml +++ b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__DevicesDetection.getType_day.xml @@ -18,67 +18,67 @@ <nb_conversions>1</nb_conversions> <revenue>1</revenue> <segment>deviceType==desktop</segment> - <logo>plugins/DevicesDetection/images/screens/normal.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/desktop.png</logo> </row> <row> <label>Camera</label> <nb_visits>0</nb_visits> <segment>deviceType==camera</segment> - <logo>plugins/DevicesDetection/images/screens/camera.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/camera.png</logo> </row> <row> <label>Car browser</label> <nb_visits>0</nb_visits> <segment>deviceType==car+browser</segment> - <logo>plugins/DevicesDetection/images/screens/carbrowser.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/carbrowser.png</logo> </row> <row> <label>Console</label> <nb_visits>0</nb_visits> <segment>deviceType==console</segment> - <logo>plugins/DevicesDetection/images/screens/console.gif</logo> + <logo>plugins/Morpheus/icons/dist/devices/console.gif</logo> </row> <row> <label>Feature phone</label> <nb_visits>0</nb_visits> <segment>deviceType==feature+phone</segment> - <logo>plugins/DevicesDetection/images/screens/mobile.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/mobile.png</logo> </row> <row> <label>Phablet</label> <nb_visits>0</nb_visits> <segment>deviceType==phablet</segment> - <logo>plugins/DevicesDetection/images/screens/unknown.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/unknown.png</logo> </row> <row> <label>Portable media player</label> <nb_visits>0</nb_visits> <segment>deviceType==portable+media+player</segment> - <logo>plugins/DevicesDetection/images/screens/unknown.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/unknown.png</logo> </row> <row> <label>Smart display</label> <nb_visits>0</nb_visits> <segment>deviceType==smart+display</segment> - <logo>plugins/DevicesDetection/images/screens/unknown.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/unknown.png</logo> </row> <row> <label>Smartphone</label> <nb_visits>0</nb_visits> <segment>deviceType==smartphone</segment> - <logo>plugins/DevicesDetection/images/screens/smartphone.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/smartphone.png</logo> </row> <row> <label>Tablet</label> <nb_visits>0</nb_visits> <segment>deviceType==tablet</segment> - <logo>plugins/DevicesDetection/images/screens/tablet.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/tablet.png</logo> </row> <row> <label>Tv</label> <nb_visits>0</nb_visits> <segment>deviceType==tv</segment> - <logo>plugins/DevicesDetection/images/screens/tv.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/tv.png</logo> </row> <row> <label>Unknown</label> @@ -92,6 +92,6 @@ <nb_conversions>1</nb_conversions> <revenue>42</revenue> <nb_visits>0</nb_visits> - <logo>plugins/DevicesDetection/images/screens/unknown.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/unknown.png</logo> </row> </result>
\ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__DevicesDetection.getType_day.xml b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__DevicesDetection.getType_day.xml index 4942c2ae8e..fc8095c42a 100644 --- a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__DevicesDetection.getType_day.xml +++ b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__DevicesDetection.getType_day.xml @@ -24,66 +24,66 @@ <nb_conversions>2</nb_conversions> <revenue>43</revenue> <segment>deviceType==desktop</segment> - <logo>plugins/DevicesDetection/images/screens/normal.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/desktop.png</logo> </row> <row> <label>Camera</label> <nb_visits>0</nb_visits> <segment>deviceType==camera</segment> - <logo>plugins/DevicesDetection/images/screens/camera.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/camera.png</logo> </row> <row> <label>Car browser</label> <nb_visits>0</nb_visits> <segment>deviceType==car+browser</segment> - <logo>plugins/DevicesDetection/images/screens/carbrowser.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/car_browser.png</logo> </row> <row> <label>Console</label> <nb_visits>0</nb_visits> <segment>deviceType==console</segment> - <logo>plugins/DevicesDetection/images/screens/console.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/console.png</logo> </row> <row> <label>Feature phone</label> <nb_visits>0</nb_visits> <segment>deviceType==feature+phone</segment> - <logo>plugins/DevicesDetection/images/screens/mobile.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/feature_phone.png</logo> </row> <row> <label>Phablet</label> <nb_visits>0</nb_visits> <segment>deviceType==phablet</segment> - <logo>plugins/DevicesDetection/images/screens/unknown.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/phablet.png</logo> </row> <row> <label>Portable media player</label> <nb_visits>0</nb_visits> <segment>deviceType==portable+media+player</segment> - <logo>plugins/DevicesDetection/images/screens/unknown.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/portable_media_player.png</logo> </row> <row> <label>Smart display</label> <nb_visits>0</nb_visits> <segment>deviceType==smart+display</segment> - <logo>plugins/DevicesDetection/images/screens/unknown.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/smart_display.png</logo> </row> <row> <label>Smartphone</label> <nb_visits>0</nb_visits> <segment>deviceType==smartphone</segment> - <logo>plugins/DevicesDetection/images/screens/smartphone.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/smartphone.png</logo> </row> <row> <label>Tablet</label> <nb_visits>0</nb_visits> <segment>deviceType==tablet</segment> - <logo>plugins/DevicesDetection/images/screens/tablet.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/tablet.png</logo> </row> <row> <label>Tv</label> <nb_visits>0</nb_visits> <segment>deviceType==tv</segment> - <logo>plugins/DevicesDetection/images/screens/tv.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/tv.png</logo> </row> </result>
\ No newline at end of file diff --git a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__Live.getLastVisitsDetails_day.xml b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__Live.getLastVisitsDetails_day.xml index 7884fcdf89..ee6a4a91de 100644 --- a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__Live.getLastVisitsDetails_day.xml +++ b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__Live.getLastVisitsDetails_day.xml @@ -65,7 +65,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -283,7 +283,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> diff --git a/tests/PHPUnit/System/expected/test_OneVisitor_NoKeywordSpecified__Live.getLastVisitsDetails_day.xml b/tests/PHPUnit/System/expected/test_OneVisitor_NoKeywordSpecified__Live.getLastVisitsDetails_day.xml index ce7e76cd29..f4868122ea 100644 --- a/tests/PHPUnit/System/expected/test_OneVisitor_NoKeywordSpecified__Live.getLastVisitsDetails_day.xml +++ b/tests/PHPUnit/System/expected/test_OneVisitor_NoKeywordSpecified__Live.getLastVisitsDetails_day.xml @@ -52,7 +52,7 @@ <languageCode>fr</languageCode> <language>Français</language> <deviceType>Inconnu</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Inconnu</deviceBrand> <deviceModel /> <operatingSystem>Bot</operatingSystem> @@ -173,7 +173,7 @@ <languageCode>fr</languageCode> <language>Français</language> <deviceType>Inconnu</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/unknown.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon> <deviceBrand>Inconnu</deviceBrand> <deviceModel /> <operatingSystem>Bot</operatingSystem> diff --git a/tests/PHPUnit/System/expected/test_OneVisitor_SeveralDays_ImportedInRandomOrderTest_shouldShowOneVisit_InEachOfThreeDays__Live.getLastVisitsDetails_month.xml b/tests/PHPUnit/System/expected/test_OneVisitor_SeveralDays_ImportedInRandomOrderTest_shouldShowOneVisit_InEachOfThreeDays__Live.getLastVisitsDetails_month.xml index 6e1b82df61..342351f2fa 100644 --- a/tests/PHPUnit/System/expected/test_OneVisitor_SeveralDays_ImportedInRandomOrderTest_shouldShowOneVisit_InEachOfThreeDays__Live.getLastVisitsDetails_month.xml +++ b/tests/PHPUnit/System/expected/test_OneVisitor_SeveralDays_ImportedInRandomOrderTest_shouldShowOneVisit_InEachOfThreeDays__Live.getLastVisitsDetails_month.xml @@ -57,7 +57,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows Vista</operatingSystem> @@ -161,7 +161,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows Vista</operatingSystem> @@ -265,7 +265,7 @@ <languageCode /> <language>Unknown</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows Vista</operatingSystem> diff --git a/tests/PHPUnit/System/expected/test_RowEvolution_mobileDesktop__API.getRowEvolution_day.xml b/tests/PHPUnit/System/expected/test_RowEvolution_mobileDesktop__API.getRowEvolution_day.xml index 5ccbf5c52e..485bc65bfc 100644 --- a/tests/PHPUnit/System/expected/test_RowEvolution_mobileDesktop__API.getRowEvolution_day.xml +++ b/tests/PHPUnit/System/expected/test_RowEvolution_mobileDesktop__API.getRowEvolution_day.xml @@ -43,7 +43,7 @@ <metrics> <nb_visits_0> <name>Desktop (Visits)</name> - <logo>plugins/DevicesDetection/images/screens/normal.png</logo> + <logo>plugins/Morpheus/icons/dist/devices/desktop.png</logo> <min>0</min> <max>1</max> </nb_visits_0> diff --git a/tests/PHPUnit/System/expected/test_TimezonesTest__Live.getLastVisitsDetails_day.xml b/tests/PHPUnit/System/expected/test_TimezonesTest__Live.getLastVisitsDetails_day.xml index 6b911721dd..c0ab94c8ba 100644 --- a/tests/PHPUnit/System/expected/test_TimezonesTest__Live.getLastVisitsDetails_day.xml +++ b/tests/PHPUnit/System/expected/test_TimezonesTest__Live.getLastVisitsDetails_day.xml @@ -52,7 +52,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_month.original.html b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_month.original.html index a20f435ec9..0bb9cceec4 100644 --- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_month.original.html +++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_month.original.html @@ -563,7 +563,7 @@ </h2> <img alt="" - src="data:image/png;base64,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" + src="data:image/png;base64,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" height="200" width="700" margin="0 auto"/> @@ -599,7 +599,7 @@ <tr style=";"> <td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Cantarell, 'Helvetica Neue', sans-serif;"> - <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/DevicesDetection/images/screens/unknown.png'> + <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/devices/unknown.png'> Unknown </td> <td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Cantarell, 'Helvetica Neue', sans-serif;"> @@ -624,7 +624,7 @@ <tr style="background-color: rgb(242,242,242);"> <td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Cantarell, 'Helvetica Neue', sans-serif;"> - <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/DevicesDetection/images/screens/normal.png'> + <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/devices/desktop.png'> Desktop </td> <td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Cantarell, 'Helvetica Neue', sans-serif;"> @@ -982,7 +982,7 @@ </h2> <img alt="" - src="data:image/png;base64,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" + src="data:image/png;base64,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" height="200" width="700" margin="0 auto"/> @@ -1102,7 +1102,7 @@ </h2> <img alt="" - src="data:image/png;base64,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" + src="data:image/png;base64,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" height="200" width="700" margin="0 auto"/> diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_month.original.html b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_month.original.html index e89f30802e..4c9121ed82 100644 --- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_month.original.html +++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_month.original.html @@ -578,7 +578,7 @@ <tr style=";"> <td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Cantarell, 'Helvetica Neue', sans-serif;"> - <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/DevicesDetection/images/screens/unknown.png'> + <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/devices/unknown.png'> Unknown </td> <td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Cantarell, 'Helvetica Neue', sans-serif;"> @@ -603,7 +603,7 @@ <tr style="background-color: rgb(242,242,242);"> <td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Cantarell, 'Helvetica Neue', sans-serif;"> - <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/DevicesDetection/images/screens/normal.png'> + <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/devices/desktop.png'> Desktop </td> <td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Cantarell, 'Helvetica Neue', sans-serif;"> diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_pdf_tables_only__ScheduledReports.generateReport_month.original.pdf b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_pdf_tables_only__ScheduledReports.generateReport_month.original.pdf Binary files differindex 906bc48da4..1c30f1752e 100644 --- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_pdf_tables_only__ScheduledReports.generateReport_month.original.pdf +++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_pdf_tables_only__ScheduledReports.generateReport_month.original.pdf diff --git a/tests/PHPUnit/System/expected/test_csvExport__Live.getLastVisitsDetails_day.csv b/tests/PHPUnit/System/expected/test_csvExport__Live.getLastVisitsDetails_day.csv Binary files differindex 6f949c9790..920a4200ef 100644 --- a/tests/PHPUnit/System/expected/test_csvExport__Live.getLastVisitsDetails_day.csv +++ b/tests/PHPUnit/System/expected/test_csvExport__Live.getLastVisitsDetails_day.csv diff --git a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_LiveEcommerceStatusOrdered__Live.getLastVisitsDetails_day.xml b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_LiveEcommerceStatusOrdered__Live.getLastVisitsDetails_day.xml index 65dcc1a5e3..658e543378 100755 --- a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_LiveEcommerceStatusOrdered__Live.getLastVisitsDetails_day.xml +++ b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_LiveEcommerceStatusOrdered__Live.getLastVisitsDetails_day.xml @@ -78,7 +78,7 @@ <languageCode>pl</languageCode> <language>Polish</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -307,7 +307,7 @@ <languageCode>pl</languageCode> <language>Polish</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> diff --git a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__Live.getLastVisitsDetails_day.xml b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__Live.getLastVisitsDetails_day.xml index 6b870a80fd..6e884568c7 100755 --- a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__Live.getLastVisitsDetails_day.xml +++ b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__Live.getLastVisitsDetails_day.xml @@ -161,7 +161,7 @@ <languageCode>pl</languageCode> <language>Polish</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -517,7 +517,7 @@ <languageCode>pl</languageCode> <language>Polish</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -755,7 +755,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> diff --git a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_week.original.html b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_week.original.html index 549a8099a7..d9b30ad3ca 100644 --- a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_week.original.html +++ b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_week.original.html @@ -731,7 +731,7 @@ </h2> <img alt="" - src="data:image/png;base64,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" + src="data:image/png;base64,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" height="200" width="700" margin="0 auto"/> @@ -767,7 +767,7 @@ <tr style=";"> <td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Cantarell, 'Helvetica Neue', sans-serif;"> - <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/DevicesDetection/images/screens/normal.png'> + <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/devices/desktop.png'> Desktop </td> <td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Cantarell, 'Helvetica Neue', sans-serif;"> @@ -1077,7 +1077,7 @@ </h2> <img alt="" - src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArwAAADICAIAAACF9KXqAAAYq0lEQVR4nO3de5CdZ2Hf8d/zvO+57Nn76n6xJHux8AXbCAoKhtaGJqa03MwtoU2TIZQ0KW2n9bQ0hIakk0xdpjMkpDANDZ5m0qThnoaUy5QQsDEGfMEXLIGRV5ZkaSXt/Zzdc3kvz/P0j7NahGxLr22hc2R/P3NmR7t7zvp9X836fPU87/O+JoQgAACAc7G93gAAAHBxIBoAAEAhRAMAACiEaAAAAIUQDQAAoBCiAQAAFEI0/HRNTk4+1Ref9FtneRUAAL1FNPTM1NTUOb9FPQAA+gfR8NM1NTV1xhv/5OTkWXIBAIC+Ffd6A54L/vNt957xld98998556vW6uH0qlj7ylptrH33jP6gPAAAFxjRcB4ceLyRZdnap6VS6dixY9u2bSvy2jMGHk7/tFsJp09VPNUzAQC4AJieOD9ap5E0PT299q3TRwjO+U5fvAMoBgDABUY09Fg3KYqc8Fj8mQAA/DQwPdF7p5/ZUGQcosgzAQA474iG86NWq53lu2szFOdcZlnkTIXizwQA4DwiGs6Dm18zOX3s2DN7bfH3fioBANBbRMN58Ma/t1Pa+cxee/aFlKd/lyWXAIDeMiGEXm8DAAC4CLB6AgAAFEI0AACAQogGAABQCNEAAAAKYfXEObBgAbjA+KUDeuL0xXpP9Ryi4Wy4RxRwgfFLB/REwd81picA9BESAbjwitc5Iw0AADzfFZwWJBoA9J0ic6sAzqOC04JEA4C+s/Y/LM5pAPoK5zQAAIBCiAYAfeT0iVUA/YYbVp0DS8aBC4xfOuDCK/h7RzQAAIBCmJ4AAACFEA0AAKAQogEAABRCNAAAgEKIBgAAUAjRAAAACiEaCrnvvvt6vQnA88v09PT09HSvtwJ4fjnnmx3RAAAACiEaAABAIUQDAAAohGgAAACFEA0AAKAQogEAABRCNAAAgEKIBgAAUAjRAAAACiEaAABAIUQDAAAohGgAAACFEA0AAKAQogEAABRCNAAAgEKIBgAAUEjc6w24aPyPzz7Q600AnkeazaakwcGZXm8IniN+9W0v7vUmPBcQDUV95VuP9XoTAADPENFwXjA9AQAACiEaAABAIUQDAAAohGgAAACFEA0AAKAQogEAABRCNAAAgEKIBgAAUAjRAAAACiEaAABAIUQDAAAohGgAAACFEA0AAKAQogEAABRCNAAAgEKIBgAAUAjRAAAACiEaAABAIUQDAAAohGgAAACFEA0AAKAQogEAABRCNAAAgEKIBgAAUAjRAAAACiEaAABAIUQDAAAohGgAAACFEA0AAKAQogEAABRCNAAAgEKIBgAAUAjRAAAACol7vQHPkA9qZH665Y+suOmmW0xDPfWpl5HKkcbKdqxsLxmMLhmyWwbsUMla0+stBgDgInfxRUMmHenovun2/no+03EdF3xQCAqnPccYGSmyqsV2YzW6cjR+yebqjupFuLcAAPSNi+ltNJMOtPTNE/6eowsLeeg474KMTGyMNcYaGWMkhRB8CD4oDyEJfjBo35z95vHmFRvGXrkpumpIMaMOAAA8fRdNNExn+vLj+R0H5+Zbad2F45GVMRVjRqytRbYc2ajbDZKTfFAafNv5+dy3nSvP+9dttJduL3/lWOXOOHrTJdG2Sq/3BwCAi02/RkM6p7yh2mWSnPSdBX3q4aWp2YV6K52XluJoOY5MZAeiwbaJN4VEQXGQlYyRJG/kjWQ1GCmRmS+5P3lofn629edvH5036//okWjvFv2sP6yxjYoHerynAABcJPp19cSDn9R9n5GUBP3lEf+ROx779tTRg0eXjtWb9dnmykyz2RpeybbPhlpNc4u+3PYh88q9MqfEq+nCsgsNF5o+xCZsKkc7Ng9++sDClv/4QHXhex+4ur5Q0m2fvbP1mQ/K13u9qwAAXBz6MRrC3IGV2z+dfueL7YWTHz+mP/jm9P0H548uNE4mrdlOcrw8vlJ7gaL5P6z+eti061Pjt6Q+W3F+xbnuo5G5pdwtZm4hc3OZW0ryTpLLmmt3jZ6srh/+7ZNHDn7pHcMHX/Sr/+T3H9o1/ZnfUjrf6z0GAOAi0I/R0Lz3y/OHT9Tveejbn/jIf7pb35o2j7aGTqyML86vazZfIG19v24N1av/1YZPrLSGX7L/vz6W1ep5vpideuR5PXeN3C3l+XyWL60kSb3VSvLE+Rsuqw5v27zzA37h8U/ttQdff+t7b7tz9OStb9bcvb3eaQAA+l3fndMQsvbSw/c1583izPD4n/7xL1znZnZuek24t1xK/YT51tBL9pqpX6/ephHJ2x0/+GQ6MSk3txTykjGRMUHyIaQhpN4nzseZq7YSt5Dk1ZAYuYHozn/+4s/fs/36D3/5hx/8vevGP9T58O9+5V1v+gd/+u833fLn0tZe7z0AAP2r/6KhXV9+7NjMlHHtwct2ho8NfVytTJGTjJx/j/mCyiXFoyrXbz383sXKy+WPK1tpWBOb1Ss4+RBCCHI+dj7OnHXeV0Ka5r6ZP9Bs/vLHbv/e7/zcO/a8+xv7Hr9x97v3bvxc/v4//Np7fvEf//JtWvebUtTrAwAAQJ/qu+mJvO2P7XOdFV22x2+6ptaoblzS9hNm5wntOOl2zaQ757Q5NQNKSx9deIuClOZKIqV5nmZpmrk0U5rbJI/TvJTmUe6CNXkpzstxXouM8fcfWXzLh2+/cotufNXvyDc1++9eefVQ5+Zfm9/3denhXu89AAD9q++iIUukoD2v8Rs2a2VFrWA6RkEKRsFIUgjKBwbUML/xzdvklqUtSjcp2aZko9KhUpKVkixOu4989WOWx5mLfBgZrG1cP/GXD81+9vZpSdr8kbB8p9ydb33X9mjzBrU+2dt9BwCgn/Xd9ETVzr/0xlbUVnNZ6laCFLrXhVYIQcYbb7TSGPv5Q3/1qh89cu+lL6tuNoNVc893wycGb5obf9FwqJsQjA/We+u8dd7mLuo+nI+VW2t/43N3v+2GN0uXmdG3au6ro0M3anRUy19S5RZFG3p8CAAA6Et9Fg154r57W760kGZGQcEYnX5TCd+93KOSYJr50Imlygsf+8Ge7D4d9WroLVPaP5x+4aZrSkkmLxu88cGkufU+8iFy3uZOWZ5nWclo6lD92w/d/YprR1S6TvkhdZz8tPwhuYNEAwAAT6q/oiF97N76PV/3mQlOwchIXgqnBhyMN8GH4KTM2Gp49HBUz8e31Ee0sLD7kvX5m//hd+ZujhutOOQmBOO88jw028E5FxRFcQjB5XmWZTbOlEX/7csHX3HtuCrz6gzIbpMWFRrKfqjy3l4fBgAA+lEfRUPweXL/F0KrHZx8LhPLh+7khIJkgoKXyY1yhXaIB8LOV0zsev1rt73xZaoGDa1/519XZuYq6zpzJUnOybm81Ql5HpzzzmU+xKVYUpZlLsuVJZ/9Rut//4c5mYb8nORVukzuLkUHe30YAADoU30UDX7haHrgnpDL5/Je9lQuhFPpIK/gFJzCsomHzTX/aHZk5jva7/7EvOp9d+Wzid0wtFwLkhTy3OdOaeqz3DnnXR7yPO/Ilsq596lzCmn2/cPJ44OVTcflZhSWNHZLmP4zY6ezmdnSRmYoAAA4Ux+tnsiOPOgWTvhcPlfw8k4hrD7kJa/gFXITMhNyacWMXL64b+noFZ+6/F1/VatnYWfcqHVSJamSVLkzwcdRbIxxWerTxGdJ3momSwsry3UtJn/x2z+rwcF9P9yvsCTXkl9WvCdUpZPTy5//eK+PBAAA/ei8RcPk5OTk5OSz+Qnpoe/5zPn8VC54s1oM3XTwqydChlwhM8NpqlL2pV17H7F74oFsIq2nSbL2SDqdTrPVaa54lxsFnyarj3YznDyh6RNX7dpx24fe8+BjQeW9IW8F15Bkq9sO3PX9E1/7m/N0SAAAeE758fTEGW/5U1NTk5OTU1NTRX5K8WeeRfDBh5J3qfeSZIxstxWMjJesFFQZULlkhuOWQqaQ7B6dlV+Kk/nUWBmtrstU8HmeNVeCdyaK5L1LOnJ5cE4uk7PqpCfmZn7lzTu++zfXyG3zLZmhUSOpMvnJ+9zeQ3NXPcs9AQD0nyf+y/bZv3M93/zEOQ1nHL4LfTRtOSRpd5hB3sgoOEmSCfJGJZXKOvGI3KOd2TD8bze84aZLjh8NG2QXbZIkxhhj1n5SyHOfdoJzCj54L5fLOeNz4/Ioy91s/dt3fu2ml/zC3lderubfmsEHZAakQ3LR1w+N7h6YvaB7DQC4UKiEZ+lsJ0J2xw9O/6ifLLXTv9L92H3mE5+w9vd0ljEJX5/3Xt2HMQpGxklG3ZWXZWn/17R4wFy7JfmD4Zd8f2Xv9x+pq5KoNpMZozOiwTmbJvI+GGPTRD433hnnjMutzV0rOnroIWlG7h41PicnMxBL96se37Hvsg++/ofP9GACAPBcVmj1xOnFcPpbfvfTM5LiLE84+yyGT7PgVk+BlGSCZGSNjJEqYe4xs3hEl1wZdm0KJT+odirblmmXUxOMkTFhdXZCWVCpex6EZPPUpm15b3x3pMEZlyuParpdul+dibyhkFxd2jIn3fPAAw23Ur7uNeVndCQBAP3uif+sxdPyE9HwVEfzwhzZbHY6eHlv/KkrOgXJWBmr4LR4XBu3a/3mENaVPmju/p8Hdmft9RoKmUkrxiTdaGjVlJbkTRY5lYKphIGsadOOCV7OGe+My0MzV1Leve64liW9PznwW+Urt8p9Wu72u+7f+kfv+MY46y0B4LnojPey83I23vPN2c5peFLPbIlEodMq42qQCSF4b4KXlUyQi2QiKVMp1siGoAEt5YPbxuoHr/uz1+5/3f6ZXSGKOjbIRXJRPLb0hmumNg2k+5pD3/z+C0IzSgb8YJYY74x33dMasmWvUmk0lPXoZbr0OtnxeOSr6kheb716fuOyd8kN3B4bAIAnetoXd3pmXVZkeqJ2/VvSxw+F5pzvXsQpyBgZKx/JtjUyESoVGWtakeaT0e1jy/v2fubDh67974/vXvalyZGVX7vih//06h9p05JGcw3F9endr/zjV++bGre2bpIlmarJ01YjV24/8pGX3hi+omMjesEXqpPHtSxfkm+p1h6sd0q1ddcTDQAAPNGzuiLk+R3bqV19fX3gE0Fzwcs5Gb8aDcbKGJUrMlbBy3i1gvzy8Mhg55bJB265/EHF0qDTYFBU0uJ6LXoNtkYnf3DH29N1v/emrFKrlnM5Z1zeWcmjWvlf/7Nv63/VlleWhuOPhqBsZTjEkcvi/GisdVujDXvO1x4BAPoH8xHP3tOLhiddHHHOJ6z9PZ19sCEaXR9v3hUeO9hdQKGwunTCWJlIUSRjpBBcR9abdlkdVx101VJJcSQlcidCuqzmI+nylL4aLp+6YviQGzZZa8C2TQjGZaGZabm896VHVPpO58S26MVzWlG2POGScigbtxC7pahy9avs6I6ndUwAABeFc76F4Zx+HA1PWgBP/PqTHuWznzVZ8JxKE5crl+/RXX8rqXtGpCQpdBdQmIqiSLIKXul8MAOysVxDCspyZW2lDSWH2wcWKh8Kl99evUwPlBRnI0P1KAvGe3nXyLzk/81bpiW1WqE6OtieHczqVdeJQ0X+kPVhuHLVG43po0trAwDOI0LhWeqjG1ZJql35clsbDu2VEOS7N5sIZnU1pZHKiqxsSRpR0lTziDnasRtsYlOftnW4Vfl/budfjG+di0crNq+FlWoISrsXo/Zyeauel0eyt1/f1sNbwmiUa8Aft27Rho4JFVM+bubT9eNDl/T6GAAA0Kf6KxrKO3ZXL72yPX93CCb44LrLL2WMCcYoSJIiKYq1botq68y/vH3L/z20bnQgH6z4mVolL5fK0jq3WM0lBXPqhlf1tl9upMpKv/tLx2SH8+MKm312Mg4rxjVMyDRh9PDB8mPO7uxewhoAADxBfw3F2+rgxKtvtlG0dpOq3CnPlKYmS5UnyhPlqXym1orWV/1H//7JG65ersfVaVfLWxp0K6NuZSBNlLaVdpRny213dMkPlZINQ8me3Qvve+WCluPG0citxPl0lM9Fbt6OtO3ykdIH7t5WS62JWDkBAMCT66+RBkm1l726tvua9IEHFEzw8l55d4RBJoQQTsVE5NWoa+NQ9o0bf3CyU/4/BydufWTT4YWBZhTkm8pyeSkelo12jLe/dvORYROVrFMp1kJITxqfmeAVUg10zEBV7/z6dtWXrt3zMjsy3tvdBwCgb/VdNNjhiU1v+MXGD/Yry4JWBxtCUJC6cxbd60x3H22n0aiyflS/8sKZazYkn3588M4TI+2047yPjK7f0XrFeHLDJe3JwXbSLpcv8Yr84o9sdtSqIu9kggZi/Zf9w184OHzXK2Y2vfb1irmGNAAAT67vokHS4PU/t/3Grx//4hcbkoLxXiGX1B1jMD4o9sF7eSebazFWPddoXPqZseb1mxZkjEz3lhWSDcoq7VZYbJVLG7z3IZkx7VkbjPIVKahmwqNJ9ODh0TuuP/DSm26MXnxDj/ccAIA+1o/RYCoD4+98b/jRPrv/0JxROHU3iuC7SzHlnYlciGPZWD6WiTQfazE1A7YaR4qs7IBCpmClOKSlYK3SRckYl5q0abJEeUeVcnBBY6n72O7HJy69wvz8LaoO9nrXAQDoX/0YDUmSNAZGW6//pY3zHwvHFmZM8LnJvUKQD6v3zo6c8U5RHlwsG8lGMlZZJGtlItlEsjJWtiSbda8QZeRNnpiko6weSoMqKyjXSGRKm69YfNv7hjdsL/V6xwEA6Gd9Fw1ZljUajYWFhYXNk+WXv2b7N74SZldOKHhnQpBdG2yI5J1sZKJcNgqRlYl+fM3p7nUkbdyNCSMjE5RnShO5XHGkwXIoBVOz1frWq469+h0TIxvd0tLY2FipRDkAAPDk+i4aWq3Wyilzl77o+PTCnvzeaK7+uJPPVy/UZL28k4sUWblI1hobyVrZU9FgbDDmx+tJQ5D3xjuFoLgUxgdVyU3qxu/a9qIT1/3d7bWRuNGI47harRINAAA8lf6KBudcfhrv/dTlVxzK8te6ByeXl6abauZSZLR6UqS8lXUyVtbKmtU/rI40GElGUpAUFKSaCaOxzIA5Nh+NzFe+dM01lRdcOxHHaZp2/3NpmjrnIi7VAADAk+mvaJBkT1n7dHH7jo+68LpHH36hb841k4ZX6mUiE+zqUEL3HhVeMm71hxhjZFa/3n3GoFErRH+9PHbv8fJN6crEZRuWd20dsGe6kHsKAMDFpb+iIYqicrlcrVar1WqtVuucMrRp0+eM2X748E1z89vqaT0kLaf26kzE6vREd4BB6o4xdG+JuXrl6QFpztvPJdus82+LTnSuuPTeK67cPDJSfQKGGQAAeCr9FQ2SqtXq0NDQ2vSE916nhh/mqtUPj5546cnZn5ltbOykmU3bRs4Yb4K3SiIZo6qVlayMCcEGE0llqRrCxlL8L4aXpocGv7vz5fn27ZvHxsbGxiYmJsbGxkZOKZe5shMAAE+p76IhiqKhoSFrbRzH5XL59IGHoaGhkZGR41u3fnx+Zufs0rVz85cvZ8uhMxTCUBpba4JJcwUnlVW2Mq3YJjY6XtWJkZFj4+MnxycmNm8aGxsbGhrqtsLYaRhmAADg7PouGiRFUTQ8PFwul7uh0G2FlZWVRqPRXVWxefPmTqdzT6NxR6Ph2508y0aS5JJma3Mncd59a3zMVaulOGqWypXawNApV9VqtVptZGSk+wPX1Gq1SqXS650GAKDf9WM0dFUqlUqlUqvVxsbG1hZhtk7pnuuQnuK9T/P8kPc+hF1xHEdRHMdPHKvoVshai9RqNdZYAgBQUP9GQ1c3HbpnOaRp2m2FVqvV/fPaasnuCRBrr+rObqx1wxlnO5bL5TiOmYwAAOBp6fdo6IqiKIqiSqUyPDzsnPPe5z/Jn6LTFm3GP8laSygAAPCMXRzRcLpuQDCtAADABcbljAAAQCFEAwAAKIRoAAAAhRANAACgEKIBAAAUQjQAAIBCiAYAAFAI0QAAAAohGgAAQCFEAwAAKIRoAAAAhRANAACgEKIBAAAUQjQAAIBCiAYAAFAI0QAAAAohGgAAQCFEAwAAKIRoAAAAhRANAACgEKIBAAAUQjQAAIBCiAYAAFAI0QAAAAohGgAAQCFEAwAAKIRoAAAAhRANAACgEKIBAAAUQjQAAIBCiAYAAFAI0QAAAAohGgAAQCFxrzfgovH537+515sAPI9MT09L2rp1a683BMCPMdIAAAAKIRoAAEAhRAMAACiEaAAAAIUQDQAAoBCiAQAAFEI0AACAQogGAABQCNEAAAAKIRoAAEAhRAMAACiEaAAAAIUQDQAAoBCiAQAAFEI0AACAQogGAABQCNEAAAAKMSGEXm8DAAC4CDDSAAAACiEaAABAIUQDAAAohGgAAACFEA0AAKAQogEAABRCNAAAgEKIBgAAUMj/B9FS7d8e1WC7AAAAAElFTkSuQmCC" + src="data:image/png;base64,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" height="200" width="700" margin="0 auto"/> @@ -1147,7 +1147,7 @@ </h2> <img alt="" - src="data:image/png;base64,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" + src="data:image/png;base64,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" height="200" width="700" margin="0 auto"/> diff --git a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_week.original.html b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_week.original.html index f9f4d5404a..14ea464a75 100644 --- a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_week.original.html +++ b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_week.original.html @@ -739,7 +739,7 @@ <tr style=";"> <td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Cantarell, 'Helvetica Neue', sans-serif;"> - <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/DevicesDetection/images/screens/normal.png'> + <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/devices/desktop.png'> Desktop </td> <td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Cantarell, 'Helvetica Neue', sans-serif;"> diff --git a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_pdf_tables_only__ScheduledReports.generateReport_week.original.pdf b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_pdf_tables_only__ScheduledReports.generateReport_week.original.pdf Binary files differindex a22fba16e5..6f742b60c7 100644 --- a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_pdf_tables_only__ScheduledReports.generateReport_week.original.pdf +++ b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_pdf_tables_only__ScheduledReports.generateReport_week.original.pdf diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getLastVisits.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getLastVisits.xml index 26352512c9..26e7671d01 100644 --- a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getLastVisits.xml +++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getLastVisits.xml @@ -52,7 +52,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -179,7 +179,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -367,7 +367,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getLastVisitsDetails_range.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getLastVisitsDetails_range.xml index 26352512c9..26e7671d01 100644 --- a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getLastVisitsDetails_range.xml +++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getLastVisitsDetails_range.xml @@ -52,7 +52,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -179,7 +179,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -367,7 +367,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getVisitorProfile.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getVisitorProfile.xml index 7cae27dd3a..d94519d0d6 100644 --- a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getVisitorProfile.xml +++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getVisitorProfile.xml @@ -103,7 +103,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -230,7 +230,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getLastVisits.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getLastVisits.xml index 26352512c9..26e7671d01 100644 --- a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getLastVisits.xml +++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getLastVisits.xml @@ -52,7 +52,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -179,7 +179,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -367,7 +367,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getLastVisitsDetails_range.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getLastVisitsDetails_range.xml index 26352512c9..26e7671d01 100644 --- a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getLastVisitsDetails_range.xml +++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getLastVisitsDetails_range.xml @@ -52,7 +52,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -179,7 +179,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -367,7 +367,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getVisitorProfile.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getVisitorProfile.xml index 7cae27dd3a..d94519d0d6 100644 --- a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getVisitorProfile.xml +++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getVisitorProfile.xml @@ -103,7 +103,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> @@ -230,7 +230,7 @@ <languageCode>fr</languageCode> <language>French</language> <deviceType>Desktop</deviceType> - <deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.png</deviceTypeIcon> + <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon> <deviceBrand>Unknown</deviceBrand> <deviceModel /> <operatingSystem>Windows XP</operatingSystem> diff --git a/tests/UI/config.dist.js b/tests/UI/config.dist.js index 3f8c6d73a2..3739098287 100644 --- a/tests/UI/config.dist.js +++ b/tests/UI/config.dist.js @@ -30,7 +30,7 @@ exports.php = 'php'; /** * The folder in tests/lib that holds mocha. */ -exports.mocha = 'mocha-3.1.0'; +exports.mocha = 'mocha-3.1.2'; /** * The folder in tests/lib that holds chai. diff --git a/tests/UI/expected-screenshots/DashboardManager_removed.png b/tests/UI/expected-screenshots/DashboardManager_removed.png index 96a8255e96..c3f4c872b8 100644 --- a/tests/UI/expected-screenshots/DashboardManager_removed.png +++ b/tests/UI/expected-screenshots/DashboardManager_removed.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4d132f9815c0b783a0c5e7fc93dbd9c2b77ab11d200fe3d1a200cbe9f0ea9607 -size 366875 +oid sha256:bfec34cd02b6d06c3185a332878546247608b9d94bb5622e435c5e6ea6c76ed2 +size 366890 diff --git a/tests/UI/expected-screenshots/Dashboard_loaded_token_auth.png b/tests/UI/expected-screenshots/Dashboard_loaded_token_auth.png index b658f801e8..4fe1619f74 100644 --- a/tests/UI/expected-screenshots/Dashboard_loaded_token_auth.png +++ b/tests/UI/expected-screenshots/Dashboard_loaded_token_auth.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:15e5dc1dceb9cf6eb9280eacae97344f85e31c24a865077812e8416965a7a9d1 -size 538041 +oid sha256:d6bb1736426fcc8662f2ab9fb7683707f47f76acfdfd807da6667025e62075f1 +size 538056 diff --git a/tests/UI/expected-screenshots/Dashboard_removed.png b/tests/UI/expected-screenshots/Dashboard_removed.png index e19460832d..251e8e4251 100644 --- a/tests/UI/expected-screenshots/Dashboard_removed.png +++ b/tests/UI/expected-screenshots/Dashboard_removed.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b96de53d57212e0dd1ede66696141d213b0b5e218fdf121b5c0bfb84b15b6e16 -size 537681 +oid sha256:934d56de8199bd5a9dc9354fd0f730dc258054cce977ddb6ad6fa16ecf2ff77a +size 537698 diff --git a/tests/UI/expected-screenshots/Marketplace_superuser_enable_plugins_admin.png b/tests/UI/expected-screenshots/Marketplace_superuser_enable_plugins_admin.png index 58059f4c08..0169d04786 100644 --- a/tests/UI/expected-screenshots/Marketplace_superuser_enable_plugins_admin.png +++ b/tests/UI/expected-screenshots/Marketplace_superuser_enable_plugins_admin.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:64fbd67b8e227f67acdf3dbdfc6d37b908074a540f883831860a15472c31bd1a -size 988403 +oid sha256:21fb2c76da76c4e8b9b8173e33910a8cec2ef90e911b1b9114d250f21910d3dc +size 988271 diff --git a/tests/UI/expected-screenshots/Marketplace_superuser_enable_plugins_admin_with_multiserver_enabled.png b/tests/UI/expected-screenshots/Marketplace_superuser_enable_plugins_admin_with_multiserver_enabled.png index e30e111be0..b98c619ea2 100644 --- a/tests/UI/expected-screenshots/Marketplace_superuser_enable_plugins_admin_with_multiserver_enabled.png +++ b/tests/UI/expected-screenshots/Marketplace_superuser_enable_plugins_admin_with_multiserver_enabled.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:63b211556185f1718d70a24af5763487d2664fc042109373fc2b1a7c60baf7b8 -size 1015385 +oid sha256:383e432f9dc389b68cb87bf7e6abd87ea07eb31b76d56a03813965ea4fe0cbe2 +size 1015245 diff --git a/tests/UI/expected-screenshots/Marketplace_superuser_invalid_license_key_entered.png b/tests/UI/expected-screenshots/Marketplace_superuser_invalid_license_key_entered.png index aa05485f5a..621e992687 100644 --- a/tests/UI/expected-screenshots/Marketplace_superuser_invalid_license_key_entered.png +++ b/tests/UI/expected-screenshots/Marketplace_superuser_invalid_license_key_entered.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:64546e78e73632b7e08a312c47eb655427258807747a1f79b9f3ad73a9a98df8 -size 1005309 +oid sha256:1e1b256a7145363d459816a0cf8994cc569f902b5246678f55969c1991562218 +size 1005185 diff --git a/tests/UI/expected-screenshots/Marketplace_superuser_remove_license_key_confirmed.png b/tests/UI/expected-screenshots/Marketplace_superuser_remove_license_key_confirmed.png index a9d6c8a0bd..6bb0234830 100644 --- a/tests/UI/expected-screenshots/Marketplace_superuser_remove_license_key_confirmed.png +++ b/tests/UI/expected-screenshots/Marketplace_superuser_remove_license_key_confirmed.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:686bbadf6bffcb2d97e37d63da464bd097176b2fae15dacfd58825b2b53c2c19 -size 999666 +oid sha256:9f379aec0930012d7ac0f77244c08a5e8b95163cbaadebc55dc41b4cc0bc2d81 +size 999542 diff --git a/tests/UI/expected-screenshots/Marketplace_superuser_valid_license_key_entered.png b/tests/UI/expected-screenshots/Marketplace_superuser_valid_license_key_entered.png index d4626f8cc6..bb572d74df 100644 --- a/tests/UI/expected-screenshots/Marketplace_superuser_valid_license_key_entered.png +++ b/tests/UI/expected-screenshots/Marketplace_superuser_valid_license_key_entered.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8849ea263fbc65744636263a3139e5fe9c47c2d3109b9a4c1a0d46e6bd1d91fa -size 1009986 +oid sha256:ccb1c4391bbf1b09b33c197cb25c1d44efc8ce6c2fd8c2bffdf308401de1a500 +size 1009853 diff --git a/tests/UI/expected-screenshots/Marketplace_updates_multiUserEnvironment.png b/tests/UI/expected-screenshots/Marketplace_updates_multiUserEnvironment.png index 10daf00c64..c02717ba4d 100644 --- a/tests/UI/expected-screenshots/Marketplace_updates_multiUserEnvironment.png +++ b/tests/UI/expected-screenshots/Marketplace_updates_multiUserEnvironment.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d34f5ac92c5efff376a6008f6359c323aec2931cb2a61157a1a820f750dd49d0 -size 33517 +oid sha256:3b70a7ecaecb439c8aed9145701c93e0695ecaa70a2c40d57d410d4a8829b4b2 +size 33610 diff --git a/tests/UI/expected-screenshots/Marketplace_updates_superuser.png b/tests/UI/expected-screenshots/Marketplace_updates_superuser.png index e37583dfb5..58f86977b9 100644 --- a/tests/UI/expected-screenshots/Marketplace_updates_superuser.png +++ b/tests/UI/expected-screenshots/Marketplace_updates_superuser.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1d9b0afeb3d48d6ba34ce8e6f56405161e3ad134d19a64da3367b92452d7cc40 -size 32907 +oid sha256:5f9ca8eef86a59a9e0516f6468cf4c59f84fcb243a6ae9439f7f64307ce40c2e +size 33000 diff --git a/tests/UI/expected-screenshots/Overlay_row_evolution.png b/tests/UI/expected-screenshots/Overlay_row_evolution.png index 5265eca9d0..ec63a52016 100644 --- a/tests/UI/expected-screenshots/Overlay_row_evolution.png +++ b/tests/UI/expected-screenshots/Overlay_row_evolution.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4a95ee47908dc3758c7a9582196f92f58b1b3e81abfee10edd91624d0dd6fcc9 -size 99036 +oid sha256:682c2f7a7ffb8d0ae934986bbce1d8d31ca0c139d7c454bea17fda4cc3d47865 +size 98902 diff --git a/tests/UI/expected-screenshots/Overlay_transitions.png b/tests/UI/expected-screenshots/Overlay_transitions.png index e53c5c9f41..5500e75c65 100644 --- a/tests/UI/expected-screenshots/Overlay_transitions.png +++ b/tests/UI/expected-screenshots/Overlay_transitions.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b512d8e268ffcec1c8c005f09eb6e8210547c3a1f876bf8312315e7cdc975598 -size 120232 +oid sha256:ebe70f43294f767b92a19dcc72e5be1e97c493f95ade11e775a762fc4f0718b4 +size 119995 diff --git a/tests/UI/expected-screenshots/Theme_home.png b/tests/UI/expected-screenshots/Theme_home.png index 9df53a6fdd..a751d02286 100644 --- a/tests/UI/expected-screenshots/Theme_home.png +++ b/tests/UI/expected-screenshots/Theme_home.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:555777a1774925ccd4b54248378e9def6d2c740141b9ae4df2c08bb52433ce66 -size 536813 +oid sha256:fcc3c528ee455ded2d3f7d1811e62a3fd7bf0031acba5b825ca87ecd35ea8eed +size 536692 diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_api_listing.png b/tests/UI/expected-screenshots/UIIntegrationTest_api_listing.png index 68ba833293..1b665763b3 100644 --- a/tests/UI/expected-screenshots/UIIntegrationTest_api_listing.png +++ b/tests/UI/expected-screenshots/UIIntegrationTest_api_listing.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0a52fa65a55dc98b5caffb25e2e984ad05079578d3e3b7b78f4d5dddfaf3c46d -size 4195468 +oid sha256:e89dec188dfd22ab45968c14547eaa831fb78d0621fff7807d423fab6bf0894f +size 4193113 diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_dashboard1.png b/tests/UI/expected-screenshots/UIIntegrationTest_dashboard1.png index 9b02897b72..fe648a5446 100644 --- a/tests/UI/expected-screenshots/UIIntegrationTest_dashboard1.png +++ b/tests/UI/expected-screenshots/UIIntegrationTest_dashboard1.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f6a62924f24a65bc5c14c7607b614980205a3f1b3eaef2ff65dc7325ac692186 -size 487938 +oid sha256:5795c428bdfcffed6ed15c18b22691834b7ec2ed18df5cc9fde5e57d86828cec +size 487989 diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_dashboard2.png b/tests/UI/expected-screenshots/UIIntegrationTest_dashboard2.png index fbdf7fa122..a1c7909537 100644 --- a/tests/UI/expected-screenshots/UIIntegrationTest_dashboard2.png +++ b/tests/UI/expected-screenshots/UIIntegrationTest_dashboard2.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:06c191f3c60d5aaa5eefe76269763bdcfa1ee4a71c47a6a1514e095a5421993d -size 1446632 +oid sha256:e30fe1296a83f3cb595783f2f7494b36f1296f342f2c25614e5ce4c5814ba398 +size 1440753 diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_ecommerce_log.png b/tests/UI/expected-screenshots/UIIntegrationTest_ecommerce_log.png index b933377013..1cd27cf96f 100644 --- a/tests/UI/expected-screenshots/UIIntegrationTest_ecommerce_log.png +++ b/tests/UI/expected-screenshots/UIIntegrationTest_ecommerce_log.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:06f016ae54dce5d636a6b03b2ec4a82742b99f25135ac01014e3e1522ede4612 -size 451177 +oid sha256:acaebcbfa0545af24abd0fc3356f2ab9bb1b142caa5b52a921f363dc4708e3e6 +size 447957 diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_fatal_error_safemode.png b/tests/UI/expected-screenshots/UIIntegrationTest_fatal_error_safemode.png index 7644c8b396..db73bcf5a6 100644 --- a/tests/UI/expected-screenshots/UIIntegrationTest_fatal_error_safemode.png +++ b/tests/UI/expected-screenshots/UIIntegrationTest_fatal_error_safemode.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f6c7b1e43460effdcf48f24aa60696f78591214aa16d193b4bd319e5cd46f4ac -size 193363 +oid sha256:ead27f2a738167a13047f24e34ed56914b3aee1dd0ca473e635d25e6a3af1e38 +size 193129 diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_menu_apidisallowed.png b/tests/UI/expected-screenshots/UIIntegrationTest_menu_apidisallowed.png index 3ed1f4545a..84c488ce56 100644 --- a/tests/UI/expected-screenshots/UIIntegrationTest_menu_apidisallowed.png +++ b/tests/UI/expected-screenshots/UIIntegrationTest_menu_apidisallowed.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:25a9fcb2a5884b476cf1de38a6eda4108fc2aeaf03826cd774849e7d94e701e1 -size 493851 +oid sha256:0a2e98763d0164ad875f528aa2cf5b43f59136c20e4eb40191cdf98da2ced882 +size 493887 diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_segmented_visitorlog.png b/tests/UI/expected-screenshots/UIIntegrationTest_segmented_visitorlog.png index 0a4d512277..e93f72dcbe 100644 --- a/tests/UI/expected-screenshots/UIIntegrationTest_segmented_visitorlog.png +++ b/tests/UI/expected-screenshots/UIIntegrationTest_segmented_visitorlog.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:feda268a7117f452cba4eb695cdc39abd5b7068597d7c2ce3a7eeee797f592e6 -size 804380 +oid sha256:9219b7935f8089264403158f7f2797169cb3788ac67d464598d2554cecf4f1c7 +size 793558 diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitor_profile_popup.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitor_profile_popup.png index 833931cb7b..f8c0772272 100644 --- a/tests/UI/expected-screenshots/UIIntegrationTest_visitor_profile_popup.png +++ b/tests/UI/expected-screenshots/UIIntegrationTest_visitor_profile_popup.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6571be1d79e9e8180ebb82f521698e85bb34f2cde8aeaae490ce45d82ce5dfb4 -size 228752 +oid sha256:4202c32e26df1e3577903ff380004ba52f46b313d0b02ec9ee913d157255f730 +size 228743 diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_devices.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_devices.png index d8f28e8748..788ed995c0 100644 --- a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_devices.png +++ b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_devices.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:928758c9e4b5f75083aacca0c70f70e2b1f286dee73b6c35c38dd9a911bd2808 -size 95212 +oid sha256:84e46a6c71501c0f36628be28836e23eaa603eb7aeeef4c7f7f892942ae047e4 +size 93244 diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_realtime_map.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_realtime_map.png index 5db9932c1c..2beb08cbc3 100644 --- a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_realtime_map.png +++ b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_realtime_map.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d98e92f3427f99f5057ab30a68b82ee69f5790cb0860643ca8673ea99b406bbb -size 113148 +oid sha256:cac417b09917b065ff27f3ace234ccc537e2c99aca6d375c3456f84cfd9d0eeb +size 113169 diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_software.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_software.png index 754a66c393..ead2ba7ffd 100644 --- a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_software.png +++ b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_software.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:754d69e4f6c6940c369e1ba1d006cb89d75240e5e7bf8622aa152794615e3871 -size 160022 +oid sha256:b101a48862ea5eae3db93d279b51ac67ae5c7e15fb6a9a822a4a988e41d2be6c +size 160676 diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_with_site_search_visitorlog.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_with_site_search_visitorlog.png index e0428c4d74..f9084b46f2 100644 --- a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_with_site_search_visitorlog.png +++ b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_with_site_search_visitorlog.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:658893bddff5b10cd8d9a52300b7854bbee6b72dc4bdc3b832049cbc2b196791 -size 109515 +oid sha256:87f45e8093a90c7ff913de3da13d583bfc12bc465c0e7b70f3142b9909f5e17c +size 107636 diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_ecommercelog.png b/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_ecommercelog.png index 17240d640a..73c08bfaa8 100644 --- a/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_ecommercelog.png +++ b/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_ecommercelog.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e65a25e2cb17caa1c0ceb8e3a2466491e270d2c0a26c24322b6e9572fe01324d -size 445631 +oid sha256:cada449b2e86e1151601de02d1992fb0fa0e15d6f8c3776ffe6d225a91580173 +size 442565 diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_visitor_log.png b/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_visitor_log.png index 9510f82db0..60daf5906f 100644 --- a/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_visitor_log.png +++ b/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_visitor_log.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a82901cf3a852302466e14f1d022c94e083eb698733a6b1b548a442058f0a231 -size 633000 +oid sha256:631e7e5f6270af4f5c4ae945661ef109403af6d7b4cdacebfc2fd53e8e326802 +size 626906 diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_related_report_click.png b/tests/UI/expected-screenshots/ViewDataTableTest_related_report_click.png index 7f87d5be3b..4954de117c 100644 --- a/tests/UI/expected-screenshots/ViewDataTableTest_related_report_click.png +++ b/tests/UI/expected-screenshots/ViewDataTableTest_related_report_click.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a10e23f1fd049c67fbce31163632f37e753efa7de2bed70da8f4acd238b646fb -size 38614 +oid sha256:a1d439e3735718dee9677a43e8fa1c8fa2783c18b0e53062fb2469374d72a735 +size 38749 diff --git a/tests/UI/specs/Overlay_spec.js b/tests/UI/specs/Overlay_spec.js index 53888b14ac..578ddf3bba 100644 --- a/tests/UI/specs/Overlay_spec.js +++ b/tests/UI/specs/Overlay_spec.js @@ -78,7 +78,8 @@ describe("Overlay", function () { y: iframe.offset().top + innerOffset.top }; }); - page.sendMouseEvent('click', pos, 2000); + page.sendMouseEvent('click', pos); + page.wait(2000); removeOptOutIframe(page); }, done); @@ -112,7 +113,9 @@ describe("Overlay", function () { it("should open row evolution popup when row evolution link clicked", function (done) { expect.screenshot("row_evolution").to.be.capture(function (page) { - page.click('#overlayRowEvolution'); + page.evaluate(function () { + $('#overlayRowEvolution').click(); + }, 500); page.evaluate(function () { $('.jqplot-xaxis').hide(); // xaxis will change every day so hide it }); @@ -123,8 +126,12 @@ describe("Overlay", function () { it("should open transitions popup when transitions link clicked", function (done) { expect.screenshot("transitions").to.be.capture(function (page) { - page.click('button.ui-dialog-titlebar-close'); - page.click('#overlayTransitions'); + page.evaluate(function () { + $('button.ui-dialog-titlebar-close').click(); + }, 500); + page.evaluate(function () { + $('#overlayTransitions').click(); + }, 500); removeOptOutIframe(page); }, done); diff --git a/tests/javascript/index.php b/tests/javascript/index.php index 862d8420b8..bdc83d5e9c 100644 --- a/tests/javascript/index.php +++ b/tests/javascript/index.php @@ -2104,7 +2104,7 @@ function PiwikTest() { }); test("API methods", function() { - expect(77); + expect(79); equal( typeof Piwik.addPlugin, 'function', 'addPlugin' ); equal( typeof Piwik.addPlugin, 'function', 'addTracker' ); @@ -2127,6 +2127,8 @@ function PiwikTest() { equal( typeof tracker.getAttributionCampaignName, 'function', 'getAttributionCampaignName' ); equal( typeof tracker.getAttributionCampaignKeyword, 'function', 'getAttributionCampaignKeyword' ); equal( typeof tracker.setTrackerUrl, 'function', 'setTrackerUrl' ); + equal( typeof tracker.getPiwikUrl, 'function', 'getPiwikUrl' ); + equal( typeof tracker.getCurrentUrl, 'function', 'getCurrentUrl' ); equal( typeof tracker.getRequest, 'function', 'getRequest' ); equal( typeof tracker.addPlugin, 'function', 'addPlugin' ); equal( typeof tracker.setUserId, 'function', 'setUserId' ); @@ -3410,9 +3412,9 @@ function PiwikTest() { equal( getPiwikUrlForOverlay('http://www.example.com/piwik.php'), 'http://www.example.com/', 'with piwik.php and no js folder' ); equal( getPiwikUrlForOverlay('http://www.example.com/master/js/piwik.php'), 'http://www.example.com/master/', 'installed in custom folder and js folder' ); equal( getPiwikUrlForOverlay('http://www.example.com/master/piwik.php'), 'http://www.example.com/master/', 'installed in custom folder and no js folder' ); - equal( getPiwikUrlForOverlay('/piwik.php'), '/', 'only piwik.php with leading slash' ); - equal( getPiwikUrlForOverlay('piwik.php'), '', 'only piwik.php' ); - equal( getPiwikUrlForOverlay('/piwik.php?version=1234'), '/', 'only piwik.php with leading slash with query' ); + equal( getPiwikUrlForOverlay('/piwik.php'), toAbsoluteUrl('/'), 'only piwik.php with leading slash' ); + equal( getPiwikUrlForOverlay('piwik.php'), toAbsoluteUrl(''), 'only piwik.php' ); + equal( getPiwikUrlForOverlay('/piwik.php?version=1234'), toAbsoluteUrl('/'), 'only piwik.php with leading slash with query' ); }); function generateAnIframeInDocument() { @@ -3491,7 +3493,7 @@ if ($mysql) { }); test("tracking", function() { - expect(142); + expect(149); // Prevent Opera and HtmlUnit from performing the default action (i.e., load the href URL) var stopEvent = function (evt) { @@ -3511,7 +3513,27 @@ if ($mysql) { var tracker = Piwik.getTracker(); tracker.setTrackerUrl("piwik.php"); tracker.setSiteId(1); + + var piwikUrl = location.href; + if (piwikUrl.indexOf('?') > 0) { + piwikUrl = piwikUrl.substr(0, piwikUrl.indexOf('?')); + } + equal(tracker.getPiwikUrl(), piwikUrl, "getPiwikUrl, relative tracker url" ); + + tracker.setTrackerUrl("http://apache.piwik/piwik.php"); + equal(tracker.getPiwikUrl(), 'http://apache.piwik/', "getPiwikUrl, in root directory" ); + + tracker.setTrackerUrl("http://apache.piwik/tracker.php"); + equal(tracker.getPiwikUrl(), 'http://apache.piwik/', "getPiwikUrl, with different file name" ); + + tracker.setTrackerUrl("http://apache.piwik/tests/javascript/piwik.php?x=1"); + equal(tracker.getPiwikUrl(), 'http://apache.piwik/tests/javascript/', "getPiwikUrl, with path and query" ); + + tracker.setTrackerUrl("http://apache.piwik/js/piwik.php?x=1"); + equal(tracker.getPiwikUrl(), 'http://apache.piwik/', "getPiwikUrl, when using unminified piwik.js" ); + tracker.setTrackerUrl("piwik.php"); + var thirteenMonths = 1000 * 60 * 60 * 24 * 393; strictEqual(thirteenMonths, tracker.getConfigVisitorCookieTimeout(), 'default visitor timeout should be 13 months'); @@ -3519,6 +3541,8 @@ if ($mysql) { var isAbout13Months = (thirteenMonths + 1000) > actualTimeout && ((thirteenMonths - 6000) < actualTimeout); ok(isAbout13Months, 'remaining cookieTimeout should be about the deault tiemout of 13 months (' + thirteenMonths + ') but is ' + actualTimeout); + equal(tracker.getCurrentUrl(), location.href, "getCurrentUrl, when no custom url set" ); + var visitorIdStart = tracker.getVisitorId(); // need to wait at least 1 second so that the cookie would be different, if it wasnt persisted wait(2000); @@ -3527,6 +3551,8 @@ if ($mysql) { var customUrl = "http://localhost.localdomain/?utm_campaign=YEAH&utm_term=RIGHT!"; tracker.setCustomUrl(customUrl); + equal(tracker.getCurrentUrl(), customUrl, "getCurrentUrl, when custom url set" ); + tracker.setCustomData({ "token" : getToken() }); var data = tracker.getCustomData(); ok( getToken() != "" && data.token == data["token"] && data.token == getToken(), "setCustomData() , getCustomData()" ); @@ -3562,7 +3588,6 @@ if ($mysql) { tracker.deleteCustomDimension(3); equal(tracker.getCustomDimension(3), null, "deleteCustomDimension verify value was removed" ); - tracker.setCustomVariable(1, "new visit1", 'val1', 'visit'); tracker.setCustomVariable(5, "new visit5", 'val5'); tracker.setCustomVariable(2, "new page2", 'pageval2', 'page'); diff --git a/tests/lib/mocha-3.1.0/.eslintignore b/tests/lib/mocha-3.1.0/.eslintignore deleted file mode 100644 index 2b550ca81d..0000000000 --- a/tests/lib/mocha-3.1.0/.eslintignore +++ /dev/null @@ -1,3 +0,0 @@ -lib/to-iso-string/ -test/**/* -!test/runner.js diff --git a/tests/lib/mocha-3.1.0/.eslintrc b/tests/lib/mocha-3.1.0/.eslintrc deleted file mode 100644 index d5c733f79f..0000000000 --- a/tests/lib/mocha-3.1.0/.eslintrc +++ /dev/null @@ -1,129 +0,0 @@ ---- -env: - node: true - -rules: - brace-style: [2, 1tbs] - camelcase: 2 - comma-dangle: [2, never] - comma-spacing: [2, {before: false, after: true}] - comma-style: [2, last] - computed-property-spacing: [2, never] - consistent-return: 0 - consistent-this: [1, self] - curly: [2, all] - default-case: 2 - dot-location: [2, property] - dot-notation: [2, { allowKeywords: true, allowPattern: "^long$" }] - eol-last: 2 - eqeqeq: 2 - func-style: [2, declaration] - guard-for-in: 2 # TODO: Change to error - handle-callback-err: [2, ^(err|error)$] - indent: [2, 2, { SwitchCase: 1 }] - key-spacing: [2, { beforeColon: false, afterColon: true }] - max-len: [0, 80, 2] # TODO: Change to error - max-params: [1, 4] - new-cap: 0 # TODO: Change to error - new-parens: 2 - no-alert: 2 - no-array-constructor: 0 - no-bitwise: 0 - no-caller: 2 - no-catch-shadow: 2 - no-cond-assign: [1, except-parens] # TODO: Change to error - no-console: 0 - no-constant-condition: 0 - no-control-regex: 2 - no-debugger: 1 - no-delete-var: 2 - no-dupe-args: 2 - no-dupe-keys: 2 - no-duplicate-case: 2 - no-else-return: 2 - no-empty: 2 - no-empty-character-class: 2 - no-eq-null: 0 - no-eval: 2 - no-ex-assign: 2 - no-extend-native: 2 - no-extra-bind: 2 - no-extra-boolean-cast: 2 - no-extra-semi: 2 - no-fallthrough: 2 - no-floating-decimal: 0 - no-func-assign: 2 - no-implied-eval: 2 - no-inner-declarations: [2, functions] - no-invalid-regexp: 2 - no-irregular-whitespace: 2 - no-iterator: 2 - no-labels: 2 - no-lone-blocks: 2 - no-lonely-if: 2 - no-loop-func: 2 - no-mixed-requires: [0, false] - no-mixed-spaces-and-tabs: [2, false] - no-multi-spaces: 2 - no-multi-str: 2 - no-multiple-empty-lines: [2, { max: 1 }] - no-native-reassign: 2 - no-negated-in-lhs: 2 - no-nested-ternary: 2 - no-new: 2 - no-new-func: 2 - no-new-object: 2 - no-new-require: 2 - no-new-wrappers: 2 - no-obj-calls: 2 - no-octal: 2 - no-octal-escape: 2 - no-path-concat: 2 - no-process-exit: 2 - no-proto: 1 # TODO: Change to error - no-redeclare: 2 - no-regex-spaces: 2 - no-return-assign: 2 - no-script-url: 2 - no-self-compare: 2 - no-sequences: 2 - no-shadow: 0 - no-shadow-restricted-names: 2 - no-spaced-func: 2 - no-sparse-arrays: 2 - no-trailing-spaces: 2 - no-undef: 2 - no-undef-init: 2 - no-underscore-dangle: 0 # TODO: Change to error - no-unneeded-ternary: 2 - no-unreachable: 2 - no-unused-expressions: 0 - no-unused-vars: [2, { vars: all, args: after-used }] - no-use-before-define: 0 - no-void: 2 - no-with: 2 - object-curly-spacing: [2, always] - one-var: [2, never] - operator-assignment: [2, always] - operator-linebreak: [2, before] - padded-blocks: [2, never] - quote-props: [2, as-needed] - quotes: [2, single, avoid-escape] - radix: 2 - semi: [2, always] - semi-spacing: [2, { before: false, after: true }] - space-before-blocks: [2, always] - space-before-function-paren: [2, never] - space-in-parens: [2, never] - space-infix-ops: 2 - keyword-spacing: 2 - space-unary-ops: [2, { words: true, nonwords: false }] - spaced-comment: [2, always, { exceptions: ['!'] }] - strict: [0, global] # TODO: Change to error - use-isnan: 2 - valid-jsdoc: [0, { requireReturn: false }] # TODO: Change to warning - valid-typeof: 2 - vars-on-top: 0 - wrap-iife: 2 - wrap-regex: 2 - yoda: [2, never] diff --git a/tests/lib/mocha-3.1.0/lib/browser/debug.js b/tests/lib/mocha-3.1.0/lib/browser/debug.js deleted file mode 100644 index ba232896df..0000000000 --- a/tests/lib/mocha-3.1.0/lib/browser/debug.js +++ /dev/null @@ -1,4 +0,0 @@ -/* eslint-disable no-unused-vars */ -module.exports = function(type) { - return function() {}; -}; diff --git a/tests/lib/mocha-3.1.0/test/.eslintrc b/tests/lib/mocha-3.1.0/test/.eslintrc deleted file mode 100644 index 956287d60c..0000000000 --- a/tests/lib/mocha-3.1.0/test/.eslintrc +++ /dev/null @@ -1,5 +0,0 @@ ---- -env: - mocha: true -globals: - expect: false diff --git a/tests/lib/mocha-3.1.0/test/acceptance/duration.spec.js b/tests/lib/mocha-3.1.0/test/acceptance/duration.spec.js deleted file mode 100644 index 4f319b8a3c..0000000000 --- a/tests/lib/mocha-3.1.0/test/acceptance/duration.spec.js +++ /dev/null @@ -1,25 +0,0 @@ -describe('durations', function(){ - describe('when slow', function(){ - it('should highlight in red', function(done){ - setTimeout(function(){ - done(); - }, 100); - }) - }) - - describe('when reasonable', function(){ - it('should highlight in yellow', function(done){ - setTimeout(function(){ - done(); - }, 50); - }) - }) - - describe('when fast', function(){ - it('should highlight in green', function(done){ - setTimeout(function(){ - done(); - }, 10); - }) - }) -}) diff --git a/tests/lib/mocha-3.1.0/test/acceptance/fs.spec.js b/tests/lib/mocha-3.1.0/test/acceptance/fs.spec.js deleted file mode 100644 index 3a70f2752c..0000000000 --- a/tests/lib/mocha-3.1.0/test/acceptance/fs.spec.js +++ /dev/null @@ -1,20 +0,0 @@ -var fs = require('fs'); -var path = require('path'); -var os = require('os'); -var tmpFile = path.join.bind(path, os.tmpdir()); - -describe('fs.readFile()', function(){ - describe('when the file exists', function(){ - it('should succeed', function(done){ - fs.writeFile(tmpFile('mocha'), 'wahoo', done) - }) - }) - - describe('when the file does not exist', function(){ - it('should fail', function(done){ - // uncomment - // fs.readFile(tmpFile('does-not-exist'), done); - done(); - }) - }) -}) diff --git a/tests/lib/mocha-3.1.0/test/acceptance/glob/glob.spec.js b/tests/lib/mocha-3.1.0/test/acceptance/glob/glob.spec.js deleted file mode 100644 index 3029ae82ee..0000000000 --- a/tests/lib/mocha-3.1.0/test/acceptance/glob/glob.spec.js +++ /dev/null @@ -1,5 +0,0 @@ -describe('globbing test', function(){ - it('should find this test', function(){ - // see glob.sh for details - }) -}); diff --git a/tests/lib/mocha-3.1.0/test/acceptance/http.spec.js b/tests/lib/mocha-3.1.0/test/acceptance/http.spec.js deleted file mode 100644 index 43b8588508..0000000000 --- a/tests/lib/mocha-3.1.0/test/acceptance/http.spec.js +++ /dev/null @@ -1,16 +0,0 @@ -var http = require('http'); - -var server = http.createServer(function(req, res){ - res.end('Hello World\n'); -}) - -server.listen(8888); - -describe('http', function(){ - it('should provide an example', function(done){ - http.get({ path: '/', port: 8888 }, function(res){ - expect(res).to.have.property('statusCode', 200); - done(); - }) - }) -}) diff --git a/tests/lib/mocha-3.1.0/test/acceptance/interfaces/bdd.spec.js b/tests/lib/mocha-3.1.0/test/acceptance/interfaces/bdd.spec.js deleted file mode 100644 index ba444c8f7f..0000000000 --- a/tests/lib/mocha-3.1.0/test/acceptance/interfaces/bdd.spec.js +++ /dev/null @@ -1,32 +0,0 @@ -describe('integer primitives', function(){ - describe('arithmetic', function(){ - it('should add', function(){ - expect(1 + 1).to.equal(2); - expect(2 + 2).to.equal(4); - }) - - it('should subtract', function(){ - expect(1 - 1).to.equal(0); - expect(2 - 1).to.equal(1); - }) - }) -}) - -describe('integer primitives', function(){ - describe('arithmetic is not', function(){ - it('should add', function(){ - expect(1 + 1).not.to.equal(3); - expect(2 + 2).not.to.equal(5); - }) - }) -}) - -context('test suite', function(){ - beforeEach(function(){ - this.number = 5; - }) - - specify('share a property', function(){ - expect(this.number).to.equal(5); - }) -}) diff --git a/tests/lib/mocha-3.1.0/test/acceptance/interfaces/exports.spec.js b/tests/lib/mocha-3.1.0/test/acceptance/interfaces/exports.spec.js deleted file mode 100644 index 08db71200b..0000000000 --- a/tests/lib/mocha-3.1.0/test/acceptance/interfaces/exports.spec.js +++ /dev/null @@ -1,43 +0,0 @@ -var calls = []; - -exports.Array = { - before: function(){ - calls.push('before'); - }, - - after: function(){ - calls.push('after'); - expect(calls).to.eql([ - 'before' - , 'before each' - , 'one' - , 'after each' - , 'before each' - , 'two' - , 'after each' - , 'after']); - }, - - '#indexOf()': { - beforeEach: function(){ - calls.push('before each'); - }, - - afterEach: function(){ - calls.push('after each'); - }, - - 'should return -1 when the value is not present': function(){ - calls.push('one'); - expect([1,2,3].indexOf(5)).to.equal(-1); - expect([1,2,3].indexOf(0)).to.equal(-1); - }, - - 'should return the correct index when the value is present': function(){ - calls.push('two'); - expect([1,2,3].indexOf(1)).to.equal(0); - expect([1,2,3].indexOf(2)).to.equal(1); - expect([1,2,3].indexOf(3)).to.equal(2); - } - } -}; diff --git a/tests/lib/mocha-3.1.0/test/acceptance/interfaces/qunit.spec.js b/tests/lib/mocha-3.1.0/test/acceptance/interfaces/qunit.spec.js deleted file mode 100644 index d452e769c5..0000000000 --- a/tests/lib/mocha-3.1.0/test/acceptance/interfaces/qunit.spec.js +++ /dev/null @@ -1,23 +0,0 @@ -function ok(expr, msg) { - if (!expr) throw new Error(msg); -} - -suite('integer primitives'); - -test('should add', function(){ - var number = 2 + 2; - ok(number == 4); -}); - -test('should decrement', function(){ - var number = 3; - ok(--number == 2); - ok(--number == 1); - ok(--number == 0); -}); - -suite('String'); - -test('#length', function(){ - ok('foo'.length == 3); -}); diff --git a/tests/lib/mocha-3.1.0/test/acceptance/misc/nontty.spec.js b/tests/lib/mocha-3.1.0/test/acceptance/misc/nontty.spec.js deleted file mode 100644 index 2372a660b9..0000000000 --- a/tests/lib/mocha-3.1.0/test/acceptance/misc/nontty.spec.js +++ /dev/null @@ -1,9 +0,0 @@ -describe('tests for non-tty', function(){ - it('should pass', function(){ - - }) - - it('should fail', function(){ - throw new Error('oh noes') - }) -}) diff --git a/tests/lib/mocha-3.1.0/test/acceptance/misc/only/tdd.spec.js b/tests/lib/mocha-3.1.0/test/acceptance/misc/only/tdd.spec.js deleted file mode 100644 index 7e37e7a3b3..0000000000 --- a/tests/lib/mocha-3.1.0/test/acceptance/misc/only/tdd.spec.js +++ /dev/null @@ -1,125 +0,0 @@ -suite('should only run .only test in this tdd suite', function() { - test('should not run this test', function() { - (0).should.equal(1, 'this test should have been skipped'); - }); - test.only('should run this test', function() { - (0).should.equal(0, 'this .only test should run'); - }); - test('should run this test, not (includes the title of the .only test)', function() { - (0).should.equal(1, 'this test should have been skipped'); - }); -}); - -suite('should not run this suite', function() { - test('should not run this test', function() { - (true).should.equal(false); - }); - - test('should not run this test', function() { - (true).should.equal(false); - }); - - test('should not run this test', function() { - (true).should.equal(false); - }); -}); - -suite.only('should run all tests in this tdd suite', function() { - test('should run this test #1', function() { - (true).should.equal(true); - }); - - test('should run this test #2', function() { - (1).should.equal(1); - }); - - test('should run this test #3', function() { - ('foo').should.equal('foo'); - }); -}); - -suite('should run only suites that marked as `only`', function() { - suite.only('should run all this tdd suite', function() { - test('should run this test #1', function() { - (true).should.equal(true); - }); - - test('should run this test #2', function() { - (true).should.equal(true); - }); - }); - - suite('should not run this suite', function() { - test('should not run this test', function() { - (true).should.equal(false); - }); - }); -}); - -// Nested situation -suite('should not run parent tests', function() { - test('should not run this test', function() { - (true).should.equal(false); - }); - suite('and not the child tests too', function() { - test('should not run this test', function() { - (true).should.equal(false); - }); - suite.only('but run all the tests in this suite', function() { - test('should run this test #1', function() { - (true).should.equal(true); - }); - test('should run this test #2', function() { - (true).should.equal(true); - }); - }); - }); -}); - -// mark test as `only` override the suite behavior -suite.only('should run only tests that marked as `only`', function() { - test('should not run this test #1', function() { - (false).should.equal(true); - }); - - test.only('should run this test #2', function() { - (true).should.equal(true); - }); - - test('should not run this test #3', function() { - (false).should.equal(true); - }); - - test.only('should run this test #4', function() { - (true).should.equal(true); - }); -}); - -suite.only('Should run only test cases that mark as only', function() { - test.only('should runt his test', function() { - (true).should.equal(true); - }); - - test('should not run this test', function() { - (false).should.equal(true); - }); - - suite('should not run this suite', function() { - test('should not run this test', function() { - (false).should.equal(true); - }); - }); -}); - -// Root Suite -test.only('#Root-Suite, should run this test-case #1', function() { - (true).should.equal(true); -}); - -test.only('#Root-Suite, should run this test-case #2', function() { - (true).should.equal(true); -}); - -test('#Root-Suite, should not run this test', function() { - (false).should.equal(true); -}); diff --git a/tests/lib/mocha-3.1.0/test/acceptance/require/a.js b/tests/lib/mocha-3.1.0/test/acceptance/require/a.js deleted file mode 100644 index 592d827449..0000000000 --- a/tests/lib/mocha-3.1.0/test/acceptance/require/a.js +++ /dev/null @@ -1,2 +0,0 @@ -global.required = (global.required || []) -global.required.push('a.js') diff --git a/tests/lib/mocha-3.1.0/test/acceptance/require/c.js b/tests/lib/mocha-3.1.0/test/acceptance/require/c.js deleted file mode 100644 index 4e681373a1..0000000000 --- a/tests/lib/mocha-3.1.0/test/acceptance/require/c.js +++ /dev/null @@ -1,2 +0,0 @@ -global.required = (global.required || []) -global.required.push('c.js') diff --git a/tests/lib/mocha-3.1.0/test/acceptance/root.spec.js b/tests/lib/mocha-3.1.0/test/acceptance/root.spec.js deleted file mode 100644 index 037e6a328a..0000000000 --- a/tests/lib/mocha-3.1.0/test/acceptance/root.spec.js +++ /dev/null @@ -1,11 +0,0 @@ -var calls = []; - -before(function(){ - calls.push('before'); -}) - -describe('root', function(){ - it('should be a valid suite', function(){ - expect(calls).to.eql(['before']); - }) -}) diff --git a/tests/lib/mocha-3.1.0/test/acceptance/timeout.spec.js b/tests/lib/mocha-3.1.0/test/acceptance/timeout.spec.js deleted file mode 100644 index f61c3ba566..0000000000 --- a/tests/lib/mocha-3.1.0/test/acceptance/timeout.spec.js +++ /dev/null @@ -1,79 +0,0 @@ -describe('timeouts', function(){ - beforeEach(function(done){ - // uncomment - // setTimeout(done, 3000); - done(); - }) - - it('should error on timeout', function(done){ - // uncomment - // setTimeout(done, 3000); - done(); - }) - - it('should allow overriding per-test', function(done){ - this.timeout(1000); - setTimeout(function(){ - done(); - }, 300); - }) - - describe('disabling', function(){ - it('should allow overriding per-test', function(done){ - this.enableTimeouts(false); - this.timeout(1); - setTimeout(done, 2); - }); - - it('should work with timeout(0)', function(done) { - this.timeout(0); - setTimeout(done, 1); - }) - - describe('using beforeEach', function() { - beforeEach(function () { - this.timeout(0); - }) - - it('should work with timeout(0)', function(done) { - setTimeout(done, 1); - }) - }) - - describe('using before', function() { - before(function () { - this.timeout(0); - }) - - it('should work with timeout(0)', function(done) { - setTimeout(done, 1); - }) - }) - - describe('using enableTimeouts(false)', function() { - this.timeout(4); - - it('should suppress timeout(4)', function(done) { - // The test is in the before() call. - this.enableTimeouts(false); - setTimeout(done, 50); - }) - }) - - describe('suite-level', function() { - this.timeout(0); - - it('should work with timeout(0)', function(done) { - setTimeout(done, 1); - }) - - describe('nested suite', function () { - it('should work with timeout(0)', function(done) { - setTimeout(done, 1); - }) - - }) - }) - }); - -}) diff --git a/tests/lib/mocha-3.1.0/test/browser/array.spec.js b/tests/lib/mocha-3.1.0/test/browser/array.spec.js deleted file mode 100644 index 26404f6a90..0000000000 --- a/tests/lib/mocha-3.1.0/test/browser/array.spec.js +++ /dev/null @@ -1,38 +0,0 @@ -describe('Array', function(){ - describe('#push()', function(){ - it('should append a value', function(){ - foo = 'asdf' - var arr = []; - arr.push('foo'); - arr.push('bar'); - arr.push('baz'); - assert('foo' == arr[0]); // to test indentation - assert('bar' == arr[1]); - assert('baz' == arr[2]); - }) - - it('should return the length', function(){ - var arr = []; - assert(1 == arr.push('foo')); - assert(2 == arr.push('bar')); - assert(3 == arr.push('baz')); - }) - }) -}) - -describe('Array', function(){ - describe('#pop()', function(){ - it('should remove and return the last value', function(){ - var arr = [1,2,3]; - assert(arr.pop() == 3); - assert(arr.pop() == 2); - assert(arr.pop() == -1); - }) - - it('should adjust .length', function(){ - var arr = [1,2,3]; - arr.pop(); - assert(arr.length == 2); - }) - }) -}) diff --git a/tests/lib/mocha-3.1.0/test/browser/grep.spec.js b/tests/lib/mocha-3.1.0/test/browser/grep.spec.js deleted file mode 100644 index 9531b87aa9..0000000000 --- a/tests/lib/mocha-3.1.0/test/browser/grep.spec.js +++ /dev/null @@ -1,108 +0,0 @@ -// numbers -describe('21', function() { - it('1', function() { - assert(true); - }); - it('2', function() { - assert(true); - }); -}); -// symbols -describe('@Array', function() { - it('.pop()', function() { - assert(true); - }); - it('.push()', function() { - assert(true); - }); - it('.length', function() { - assert(true); - }); -}); - -describe('@Function', function() { - it('.call()', function() { - assert(true); - }); - it('.apply()', function() { - assert(true); - }); - it('.length', function() { - assert(true); - }); - it('.name', function() { - assert(true); - }); - it('.prototype', function() { - assert(true); - }); -}); - -//url with hashtags -describe('#Services',function() { - describe('#http', function() { - it('.createClient()', function() { - assert(true); - }); - it('.Server()', function() { - assert(true); - }); - }); - describe('#crypto', function() { - it('.randomBytes()', function() { - assert(true); - }); - it('.Hmac()', function() { - assert(true); - }); - }); -}); - -// Uppercase -describe('CONSTANTS', function() { - it('.STATUS_CODES', function() { - assert(true); - }); -}); - -// Dates -describe('Date:', function() { - it('01/02/2015', function() { - assert(true); - }); - it('01/03/2015', function() { - assert(true); - }); - it('01/06/2015', function() { - assert(true); - }); -}); - -// etc.. -describe('booking/summary', function() { - it('should be run last', function() { - assert(true); - }); -}); - -describe('component/booking/summary', function() { - it('should be run second', function() { - assert(true); - }); -}); - -describe('component/booking/intro', function() { - it('should be run first', function() { - assert(true); - }); -}); - -describe('contains numbers', function() { - it('should run if the number 92 matching', function() { - assert(true); - }); - - it('should run if the number 8 matching', function() { - assert(true); - }); -});
\ No newline at end of file diff --git a/tests/lib/mocha-3.1.0/test/browser/opts.spec.js b/tests/lib/mocha-3.1.0/test/browser/opts.spec.js deleted file mode 100644 index dbbc9ff172..0000000000 --- a/tests/lib/mocha-3.1.0/test/browser/opts.spec.js +++ /dev/null @@ -1,5 +0,0 @@ -describe('Options', function() { - it('should set timeout value', function() { - assert(this.test._timeout === 1500); - }); -}) diff --git a/tests/lib/mocha-3.1.0/test/browser/stack-trace.spec.js b/tests/lib/mocha-3.1.0/test/browser/stack-trace.spec.js deleted file mode 100644 index b39944db09..0000000000 --- a/tests/lib/mocha-3.1.0/test/browser/stack-trace.spec.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; -describe('Stack trace', function() { - it('should prettify the stack-trace', function() { - var err = new Error(); - // We do this fake stack-trace because we under development, - // and our root isn't `node_modules`, `bower` or `components` - err.stack = ['Error: failed' - , 'at assert (stack-trace.html:11:30)' - , 'at Context.<anonymous> (stack-trace.js:5:5)' - , 'at callFn (http://localhost:63342/node_modules/mocha.js:4546:21)' - , 'at Test.require.register.Runnable.run (http://localhost:63342/node_modules/mocha.js:4539:7)' - , 'at Runner.require.register.Runner.runTest (http://localhost:63342/node_modules/mocha.js:4958:10)' - , 'at http://localhost:63342/bower_components/mocha.js:5041:12' - , 'at next (http://localhost:63342/bower_components/mocha.js:4883:14)' - , 'at http://localhost:63342/bower_components/mocha.js:4893:7' - , 'at next (http://localhost:63342/bower_components/mocha.js:4828:23)' - , 'at http://localhost:63342/bower_components/mocha.js:4860:5'].join('\n'); - assert(false, err); - }); -});
\ No newline at end of file diff --git a/tests/lib/mocha-3.1.0/test/fixture-expect.js b/tests/lib/mocha-3.1.0/test/fixture-expect.js deleted file mode 100644 index cacc78425a..0000000000 --- a/tests/lib/mocha-3.1.0/test/fixture-expect.js +++ /dev/null @@ -1 +0,0 @@ -global.expect = require("expect.js") diff --git a/tests/lib/mocha-3.1.0/test/hook-async.spec.js b/tests/lib/mocha-3.1.0/test/hook-async.spec.js deleted file mode 100644 index ae6e642d24..0000000000 --- a/tests/lib/mocha-3.1.0/test/hook-async.spec.js +++ /dev/null @@ -1,129 +0,0 @@ -describe('async', function(){ - var calls = []; - - before(function(){ - calls.push('root before all'); - }) - - after(function(){ - calls.push('root after all'); - calls.should.eql([ - 'root before all' - , 'before all' - , 'parent before' - , 'before' - , 'before test one' - , 'one' - , 'after' - , 'after test one passed' - , 'parent after' - , 'parent before' - , 'before' - , 'before test two' - , 'two' - , 'after' - , 'after test two passed' - , 'parent after' - , 'parent before' - , 'before' - , 'before test three' - , 'three' - , 'after' - , 'after test three passed' - , 'parent after' - , 'after all' - , 'root after all']); - }) - - beforeEach(function(){ - calls.push('parent before'); - }) - - afterEach(function(){ - calls.push('parent after' ); - }) - - describe('hooks', function(){ - before(function(){ - calls.push('before all'); - }); - - after(function(){ - calls.push('after all'); - }); - - beforeEach(function(done){ - var ctx = this; - process.nextTick(function(){ - calls.push('before'); - if (ctx.currentTest) { - calls.push('before test ' + ctx.currentTest.title); - } - done(); - }) - }) - - it('one', function(done){ - calls.should.eql([ - 'root before all' - , 'before all' - , 'parent before' - , 'before' - , 'before test one']); - calls.push('one'); - process.nextTick(done); - }) - - it('two', function(){ - calls.should.eql([ - 'root before all' - , 'before all' - , 'parent before' - , 'before' - , 'before test one' - , 'one' - , 'after' - , 'after test one passed' - , 'parent after' - , 'parent before' - , 'before' - , 'before test two']); - calls.push('two'); - }) - - it('three', function(){ - calls.should.eql([ - 'root before all' - , 'before all' - , 'parent before' - , 'before' - , 'before test one' - , 'one' - , 'after' - , 'after test one passed' - , 'parent after' - , 'parent before' - , 'before' - , 'before test two' - , 'two' - , 'after' - , 'after test two passed' - , 'parent after' - , 'parent before' - , 'before' - , 'before test three']); - calls.push('three'); - }) - - afterEach(function(done){ - var ctx = this; - process.nextTick(function(){ - calls.push('after'); - if (ctx.currentTest) { - calls.push('after test ' + ctx.currentTest.title + ' ' + ctx.currentTest.state); - } - done(); - }) - }) - }) -}) diff --git a/tests/lib/mocha-3.1.0/test/hook-sync-nested.spec.js b/tests/lib/mocha-3.1.0/test/hook-sync-nested.spec.js deleted file mode 100644 index b87c22298f..0000000000 --- a/tests/lib/mocha-3.1.0/test/hook-sync-nested.spec.js +++ /dev/null @@ -1,98 +0,0 @@ -describe('serial', function(){ - describe('nested', function(){ - var calls = []; - - beforeEach(function(){ - calls.push('parent before'); - if (this.currentTest) { - calls.push('parent before test ' + this.currentTest.title); - } - }) - - afterEach(function(){ - calls.push('parent after'); - if (this.currentTest) { - calls.push('parent after test ' + this.currentTest.title + ' ' + this.currentTest.state); - } - }); - - it('foo', function(){ - calls.should.eql([ - 'parent before' - , 'parent before test foo']); - calls.push('foo'); - }) - - it('bar', function(){ - calls.should.eql([ - 'parent before' - , 'parent before test foo' - , 'foo' - , 'parent after' - , 'parent after test foo passed' - , 'parent before' - , 'parent before test bar']); - }) - - describe('hooks', function(){ - beforeEach(function(){ - calls.push('before'); - if (this.currentTest) { - calls.push('before test ' + this.currentTest.title); - } - }) - - it('one', function(){ - calls.should.eql([ - 'parent before' - , 'parent before test foo' - , 'foo' - , 'parent after' - , 'parent after test foo passed' - , 'parent before' - , 'parent before test bar' - , 'parent after' - , 'parent after test bar passed' - , 'parent before' - , 'parent before test one' - , 'before' - , 'before test one']); - calls.push('one'); - }) - - it('two', function(){ - calls.should.eql([ - 'parent before' - , 'parent before test foo' - , 'foo' - , 'parent after' - , 'parent after test foo passed' - , 'parent before' - , 'parent before test bar' - , 'parent after' - , 'parent after test bar passed' - , 'parent before' - , 'parent before test one' - , 'before' - , 'before test one' - , 'one' - , 'after' - , 'after test one passed' - , 'parent after' - , 'parent after test one passed' - , 'parent before' - , 'parent before test two' - , 'before' - , 'before test two']); - calls.push('two'); - }); - - afterEach(function(){ - calls.push('after'); - if (this.currentTest) { - calls.push('after test ' + this.currentTest.title + ' ' + this.currentTest.state); - } - }) - }) - }) -}) diff --git a/tests/lib/mocha-3.1.0/test/hook-sync.spec.js b/tests/lib/mocha-3.1.0/test/hook-sync.spec.js deleted file mode 100644 index 1d40f5d0c0..0000000000 --- a/tests/lib/mocha-3.1.0/test/hook-sync.spec.js +++ /dev/null @@ -1,97 +0,0 @@ -describe('serial', function(){ - var calls = []; - - beforeEach(function(){ - calls.push('parent before'); - }) - - afterEach(function(){ - calls.push('parent after'); - }) - - describe('hooks', function(){ - beforeEach(function(){ - calls.push('before'); - if (this.currentTest) { - calls.push('before test ' + this.currentTest.title); - } - }) - - it('one', function(){ - calls.should.eql([ - 'parent before' - , 'before' - , 'before test one']); - calls.push('one'); - }) - - it('two', function(){ - calls.should.eql([ - 'parent before' - , 'before' - , 'before test one' - , 'one' - , 'after' - , 'after test one passed' - , 'parent after' - , 'parent before' - , 'before' - , 'before test two']); - calls.push('two'); - }) - - it('three', function(){ - calls.should.eql([ - 'parent before' - , 'before' - , 'before test one' - , 'one' - , 'after' - , 'after test one passed' - , 'parent after' - , 'parent before' - , 'before' - , 'before test two' - , 'two' - , 'after' - , 'after test two passed' - , 'parent after' - , 'parent before' - , 'before' - , 'before test three']); - calls.push('three'); - }) - - afterEach(function(){ - calls.push('after'); - if (this.currentTest) { - calls.push('after test ' + this.currentTest.title + ' ' + this.currentTest.state); - } - }) - - after(function(){ - calls.should.eql([ - 'parent before' - , 'before' - , 'before test one' - , 'one' - , 'after' - , 'after test one passed' - , 'parent after' - , 'parent before' - , 'before' - , 'before test two' - , 'two' - , 'after' - , 'after test two passed' - , 'parent after' - , 'parent before' - , 'before' - , 'before test three' - , 'three' - , 'after' - , 'after test three passed' - , 'parent after']); - }) - }) -}) diff --git a/tests/lib/mocha-3.1.0/test/hook-timeout.spec.js b/tests/lib/mocha-3.1.0/test/hook-timeout.spec.js deleted file mode 100644 index 155c1e95a6..0000000000 --- a/tests/lib/mocha-3.1.0/test/hook-timeout.spec.js +++ /dev/null @@ -1,8 +0,0 @@ -before(function(done){ - this.timeout(100); - setTimeout(done, 50); -}) - -it('should work', function(done) { - done(); -}); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/hooks/before-hook-async-error-tip.fixture.js b/tests/lib/mocha-3.1.0/test/integration/fixtures/hooks/before-hook-async-error-tip.fixture.js deleted file mode 100644 index 14e114e959..0000000000 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/hooks/before-hook-async-error-tip.fixture.js +++ /dev/null @@ -1,11 +0,0 @@ -describe('spec 1', function() { - it('should not blame me', function() { }); -}); -describe('spec 2', function() { - before(function(done) { - process.nextTick(function () { - throw new Error('before hook error'); - }); - }); - it('skipped'); -}); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/hooks/before-hook-error-tip.fixture.js b/tests/lib/mocha-3.1.0/test/integration/fixtures/hooks/before-hook-error-tip.fixture.js deleted file mode 100644 index 567dfef26b..0000000000 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/hooks/before-hook-error-tip.fixture.js +++ /dev/null @@ -1,9 +0,0 @@ -describe('spec 1', function() { - it('should not blame me', function() { }); -}); -describe('spec 2', function() { - before(function() { - throw new Error('before hook error'); - }); - it('skipped'); -}); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/multiple-done-before.fixture.js b/tests/lib/mocha-3.1.0/test/integration/fixtures/multiple-done-before.fixture.js deleted file mode 100644 index 80d4adb61a..0000000000 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/multiple-done-before.fixture.js +++ /dev/null @@ -1,10 +0,0 @@ -describe('suite', function() { - before(function(done) { - setTimeout(done, 10); - setTimeout(done, 30); - }); - - it('test1', function(done) { - setTimeout(done, 50); - }); -}); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/multiple-done-beforeEach.fixture.js b/tests/lib/mocha-3.1.0/test/integration/fixtures/multiple-done-beforeEach.fixture.js deleted file mode 100644 index 9b4724dea1..0000000000 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/multiple-done-beforeEach.fixture.js +++ /dev/null @@ -1,14 +0,0 @@ -describe('suite', function() { - beforeEach(function(done) { - setTimeout(done, 10); - setTimeout(done, 20); - }); - - it('test1', function(done) { - setTimeout(done, 50); - }); - - it('test2', function(done) { - setTimeout(done, 50); - }); -}); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/multiple-done-specs.fixture.js b/tests/lib/mocha-3.1.0/test/integration/fixtures/multiple-done-specs.fixture.js deleted file mode 100644 index 82197061f1..0000000000 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/multiple-done-specs.fixture.js +++ /dev/null @@ -1,10 +0,0 @@ -describe('suite', function() { - it('test1', function(done) { - done(); - setTimeout(done, 10); - }); - - it('test2', function(done) { - setTimeout(done, 20); - }); -}); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/options/async-only-async.fixture.js b/tests/lib/mocha-3.1.0/test/integration/fixtures/options/async-only-async.fixture.js deleted file mode 100644 index 5387d169b7..0000000000 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/options/async-only-async.fixture.js +++ /dev/null @@ -1,3 +0,0 @@ -it('should pass', function(done){ - done(); -}); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/options/async-only-sync.fixture.js b/tests/lib/mocha-3.1.0/test/integration/fixtures/options/async-only-sync.fixture.js deleted file mode 100644 index d0dd9fa828..0000000000 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/options/async-only-sync.fixture.js +++ /dev/null @@ -1 +0,0 @@ -it('throws an error', function() {}); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/options/bail.fixture.js b/tests/lib/mocha-3.1.0/test/integration/fixtures/options/bail.fixture.js deleted file mode 100644 index 32d17e9aa8..0000000000 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/options/bail.fixture.js +++ /dev/null @@ -1,21 +0,0 @@ -describe('suite1', function() { - it('should display this spec', function() {}); - - it('should only display this error', function(done) { - throw new Error('this should be displayed'); - }); - - it('should not display this error', function(done) { - throw new Error('this should not be displayed'); - }); -}); - -describe('suite2', function() { - before(function(done) { - throw new Error('this hook should not be displayed'); - }); - - it('should not display this error', function(done) { - throw new Error('this should not be displayed'); - }); -}); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/options/delay-fail.fixture.js b/tests/lib/mocha-3.1.0/test/integration/fixtures/options/delay-fail.fixture.js deleted file mode 100644 index 1475c918d4..0000000000 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/options/delay-fail.fixture.js +++ /dev/null @@ -1,5 +0,0 @@ -setTimeout(function() { - throw new Error('oops'); - it('test', function() {}); - run(); -}, 100); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/options/grep.fixture.js b/tests/lib/mocha-3.1.0/test/integration/fixtures/options/grep.fixture.js deleted file mode 100644 index 94785dc7db..0000000000 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/options/grep.fixture.js +++ /dev/null @@ -1,17 +0,0 @@ -describe('grep', function() { - describe('Match', function() { - it('should run', function(){}); - it('should also run', function() {}); - }); - - describe('match', function() { - it('should run', function(){}); - it('should also run', function() {}); - }); - - describe('fail', function() { - it('should not be ran', function() { - throw new Error('Spec should not run'); - }); - }); -}); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/options/only/bdd.fixture.js b/tests/lib/mocha-3.1.0/test/integration/fixtures/options/only/bdd.fixture.js deleted file mode 100644 index 783ce19b0b..0000000000 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/options/only/bdd.fixture.js +++ /dev/null @@ -1,71 +0,0 @@ -describe.only('should run this suite', function() { - it('should run this test', function() {}); - - it('should run this test', function() {}); - - it('should run this test', function() {}); -}); - -describe('should not run this suite', function() { - it('should not run this test', function() { - (true).should.equal(false); - }); - - it('should not run this test', function() { - (true).should.equal(false); - }); - - it('should not run this test', function() { - (true).should.equal(false); - }); -}); - -describe.only('should run this suite too', function() { - describe('should run this nested suite', function () { - it('should run this test', function() {}); - - it('should run this test', function() {}); - - it('should run this test', function() {}); - }); -}); - -describe.only('should run this suite, even', function() { - describe('should run this nested suite, even', function () { - describe('should run this doubly-nested suite!', function () { - it('should run this test', function() {}); - - it('should run this test', function() {}); - - it('should run this test', function() {}); - }); - }); -}); - - -describe('should run this suite with an exclusive test', function() { - it.only('should run this test', function () {}); - - describe('should not run this nested suite', function () { - describe.only('should not run this doubly-nested suite', function () { - it('should not run this test', function() {}); - - it('should not run this test', function() {}); - - it('should not run this test', function() {}); - }); - }); -}); - -describe('should run this suite with an exclusive test (reverse order)', function() { - describe('should not run this nested suite', function () { - describe.only('should not run this doubly-nested suite', function () { - it('should not run this test', function() {}); - - it('should not run this test', function() {}); - - it('should not run this test', function() {}); - }); - }); - it.only('should run this test', function () {}); -}); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/options/only/qunit.fixture.js b/tests/lib/mocha-3.1.0/test/integration/fixtures/options/only/qunit.fixture.js deleted file mode 100644 index 9fa95f440b..0000000000 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/options/only/qunit.fixture.js +++ /dev/null @@ -1,26 +0,0 @@ -suite.only('should run all tests in this suite'); - -test('should run this test #1', function() {}); - -test('should run this test #2', function() {}); - -test('should run this test #3', function() {}); - -test('should run this test #4', function() {}); - -test('should run this test #5', function() {}); - - -suite('should not run any of this suite\'s tests'); - -test('should not run this test', function() { - (false).should.equal(true); -}); - -test('should not run this test', function() { - (false).should.equal(true); -}); - -test('should not run this test', function() { - (false).should.equal(true); -});
\ No newline at end of file diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/options/only/tdd.fixture.js b/tests/lib/mocha-3.1.0/test/integration/fixtures/options/only/tdd.fixture.js deleted file mode 100644 index 129a9e5d74..0000000000 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/options/only/tdd.fixture.js +++ /dev/null @@ -1,35 +0,0 @@ -suite.only('should run all tests in this tdd suite', function() { - test('should run this test #1', function() {}); - - test('should run this test #2', function() {}); - - test('should run this test #3', function() {}); - - test('should run this test #4', function() {}); -}); - -suite('should not run this suite', function() { - test('should not run this test', function() { - (true).should.equal(false); - }); - - test('should not run this test', function() { - (true).should.equal(false); - }); - - test('should not run this test', function() { - (true).should.equal(false); - }); -}); - -suite.only('should run this suite too', function() { - suite('should run this nested suite', function () { - test('should run this test', function() {}); - - test('should run this test', function() {}); - - test('should run this test', function() {}); - - test('should run this test', function() {}); - }); -}); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/options/sort-beta.fixture.js b/tests/lib/mocha-3.1.0/test/integration/fixtures/options/sort-beta.fixture.js deleted file mode 100644 index 0951f49038..0000000000 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/options/sort-beta.fixture.js +++ /dev/null @@ -1,5 +0,0 @@ -describe('beta', function(){ - it('should be executed second', function(){ - global.beta = 1; - }); -}); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/passing.fixture.js b/tests/lib/mocha-3.1.0/test/integration/fixtures/passing.fixture.js deleted file mode 100644 index df91b3e501..0000000000 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/passing.fixture.js +++ /dev/null @@ -1,11 +0,0 @@ -var assert = require('assert'); - -describe('suite', function() { - it('test1', function() { - assert(true); - }); - - it('test2', function() { - assert(true); - }); -}); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/pending/skip-async-before.fixture.js b/tests/lib/mocha-3.1.0/test/integration/fixtures/pending/skip-async-before.fixture.js deleted file mode 100644 index 114db36d88..0000000000 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/pending/skip-async-before.fixture.js +++ /dev/null @@ -1,16 +0,0 @@ -describe('skip in before', function() { - before(function(done) { - var self = this; - setTimeout(function() { - self.skip(); - }, 50); - }); - - it('should never run this test', function() { - throw new Error('never thrown'); - }); - - it('should never run this test', function() { - throw new Error('never thrown'); - }); -}); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/pending/skip-async-beforeEach.fixture.js b/tests/lib/mocha-3.1.0/test/integration/fixtures/pending/skip-async-beforeEach.fixture.js deleted file mode 100644 index b8db22b94a..0000000000 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/pending/skip-async-beforeEach.fixture.js +++ /dev/null @@ -1,16 +0,0 @@ -describe('skip in beforeEach', function() { - beforeEach(function(done) { - var self = this; - setTimeout(function() { - self.skip(); - }, 50); - }); - - it('should never run this test', function() { - throw new Error('never thrown'); - }); - - it('should never run this test', function() { - throw new Error('never thrown'); - }); -}); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/pending/skip-async-spec.fixture.js b/tests/lib/mocha-3.1.0/test/integration/fixtures/pending/skip-async-spec.fixture.js deleted file mode 100644 index 6096c59d2a..0000000000 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/pending/skip-async-spec.fixture.js +++ /dev/null @@ -1,12 +0,0 @@ -describe('skip in test', function() { - it('should skip async', function(done) { - var self = this; - setTimeout(function() { - self.skip(); - }, 50); - }); - - it('should run other tests in the suite', function() { - // Do nothing - }); -}); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/pending/skip-sync-before.fixture.js b/tests/lib/mocha-3.1.0/test/integration/fixtures/pending/skip-sync-before.fixture.js deleted file mode 100644 index 35152e27f4..0000000000 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/pending/skip-sync-before.fixture.js +++ /dev/null @@ -1,13 +0,0 @@ -describe('skip in before', function() { - before(function() { - this.skip(); - }); - - it('should never run this test', function() { - throw new Error('never thrown'); - }); - - it('should never run this test', function() { - throw new Error('never thrown'); - }); -}); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/pending/skip-sync-beforeEach.fixture.js b/tests/lib/mocha-3.1.0/test/integration/fixtures/pending/skip-sync-beforeEach.fixture.js deleted file mode 100644 index 8d1c442ce2..0000000000 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/pending/skip-sync-beforeEach.fixture.js +++ /dev/null @@ -1,13 +0,0 @@ -describe('skip in beforeEach', function() { - beforeEach(function() { - this.skip(); - }); - - it('should never run this test', function() { - throw new Error('never thrown'); - }); - - it('should never run this test', function() { - throw new Error('never thrown'); - }); -}); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/pending/skip-sync-spec.fixture.js b/tests/lib/mocha-3.1.0/test/integration/fixtures/pending/skip-sync-spec.fixture.js deleted file mode 100644 index e2bbb739b3..0000000000 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/pending/skip-sync-spec.fixture.js +++ /dev/null @@ -1,10 +0,0 @@ -describe('skip in test', function() { - it('should skip immediately', function() { - this.skip(); - throw new Error('never thrown'); - }); - - it('should run other tests in the suite', function() { - // Do nothing - }); -}); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/pending/spec.fixture.js b/tests/lib/mocha-3.1.0/test/integration/fixtures/pending/spec.fixture.js deleted file mode 100644 index 084dd33588..0000000000 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/pending/spec.fixture.js +++ /dev/null @@ -1,3 +0,0 @@ -describe('suite', function() { - it('pending spec'); -}); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/regression/1794/issue-1794.fixture.js b/tests/lib/mocha-3.1.0/test/integration/fixtures/regression/1794/issue-1794.fixture.js deleted file mode 100644 index 1a1637f30a..0000000000 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/regression/1794/issue-1794.fixture.js +++ /dev/null @@ -1,3 +0,0 @@ -test('pass', function() { - // pass -}); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/regression/issue-1327.fixture.js b/tests/lib/mocha-3.1.0/test/integration/fixtures/regression/issue-1327.fixture.js deleted file mode 100644 index 43d5553762..0000000000 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/regression/issue-1327.fixture.js +++ /dev/null @@ -1,15 +0,0 @@ -it('test 1', function() { - console.log('testbody1'); - process.nextTick(function() { - throw 'Too bad'; - }); -}); - -it('test 2', function() { - console.log('testbody2'); -}); - -it('test 3', function() { - console.log('testbody3'); - throw new Error('OUCH'); -}); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/regression/issue-2406.fixture.js b/tests/lib/mocha-3.1.0/test/integration/fixtures/regression/issue-2406.fixture.js deleted file mode 100644 index c800228f1e..0000000000 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/regression/issue-2406.fixture.js +++ /dev/null @@ -1,15 +0,0 @@ -describe('outer describe', function() { - it('should not run this test', function() {}); - describe('this suite should not run', function() { - it('should not run this test', function() {}); - }); - describe.only('this .only suite should run', function() { - describe('this suite should run', function() { - it('should run this test in a nested suite', function() {}); - }); - it('should run this test', function() {}); - }); - describe('this suite should not run', function() { - it('should not run this test', function() {}); - }); -}); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/regression/issue-2417.fixture.js b/tests/lib/mocha-3.1.0/test/integration/fixtures/regression/issue-2417.fixture.js deleted file mode 100644 index e14aab09db..0000000000 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/regression/issue-2417.fixture.js +++ /dev/null @@ -1,7 +0,0 @@ -describe('outer describe', function() { - describe.only('outer describe.only', function() { - it.only('inner it.only', function() { - // should run and exit without error - }); - }); -}); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/timeout.fixture.js b/tests/lib/mocha-3.1.0/test/integration/fixtures/timeout.fixture.js deleted file mode 100644 index d8c99b2bc3..0000000000 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/timeout.fixture.js +++ /dev/null @@ -1,17 +0,0 @@ -describe('timeout', function(){ - this.timeout(1); - - it('should be honored with sync suites', function() { - sleep(2); - }); - - it('should be honored with async suites', function(done) { - sleep(2); - done(); - }); - - function sleep(ms) { - var start = Date.now(); - while (start + ms > Date.now()); - } -}); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/uncaught-hook.fixture.js b/tests/lib/mocha-3.1.0/test/integration/fixtures/uncaught-hook.fixture.js deleted file mode 100644 index 9adcb3f726..0000000000 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/uncaught-hook.fixture.js +++ /dev/null @@ -1,15 +0,0 @@ -describe('uncaught', function() { - beforeEach(function(done) { - process.nextTick(function() { - throw new Error('oh noes'); - done(); - }); - }); - - it('test', function(done) { - process.nextTick(function() { - throw new Error("I'm uncaught!"); - done(); - }); - }); -}); diff --git a/tests/lib/mocha-3.1.0/test/reporters/json.spec.js b/tests/lib/mocha-3.1.0/test/reporters/json.spec.js deleted file mode 100644 index e7b8955757..0000000000 --- a/tests/lib/mocha-3.1.0/test/reporters/json.spec.js +++ /dev/null @@ -1,61 +0,0 @@ -var Mocha = require('../../') - , Suite = Mocha.Suite - , Runner = Mocha.Runner - , Test = Mocha.Test; - -describe('json reporter', function(){ - var suite, runner; - - beforeEach(function(){ - var mocha = new Mocha({ - reporter: 'json' - }); - suite = new Suite('JSON suite', 'root'); - runner = new Runner(suite); - var mochaReporter = new mocha._reporter(runner); - }); - - it('should have 1 test failure', function(done){ - var testTitle = 'json test 1'; - var error = { message: 'oh shit' }; - - suite.addTest(new Test(testTitle, function (done) { - done(new Error(error.message)); - })); - - runner.run(function(failureCount) { - failureCount.should.be.exactly(1); - runner.should.have.property('testResults'); - runner.testResults.should.have.property('failures'); - runner.testResults.failures.should.be.an.instanceOf(Array); - runner.testResults.failures.should.have.a.lengthOf(1); - - var failure = runner.testResults.failures[0]; - failure.should.have.property('title', testTitle); - failure.err.message.should.equal(error.message); - failure.should.have.properties('err'); - - done(); - }); - }); - - it('should have 1 test pending', function(done) { - var testTitle = 'json test 1'; - - suite.addTest(new Test(testTitle)); - - runner.run(function(failureCount) { - failureCount.should.be.exactly(0); - runner.should.have.property('testResults'); - runner.testResults.should.have.property('pending'); - runner.testResults.pending.should.be.an.instanceOf(Array); - runner.testResults.pending.should.have.a.lengthOf(1); - - var pending = runner.testResults.pending[0]; - pending.should.have.property('title', testTitle); - - done(); - }); - }) - -}); diff --git a/tests/lib/mocha-3.1.0/test/sanity/sanity.spec.js b/tests/lib/mocha-3.1.0/test/sanity/sanity.spec.js deleted file mode 100644 index 59d5896515..0000000000 --- a/tests/lib/mocha-3.1.0/test/sanity/sanity.spec.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var assert = require('assert'); - -describe('a production installation of Mocha', function() { - it('should be able to execute a test', function() { - assert.ok(true); - }); -}); diff --git a/tests/lib/mocha-3.1.0/.editorconfig b/tests/lib/mocha-3.1.2/.editorconfig index e3a4859eeb..e3a4859eeb 100644 --- a/tests/lib/mocha-3.1.0/.editorconfig +++ b/tests/lib/mocha-3.1.2/.editorconfig diff --git a/tests/lib/mocha-3.1.2/.eslintignore b/tests/lib/mocha-3.1.2/.eslintignore new file mode 100644 index 0000000000..3e4b026a81 --- /dev/null +++ b/tests/lib/mocha-3.1.2/.eslintignore @@ -0,0 +1,2 @@ +lib/to-iso-string/**/*.js +mocha.js diff --git a/tests/lib/mocha-3.1.2/.eslintrc.yaml b/tests/lib/mocha-3.1.2/.eslintrc.yaml new file mode 100644 index 0000000000..911f22c681 --- /dev/null +++ b/tests/lib/mocha-3.1.2/.eslintrc.yaml @@ -0,0 +1,11 @@ +env: + node: true + browser: true +parserOptions: + ecmaVersion: 5 + sourceType: script +extends: semistandard +rules: + strict: + - error + - safe diff --git a/tests/lib/mocha-3.1.0/.gitignore b/tests/lib/mocha-3.1.2/.gitignore index fa1c0b0ccf..fa1c0b0ccf 100644 --- a/tests/lib/mocha-3.1.0/.gitignore +++ b/tests/lib/mocha-3.1.2/.gitignore diff --git a/tests/lib/mocha-3.1.0/.mailmap b/tests/lib/mocha-3.1.2/.mailmap index 528a26775e..528a26775e 100644 --- a/tests/lib/mocha-3.1.0/.mailmap +++ b/tests/lib/mocha-3.1.2/.mailmap diff --git a/tests/lib/mocha-3.1.0/.npmignore b/tests/lib/mocha-3.1.2/.npmignore index e3216decb2..e3216decb2 100644 --- a/tests/lib/mocha-3.1.0/.npmignore +++ b/tests/lib/mocha-3.1.2/.npmignore diff --git a/tests/lib/mocha-3.1.0/.travis.yml b/tests/lib/mocha-3.1.2/.travis.yml index 29b4c419e5..29b4c419e5 100644 --- a/tests/lib/mocha-3.1.0/.travis.yml +++ b/tests/lib/mocha-3.1.2/.travis.yml diff --git a/tests/lib/mocha-3.1.0/CHANGELOG.md b/tests/lib/mocha-3.1.2/CHANGELOG.md index 27d04fac00..da0fb42933 100644 --- a/tests/lib/mocha-3.1.0/CHANGELOG.md +++ b/tests/lib/mocha-3.1.2/CHANGELOG.md @@ -1,3 +1,30 @@ +# 3.1.2 / 2016-10-10 + +## :bug: Bug Fix + +- [#2528]: Recovery gracefully if an `Error`'s `stack` property isn't writable ([@boneskull]) + +[#2528]: https://github.com/mochajs/mocha/issues/2528 + +# 3.1.1 / 2016-10-09 + +## :bug: Bug Fix + +- [#1417]: Don't report `done()` was called multiple times when it wasn't ([@frankleonrose]) + +## :nut_and_bolt: Other + +- [#2490]: Lint with [semistandard](https://npmjs.com/package/semistandard) config ([@makepanic]) +- [#2525]: Lint all `.js` files ([@boneskull]) +- [#2524]: Provide workaround for developers unable to run browser tests on macOS Sierra ([@boneskull]) + +[#1417]: https://github.com/mochajs/mocha/issues/1417 +[#2490]: https://github.com/mochajs/mocha/issues/2490 +[#2525]: https://github.com/mochajs/mocha/issues/2525 +[#2524]: https://github.com/mochajs/mocha/issues/2524 +[@makepanic]: https://github.com/makepanic +[@frankleonrose]: https://github.com/frankleonrose + # 3.1.0 / 2016-09-27 ## :tada: Enhancement @@ -1113,7 +1140,7 @@ Thanks @entertainyou, @SimenB, @just-paja for the heads-up. * Added js API. Closes #265 * Added: initial run of tests with `--watch`. Closes #345 * Added: mark `location` as a global on the CS. Closes #311 - * Added `markdown` reporter (GitHub flavour) + * Added `markdown` reporter (github flavour) * Added: scrolling menu to coverage.html. Closes #335 * Added source line to html report for Safari [Tyson Tate] * Added "min" reporter, useful for `--watch` [Jakub Nešetřil] diff --git a/tests/lib/mocha-3.1.0/CONTRIBUTING.md b/tests/lib/mocha-3.1.2/CONTRIBUTING.md index 6d172f0800..6d172f0800 100644 --- a/tests/lib/mocha-3.1.0/CONTRIBUTING.md +++ b/tests/lib/mocha-3.1.2/CONTRIBUTING.md diff --git a/tests/lib/mocha-3.1.0/LICENSE b/tests/lib/mocha-3.1.2/LICENSE index 9919641276..9919641276 100644 --- a/tests/lib/mocha-3.1.0/LICENSE +++ b/tests/lib/mocha-3.1.2/LICENSE diff --git a/tests/lib/mocha-3.1.0/Makefile b/tests/lib/mocha-3.1.2/Makefile index 25d84f5c1d..611211abde 100644 --- a/tests/lib/mocha-3.1.0/Makefile +++ b/tests/lib/mocha-3.1.2/Makefile @@ -25,7 +25,7 @@ clean: lint: @printf "==> [Test :: Lint]\n" - $(ESLINT) browser-entry.js index.js karma.conf.js bin/mocha bin/_mocha "lib/**/*.js" "scripts/**/*.js" test + $(ESLINT) . test-node: test-bdd test-tdd test-qunit test-exports test-unit test-integration test-jsapi test-compilers test-glob test-requires test-reporters test-only test-global-only diff --git a/tests/lib/mocha-3.1.0/README.md b/tests/lib/mocha-3.1.2/README.md index e2d0bb998a..e2d0bb998a 100644 --- a/tests/lib/mocha-3.1.0/README.md +++ b/tests/lib/mocha-3.1.2/README.md diff --git a/tests/lib/mocha-3.1.0/appveyor.yml b/tests/lib/mocha-3.1.2/appveyor.yml index 539b8b073d..539b8b073d 100644 --- a/tests/lib/mocha-3.1.0/appveyor.yml +++ b/tests/lib/mocha-3.1.2/appveyor.yml diff --git a/tests/lib/mocha-3.1.0/assets/mocha-banner-192.png b/tests/lib/mocha-3.1.2/assets/mocha-banner-192.png Binary files differindex 15e076e119..15e076e119 100644 --- a/tests/lib/mocha-3.1.0/assets/mocha-banner-192.png +++ b/tests/lib/mocha-3.1.2/assets/mocha-banner-192.png diff --git a/tests/lib/mocha-3.1.0/assets/mocha-banner.svg b/tests/lib/mocha-3.1.2/assets/mocha-banner.svg index 9f54009600..9f54009600 100644 --- a/tests/lib/mocha-3.1.0/assets/mocha-banner.svg +++ b/tests/lib/mocha-3.1.2/assets/mocha-banner.svg diff --git a/tests/lib/mocha-3.1.0/assets/mocha-logo-128.png b/tests/lib/mocha-3.1.2/assets/mocha-logo-128.png Binary files differindex d4dbf34603..d4dbf34603 100644 --- a/tests/lib/mocha-3.1.0/assets/mocha-logo-128.png +++ b/tests/lib/mocha-3.1.2/assets/mocha-logo-128.png diff --git a/tests/lib/mocha-3.1.0/assets/mocha-logo-192.png b/tests/lib/mocha-3.1.2/assets/mocha-logo-192.png Binary files differindex 69fbbff090..69fbbff090 100644 --- a/tests/lib/mocha-3.1.0/assets/mocha-logo-192.png +++ b/tests/lib/mocha-3.1.2/assets/mocha-logo-192.png diff --git a/tests/lib/mocha-3.1.0/assets/mocha-logo-64.png b/tests/lib/mocha-3.1.2/assets/mocha-logo-64.png Binary files differindex 10403ff294..10403ff294 100644 --- a/tests/lib/mocha-3.1.0/assets/mocha-logo-64.png +++ b/tests/lib/mocha-3.1.2/assets/mocha-logo-64.png diff --git a/tests/lib/mocha-3.1.0/assets/mocha-logo.svg b/tests/lib/mocha-3.1.2/assets/mocha-logo.svg index e907e3167e..e907e3167e 100644 --- a/tests/lib/mocha-3.1.0/assets/mocha-logo.svg +++ b/tests/lib/mocha-3.1.2/assets/mocha-logo.svg diff --git a/tests/lib/mocha-3.1.0/bin/.eslintrc b/tests/lib/mocha-3.1.2/bin/.eslintrc index db7424631c..db7424631c 100644 --- a/tests/lib/mocha-3.1.0/bin/.eslintrc +++ b/tests/lib/mocha-3.1.2/bin/.eslintrc diff --git a/tests/lib/mocha-3.1.0/bin/_mocha b/tests/lib/mocha-3.1.2/bin/_mocha index 1d3539e8f0..6cfc094ba1 100644 --- a/tests/lib/mocha-3.1.0/bin/_mocha +++ b/tests/lib/mocha-3.1.2/bin/_mocha @@ -1,4 +1,5 @@ #!/usr/bin/env node +'use strict'; /* eslint no-unused-vars: off */ @@ -114,7 +115,7 @@ program._name = 'mocha'; program .command('init <path>') .description('initialize a client-side mocha setup at <path>') - .action(function(path) { + .action(function (path) { var mkdir = require('mkdirp'); mkdir.sync(path); var css = fs.readFileSync(join(__dirname, '..', 'mocha.css')); @@ -129,13 +130,13 @@ program // --globals -program.on('globals', function(val) { +program.on('globals', function (val) { globals = globals.concat(list(val)); }); // --reporters -program.on('reporters', function() { +program.on('reporters', function () { console.log(); console.log(' dot - dot matrix'); console.log(' doc - html documentation'); @@ -148,7 +149,7 @@ program.on('reporters', function() { console.log(' xunit - xunit reporter'); console.log(' min - minimal reporter (great with --watch)'); console.log(' json-stream - newline delimited json events'); - console.log(' markdown - markdown documentation (GitHub flavour)'); + console.log(' markdown - markdown documentation (github flavour)'); console.log(' nyan - nyan cat!'); console.log(); process.exit(); @@ -156,9 +157,9 @@ program.on('reporters', function() { // --interfaces -program.on('interfaces', function() { +program.on('interfaces', function () { console.log(''); - interfaceNames.forEach(function(interfaceName) { + interfaceNames.forEach(function (interfaceName) { console.log(' ' + interfaceName); }); console.log(''); @@ -169,7 +170,7 @@ program.on('interfaces', function() { module.paths.push(cwd, join(cwd, 'node_modules')); -program.on('require', function(mod) { +program.on('require', function (mod) { var abs = exists(mod) || exists(mod + '.js'); if (abs) { mod = resolve(mod); @@ -194,7 +195,7 @@ Error.stackTraceLimit = Infinity; // TODO: config var reporterOptions = {}; if (program.reporterOptions !== undefined) { - program.reporterOptions.split(',').forEach(function(opt) { + program.reporterOptions.split(',').forEach(function (opt) { var L = opt.split('='); if (L.length > 2 || L.length === 0) { throw new Error("invalid reporter option '" + opt + "'"); @@ -324,7 +325,7 @@ if (program.retries) { // custom compiler support var extensions = ['js']; -program.compilers.forEach(function(c) { +program.compilers.forEach(function (c) { var idx = c.indexOf(':'); var ext = c.slice(0, idx); var mod = c.slice(idx + 1); @@ -339,7 +340,7 @@ program.compilers.forEach(function(c) { // requires -requires.forEach(function(mod) { +requires.forEach(function (mod) { require(mod); }); @@ -357,7 +358,7 @@ if (!args.length) { args.push('test'); } -args.forEach(function(arg) { +args.forEach(function (arg) { var newFiles; try { newFiles = utils.lookupFiles(arg, extensions, program.recursive); @@ -380,7 +381,7 @@ if (!files.length) { // resolve -files = files.map(function(path) { +files = files.map(function (path) { return resolve(path); }); @@ -398,7 +399,7 @@ var rerun; if (program.watch) { console.log(); hideCursor(); - process.on('SIGINT', function() { + process.on('SIGINT', function () { showCursor(); console.log('\n'); process.exit(130); @@ -407,11 +408,11 @@ if (program.watch) { var watchFiles = utils.files(cwd, [ 'js' ].concat(program.watchExtensions)); var runAgain = false; - loadAndRun = function loadAndRun() { + loadAndRun = function loadAndRun () { try { mocha.files = files; runAgain = false; - runner = mocha.run(function() { + runner = mocha.run(function () { runner = null; if (runAgain) { rerun(); @@ -422,15 +423,15 @@ if (program.watch) { } }; - purge = function purge() { - watchFiles.forEach(function(file) { + purge = function purge () { + watchFiles.forEach(function (file) { delete require.cache[file]; }); }; loadAndRun(); - rerun = function rerun() { + rerun = function rerun () { purge(); stop(); if (!program.grep) { @@ -442,7 +443,7 @@ if (program.watch) { loadAndRun(); }; - utils.watch(watchFiles, function() { + utils.watch(watchFiles, function () { runAgain = true; if (runner) { runner.abort(); @@ -457,17 +458,17 @@ if (program.watch) { runner = mocha.run(program.exit ? exit : exitLater); } -function exitLater(code) { - process.on('exit', function() { +function exitLater (code) { + process.on('exit', function () { process.exit(Math.min(code, 255)); }); } -function exit(code) { +function exit (code) { // flush output for Node.js Windows pipe bug // https://github.com/joyent/node/issues/6247 is just one bug example // https://github.com/visionmedia/mocha/issues/333 has a good discussion - function done() { + function done () { if (!(draining--)) { process.exit(Math.min(code, 255)); } @@ -476,7 +477,7 @@ function exit(code) { var draining = 0; var streams = [process.stdout, process.stderr]; - streams.forEach(function(stream) { + streams.forEach(function (stream) { // submit empty write request and wait for completion draining += 1; stream.write('', done); @@ -485,7 +486,7 @@ function exit(code) { done(); } -process.on('SIGINT', function() { +process.on('SIGINT', function () { runner.abort(); // This is a hack: @@ -498,7 +499,7 @@ process.on('SIGINT', function() { * Parse list. */ -function list(str) { +function list (str) { return str.split(/ *, */); } @@ -506,7 +507,7 @@ function list(str) { * Hide the cursor. */ -function hideCursor() { +function hideCursor () { process.stdout.write('\u001b[?25l'); } @@ -514,7 +515,7 @@ function hideCursor() { * Show the cursor. */ -function showCursor() { +function showCursor () { process.stdout.write('\u001b[?25h'); } @@ -522,7 +523,7 @@ function showCursor() { * Stop play()ing. */ -function stop() { +function stop () { process.stdout.write('\u001b[2K'); clearInterval(play.timer); } @@ -531,12 +532,12 @@ function stop() { * Play the given array of strings. */ -function play(arr, interval) { +function play (arr, interval) { var len = arr.length; interval = interval || 100; var i = 0; - play.timer = setInterval(function() { + play.timer = setInterval(function () { var str = arr[i++ % len]; process.stdout.write('\u001b[0G' + str); }, interval); diff --git a/tests/lib/mocha-3.1.0/bin/mocha b/tests/lib/mocha-3.1.2/bin/mocha index 0c16f0ee94..c6aaa97b00 100644 --- a/tests/lib/mocha-3.1.0/bin/mocha +++ b/tests/lib/mocha-3.1.2/bin/mocha @@ -1,5 +1,7 @@ #!/usr/bin/env node +'use strict'; + /** * This tiny wrapper file checks for known node flags and appends them * when found, before invoking the "real" _mocha(1) executable. @@ -14,7 +16,7 @@ var args = [path.join(__dirname, '_mocha')]; // Must be loaded here to handle node-specific options getOptions(); -process.argv.slice(2).forEach(function(arg) { +process.argv.slice(2).forEach(function (arg) { var flag = arg.split('=')[0]; switch (flag) { @@ -64,8 +66,8 @@ process.argv.slice(2).forEach(function(arg) { }); var proc = spawn(process.execPath, args, { stdio: 'inherit' }); -proc.on('exit', function(code, signal) { - process.on('exit', function() { +proc.on('exit', function (code, signal) { + process.on('exit', function () { if (signal) { process.kill(process.pid, signal); } else { @@ -75,7 +77,7 @@ proc.on('exit', function(code, signal) { }); // terminate children. -process.on('SIGINT', function() { +process.on('SIGINT', function () { proc.kill('SIGINT'); // calls runner.abort() proc.kill('SIGTERM'); // if that didn't work, we're probably in an infinite loop, so make it die. }); diff --git a/tests/lib/mocha-3.1.0/bin/options.js b/tests/lib/mocha-3.1.2/bin/options.js index 9d1a18a23e..be5a60c9c3 100644 --- a/tests/lib/mocha-3.1.0/bin/options.js +++ b/tests/lib/mocha-3.1.2/bin/options.js @@ -1,3 +1,5 @@ +'use strict'; + /** * Dependencies. */ @@ -14,17 +16,17 @@ module.exports = getOptions; * Get options. */ -function getOptions() { - var optsPath = process.argv.indexOf('--opts') !== -1 - ? process.argv[process.argv.indexOf('--opts') + 1] - : 'test/mocha.opts'; +function getOptions () { + var optsPath = process.argv.indexOf('--opts') === -1 + ? 'test/mocha.opts' + : process.argv[process.argv.indexOf('--opts') + 1]; try { var opts = fs.readFileSync(optsPath, 'utf8') .replace(/\\\s/g, '%20') .split(/\s/) .filter(Boolean) - .map(function(value) { + .map(function (value) { return value.replace(/%20/g, ' '); }); diff --git a/tests/lib/mocha-3.1.0/bower.json b/tests/lib/mocha-3.1.2/bower.json index e96cc9526d..e96cc9526d 100644 --- a/tests/lib/mocha-3.1.0/bower.json +++ b/tests/lib/mocha-3.1.2/bower.json diff --git a/tests/lib/mocha-3.1.0/browser-entry.js b/tests/lib/mocha-3.1.2/browser-entry.js index 789e686ae6..1d5ef5a1c4 100644 --- a/tests/lib/mocha-3.1.0/browser-entry.js +++ b/tests/lib/mocha-3.1.2/browser-entry.js @@ -1,4 +1,7 @@ +'use strict'; + /* eslint no-unused-vars: off */ +/* eslint-env commonjs */ /** * Shim process.stdout. @@ -35,12 +38,12 @@ var originalOnerrorHandler = global.onerror; * Revert to original onerror handler if previously defined. */ -process.removeListener = function(e, fn) { +process.removeListener = function (e, fn) { if (e === 'uncaughtException') { if (originalOnerrorHandler) { global.onerror = originalOnerrorHandler; } else { - global.onerror = function() {}; + global.onerror = function () {}; } var i = Mocha.utils.indexOf(uncaughtExceptionHandlers, fn); if (i !== -1) { @@ -53,9 +56,9 @@ process.removeListener = function(e, fn) { * Implements uncaughtException listener. */ -process.on = function(e, fn) { +process.on = function (e, fn) { if (e === 'uncaughtException') { - global.onerror = function(err, url, line) { + global.onerror = function (err, url, line) { fn(new Error(err + ' (' + url + ':' + line + ')')); return !mocha.allowUncaught; }; @@ -71,7 +74,7 @@ mocha.suite.removeAllListeners('pre-require'); var immediateQueue = []; var immediateTimeout; -function timeslice() { +function timeslice () { var immediateStart = new Date().getTime(); while (immediateQueue.length && (new Date().getTime() - immediateStart) < 100) { immediateQueue.shift()(); @@ -87,7 +90,7 @@ function timeslice() { * High-performance override of Runner.immediately. */ -Mocha.Runner.immediately = function(callback) { +Mocha.Runner.immediately = function (callback) { immediateQueue.push(callback); if (!immediateTimeout) { immediateTimeout = setTimeout(timeslice, 0); @@ -99,8 +102,8 @@ Mocha.Runner.immediately = function(callback) { * This is useful when running tests in a browser because window.onerror will * only receive the 'message' attribute of the Error. */ -mocha.throwError = function(err) { - Mocha.utils.forEach(uncaughtExceptionHandlers, function(fn) { +mocha.throwError = function (err) { + Mocha.utils.forEach(uncaughtExceptionHandlers, function (fn) { fn(err); }); throw err; @@ -111,7 +114,7 @@ mocha.throwError = function(err) { * Normally this would happen in Mocha.prototype.loadFiles. */ -mocha.ui = function(ui) { +mocha.ui = function (ui) { Mocha.prototype.ui.call(this, ui); this.suite.emit('pre-require', global, null, this); return this; @@ -121,7 +124,7 @@ mocha.ui = function(ui) { * Setup mocha with the given setting options. */ -mocha.setup = function(opts) { +mocha.setup = function (opts) { if (typeof opts === 'string') { opts = { ui: opts }; } @@ -137,7 +140,7 @@ mocha.setup = function(opts) { * Run mocha, returning the Runner. */ -mocha.run = function(fn) { +mocha.run = function (fn) { var options = mocha.options; mocha.globals('location'); @@ -152,7 +155,7 @@ mocha.run = function(fn) { mocha.invert(); } - return Mocha.prototype.run.call(mocha, function(err) { + return Mocha.prototype.run.call(mocha, function (err) { // The DOM Document is not available in Web Workers. var document = global.document; if (document && document.getElementById('mocha') && options.noHighlighting !== true) { diff --git a/tests/lib/mocha-3.1.0/editors/JavaScript mocha.tmbundle/Snippets/bdd - after each.tmSnippet b/tests/lib/mocha-3.1.2/editors/JavaScript mocha.tmbundle/Snippets/bdd - after each.tmSnippet index c722cfe8ae..c722cfe8ae 100755..100644 --- a/tests/lib/mocha-3.1.0/editors/JavaScript mocha.tmbundle/Snippets/bdd - after each.tmSnippet +++ b/tests/lib/mocha-3.1.2/editors/JavaScript mocha.tmbundle/Snippets/bdd - after each.tmSnippet diff --git a/tests/lib/mocha-3.1.0/editors/JavaScript mocha.tmbundle/Snippets/bdd - after.tmSnippet b/tests/lib/mocha-3.1.2/editors/JavaScript mocha.tmbundle/Snippets/bdd - after.tmSnippet index c0b1f6bd82..c0b1f6bd82 100755..100644 --- a/tests/lib/mocha-3.1.0/editors/JavaScript mocha.tmbundle/Snippets/bdd - after.tmSnippet +++ b/tests/lib/mocha-3.1.2/editors/JavaScript mocha.tmbundle/Snippets/bdd - after.tmSnippet diff --git a/tests/lib/mocha-3.1.0/editors/JavaScript mocha.tmbundle/Snippets/bdd - before each.tmSnippet b/tests/lib/mocha-3.1.2/editors/JavaScript mocha.tmbundle/Snippets/bdd - before each.tmSnippet index 14fa93b1b0..14fa93b1b0 100755..100644 --- a/tests/lib/mocha-3.1.0/editors/JavaScript mocha.tmbundle/Snippets/bdd - before each.tmSnippet +++ b/tests/lib/mocha-3.1.2/editors/JavaScript mocha.tmbundle/Snippets/bdd - before each.tmSnippet diff --git a/tests/lib/mocha-3.1.0/editors/JavaScript mocha.tmbundle/Snippets/bdd - before.tmSnippet b/tests/lib/mocha-3.1.2/editors/JavaScript mocha.tmbundle/Snippets/bdd - before.tmSnippet index 18b48c0eeb..18b48c0eeb 100755..100644 --- a/tests/lib/mocha-3.1.0/editors/JavaScript mocha.tmbundle/Snippets/bdd - before.tmSnippet +++ b/tests/lib/mocha-3.1.2/editors/JavaScript mocha.tmbundle/Snippets/bdd - before.tmSnippet diff --git a/tests/lib/mocha-3.1.0/editors/JavaScript mocha.tmbundle/Snippets/bdd - describe.tmSnippet b/tests/lib/mocha-3.1.2/editors/JavaScript mocha.tmbundle/Snippets/bdd - describe.tmSnippet index 041726c067..041726c067 100755..100644 --- a/tests/lib/mocha-3.1.0/editors/JavaScript mocha.tmbundle/Snippets/bdd - describe.tmSnippet +++ b/tests/lib/mocha-3.1.2/editors/JavaScript mocha.tmbundle/Snippets/bdd - describe.tmSnippet diff --git a/tests/lib/mocha-3.1.0/editors/JavaScript mocha.tmbundle/Snippets/bdd - it.tmSnippet b/tests/lib/mocha-3.1.2/editors/JavaScript mocha.tmbundle/Snippets/bdd - it.tmSnippet index 72a3b0ee3a..72a3b0ee3a 100755..100644 --- a/tests/lib/mocha-3.1.0/editors/JavaScript mocha.tmbundle/Snippets/bdd - it.tmSnippet +++ b/tests/lib/mocha-3.1.2/editors/JavaScript mocha.tmbundle/Snippets/bdd - it.tmSnippet diff --git a/tests/lib/mocha-3.1.0/editors/JavaScript mocha.tmbundle/Snippets/tdd - assert.tmSnippet b/tests/lib/mocha-3.1.2/editors/JavaScript mocha.tmbundle/Snippets/tdd - assert.tmSnippet index 38d78ce2ec..38d78ce2ec 100755..100644 --- a/tests/lib/mocha-3.1.0/editors/JavaScript mocha.tmbundle/Snippets/tdd - assert.tmSnippet +++ b/tests/lib/mocha-3.1.2/editors/JavaScript mocha.tmbundle/Snippets/tdd - assert.tmSnippet diff --git a/tests/lib/mocha-3.1.0/editors/JavaScript mocha.tmbundle/Snippets/tdd - assert_deepEqual.tmSnippet b/tests/lib/mocha-3.1.2/editors/JavaScript mocha.tmbundle/Snippets/tdd - assert_deepEqual.tmSnippet index 4204e4c4f2..4204e4c4f2 100755..100644 --- a/tests/lib/mocha-3.1.0/editors/JavaScript mocha.tmbundle/Snippets/tdd - assert_deepEqual.tmSnippet +++ b/tests/lib/mocha-3.1.2/editors/JavaScript mocha.tmbundle/Snippets/tdd - assert_deepEqual.tmSnippet diff --git a/tests/lib/mocha-3.1.0/editors/JavaScript mocha.tmbundle/Snippets/tdd - assert_equal.tmSnippet b/tests/lib/mocha-3.1.2/editors/JavaScript mocha.tmbundle/Snippets/tdd - assert_equal.tmSnippet index 8f09805968..8f09805968 100755..100644 --- a/tests/lib/mocha-3.1.0/editors/JavaScript mocha.tmbundle/Snippets/tdd - assert_equal.tmSnippet +++ b/tests/lib/mocha-3.1.2/editors/JavaScript mocha.tmbundle/Snippets/tdd - assert_equal.tmSnippet diff --git a/tests/lib/mocha-3.1.0/editors/JavaScript mocha.tmbundle/Snippets/tdd - assert_fail.tmSnippet b/tests/lib/mocha-3.1.2/editors/JavaScript mocha.tmbundle/Snippets/tdd - assert_fail.tmSnippet index 3e8dbe3b9e..3e8dbe3b9e 100755..100644 --- a/tests/lib/mocha-3.1.0/editors/JavaScript mocha.tmbundle/Snippets/tdd - assert_fail.tmSnippet +++ b/tests/lib/mocha-3.1.2/editors/JavaScript mocha.tmbundle/Snippets/tdd - assert_fail.tmSnippet diff --git a/tests/lib/mocha-3.1.0/editors/JavaScript mocha.tmbundle/Snippets/tdd - assert_isFunction.tmSnippet b/tests/lib/mocha-3.1.2/editors/JavaScript mocha.tmbundle/Snippets/tdd - assert_isFunction.tmSnippet index 903d7f6fdf..903d7f6fdf 100755..100644 --- a/tests/lib/mocha-3.1.0/editors/JavaScript mocha.tmbundle/Snippets/tdd - assert_isFunction.tmSnippet +++ b/tests/lib/mocha-3.1.2/editors/JavaScript mocha.tmbundle/Snippets/tdd - assert_isFunction.tmSnippet diff --git a/tests/lib/mocha-3.1.0/editors/JavaScript mocha.tmbundle/Snippets/tdd - setup.tmSnippet b/tests/lib/mocha-3.1.2/editors/JavaScript mocha.tmbundle/Snippets/tdd - setup.tmSnippet index a30e650187..a30e650187 100755..100644 --- a/tests/lib/mocha-3.1.0/editors/JavaScript mocha.tmbundle/Snippets/tdd - setup.tmSnippet +++ b/tests/lib/mocha-3.1.2/editors/JavaScript mocha.tmbundle/Snippets/tdd - setup.tmSnippet diff --git a/tests/lib/mocha-3.1.0/editors/JavaScript mocha.tmbundle/Snippets/tdd - suite.tmSnippet b/tests/lib/mocha-3.1.2/editors/JavaScript mocha.tmbundle/Snippets/tdd - suite.tmSnippet index 37cfd8a566..37cfd8a566 100755..100644 --- a/tests/lib/mocha-3.1.0/editors/JavaScript mocha.tmbundle/Snippets/tdd - suite.tmSnippet +++ b/tests/lib/mocha-3.1.2/editors/JavaScript mocha.tmbundle/Snippets/tdd - suite.tmSnippet diff --git a/tests/lib/mocha-3.1.0/editors/JavaScript mocha.tmbundle/Snippets/tdd - teardown.tmSnippet b/tests/lib/mocha-3.1.2/editors/JavaScript mocha.tmbundle/Snippets/tdd - teardown.tmSnippet index 68fd441016..68fd441016 100755..100644 --- a/tests/lib/mocha-3.1.0/editors/JavaScript mocha.tmbundle/Snippets/tdd - teardown.tmSnippet +++ b/tests/lib/mocha-3.1.2/editors/JavaScript mocha.tmbundle/Snippets/tdd - teardown.tmSnippet diff --git a/tests/lib/mocha-3.1.0/editors/JavaScript mocha.tmbundle/Snippets/tdd - test.tmSnippet b/tests/lib/mocha-3.1.2/editors/JavaScript mocha.tmbundle/Snippets/tdd - test.tmSnippet index 279da8900d..279da8900d 100755..100644 --- a/tests/lib/mocha-3.1.0/editors/JavaScript mocha.tmbundle/Snippets/tdd - test.tmSnippet +++ b/tests/lib/mocha-3.1.2/editors/JavaScript mocha.tmbundle/Snippets/tdd - test.tmSnippet diff --git a/tests/lib/mocha-3.1.0/editors/JavaScript mocha.tmbundle/info.plist b/tests/lib/mocha-3.1.2/editors/JavaScript mocha.tmbundle/info.plist index 16f6587a6c..16f6587a6c 100755..100644 --- a/tests/lib/mocha-3.1.0/editors/JavaScript mocha.tmbundle/info.plist +++ b/tests/lib/mocha-3.1.2/editors/JavaScript mocha.tmbundle/info.plist diff --git a/tests/lib/mocha-3.1.0/images/error.png b/tests/lib/mocha-3.1.2/images/error.png Binary files differindex a07a1ba5ef..a07a1ba5ef 100755..100644 --- a/tests/lib/mocha-3.1.0/images/error.png +++ b/tests/lib/mocha-3.1.2/images/error.png diff --git a/tests/lib/mocha-3.1.0/images/ok.png b/tests/lib/mocha-3.1.2/images/ok.png Binary files differindex b3623a5994..b3623a5994 100755..100644 --- a/tests/lib/mocha-3.1.0/images/ok.png +++ b/tests/lib/mocha-3.1.2/images/ok.png diff --git a/tests/lib/mocha-3.1.0/index.js b/tests/lib/mocha-3.1.2/index.js index d2b7d19609..d2b7d19609 100644 --- a/tests/lib/mocha-3.1.0/index.js +++ b/tests/lib/mocha-3.1.2/index.js diff --git a/tests/lib/mocha-3.1.0/karma.conf.js b/tests/lib/mocha-3.1.2/karma.conf.js index 4aa108b27d..8a85bf35cb 100644 --- a/tests/lib/mocha-3.1.0/karma.conf.js +++ b/tests/lib/mocha-3.1.2/karma.conf.js @@ -4,8 +4,9 @@ var fs = require('fs'); var path = require('path'); var mkdirp = require('mkdirp'); var baseBundleDirpath = path.join(__dirname, '.karma'); +var osName = require('os-name'); -module.exports = function(config) { +module.exports = function (config) { var bundleDirpath; var cfg = { frameworks: [ @@ -31,12 +32,12 @@ module.exports = function(config) { }, browserify: { debug: true, - configure: function configure(b) { + configure: function configure (b) { b.ignore('glob') .ignore('fs') .ignore('path') .ignore('supports-color') - .on('bundled', function(err, content) { + .on('bundled', function (err, content) { if (!err && bundleDirpath) { // write bundle to directory for debugging fs.writeFileSync(path.join(bundleDirpath, @@ -47,7 +48,7 @@ module.exports = function(config) { }, reporters: ['spec'], colors: true, - browsers: ['PhantomJS'], + browsers: [osName() === 'macOS Sierra' ? 'Chrome' : 'PhantomJS'], logLevel: config.LOG_INFO, client: { mocha: { @@ -70,8 +71,8 @@ module.exports = function(config) { if (env.SAUCE_USERNAME && env.SAUCE_ACCESS_KEY) { // correlate build/tunnel with Travis sauceConfig = { - build: 'TRAVIS #' + env.TRAVIS_BUILD_NUMBER - + ' (' + env.TRAVIS_BUILD_ID + ')', + build: 'TRAVIS #' + env.TRAVIS_BUILD_NUMBER + + ' (' + env.TRAVIS_BUILD_ID + ')', tunnelIdentifier: env.TRAVIS_JOB_NUMBER }; console.error('Configured SauceLabs'); @@ -124,7 +125,7 @@ module.exports = function(config) { config.set(cfg); }; -function addSauceTests(cfg) { +function addSauceTests (cfg) { cfg.reporters.push('saucelabs'); cfg.customLaunchers = { diff --git a/tests/lib/mocha-3.1.2/lib/browser/.eslintrc.yaml b/tests/lib/mocha-3.1.2/lib/browser/.eslintrc.yaml new file mode 100644 index 0000000000..d85f537d3b --- /dev/null +++ b/tests/lib/mocha-3.1.2/lib/browser/.eslintrc.yaml @@ -0,0 +1,4 @@ +env: + node: false + browser: false + commonjs: true diff --git a/tests/lib/mocha-3.1.2/lib/browser/debug.js b/tests/lib/mocha-3.1.2/lib/browser/debug.js new file mode 100644 index 0000000000..3d12160f1a --- /dev/null +++ b/tests/lib/mocha-3.1.2/lib/browser/debug.js @@ -0,0 +1,7 @@ +'use strict'; + +function noop () {} + +module.exports = function () { + return noop; +}; diff --git a/tests/lib/mocha-3.1.0/lib/browser/events.js b/tests/lib/mocha-3.1.2/lib/browser/events.js index b4342f6202..e46a9f5f05 100644 --- a/tests/lib/mocha-3.1.0/lib/browser/events.js +++ b/tests/lib/mocha-3.1.2/lib/browser/events.js @@ -1,3 +1,5 @@ +'use strict'; + /** * Module exports. */ @@ -16,7 +18,7 @@ var objToString = Object.prototype.toString; * @param {*} val The value to test. * @return {boolean} true if the value is an array, otherwise false. */ -function isArray(val) { +function isArray (val) { return objToString.call(val) === '[object Array]'; } @@ -25,7 +27,7 @@ function isArray(val) { * * @api public */ -function EventEmitter() {} +function EventEmitter () {} /** * Add a listener. @@ -35,7 +37,7 @@ function EventEmitter() {} * @param {Function} fn Event handler. * @return {EventEmitter} Emitter instance. */ -EventEmitter.prototype.on = function(name, fn) { +EventEmitter.prototype.on = function (name, fn) { if (!this.$events) { this.$events = {}; } @@ -61,10 +63,10 @@ EventEmitter.prototype.addListener = EventEmitter.prototype.on; * @param {Function} fn Event handler. * @return {EventEmitter} Emitter instance. */ -EventEmitter.prototype.once = function(name, fn) { +EventEmitter.prototype.once = function (name, fn) { var self = this; - function on() { + function on () { self.removeListener(name, on); fn.apply(this, arguments); } @@ -83,7 +85,7 @@ EventEmitter.prototype.once = function(name, fn) { * @param {Function} fn Event handler. * @return {EventEmitter} Emitter instance. */ -EventEmitter.prototype.removeListener = function(name, fn) { +EventEmitter.prototype.removeListener = function (name, fn) { if (this.$events && this.$events[name]) { var list = this.$events[name]; @@ -121,7 +123,7 @@ EventEmitter.prototype.removeListener = function(name, fn) { * @param {string} name Event name. * @return {EventEmitter} Emitter instance. */ -EventEmitter.prototype.removeAllListeners = function(name) { +EventEmitter.prototype.removeAllListeners = function (name) { if (name === undefined) { this.$events = {}; return this; @@ -141,7 +143,7 @@ EventEmitter.prototype.removeAllListeners = function(name) { * @param {string} name Event name. * @return {EventEmitter} Emitter instance. */ -EventEmitter.prototype.listeners = function(name) { +EventEmitter.prototype.listeners = function (name) { if (!this.$events) { this.$events = {}; } @@ -164,7 +166,7 @@ EventEmitter.prototype.listeners = function(name) { * @param {string} name Event name. * @return {boolean} true if at least one handler was invoked, else false. */ -EventEmitter.prototype.emit = function(name) { +EventEmitter.prototype.emit = function (name) { if (!this.$events) { return false; } diff --git a/tests/lib/mocha-3.1.0/lib/browser/progress.js b/tests/lib/mocha-3.1.2/lib/browser/progress.js index 3186b6ec50..2b23656b99 100644 --- a/tests/lib/mocha-3.1.0/lib/browser/progress.js +++ b/tests/lib/mocha-3.1.2/lib/browser/progress.js @@ -1,3 +1,5 @@ +'use strict'; + /** * Expose `Progress`. */ @@ -7,7 +9,7 @@ module.exports = Progress; /** * Initialize a new `Progress` indicator. */ -function Progress() { +function Progress () { this.percent = 0; this.size(0); this.fontSize(11); @@ -21,7 +23,7 @@ function Progress() { * @param {number} size * @return {Progress} Progress instance. */ -Progress.prototype.size = function(size) { +Progress.prototype.size = function (size) { this._size = size; return this; }; @@ -33,7 +35,7 @@ Progress.prototype.size = function(size) { * @param {string} text * @return {Progress} Progress instance. */ -Progress.prototype.text = function(text) { +Progress.prototype.text = function (text) { this._text = text; return this; }; @@ -45,7 +47,7 @@ Progress.prototype.text = function(text) { * @param {number} size * @return {Progress} Progress instance. */ -Progress.prototype.fontSize = function(size) { +Progress.prototype.fontSize = function (size) { this._fontSize = size; return this; }; @@ -56,7 +58,7 @@ Progress.prototype.fontSize = function(size) { * @param {string} family * @return {Progress} Progress instance. */ -Progress.prototype.font = function(family) { +Progress.prototype.font = function (family) { this._font = family; return this; }; @@ -67,7 +69,7 @@ Progress.prototype.font = function(family) { * @param {number} n * @return {Progress} Progress instance. */ -Progress.prototype.update = function(n) { +Progress.prototype.update = function (n) { this.percent = n; return this; }; @@ -78,7 +80,7 @@ Progress.prototype.update = function(n) { * @param {CanvasRenderingContext2d} ctx * @return {Progress} Progress instance. */ -Progress.prototype.draw = function(ctx) { +Progress.prototype.draw = function (ctx) { try { var percent = Math.min(this.percent, 100); var size = this._size; diff --git a/tests/lib/mocha-3.1.0/lib/browser/tty.js b/tests/lib/mocha-3.1.2/lib/browser/tty.js index 840d6699ee..c77f7e99a6 100644 --- a/tests/lib/mocha-3.1.0/lib/browser/tty.js +++ b/tests/lib/mocha-3.1.2/lib/browser/tty.js @@ -1,8 +1,10 @@ -exports.isatty = function isatty() { +'use strict'; + +exports.isatty = function isatty () { return true; }; -exports.getWindowSize = function getWindowSize() { +exports.getWindowSize = function getWindowSize () { if ('innerHeight' in global) { return [global.innerHeight, global.innerWidth]; } diff --git a/tests/lib/mocha-3.1.0/lib/context.js b/tests/lib/mocha-3.1.2/lib/context.js index 6d82fcadf4..019fe8891c 100644 --- a/tests/lib/mocha-3.1.0/lib/context.js +++ b/tests/lib/mocha-3.1.2/lib/context.js @@ -1,3 +1,5 @@ +'use strict'; + /** * Module dependencies. */ @@ -15,7 +17,7 @@ module.exports = Context; * * @api private */ -function Context() {} +function Context () {} /** * Set or get the context `Runnable` to `runnable`. @@ -24,7 +26,7 @@ function Context() {} * @param {Runnable} runnable * @return {Context} */ -Context.prototype.runnable = function(runnable) { +Context.prototype.runnable = function (runnable) { if (!arguments.length) { return this._runnable; } @@ -39,7 +41,7 @@ Context.prototype.runnable = function(runnable) { * @param {number} ms * @return {Context} self */ -Context.prototype.timeout = function(ms) { +Context.prototype.timeout = function (ms) { if (!arguments.length) { return this.runnable().timeout(); } @@ -54,7 +56,7 @@ Context.prototype.timeout = function(ms) { * @param {boolean} enabled * @return {Context} self */ -Context.prototype.enableTimeouts = function(enabled) { +Context.prototype.enableTimeouts = function (enabled) { this.runnable().enableTimeouts(enabled); return this; }; @@ -66,7 +68,7 @@ Context.prototype.enableTimeouts = function(enabled) { * @param {number} ms * @return {Context} self */ -Context.prototype.slow = function(ms) { +Context.prototype.slow = function (ms) { this.runnable().slow(ms); return this; }; @@ -77,7 +79,7 @@ Context.prototype.slow = function(ms) { * @api private * @return {Context} self */ -Context.prototype.skip = function() { +Context.prototype.skip = function () { this.runnable().skip(); return this; }; @@ -89,7 +91,7 @@ Context.prototype.skip = function() { * @param {number} n * @return {Context} self */ -Context.prototype.retries = function(n) { +Context.prototype.retries = function (n) { if (!arguments.length) { return this.runnable().retries(); } @@ -103,8 +105,8 @@ Context.prototype.retries = function(n) { * @api private * @return {string} */ -Context.prototype.inspect = function() { - return JSON.stringify(this, function(key, val) { +Context.prototype.inspect = function () { + return JSON.stringify(this, function (key, val) { return key === 'runnable' || key === 'test' ? undefined : val; }, 2); }; diff --git a/tests/lib/mocha-3.1.0/lib/hook.js b/tests/lib/mocha-3.1.2/lib/hook.js index 0417e013cd..392a4cfb4d 100644 --- a/tests/lib/mocha-3.1.0/lib/hook.js +++ b/tests/lib/mocha-3.1.2/lib/hook.js @@ -1,3 +1,5 @@ +'use strict'; + /** * Module dependencies. */ @@ -18,7 +20,7 @@ module.exports = Hook; * @param {Function} fn * @api private */ -function Hook(title, fn) { +function Hook (title, fn) { Runnable.call(this, title, fn); this.type = 'hook'; } @@ -35,7 +37,7 @@ inherits(Hook, Runnable); * @return {Error} * @api public */ -Hook.prototype.error = function(err) { +Hook.prototype.error = function (err) { if (!arguments.length) { err = this._error; this._error = null; diff --git a/tests/lib/mocha-3.1.0/lib/interfaces/bdd.js b/tests/lib/mocha-3.1.2/lib/interfaces/bdd.js index 830a5fe67a..33efc169a2 100644 --- a/tests/lib/mocha-3.1.0/lib/interfaces/bdd.js +++ b/tests/lib/mocha-3.1.2/lib/interfaces/bdd.js @@ -1,3 +1,5 @@ +'use strict'; + /** * Module dependencies. */ @@ -21,10 +23,10 @@ var Test = require('../test'); * * @param {Suite} suite Root suite. */ -module.exports = function(suite) { +module.exports = function (suite) { var suites = [suite]; - suite.on('pre-require', function(context, file, mocha) { + suite.on('pre-require', function (context, file, mocha) { var common = require('./common')(suites, context, mocha); context.before = common.before; @@ -38,7 +40,7 @@ module.exports = function(suite) { * and/or tests. */ - context.describe = context.context = function(title, fn) { + context.describe = context.context = function (title, fn) { return common.suite.create({ title: title, file: file, @@ -50,7 +52,7 @@ module.exports = function(suite) { * Pending describe. */ - context.xdescribe = context.xcontext = context.describe.skip = function(title, fn) { + context.xdescribe = context.xcontext = context.describe.skip = function (title, fn) { return common.suite.skip({ title: title, file: file, @@ -62,7 +64,7 @@ module.exports = function(suite) { * Exclusive suite. */ - context.describe.only = function(title, fn) { + context.describe.only = function (title, fn) { return common.suite.only({ title: title, file: file, @@ -76,7 +78,7 @@ module.exports = function(suite) { * acting as a thunk. */ - context.it = context.specify = function(title, fn) { + context.it = context.specify = function (title, fn) { var suite = suites[0]; if (suite.isPending()) { fn = null; @@ -91,7 +93,7 @@ module.exports = function(suite) { * Exclusive test-case. */ - context.it.only = function(title, fn) { + context.it.only = function (title, fn) { return common.test.only(mocha, context.it(title, fn)); }; @@ -99,14 +101,14 @@ module.exports = function(suite) { * Pending test case. */ - context.xit = context.xspecify = context.it.skip = function(title) { + context.xit = context.xspecify = context.it.skip = function (title) { context.it(title); }; /** * Number of attempts to retry. */ - context.it.retries = function(n) { + context.it.retries = function (n) { context.retries(n); }; }); diff --git a/tests/lib/mocha-3.1.0/lib/interfaces/common.js b/tests/lib/mocha-3.1.2/lib/interfaces/common.js index 447458487b..aec6b0d29a 100644 --- a/tests/lib/mocha-3.1.0/lib/interfaces/common.js +++ b/tests/lib/mocha-3.1.2/lib/interfaces/common.js @@ -10,7 +10,7 @@ var Suite = require('../suite'); * @param {Mocha} mocha * @return {Object} An object containing common functions. */ -module.exports = function(suites, context, mocha) { +module.exports = function (suites, context, mocha) { return { /** * This is only present if flag --delay is passed into Mocha. It triggers @@ -19,8 +19,8 @@ module.exports = function(suites, context, mocha) { * @param {Suite} suite The root wuite. * @return {Function} A function which runs the root suite */ - runWithSuite: function runWithSuite(suite) { - return function run() { + runWithSuite: function runWithSuite (suite) { + return function run () { suite.run(); }; }, @@ -31,7 +31,7 @@ module.exports = function(suites, context, mocha) { * @param {string} name * @param {Function} fn */ - before: function(name, fn) { + before: function (name, fn) { suites[0].beforeAll(name, fn); }, @@ -41,7 +41,7 @@ module.exports = function(suites, context, mocha) { * @param {string} name * @param {Function} fn */ - after: function(name, fn) { + after: function (name, fn) { suites[0].afterAll(name, fn); }, @@ -51,7 +51,7 @@ module.exports = function(suites, context, mocha) { * @param {string} name * @param {Function} fn */ - beforeEach: function(name, fn) { + beforeEach: function (name, fn) { suites[0].beforeEach(name, fn); }, @@ -61,7 +61,7 @@ module.exports = function(suites, context, mocha) { * @param {string} name * @param {Function} fn */ - afterEach: function(name, fn) { + afterEach: function (name, fn) { suites[0].afterEach(name, fn); }, @@ -73,7 +73,7 @@ module.exports = function(suites, context, mocha) { * @param {Object} opts * @returns {Suite} */ - only: function only(opts) { + only: function only (opts) { mocha.options.hasOnly = true; opts.isOnly = true; return this.create(opts); @@ -86,7 +86,7 @@ module.exports = function(suites, context, mocha) { * @param {Object} opts * @returns {Suite} */ - skip: function skip(opts) { + skip: function skip (opts) { opts.pending = true; return this.create(opts); }, @@ -101,7 +101,7 @@ module.exports = function(suites, context, mocha) { * @param {boolean} [opts.isOnly] Is Suite exclusive? * @returns {Suite} */ - create: function create(opts) { + create: function create (opts) { var suite = Suite.create(suites[0], opts.title); suite.pending = Boolean(opts.pending); suite.file = opts.file; @@ -130,7 +130,7 @@ module.exports = function(suites, context, mocha) { * @param {Function} test * @returns {*} */ - only: function(mocha, test) { + only: function (mocha, test) { test.parent._onlyTests = test.parent._onlyTests.concat(test); mocha.options.hasOnly = true; return test; @@ -141,7 +141,7 @@ module.exports = function(suites, context, mocha) { * * @param {string} title */ - skip: function(title) { + skip: function (title) { context.test(title); }, @@ -150,7 +150,7 @@ module.exports = function(suites, context, mocha) { * * @param {number} n */ - retries: function(n) { + retries: function (n) { context.retries(n); } } diff --git a/tests/lib/mocha-3.1.0/lib/interfaces/exports.js b/tests/lib/mocha-3.1.2/lib/interfaces/exports.js index 7db6e47c97..debfaee3b8 100644 --- a/tests/lib/mocha-3.1.0/lib/interfaces/exports.js +++ b/tests/lib/mocha-3.1.2/lib/interfaces/exports.js @@ -1,3 +1,5 @@ +'use strict'; + /** * Module dependencies. */ @@ -22,12 +24,12 @@ var Test = require('../test'); * * @param {Suite} suite Root suite. */ -module.exports = function(suite) { +module.exports = function (suite) { var suites = [suite]; suite.on('require', visit); - function visit(obj, file) { + function visit (obj, file) { var suite; for (var key in obj) { if (typeof obj[key] === 'function') { diff --git a/tests/lib/mocha-3.1.0/lib/interfaces/index.js b/tests/lib/mocha-3.1.2/lib/interfaces/index.js index 4f825d15b2..0bd810abb7 100755..100644 --- a/tests/lib/mocha-3.1.0/lib/interfaces/index.js +++ b/tests/lib/mocha-3.1.2/lib/interfaces/index.js @@ -1,3 +1,5 @@ +'use strict'; + exports.bdd = require('./bdd'); exports.tdd = require('./tdd'); exports.qunit = require('./qunit'); diff --git a/tests/lib/mocha-3.1.0/lib/interfaces/qunit.js b/tests/lib/mocha-3.1.2/lib/interfaces/qunit.js index 22e8080e2e..44491db926 100644 --- a/tests/lib/mocha-3.1.0/lib/interfaces/qunit.js +++ b/tests/lib/mocha-3.1.2/lib/interfaces/qunit.js @@ -1,3 +1,5 @@ +'use strict'; + /** * Module dependencies. */ @@ -29,10 +31,10 @@ var Test = require('../test'); * * @param {Suite} suite Root suite. */ -module.exports = function(suite) { +module.exports = function (suite) { var suites = [suite]; - suite.on('pre-require', function(context, file, mocha) { + suite.on('pre-require', function (context, file, mocha) { var common = require('./common')(suites, context, mocha); context.before = common.before; @@ -44,7 +46,7 @@ module.exports = function(suite) { * Describe a "suite" with the given `title`. */ - context.suite = function(title) { + context.suite = function (title) { if (suites.length > 1) { suites.shift(); } @@ -59,7 +61,7 @@ module.exports = function(suite) { * Exclusive Suite. */ - context.suite.only = function(title) { + context.suite.only = function (title) { if (suites.length > 1) { suites.shift(); } @@ -76,7 +78,7 @@ module.exports = function(suite) { * acting as a thunk. */ - context.test = function(title, fn) { + context.test = function (title, fn) { var test = new Test(title, fn); test.file = file; suites[0].addTest(test); @@ -87,7 +89,7 @@ module.exports = function(suite) { * Exclusive test-case. */ - context.test.only = function(title, fn) { + context.test.only = function (title, fn) { return common.test.only(mocha, context.test(title, fn)); }; diff --git a/tests/lib/mocha-3.1.0/lib/interfaces/tdd.js b/tests/lib/mocha-3.1.2/lib/interfaces/tdd.js index 445e992213..253e221575 100644 --- a/tests/lib/mocha-3.1.0/lib/interfaces/tdd.js +++ b/tests/lib/mocha-3.1.2/lib/interfaces/tdd.js @@ -1,3 +1,5 @@ +'use strict'; + /** * Module dependencies. */ @@ -29,10 +31,10 @@ var Test = require('../test'); * * @param {Suite} suite Root suite. */ -module.exports = function(suite) { +module.exports = function (suite) { var suites = [suite]; - suite.on('pre-require', function(context, file, mocha) { + suite.on('pre-require', function (context, file, mocha) { var common = require('./common')(suites, context, mocha); context.setup = common.beforeEach; @@ -45,7 +47,7 @@ module.exports = function(suite) { * Describe a "suite" with the given `title` and callback `fn` containing * nested suites and/or tests. */ - context.suite = function(title, fn) { + context.suite = function (title, fn) { return common.suite.create({ title: title, file: file, @@ -56,7 +58,7 @@ module.exports = function(suite) { /** * Pending suite. */ - context.suite.skip = function(title, fn) { + context.suite.skip = function (title, fn) { return common.suite.skip({ title: title, file: file, @@ -67,7 +69,7 @@ module.exports = function(suite) { /** * Exclusive test-case. */ - context.suite.only = function(title, fn) { + context.suite.only = function (title, fn) { return common.suite.only({ title: title, file: file, @@ -79,7 +81,7 @@ module.exports = function(suite) { * Describe a specification or test-case with the given `title` and * callback `fn` acting as a thunk. */ - context.test = function(title, fn) { + context.test = function (title, fn) { var suite = suites[0]; if (suite.isPending()) { fn = null; @@ -94,7 +96,7 @@ module.exports = function(suite) { * Exclusive test-case. */ - context.test.only = function(title, fn) { + context.test.only = function (title, fn) { return common.test.only(mocha, context.test(title, fn)); }; diff --git a/tests/lib/mocha-3.1.0/lib/mocha.js b/tests/lib/mocha-3.1.2/lib/mocha.js index a649715191..dcc1492f5a 100644 --- a/tests/lib/mocha-3.1.0/lib/mocha.js +++ b/tests/lib/mocha-3.1.2/lib/mocha.js @@ -1,3 +1,5 @@ +'use strict'; + /*! * mocha * Copyright(c) 2011 TJ Holowaychuk <tj@vision-media.ca> @@ -49,7 +51,7 @@ exports.Test = require('./test'); * @param {string} name * @return {string} */ -function image(name) { +function image (name) { return path.join(__dirname, '../images', name + '.png'); } @@ -72,7 +74,7 @@ function image(name) { * @param {Object} options * @api public */ -function Mocha(options) { +function Mocha (options) { options = options || {}; this.files = []; this.options = options; @@ -107,7 +109,7 @@ function Mocha(options) { * @api public * @param {boolean} [bail] */ -Mocha.prototype.bail = function(bail) { +Mocha.prototype.bail = function (bail) { if (!arguments.length) { bail = true; } @@ -121,7 +123,7 @@ Mocha.prototype.bail = function(bail) { * @api public * @param {string} file */ -Mocha.prototype.addFile = function(file) { +Mocha.prototype.addFile = function (file) { this.files.push(file); return this; }; @@ -135,7 +137,7 @@ Mocha.prototype.addFile = function(file) { * @param {string|Function} reporter name or constructor * @param {Object} reporterOptions optional options */ -Mocha.prototype.reporter = function(reporter, reporterOptions) { +Mocha.prototype.reporter = function (reporter, reporterOptions) { if (typeof reporter === 'function') { this._reporter = reporter; } else { @@ -156,9 +158,9 @@ Mocha.prototype.reporter = function(reporter, reporterOptions) { } } if (!_reporter && reporter === 'teamcity') { - console.warn('The Teamcity reporter was moved to a package named ' - + 'mocha-teamcity-reporter ' - + '(https://npmjs.org/package/mocha-teamcity-reporter).'); + console.warn('The Teamcity reporter was moved to a package named ' + + 'mocha-teamcity-reporter ' + + '(https://npmjs.org/package/mocha-teamcity-reporter).'); } if (!_reporter) { throw new Error('invalid reporter "' + reporter + '"'); @@ -175,7 +177,7 @@ Mocha.prototype.reporter = function(reporter, reporterOptions) { * @api public * @param {string} bdd */ -Mocha.prototype.ui = function(name) { +Mocha.prototype.ui = function (name) { name = name || 'bdd'; this._ui = exports.interfaces[name]; if (!this._ui) { @@ -187,7 +189,7 @@ Mocha.prototype.ui = function(name) { } this._ui = this._ui(this.suite); - this.suite.on('pre-require', function(context) { + this.suite.on('pre-require', function (context) { exports.afterEach = context.afterEach || context.teardown; exports.after = context.after || context.suiteTeardown; exports.beforeEach = context.beforeEach || context.setup; @@ -211,10 +213,10 @@ Mocha.prototype.ui = function(name) { * * @api private */ -Mocha.prototype.loadFiles = function(fn) { +Mocha.prototype.loadFiles = function (fn) { var self = this; var suite = this.suite; - this.files.forEach(function(file) { + this.files.forEach(function (file) { file = path.resolve(file); suite.emit('pre-require', global, file, self); suite.emit('require', require(file), file, self); @@ -228,10 +230,10 @@ Mocha.prototype.loadFiles = function(fn) { * * @api private */ -Mocha.prototype._growl = function(runner, reporter) { +Mocha.prototype._growl = function (runner, reporter) { var notify = require('growl'); - runner.on('end', function() { + runner.on('end', function () { var stats = reporter.stats; if (stats.failures) { var msg = stats.failures + ' of ' + runner.total + ' tests failed'; @@ -253,7 +255,7 @@ Mocha.prototype._growl = function(runner, reporter) { * @param str * @returns {Mocha} */ -Mocha.prototype.fgrep = function(str) { +Mocha.prototype.fgrep = function (str) { return this.grep(new RegExp(escapeRe(str))); }; @@ -266,7 +268,7 @@ Mocha.prototype.fgrep = function(str) { * @param {RegExp|string} re * @return {Mocha} */ -Mocha.prototype.grep = function(re) { +Mocha.prototype.grep = function (re) { if (utils.isString(re)) { // extract args if it's regex-like, i.e: [string, pattern, flag] var arg = re.match(/^\/(.*)\/(g|i|)$|.*/); @@ -282,7 +284,7 @@ Mocha.prototype.grep = function(re) { * @return {Mocha} * @api public */ -Mocha.prototype.invert = function() { +Mocha.prototype.invert = function () { this.options.invert = true; return this; }; @@ -296,7 +298,7 @@ Mocha.prototype.invert = function() { * @param {boolean} ignore * @return {Mocha} */ -Mocha.prototype.ignoreLeaks = function(ignore) { +Mocha.prototype.ignoreLeaks = function (ignore) { this.options.ignoreLeaks = Boolean(ignore); return this; }; @@ -307,7 +309,7 @@ Mocha.prototype.ignoreLeaks = function(ignore) { * @return {Mocha} * @api public */ -Mocha.prototype.checkLeaks = function() { +Mocha.prototype.checkLeaks = function () { this.options.ignoreLeaks = false; return this; }; @@ -318,7 +320,7 @@ Mocha.prototype.checkLeaks = function() { * @return {Mocha} * @api public */ -Mocha.prototype.fullTrace = function() { +Mocha.prototype.fullTrace = function () { this.options.fullStackTrace = true; return this; }; @@ -329,7 +331,7 @@ Mocha.prototype.fullTrace = function() { * @return {Mocha} * @api public */ -Mocha.prototype.growl = function() { +Mocha.prototype.growl = function () { this.options.growl = true; return this; }; @@ -343,7 +345,7 @@ Mocha.prototype.growl = function() { * @param {Array|string} globals * @return {Mocha} */ -Mocha.prototype.globals = function(globals) { +Mocha.prototype.globals = function (globals) { this.options.globals = (this.options.globals || []).concat(globals); return this; }; @@ -357,7 +359,7 @@ Mocha.prototype.globals = function(globals) { * @param {boolean} colors * @return {Mocha} */ -Mocha.prototype.useColors = function(colors) { +Mocha.prototype.useColors = function (colors) { if (colors !== undefined) { this.options.useColors = colors; } @@ -373,7 +375,7 @@ Mocha.prototype.useColors = function(colors) { * @param {boolean} inlineDiffs * @return {Mocha} */ -Mocha.prototype.useInlineDiffs = function(inlineDiffs) { +Mocha.prototype.useInlineDiffs = function (inlineDiffs) { this.options.useInlineDiffs = inlineDiffs !== undefined && inlineDiffs; return this; }; @@ -387,7 +389,7 @@ Mocha.prototype.useInlineDiffs = function(inlineDiffs) { * @param {number} timeout * @return {Mocha} */ -Mocha.prototype.timeout = function(timeout) { +Mocha.prototype.timeout = function (timeout) { this.suite.timeout(timeout); return this; }; @@ -399,7 +401,7 @@ Mocha.prototype.timeout = function(timeout) { * @return {Mocha} * @api public */ -Mocha.prototype.retries = function(n) { +Mocha.prototype.retries = function (n) { this.suite.retries(n); return this; }; @@ -413,7 +415,7 @@ Mocha.prototype.retries = function(n) { * @param {number} slow * @return {Mocha} */ -Mocha.prototype.slow = function(slow) { +Mocha.prototype.slow = function (slow) { this.suite.slow(slow); return this; }; @@ -427,7 +429,7 @@ Mocha.prototype.slow = function(slow) { * @param {boolean} enabled * @return {Mocha} */ -Mocha.prototype.enableTimeouts = function(enabled) { +Mocha.prototype.enableTimeouts = function (enabled) { this.suite.enableTimeouts(arguments.length && enabled !== undefined ? enabled : true); return this; }; @@ -438,7 +440,7 @@ Mocha.prototype.enableTimeouts = function(enabled) { * @return {Mocha} * @api public */ -Mocha.prototype.asyncOnly = function() { +Mocha.prototype.asyncOnly = function () { this.options.asyncOnly = true; return this; }; @@ -448,7 +450,7 @@ Mocha.prototype.asyncOnly = function() { * * @api public */ -Mocha.prototype.noHighlighting = function() { +Mocha.prototype.noHighlighting = function () { this.options.noHighlighting = true; return this; }; @@ -459,7 +461,7 @@ Mocha.prototype.noHighlighting = function() { * @return {Mocha} * @api public */ -Mocha.prototype.allowUncaught = function() { +Mocha.prototype.allowUncaught = function () { this.options.allowUncaught = true; return this; }; @@ -468,7 +470,7 @@ Mocha.prototype.allowUncaught = function() { * Delay root suite execution. * @returns {Mocha} */ -Mocha.prototype.delay = function delay() { +Mocha.prototype.delay = function delay () { this.options.delay = true; return this; }; @@ -480,7 +482,7 @@ Mocha.prototype.delay = function delay() { * @param {Function} fn * @return {Runner} */ -Mocha.prototype.run = function(fn) { +Mocha.prototype.run = function (fn) { if (this.files.length) { this.loadFiles(); } @@ -508,7 +510,7 @@ Mocha.prototype.run = function(fn) { } exports.reporters.Base.inlineDiffs = options.useInlineDiffs; - function done(failures) { + function done (failures) { if (reporter.done) { reporter.done(failures, fn); } else { diff --git a/tests/lib/mocha-3.1.0/lib/ms.js b/tests/lib/mocha-3.1.2/lib/ms.js index 12fddc18ae..9590856052 100644 --- a/tests/lib/mocha-3.1.0/lib/ms.js +++ b/tests/lib/mocha-3.1.2/lib/ms.js @@ -1,3 +1,5 @@ +'use strict'; + /** * Helpers. */ @@ -20,7 +22,7 @@ var y = d * 365.25; * @param {Object} options * @return {string|number} */ -module.exports = function(val, options) { +module.exports = function (val, options) { options = options || {}; if (typeof val === 'string') { return parse(val); @@ -36,7 +38,7 @@ module.exports = function(val, options) { * @param {string} str * @return {number} */ -function parse(str) { +function parse (str) { var match = (/^((?:\d+)?\.?\d+) *(ms|seconds?|s|minutes?|m|hours?|h|days?|d|years?|y)?$/i).exec(str); if (!match) { return; @@ -78,7 +80,7 @@ function parse(str) { * @param {number} ms * @return {string} */ -function shortFormat(ms) { +function shortFormat (ms) { if (ms >= d) { return Math.round(ms / d) + 'd'; } @@ -101,12 +103,12 @@ function shortFormat(ms) { * @param {number} ms * @return {string} */ -function longFormat(ms) { - return plural(ms, d, 'day') - || plural(ms, h, 'hour') - || plural(ms, m, 'minute') - || plural(ms, s, 'second') - || ms + ' ms'; +function longFormat (ms) { + return plural(ms, d, 'day') || + plural(ms, h, 'hour') || + plural(ms, m, 'minute') || + plural(ms, s, 'second') || + ms + ' ms'; } /** @@ -117,7 +119,7 @@ function longFormat(ms) { * @param {number} n * @param {string} name */ -function plural(ms, n, name) { +function plural (ms, n, name) { if (ms < n) { return; } diff --git a/tests/lib/mocha-3.1.0/lib/pending.js b/tests/lib/mocha-3.1.2/lib/pending.js index c847e04e3f..c780104610 100644 --- a/tests/lib/mocha-3.1.0/lib/pending.js +++ b/tests/lib/mocha-3.1.2/lib/pending.js @@ -1,3 +1,4 @@ +'use strict'; /** * Expose `Pending`. @@ -10,6 +11,6 @@ module.exports = Pending; * * @param {string} message */ -function Pending(message) { +function Pending (message) { this.message = message; } diff --git a/tests/lib/mocha-3.1.0/lib/reporters/base.js b/tests/lib/mocha-3.1.2/lib/reporters/base.js index c754c5231f..205488426a 100644 --- a/tests/lib/mocha-3.1.0/lib/reporters/base.js +++ b/tests/lib/mocha-3.1.2/lib/reporters/base.js @@ -1,3 +1,5 @@ +'use strict'; + /** * Module dependencies. */ @@ -101,7 +103,7 @@ if (process.platform === 'win32') { * @return {string} * @api private */ -var color = exports.color = function(type, str) { +var color = exports.color = function (type, str) { if (!exports.useColors) { return String(str); } @@ -127,23 +129,23 @@ if (isatty) { */ exports.cursor = { - hide: function() { + hide: function () { isatty && process.stdout.write('\u001b[?25l'); }, - show: function() { + show: function () { isatty && process.stdout.write('\u001b[?25h'); }, - deleteLine: function() { + deleteLine: function () { isatty && process.stdout.write('\u001b[2K'); }, - beginningOfLine: function() { + beginningOfLine: function () { isatty && process.stdout.write('\u001b[0G'); }, - CR: function() { + CR: function () { if (isatty) { exports.cursor.deleteLine(); exports.cursor.beginningOfLine(); @@ -160,13 +162,13 @@ exports.cursor = { * @api public */ -exports.list = function(failures) { +exports.list = function (failures) { console.log(); - failures.forEach(function(test, i) { + failures.forEach(function (test, i) { // format - var fmt = color('error title', ' %s) %s:\n') - + color('error message', ' %s') - + color('error stack', '\n%s\n'); + var fmt = color('error title', ' %s) %s:\n') + + color('error message', ' %s') + + color('error stack', '\n%s\n'); // msg var msg; @@ -236,7 +238,7 @@ exports.list = function(failures) { * @api public */ -function Base(runner) { +function Base (runner) { var stats = this.stats = { suites: 0, tests: 0, passes: 0, pending: 0, failures: 0 }; var failures = this.failures = []; @@ -247,21 +249,21 @@ function Base(runner) { runner.stats = stats; - runner.on('start', function() { + runner.on('start', function () { stats.start = new Date(); }); - runner.on('suite', function(suite) { + runner.on('suite', function (suite) { stats.suites = stats.suites || 0; suite.root || stats.suites++; }); - runner.on('test end', function() { + runner.on('test end', function () { stats.tests = stats.tests || 0; stats.tests++; }); - runner.on('pass', function(test) { + runner.on('pass', function (test) { stats.passes = stats.passes || 0; if (test.duration > test.slow()) { @@ -275,19 +277,19 @@ function Base(runner) { stats.passes++; }); - runner.on('fail', function(test, err) { + runner.on('fail', function (test, err) { stats.failures = stats.failures || 0; stats.failures++; test.err = err; failures.push(test); }); - runner.on('end', function() { + runner.on('end', function () { stats.end = new Date(); stats.duration = new Date() - stats.start; }); - runner.on('pending', function() { + runner.on('pending', function () { stats.pending++; }); } @@ -298,16 +300,16 @@ function Base(runner) { * * @api public */ -Base.prototype.epilogue = function() { +Base.prototype.epilogue = function () { var stats = this.stats; var fmt; console.log(); // passes - fmt = color('bright pass', ' ') - + color('green', ' %d passing') - + color('light', ' (%s)'); + fmt = color('bright pass', ' ') + + color('green', ' %d passing') + + color('light', ' (%s)'); console.log(fmt, stats.passes || 0, @@ -315,8 +317,8 @@ Base.prototype.epilogue = function() { // pending if (stats.pending) { - fmt = color('pending', ' ') - + color('pending', ' %d pending'); + fmt = color('pending', ' ') + + color('pending', ' %d pending'); console.log(fmt, stats.pending); } @@ -342,7 +344,7 @@ Base.prototype.epilogue = function() { * @param {string} len * @return {string} */ -function pad(str, len) { +function pad (str, len) { str = String(str); return Array(len - str.length + 1).join(' ') + str; } @@ -355,26 +357,26 @@ function pad(str, len) { * @param {boolean} escape * @return {string} Diff */ -function inlineDiff(err, escape) { +function inlineDiff (err, escape) { var msg = errorDiff(err, 'WordsWithSpace', escape); // linenos var lines = msg.split('\n'); if (lines.length > 4) { var width = String(lines.length).length; - msg = lines.map(function(str, i) { + msg = lines.map(function (str, i) { return pad(++i, width) + ' |' + ' ' + str; }).join('\n'); } // legend - msg = '\n' - + color('diff removed', 'actual') - + ' ' - + color('diff added', 'expected') - + '\n\n' - + msg - + '\n'; + msg = '\n' + + color('diff removed', 'actual') + + ' ' + + color('diff added', 'expected') + + '\n\n' + + msg + + '\n'; // indent msg = msg.replace(/^/gm, ' '); @@ -389,9 +391,9 @@ function inlineDiff(err, escape) { * @param {boolean} escape * @return {string} The diff. */ -function unifiedDiff(err, escape) { +function unifiedDiff (err, escape) { var indent = ' '; - function cleanUp(line) { + function cleanUp (line) { if (escape) { line = escapeInvisibles(line); } @@ -401,7 +403,7 @@ function unifiedDiff(err, escape) { if (line[0] === '-') { return indent + colorLines('diff removed', line); } - if (line.match(/\@\@/)) { + if (line.match(/@@/)) { return null; } if (line.match(/\\ No newline/)) { @@ -409,16 +411,16 @@ function unifiedDiff(err, escape) { } return indent + line; } - function notBlank(line) { + function notBlank (line) { return typeof line !== 'undefined' && line !== null; } var msg = diff.createPatch('string', err.actual, err.expected); var lines = msg.split('\n').splice(4); - return '\n ' - + colorLines('diff added', '+ expected') + ' ' - + colorLines('diff removed', '- actual') - + '\n\n' - + lines.map(cleanUp).filter(notBlank).join('\n'); + return '\n ' + + colorLines('diff added', '+ expected') + ' ' + + colorLines('diff removed', '- actual') + + '\n\n' + + lines.map(cleanUp).filter(notBlank).join('\n'); } /** @@ -430,10 +432,10 @@ function unifiedDiff(err, escape) { * @param {boolean} escape * @return {string} */ -function errorDiff(err, type, escape) { +function errorDiff (err, type, escape) { var actual = escape ? escapeInvisibles(err.actual) : err.actual; var expected = escape ? escapeInvisibles(err.expected) : err.expected; - return diff['diff' + type](actual, expected).map(function(str) { + return diff['diff' + type](actual, expected).map(function (str) { if (str.added) { return colorLines('diff added', str.value); } @@ -451,7 +453,7 @@ function errorDiff(err, type, escape) { * @param {string} line * @return {string} */ -function escapeInvisibles(line) { +function escapeInvisibles (line) { return line.replace(/\t/g, '<tab>') .replace(/\r/g, '<CR>') .replace(/\n/g, '<LF>\n'); @@ -465,8 +467,8 @@ function escapeInvisibles(line) { * @param {string} str * @return {string} */ -function colorLines(name, str) { - return str.split('\n').map(function(str) { +function colorLines (name, str) { + return str.split('\n').map(function (str) { return color(name, str); }).join('\n'); } @@ -484,6 +486,6 @@ var objToString = Object.prototype.toString; * @param {Object} b * @return {boolean} */ -function sameType(a, b) { +function sameType (a, b) { return objToString.call(a) === objToString.call(b); } diff --git a/tests/lib/mocha-3.1.0/lib/reporters/doc.js b/tests/lib/mocha-3.1.2/lib/reporters/doc.js index 9f5c3f8a37..aad1d92522 100644 --- a/tests/lib/mocha-3.1.0/lib/reporters/doc.js +++ b/tests/lib/mocha-3.1.2/lib/reporters/doc.js @@ -1,3 +1,5 @@ +'use strict'; + /** * Module dependencies. */ @@ -17,16 +19,16 @@ exports = module.exports = Doc; * @param {Runner} runner * @api public */ -function Doc(runner) { +function Doc (runner) { Base.call(this, runner); var indents = 2; - function indent() { + function indent () { return Array(indents).join(' '); } - runner.on('suite', function(suite) { + runner.on('suite', function (suite) { if (suite.root) { return; } @@ -37,7 +39,7 @@ function Doc(runner) { console.log('%s<dl>', indent()); }); - runner.on('suite end', function(suite) { + runner.on('suite end', function (suite) { if (suite.root) { return; } @@ -47,13 +49,13 @@ function Doc(runner) { --indents; }); - runner.on('pass', function(test) { + runner.on('pass', function (test) { console.log('%s <dt>%s</dt>', indent(), utils.escape(test.title)); var code = utils.escape(utils.clean(test.body)); console.log('%s <dd><pre><code>%s</code></pre></dd>', indent(), code); }); - runner.on('fail', function(test, err) { + runner.on('fail', function (test, err) { console.log('%s <dt class="error">%s</dt>', indent(), utils.escape(test.title)); var code = utils.escape(utils.clean(test.body)); console.log('%s <dd class="error"><pre><code>%s</code></pre></dd>', indent(), code); diff --git a/tests/lib/mocha-3.1.0/lib/reporters/dot.js b/tests/lib/mocha-3.1.2/lib/reporters/dot.js index f8b4b41fe0..81e106edd0 100644 --- a/tests/lib/mocha-3.1.0/lib/reporters/dot.js +++ b/tests/lib/mocha-3.1.2/lib/reporters/dot.js @@ -1,3 +1,5 @@ +'use strict'; + /** * Module dependencies. */ @@ -18,25 +20,25 @@ exports = module.exports = Dot; * @api public * @param {Runner} runner */ -function Dot(runner) { +function Dot (runner) { Base.call(this, runner); var self = this; - var width = Base.window.width * .75 | 0; + var width = Base.window.width * 0.75 | 0; var n = -1; - runner.on('start', function() { + runner.on('start', function () { process.stdout.write('\n'); }); - runner.on('pending', function() { + runner.on('pending', function () { if (++n % width === 0) { process.stdout.write('\n '); } process.stdout.write(color('pending', Base.symbols.comma)); }); - runner.on('pass', function(test) { + runner.on('pass', function (test) { if (++n % width === 0) { process.stdout.write('\n '); } @@ -47,14 +49,14 @@ function Dot(runner) { } }); - runner.on('fail', function() { + runner.on('fail', function () { if (++n % width === 0) { process.stdout.write('\n '); } process.stdout.write(color('fail', Base.symbols.bang)); }); - runner.on('end', function() { + runner.on('end', function () { console.log(); self.epilogue(); }); diff --git a/tests/lib/mocha-3.1.0/lib/reporters/html.js b/tests/lib/mocha-3.1.2/lib/reporters/html.js index 51ba1ca722..9b9817c509 100644 --- a/tests/lib/mocha-3.1.0/lib/reporters/html.js +++ b/tests/lib/mocha-3.1.2/lib/reporters/html.js @@ -1,3 +1,5 @@ +'use strict'; + /* eslint-env browser */ /** @@ -32,12 +34,12 @@ exports = module.exports = HTML; * Stats template. */ -var statsTemplate = '<ul id="mocha-stats">' - + '<li class="progress"><canvas width="40" height="40"></canvas></li>' - + '<li class="passes"><a href="javascript:void(0);">passes:</a> <em>0</em></li>' - + '<li class="failures"><a href="javascript:void(0);">failures:</a> <em>0</em></li>' - + '<li class="duration">duration: <em>0</em>s</li>' - + '</ul>'; +var statsTemplate = '<ul id="mocha-stats">' + + '<li class="progress"><canvas width="40" height="40"></canvas></li>' + + '<li class="passes"><a href="javascript:void(0);">passes:</a> <em>0</em></li>' + + '<li class="failures"><a href="javascript:void(0);">failures:</a> <em>0</em></li>' + + '<li class="duration">duration: <em>0</em>s</li>' + + '</ul>'; /** * Initialize a new `HTML` reporter. @@ -45,7 +47,7 @@ var statsTemplate = '<ul id="mocha-stats">' * @api public * @param {Runner} runner */ -function HTML(runner) { +function HTML (runner) { Base.call(this, runner); var self = this; @@ -80,7 +82,7 @@ function HTML(runner) { } // pass toggle - on(passesLink, 'click', function(evt) { + on(passesLink, 'click', function (evt) { evt.preventDefault(); unhide(); var name = (/pass/).test(report.className) ? '' : ' pass'; @@ -91,7 +93,7 @@ function HTML(runner) { }); // failure toggle - on(failuresLink, 'click', function(evt) { + on(failuresLink, 'click', function (evt) { evt.preventDefault(); unhide(); var name = (/fail/).test(report.className) ? '' : ' fail'; @@ -108,7 +110,7 @@ function HTML(runner) { progress.size(40); } - runner.on('suite', function(suite) { + runner.on('suite', function (suite) { if (suite.root) { return; } @@ -123,7 +125,7 @@ function HTML(runner) { el.appendChild(stack[0]); }); - runner.on('suite end', function(suite) { + runner.on('suite end', function (suite) { if (suite.root) { updateStats(); return; @@ -131,17 +133,17 @@ function HTML(runner) { stack.shift(); }); - runner.on('pass', function(test) { + runner.on('pass', function (test) { var url = self.testURL(test); - var markup = '<li class="test pass %e"><h2>%e<span class="duration">%ems</span> ' - + '<a href="%s" class="replay">‣</a></h2></li>'; + var markup = '<li class="test pass %e"><h2>%e<span class="duration">%ems</span> ' + + '<a href="%s" class="replay">‣</a></h2></li>'; var el = fragment(markup, test.speed, test.title, test.duration, url); self.addCodeToggle(el, test.body); appendToStack(el); updateStats(); }); - runner.on('fail', function(test) { + runner.on('fail', function (test) { var el = fragment('<li class="test fail"><h2>%e <a href="%e" class="replay">‣</a></h2></li>', test.title, self.testURL(test)); var stackString; // Note: Includes leading newline @@ -181,20 +183,20 @@ function HTML(runner) { updateStats(); }); - runner.on('pending', function(test) { + runner.on('pending', function (test) { var el = fragment('<li class="test pass pending"><h2>%e</h2></li>', test.title); appendToStack(el); updateStats(); }); - function appendToStack(el) { + function appendToStack (el) { // Don't call .appendChild if #mocha-report was already .shift()'ed off the stack. if (stack[0]) { stack[0].appendChild(el); } } - function updateStats() { + function updateStats () { // TODO: add to stats var percent = stats.tests / runner.total * 100 | 0; if (progress) { @@ -215,7 +217,7 @@ function HTML(runner) { * @param {string} s * @return {string} A new URL. */ -function makeUrl(s) { +function makeUrl (s) { var search = window.location.search; // Remove previous grep query parameter if present @@ -231,7 +233,7 @@ function makeUrl(s) { * * @param {Object} [suite] */ -HTML.prototype.suiteURL = function(suite) { +HTML.prototype.suiteURL = function (suite) { return makeUrl(suite.fullTitle()); }; @@ -240,7 +242,7 @@ HTML.prototype.suiteURL = function(suite) { * * @param {Object} [test] */ -HTML.prototype.testURL = function(test) { +HTML.prototype.testURL = function (test) { return makeUrl(test.fullTitle()); }; @@ -250,10 +252,10 @@ HTML.prototype.testURL = function(test) { * @param {HTMLLIElement} el * @param {string} contents */ -HTML.prototype.addCodeToggle = function(el, contents) { +HTML.prototype.addCodeToggle = function (el, contents) { var h2 = el.getElementsByTagName('h2')[0]; - on(h2, 'click', function() { + on(h2, 'click', function () { pre.style.display = pre.style.display === 'none' ? 'block' : 'none'; }); @@ -267,7 +269,7 @@ HTML.prototype.addCodeToggle = function(el, contents) { * * @param {string} msg */ -function error(msg) { +function error (msg) { document.body.appendChild(fragment('<div id="mocha-error">%s</div>', msg)); } @@ -276,12 +278,12 @@ function error(msg) { * * @param {string} html */ -function fragment(html) { +function fragment (html) { var args = arguments; var div = document.createElement('div'); var i = 1; - div.innerHTML = html.replace(/%([se])/g, function(_, type) { + div.innerHTML = html.replace(/%([se])/g, function (_, type) { switch (type) { case 's': return String(args[i++]); case 'e': return escape(args[i++]); @@ -298,7 +300,7 @@ function fragment(html) { * * @param {text} classname */ -function hideSuitesWithout(classname) { +function hideSuitesWithout (classname) { var suites = document.getElementsByClassName('suite'); for (var i = 0; i < suites.length; i++) { var els = suites[i].getElementsByClassName(classname); @@ -311,7 +313,7 @@ function hideSuitesWithout(classname) { /** * Unhide .hidden suites. */ -function unhide() { +function unhide () { var els = document.getElementsByClassName('suite hidden'); for (var i = 0; i < els.length; ++i) { els[i].className = els[i].className.replace('suite hidden', 'suite'); @@ -324,7 +326,7 @@ function unhide() { * @param {HTMLElement} el * @param {string} contents */ -function text(el, contents) { +function text (el, contents) { if (el.textContent) { el.textContent = contents; } else { @@ -335,7 +337,7 @@ function text(el, contents) { /** * Listen on `event` with callback `fn`. */ -function on(el, event, fn) { +function on (el, event, fn) { if (el.addEventListener) { el.addEventListener(event, fn, false); } else { diff --git a/tests/lib/mocha-3.1.0/lib/reporters/index.js b/tests/lib/mocha-3.1.2/lib/reporters/index.js index 221a81d95b..d3b5481e41 100644 --- a/tests/lib/mocha-3.1.0/lib/reporters/index.js +++ b/tests/lib/mocha-3.1.2/lib/reporters/index.js @@ -1,3 +1,5 @@ +'use strict'; + // Alias exports to a their normalized format Mocha#reporter to prevent a need // for dynamic (try/catch) requires, which Browserify doesn't handle. exports.Base = exports.base = require('./base'); diff --git a/tests/lib/mocha-3.1.0/lib/reporters/json-stream.js b/tests/lib/mocha-3.1.2/lib/reporters/json-stream.js index f07f8657c0..6126e47ea1 100644 --- a/tests/lib/mocha-3.1.0/lib/reporters/json-stream.js +++ b/tests/lib/mocha-3.1.2/lib/reporters/json-stream.js @@ -1,3 +1,5 @@ +'use strict'; + /** * Module dependencies. */ @@ -17,28 +19,28 @@ exports = module.exports = List; * @api public * @param {Runner} runner */ -function List(runner) { +function List (runner) { Base.call(this, runner); var self = this; var total = runner.total; - runner.on('start', function() { + runner.on('start', function () { console.log(JSON.stringify(['start', { total: total }])); }); - runner.on('pass', function(test) { + runner.on('pass', function (test) { console.log(JSON.stringify(['pass', clean(test)])); }); - runner.on('fail', function(test, err) { + runner.on('fail', function (test, err) { test = clean(test); test.err = err.message; test.stack = err.stack || null; console.log(JSON.stringify(['fail', test])); }); - runner.on('end', function() { + runner.on('end', function () { process.stdout.write(JSON.stringify(['end', self.stats])); }); } @@ -51,7 +53,7 @@ function List(runner) { * @param {Object} test * @return {Object} */ -function clean(test) { +function clean (test) { return { title: test.title, fullTitle: test.fullTitle(), diff --git a/tests/lib/mocha-3.1.0/lib/reporters/json.js b/tests/lib/mocha-3.1.2/lib/reporters/json.js index cd9ec286b7..259a782121 100644 --- a/tests/lib/mocha-3.1.0/lib/reporters/json.js +++ b/tests/lib/mocha-3.1.2/lib/reporters/json.js @@ -1,3 +1,5 @@ +'use strict'; + /** * Module dependencies. */ @@ -16,7 +18,7 @@ exports = module.exports = JSONReporter; * @api public * @param {Runner} runner */ -function JSONReporter(runner) { +function JSONReporter (runner) { Base.call(this, runner); var self = this; @@ -25,23 +27,23 @@ function JSONReporter(runner) { var failures = []; var passes = []; - runner.on('test end', function(test) { + runner.on('test end', function (test) { tests.push(test); }); - runner.on('pass', function(test) { + runner.on('pass', function (test) { passes.push(test); }); - runner.on('fail', function(test) { + runner.on('fail', function (test) { failures.push(test); }); - runner.on('pending', function(test) { + runner.on('pending', function (test) { pending.push(test); }); - runner.on('end', function() { + runner.on('end', function () { var obj = { stats: self.stats, tests: tests.map(clean), @@ -64,7 +66,7 @@ function JSONReporter(runner) { * @param {Object} test * @return {Object} */ -function clean(test) { +function clean (test) { return { title: test.title, fullTitle: test.fullTitle(), @@ -81,9 +83,9 @@ function clean(test) { * @param {Error} err * @return {Object} */ -function errorJSON(err) { +function errorJSON (err) { var res = {}; - Object.getOwnPropertyNames(err).forEach(function(key) { + Object.getOwnPropertyNames(err).forEach(function (key) { res[key] = err[key]; }, err); return res; diff --git a/tests/lib/mocha-3.1.0/lib/reporters/landing.js b/tests/lib/mocha-3.1.2/lib/reporters/landing.js index b66b2000c1..b8c7b5f20c 100644 --- a/tests/lib/mocha-3.1.0/lib/reporters/landing.js +++ b/tests/lib/mocha-3.1.2/lib/reporters/landing.js @@ -1,3 +1,5 @@ +'use strict'; + /** * Module dependencies. */ @@ -37,28 +39,28 @@ Base.colors.runway = 90; * @api public * @param {Runner} runner */ -function Landing(runner) { +function Landing (runner) { Base.call(this, runner); var self = this; - var width = Base.window.width * .75 | 0; + var width = Base.window.width * 0.75 | 0; var total = runner.total; var stream = process.stdout; var plane = color('plane', '✈'); var crashed = -1; var n = 0; - function runway() { + function runway () { var buf = Array(width).join('-'); return ' ' + color('runway', buf); } - runner.on('start', function() { + runner.on('start', function () { stream.write('\n\n\n '); cursor.hide(); }); - runner.on('test end', function(test) { + runner.on('test end', function (test) { // check if the plane crashed var col = crashed === -1 ? width * ++n / total | 0 : crashed; @@ -79,7 +81,7 @@ function Landing(runner) { stream.write('\u001b[0m'); }); - runner.on('end', function() { + runner.on('end', function () { cursor.show(); console.log(); self.epilogue(); diff --git a/tests/lib/mocha-3.1.0/lib/reporters/list.js b/tests/lib/mocha-3.1.2/lib/reporters/list.js index 0e5f910d1f..2e54314e91 100644 --- a/tests/lib/mocha-3.1.0/lib/reporters/list.js +++ b/tests/lib/mocha-3.1.2/lib/reporters/list.js @@ -1,3 +1,5 @@ +'use strict'; + /** * Module dependencies. */ @@ -19,35 +21,35 @@ exports = module.exports = List; * @api public * @param {Runner} runner */ -function List(runner) { +function List (runner) { Base.call(this, runner); var self = this; var n = 0; - runner.on('start', function() { + runner.on('start', function () { console.log(); }); - runner.on('test', function(test) { + runner.on('test', function (test) { process.stdout.write(color('pass', ' ' + test.fullTitle() + ': ')); }); - runner.on('pending', function(test) { - var fmt = color('checkmark', ' -') - + color('pending', ' %s'); + runner.on('pending', function (test) { + var fmt = color('checkmark', ' -') + + color('pending', ' %s'); console.log(fmt, test.fullTitle()); }); - runner.on('pass', function(test) { - var fmt = color('checkmark', ' ' + Base.symbols.dot) - + color('pass', ' %s: ') - + color(test.speed, '%dms'); + runner.on('pass', function (test) { + var fmt = color('checkmark', ' ' + Base.symbols.dot) + + color('pass', ' %s: ') + + color(test.speed, '%dms'); cursor.CR(); console.log(fmt, test.fullTitle(), test.duration); }); - runner.on('fail', function(test) { + runner.on('fail', function (test) { cursor.CR(); console.log(color('fail', ' %d) %s'), ++n, test.fullTitle()); }); diff --git a/tests/lib/mocha-3.1.0/lib/reporters/markdown.js b/tests/lib/mocha-3.1.2/lib/reporters/markdown.js index 680c55d709..9c06616ea9 100644 --- a/tests/lib/mocha-3.1.0/lib/reporters/markdown.js +++ b/tests/lib/mocha-3.1.2/lib/reporters/markdown.js @@ -1,3 +1,5 @@ +'use strict'; + /** * Module dependencies. */ @@ -23,29 +25,29 @@ exports = module.exports = Markdown; * @api public * @param {Runner} runner */ -function Markdown(runner) { +function Markdown (runner) { Base.call(this, runner); var level = 0; var buf = ''; - function title(str) { + function title (str) { return Array(level).join('#') + ' ' + str; } - function mapTOC(suite, obj) { + function mapTOC (suite, obj) { var ret = obj; var key = SUITE_PREFIX + suite.title; obj = obj[key] = obj[key] || { suite: suite }; - suite.suites.forEach(function(suite) { + suite.suites.forEach(function (suite) { mapTOC(suite, obj); }); return ret; } - function stringifyTOC(obj, level) { + function stringifyTOC (obj, level) { ++level; var buf = ''; var link; @@ -63,25 +65,25 @@ function Markdown(runner) { return buf; } - function generateTOC(suite) { + function generateTOC (suite) { var obj = mapTOC(suite, {}); return stringifyTOC(obj, 0); } generateTOC(runner.suite); - runner.on('suite', function(suite) { + runner.on('suite', function (suite) { ++level; var slug = utils.slug(suite.fullTitle()); buf += '<a name="' + slug + '"></a>' + '\n'; buf += title(suite.title) + '\n'; }); - runner.on('suite end', function() { + runner.on('suite end', function () { --level; }); - runner.on('pass', function(test) { + runner.on('pass', function (test) { var code = utils.clean(test.body); buf += test.title + '.\n'; buf += '\n```js\n'; @@ -89,7 +91,7 @@ function Markdown(runner) { buf += '```\n\n'; }); - runner.on('end', function() { + runner.on('end', function () { process.stdout.write('# TOC\n'); process.stdout.write(generateTOC(runner.suite)); process.stdout.write(buf); diff --git a/tests/lib/mocha-3.1.0/lib/reporters/min.js b/tests/lib/mocha-3.1.2/lib/reporters/min.js index 2b48212ca8..0d772f9601 100644 --- a/tests/lib/mocha-3.1.0/lib/reporters/min.js +++ b/tests/lib/mocha-3.1.2/lib/reporters/min.js @@ -1,3 +1,5 @@ +'use strict'; + /** * Module dependencies. */ @@ -17,10 +19,10 @@ exports = module.exports = Min; * @api public * @param {Runner} runner */ -function Min(runner) { +function Min (runner) { Base.call(this, runner); - runner.on('start', function() { + runner.on('start', function () { // clear screen process.stdout.write('\u001b[2J'); // set cursor position diff --git a/tests/lib/mocha-3.1.0/lib/reporters/nyan.js b/tests/lib/mocha-3.1.2/lib/reporters/nyan.js index ba1b0509d9..1be49a97b9 100644 --- a/tests/lib/mocha-3.1.0/lib/reporters/nyan.js +++ b/tests/lib/mocha-3.1.2/lib/reporters/nyan.js @@ -1,3 +1,5 @@ +'use strict'; + /** * Module dependencies. */ @@ -18,11 +20,11 @@ exports = module.exports = NyanCat; * @api public */ -function NyanCat(runner) { +function NyanCat (runner) { Base.call(this, runner); var self = this; - var width = Base.window.width * .75 | 0; + var width = Base.window.width * 0.75 | 0; var nyanCatWidth = this.nyanCatWidth = 11; this.colorIndex = 0; @@ -33,24 +35,24 @@ function NyanCat(runner) { this.trajectories = [[], [], [], []]; this.trajectoryWidthMax = (width - nyanCatWidth); - runner.on('start', function() { + runner.on('start', function () { Base.cursor.hide(); self.draw(); }); - runner.on('pending', function() { + runner.on('pending', function () { self.draw(); }); - runner.on('pass', function() { + runner.on('pass', function () { self.draw(); }); - runner.on('fail', function() { + runner.on('fail', function () { self.draw(); }); - runner.on('end', function() { + runner.on('end', function () { Base.cursor.show(); for (var i = 0; i < self.numberOfLines; i++) { write('\n'); @@ -70,7 +72,7 @@ inherits(NyanCat, Base); * @api private */ -NyanCat.prototype.draw = function() { +NyanCat.prototype.draw = function () { this.appendRainbow(); this.drawScoreboard(); this.drawRainbow(); @@ -85,10 +87,10 @@ NyanCat.prototype.draw = function() { * @api private */ -NyanCat.prototype.drawScoreboard = function() { +NyanCat.prototype.drawScoreboard = function () { var stats = this.stats; - function draw(type, n) { + function draw (type, n) { write(' '); write(Base.color(type, n)); write('\n'); @@ -108,7 +110,7 @@ NyanCat.prototype.drawScoreboard = function() { * @api private */ -NyanCat.prototype.appendRainbow = function() { +NyanCat.prototype.appendRainbow = function () { var segment = this.tick ? '_' : '-'; var rainbowified = this.rainbowify(segment); @@ -127,10 +129,10 @@ NyanCat.prototype.appendRainbow = function() { * @api private */ -NyanCat.prototype.drawRainbow = function() { +NyanCat.prototype.drawRainbow = function () { var self = this; - this.trajectories.forEach(function(line) { + this.trajectories.forEach(function (line) { write('\u001b[' + self.scoreboardWidth + 'C'); write(line.join('')); write('\n'); @@ -144,7 +146,7 @@ NyanCat.prototype.drawRainbow = function() { * * @api private */ -NyanCat.prototype.drawNyanCat = function() { +NyanCat.prototype.drawNyanCat = function () { var self = this; var startWidth = this.scoreboardWidth + this.trajectories[0].length; var dist = '\u001b[' + startWidth + 'C'; @@ -180,7 +182,7 @@ NyanCat.prototype.drawNyanCat = function() { * @return {string} */ -NyanCat.prototype.face = function() { +NyanCat.prototype.face = function () { var stats = this.stats; if (stats.failures) { return '( x .x)'; @@ -199,7 +201,7 @@ NyanCat.prototype.face = function() { * @param {number} n */ -NyanCat.prototype.cursorUp = function(n) { +NyanCat.prototype.cursorUp = function (n) { write('\u001b[' + n + 'A'); }; @@ -210,7 +212,7 @@ NyanCat.prototype.cursorUp = function(n) { * @param {number} n */ -NyanCat.prototype.cursorDown = function(n) { +NyanCat.prototype.cursorDown = function (n) { write('\u001b[' + n + 'B'); }; @@ -220,7 +222,7 @@ NyanCat.prototype.cursorDown = function(n) { * @api private * @return {Array} */ -NyanCat.prototype.generateColors = function() { +NyanCat.prototype.generateColors = function () { var colors = []; for (var i = 0; i < (6 * 7); i++) { @@ -242,7 +244,7 @@ NyanCat.prototype.generateColors = function() { * @param {string} str * @return {string} */ -NyanCat.prototype.rainbowify = function(str) { +NyanCat.prototype.rainbowify = function (str) { if (!Base.useColors) { return str; } @@ -256,6 +258,6 @@ NyanCat.prototype.rainbowify = function(str) { * * @param {string} string A message to write to stdout. */ -function write(string) { +function write (string) { process.stdout.write(string); } diff --git a/tests/lib/mocha-3.1.0/lib/reporters/progress.js b/tests/lib/mocha-3.1.2/lib/reporters/progress.js index 5349ca8936..378ce38272 100644 --- a/tests/lib/mocha-3.1.0/lib/reporters/progress.js +++ b/tests/lib/mocha-3.1.2/lib/reporters/progress.js @@ -1,3 +1,5 @@ +'use strict'; + /** * Module dependencies. */ @@ -26,11 +28,11 @@ Base.colors.progress = 90; * @param {Runner} runner * @param {Object} options */ -function Progress(runner, options) { +function Progress (runner, options) { Base.call(this, runner); var self = this; - var width = Base.window.width * .50 | 0; + var width = Base.window.width * 0.50 | 0; var total = runner.total; var complete = 0; var lastN = -1; @@ -44,13 +46,13 @@ function Progress(runner, options) { options.verbose = false; // tests started - runner.on('start', function() { + runner.on('start', function () { console.log(); cursor.hide(); }); // tests complete - runner.on('test end', function() { + runner.on('test end', function () { complete++; var percent = complete / total; @@ -76,7 +78,7 @@ function Progress(runner, options) { // tests are complete, output some stats // and the failures if any - runner.on('end', function() { + runner.on('end', function () { cursor.show(); console.log(); self.epilogue(); diff --git a/tests/lib/mocha-3.1.0/lib/reporters/spec.js b/tests/lib/mocha-3.1.2/lib/reporters/spec.js index 28993a8f32..993aff8dd3 100644 --- a/tests/lib/mocha-3.1.0/lib/reporters/spec.js +++ b/tests/lib/mocha-3.1.2/lib/reporters/spec.js @@ -1,3 +1,5 @@ +'use strict'; + /** * Module dependencies. */ @@ -18,55 +20,55 @@ exports = module.exports = Spec; * @api public * @param {Runner} runner */ -function Spec(runner) { +function Spec (runner) { Base.call(this, runner); var self = this; var indents = 0; var n = 0; - function indent() { + function indent () { return Array(indents).join(' '); } - runner.on('start', function() { + runner.on('start', function () { console.log(); }); - runner.on('suite', function(suite) { + runner.on('suite', function (suite) { ++indents; console.log(color('suite', '%s%s'), indent(), suite.title); }); - runner.on('suite end', function() { + runner.on('suite end', function () { --indents; if (indents === 1) { console.log(); } }); - runner.on('pending', function(test) { + runner.on('pending', function (test) { var fmt = indent() + color('pending', ' - %s'); console.log(fmt, test.title); }); - runner.on('pass', function(test) { + runner.on('pass', function (test) { var fmt; if (test.speed === 'fast') { - fmt = indent() - + color('checkmark', ' ' + Base.symbols.ok) - + color('pass', ' %s'); + fmt = indent() + + color('checkmark', ' ' + Base.symbols.ok) + + color('pass', ' %s'); console.log(fmt, test.title); } else { - fmt = indent() - + color('checkmark', ' ' + Base.symbols.ok) - + color('pass', ' %s') - + color(test.speed, ' (%dms)'); + fmt = indent() + + color('checkmark', ' ' + Base.symbols.ok) + + color('pass', ' %s') + + color(test.speed, ' (%dms)'); console.log(fmt, test.title, test.duration); } }); - runner.on('fail', function(test) { + runner.on('fail', function (test) { console.log(indent() + color('fail', ' %d) %s'), ++n, test.title); }); diff --git a/tests/lib/mocha-3.1.0/lib/reporters/tap.js b/tests/lib/mocha-3.1.2/lib/reporters/tap.js index d9b1b953aa..e37ac1b16f 100644 --- a/tests/lib/mocha-3.1.0/lib/reporters/tap.js +++ b/tests/lib/mocha-3.1.2/lib/reporters/tap.js @@ -1,3 +1,5 @@ +'use strict'; + /** * Module dependencies. */ @@ -16,32 +18,32 @@ exports = module.exports = TAP; * @api public * @param {Runner} runner */ -function TAP(runner) { +function TAP (runner) { Base.call(this, runner); var n = 1; var passes = 0; var failures = 0; - runner.on('start', function() { + runner.on('start', function () { var total = runner.grepTotal(runner.suite); console.log('%d..%d', 1, total); }); - runner.on('test end', function() { + runner.on('test end', function () { ++n; }); - runner.on('pending', function(test) { + runner.on('pending', function (test) { console.log('ok %d %s # SKIP -', n, title(test)); }); - runner.on('pass', function(test) { + runner.on('pass', function (test) { passes++; console.log('ok %d %s', n, title(test)); }); - runner.on('fail', function(test, err) { + runner.on('fail', function (test, err) { failures++; console.log('not ok %d %s', n, title(test)); if (err.stack) { @@ -49,7 +51,7 @@ function TAP(runner) { } }); - runner.on('end', function() { + runner.on('end', function () { console.log('# tests ' + (passes + failures)); console.log('# pass ' + passes); console.log('# fail ' + failures); @@ -63,6 +65,6 @@ function TAP(runner) { * @param {Object} test * @return {String} */ -function title(test) { +function title (test) { return test.fullTitle().replace(/#/g, ''); } diff --git a/tests/lib/mocha-3.1.0/lib/reporters/xunit.js b/tests/lib/mocha-3.1.2/lib/reporters/xunit.js index 1cfd8f4f51..08f7b4cac3 100644 --- a/tests/lib/mocha-3.1.0/lib/reporters/xunit.js +++ b/tests/lib/mocha-3.1.2/lib/reporters/xunit.js @@ -1,3 +1,5 @@ +'use strict'; + /** * Module dependencies. */ @@ -34,7 +36,7 @@ exports = module.exports = XUnit; * @api public * @param {Runner} runner */ -function XUnit(runner, options) { +function XUnit (runner, options) { Base.call(this, runner); var stats = this.stats; @@ -49,19 +51,19 @@ function XUnit(runner, options) { self.fileStream = fs.createWriteStream(options.reporterOptions.output); } - runner.on('pending', function(test) { + runner.on('pending', function (test) { tests.push(test); }); - runner.on('pass', function(test) { + runner.on('pass', function (test) { tests.push(test); }); - runner.on('fail', function(test) { + runner.on('fail', function (test) { tests.push(test); }); - runner.on('end', function() { + runner.on('end', function () { self.write(tag('testsuite', { name: 'Mocha Tests', tests: stats.tests, @@ -72,7 +74,7 @@ function XUnit(runner, options) { time: (stats.duration / 1000) || 0 }, false)); - tests.forEach(function(t) { + tests.forEach(function (t) { self.test(t); }); @@ -91,9 +93,9 @@ inherits(XUnit, Base); * @param failures * @param {Function} fn */ -XUnit.prototype.done = function(failures, fn) { +XUnit.prototype.done = function (failures, fn) { if (this.fileStream) { - this.fileStream.end(function() { + this.fileStream.end(function () { fn(failures); }); } else { @@ -106,7 +108,7 @@ XUnit.prototype.done = function(failures, fn) { * * @param {string} line */ -XUnit.prototype.write = function(line) { +XUnit.prototype.write = function (line) { if (this.fileStream) { this.fileStream.write(line + '\n'); } else if (typeof process === 'object' && process.stdout) { @@ -121,7 +123,7 @@ XUnit.prototype.write = function(line) { * * @param {Test} test */ -XUnit.prototype.test = function(test) { +XUnit.prototype.test = function (test) { var attrs = { classname: test.parent.fullTitle(), name: test.title, @@ -147,7 +149,7 @@ XUnit.prototype.test = function(test) { * @param content * @return {string} */ -function tag(name, attrs, close, content) { +function tag (name, attrs, close, content) { var end = close ? '/>' : '>'; var pairs = []; var tag; diff --git a/tests/lib/mocha-3.1.0/lib/runnable.js b/tests/lib/mocha-3.1.2/lib/runnable.js index 52ee900b22..3edd9abd3e 100644 --- a/tests/lib/mocha-3.1.0/lib/runnable.js +++ b/tests/lib/mocha-3.1.2/lib/runnable.js @@ -1,3 +1,5 @@ +'use strict'; + /** * Module dependencies. */ @@ -43,7 +45,7 @@ module.exports = Runnable; * @param {string} title * @param {Function} fn */ -function Runnable(title, fn) { +function Runnable (title, fn) { this.title = title; this.fn = fn; this.body = (fn || '').toString(); @@ -73,7 +75,7 @@ Runnable.prototype = create(EventEmitter.prototype, { * @param {number|string} ms * @return {Runnable|number} ms or Runnable instance. */ -Runnable.prototype.timeout = function(ms) { +Runnable.prototype.timeout = function (ms) { if (!arguments.length) { return this._timeout; } @@ -99,7 +101,7 @@ Runnable.prototype.timeout = function(ms) { * @param {number|string} ms * @return {Runnable|number} ms or Runnable instance. */ -Runnable.prototype.slow = function(ms) { +Runnable.prototype.slow = function (ms) { if (typeof ms === 'undefined') { return this._slow; } @@ -118,7 +120,7 @@ Runnable.prototype.slow = function(ms) { * @param {boolean} enabled * @return {Runnable|boolean} enabled or Runnable instance. */ -Runnable.prototype.enableTimeouts = function(enabled) { +Runnable.prototype.enableTimeouts = function (enabled) { if (!arguments.length) { return this._enableTimeouts; } @@ -132,7 +134,7 @@ Runnable.prototype.enableTimeouts = function(enabled) { * * @api public */ -Runnable.prototype.skip = function() { +Runnable.prototype.skip = function () { throw new Pending('sync skip'); }; @@ -141,7 +143,7 @@ Runnable.prototype.skip = function() { * * @api private */ -Runnable.prototype.isPending = function() { +Runnable.prototype.isPending = function () { return this.pending || (this.parent && this.parent.isPending()); }; @@ -150,7 +152,7 @@ Runnable.prototype.isPending = function() { * * @api private */ -Runnable.prototype.retries = function(n) { +Runnable.prototype.retries = function (n) { if (!arguments.length) { return this._retries; } @@ -162,7 +164,7 @@ Runnable.prototype.retries = function(n) { * * @api private */ -Runnable.prototype.currentRetry = function(n) { +Runnable.prototype.currentRetry = function (n) { if (!arguments.length) { return this._currentRetry; } @@ -176,7 +178,7 @@ Runnable.prototype.currentRetry = function(n) { * @api public * @return {string} */ -Runnable.prototype.fullTitle = function() { +Runnable.prototype.fullTitle = function () { return this.parent.fullTitle() + ' ' + this.title; }; @@ -185,7 +187,7 @@ Runnable.prototype.fullTitle = function() { * * @api private */ -Runnable.prototype.clearTimeout = function() { +Runnable.prototype.clearTimeout = function () { clearTimeout(this.timer); }; @@ -195,8 +197,8 @@ Runnable.prototype.clearTimeout = function() { * @api private * @return {string} */ -Runnable.prototype.inspect = function() { - return JSON.stringify(this, function(key, val) { +Runnable.prototype.inspect = function () { + return JSON.stringify(this, function (key, val) { if (key[0] === '_') { return; } @@ -215,7 +217,7 @@ Runnable.prototype.inspect = function() { * * @api private */ -Runnable.prototype.resetTimeout = function() { +Runnable.prototype.resetTimeout = function () { var self = this; var ms = this.timeout() || 1e9; @@ -223,7 +225,7 @@ Runnable.prototype.resetTimeout = function() { return; } this.clearTimeout(); - this.timer = setTimeout(function() { + this.timer = setTimeout(function () { if (!self._enableTimeouts) { return; } @@ -238,7 +240,7 @@ Runnable.prototype.resetTimeout = function() { * @api private * @param {string[]} globals */ -Runnable.prototype.globals = function(globals) { +Runnable.prototype.globals = function (globals) { if (!arguments.length) { return this._allowedGlobals; } @@ -251,7 +253,7 @@ Runnable.prototype.globals = function(globals) { * @param {Function} fn * @api private */ -Runnable.prototype.run = function(fn) { +Runnable.prototype.run = function (fn) { var self = this; var start = new Date(); var ctx = this.ctx; @@ -264,7 +266,7 @@ Runnable.prototype.run = function(fn) { } // called multiple times - function multiple(err) { + function multiple (err) { if (emitted) { return; } @@ -273,7 +275,7 @@ Runnable.prototype.run = function(fn) { } // finished - function done(err) { + function done (err) { var ms = self.timeout(); if (self.timedOut) { return; @@ -299,7 +301,7 @@ Runnable.prototype.run = function(fn) { this.resetTimeout(); // allows skip() to be used in an explicit async context - this.skip = function asyncSkip() { + this.skip = function asyncSkip () { done(new Pending('async skip call')); // halt execution. the Runnable will be marked pending // by the previous call, and the uncaught handler will ignore @@ -313,6 +315,7 @@ Runnable.prototype.run = function(fn) { try { callFnAsync(this.fn); } catch (err) { + emitted = true; done(utils.getError(err)); } return; @@ -332,21 +335,22 @@ Runnable.prototype.run = function(fn) { callFn(this.fn); } } catch (err) { + emitted = true; done(utils.getError(err)); } - function callFn(fn) { + function callFn (fn) { var result = fn.call(ctx); if (result && typeof result.then === 'function') { self.resetTimeout(); result - .then(function() { + .then(function () { done(); // Return null so libraries like bluebird do not warn about // subsequently constructed Promises. return null; }, - function(reason) { + function (reason) { done(reason || new Error('Promise rejected with no or falsy reason')); }); } else { @@ -358,15 +362,15 @@ Runnable.prototype.run = function(fn) { } } - function callFnAsync(fn) { - var result = fn.call(ctx, function(err) { + function callFnAsync (fn) { + var result = fn.call(ctx, function (err) { if (err instanceof Error || toString.call(err) === '[object Error]') { return done(err); } if (err) { if (Object.prototype.toString.call(err) === '[object Object]') { - return done(new Error('done() invoked with non-Error: ' - + JSON.stringify(err))); + return done(new Error('done() invoked with non-Error: ' + + JSON.stringify(err))); } return done(new Error('done() invoked with non-Error: ' + err)); } diff --git a/tests/lib/mocha-3.1.0/lib/runner.js b/tests/lib/mocha-3.1.2/lib/runner.js index dc03ec451a..697ffb65ac 100644 --- a/tests/lib/mocha-3.1.0/lib/runner.js +++ b/tests/lib/mocha-3.1.2/lib/runner.js @@ -1,3 +1,5 @@ +'use strict'; + /** * Module dependencies. */ @@ -61,7 +63,7 @@ module.exports = Runner; * @param {boolean} [delay] Whether or not to delay execution of root suite * until ready. */ -function Runner(suite, delay) { +function Runner (suite, delay) { var self = this; this._globals = []; this._abort = false; @@ -70,10 +72,10 @@ function Runner(suite, delay) { this.started = false; this.total = suite.total(); this.failures = 0; - this.on('test end', function(test) { + this.on('test end', function (test) { self.checkGlobals(test); }); - this.on('hook end', function(hook) { + this.on('hook end', function (hook) { self.checkGlobals(hook); }); this._defaultGrep = /.*/; @@ -106,7 +108,7 @@ inherits(Runner, EventEmitter); * @param {boolean} invert * @return {Runner} Runner instance. */ -Runner.prototype.grep = function(re, invert) { +Runner.prototype.grep = function (re, invert) { debug('grep %s', re); this._grep = re; this._invert = invert; @@ -124,11 +126,11 @@ Runner.prototype.grep = function(re, invert) { * @param {Suite} suite * @return {number} */ -Runner.prototype.grepTotal = function(suite) { +Runner.prototype.grepTotal = function (suite) { var self = this; var total = 0; - suite.eachTest(function(test) { + suite.eachTest(function (test) { var match = self._grep.test(test.fullTitle()); if (self._invert) { match = !match; @@ -147,7 +149,7 @@ Runner.prototype.grepTotal = function(suite) { * @return {Array} * @api private */ -Runner.prototype.globalProps = function() { +Runner.prototype.globalProps = function () { var props = keys(global); // non-enumerables @@ -170,7 +172,7 @@ Runner.prototype.globalProps = function() { * @param {Array} arr * @return {Runner} Runner instance. */ -Runner.prototype.globals = function(arr) { +Runner.prototype.globals = function (arr) { if (!arguments.length) { return this._globals; } @@ -184,7 +186,7 @@ Runner.prototype.globals = function(arr) { * * @api private */ -Runner.prototype.checkGlobals = function(test) { +Runner.prototype.checkGlobals = function (test) { if (this.ignoreLeaks) { return; } @@ -219,7 +221,7 @@ Runner.prototype.checkGlobals = function(test) { * @param {Test} test * @param {Error} err */ -Runner.prototype.fail = function(test, err) { +Runner.prototype.fail = function (test, err) { if (test.isPending()) { return; } @@ -231,9 +233,13 @@ Runner.prototype.fail = function(test, err) { err = new Error('the ' + type(err) + ' ' + stringify(err) + ' was thrown, throw an Error :)'); } - err.stack = (this.fullStackTrace || !err.stack) - ? err.stack - : stackFilter(err.stack); + try { + err.stack = (this.fullStackTrace || !err.stack) + ? err.stack + : stackFilter(err.stack); + } catch (ignored) { + // some environments do not take kindly to monkeying with the stack + } this.emit('fail', test, err); }; @@ -258,7 +264,7 @@ Runner.prototype.fail = function(test, err) { * @param {Hook} hook * @param {Error} err */ -Runner.prototype.failHook = function(hook, err) { +Runner.prototype.failHook = function (hook, err) { if (hook.ctx && hook.ctx.currentTest) { hook.originalTitle = hook.originalTitle || hook.title; hook.title = hook.originalTitle + ' for "' + hook.ctx.currentTest.title + '"'; @@ -278,12 +284,12 @@ Runner.prototype.failHook = function(hook, err) { * @param {Function} fn */ -Runner.prototype.hook = function(name, fn) { +Runner.prototype.hook = function (name, fn) { var suite = this.suite; var hooks = suite['_' + name]; var self = this; - function next(i) { + function next (i) { var hook = hooks[i]; if (!hook) { return fn(); @@ -295,12 +301,12 @@ Runner.prototype.hook = function(name, fn) { self.emit('hook', hook); if (!hook.listeners('error').length) { - hook.on('error', function(err) { + hook.on('error', function (err) { self.failHook(hook, err); }); } - hook.run(function(err) { + hook.run(function (err) { var testError = hook.error(); if (testError) { self.fail(self.test, testError); @@ -310,7 +316,7 @@ Runner.prototype.hook = function(name, fn) { if (name === 'beforeEach' || name === 'afterEach') { self.test.pending = true; } else { - utils.forEach(suite.tests, function(test) { + utils.forEach(suite.tests, function (test) { test.pending = true; }); // a pending hook won't be executed twice. @@ -329,7 +335,7 @@ Runner.prototype.hook = function(name, fn) { }); } - Runner.immediately(function() { + Runner.immediately(function () { next(0); }); }; @@ -343,11 +349,11 @@ Runner.prototype.hook = function(name, fn) { * @param {Array} suites * @param {Function} fn */ -Runner.prototype.hooks = function(name, suites, fn) { +Runner.prototype.hooks = function (name, suites, fn) { var self = this; var orig = this.suite; - function next(suite) { + function next (suite) { self.suite = suite; if (!suite) { @@ -355,7 +361,7 @@ Runner.prototype.hooks = function(name, suites, fn) { return fn(); } - self.hook(name, function(err) { + self.hook(name, function (err) { if (err) { var errSuite = self.suite; self.suite = orig; @@ -376,7 +382,7 @@ Runner.prototype.hooks = function(name, suites, fn) { * @param {Function} fn * @api private */ -Runner.prototype.hookUp = function(name, fn) { +Runner.prototype.hookUp = function (name, fn) { var suites = [this.suite].concat(this.parents()).reverse(); this.hooks(name, suites, fn); }; @@ -388,7 +394,7 @@ Runner.prototype.hookUp = function(name, fn) { * @param {Function} fn * @api private */ -Runner.prototype.hookDown = function(name, fn) { +Runner.prototype.hookDown = function (name, fn) { var suites = [this.suite].concat(this.parents()); this.hooks(name, suites, fn); }; @@ -400,7 +406,7 @@ Runner.prototype.hookDown = function(name, fn) { * @return {Array} * @api private */ -Runner.prototype.parents = function() { +Runner.prototype.parents = function () { var suite = this.suite; var suites = []; while (suite.parent) { @@ -416,7 +422,7 @@ Runner.prototype.parents = function() { * @param {Function} fn * @api private */ -Runner.prototype.runTest = function(fn) { +Runner.prototype.runTest = function (fn) { var self = this; var test = this.test; @@ -432,7 +438,7 @@ Runner.prototype.runTest = function(fn) { return test.run(fn); } try { - test.on('error', function(err) { + test.on('error', function (err) { self.fail(test, err); }); test.run(fn); @@ -448,12 +454,12 @@ Runner.prototype.runTest = function(fn) { * @param {Suite} suite * @param {Function} fn */ -Runner.prototype.runTests = function(suite, fn) { +Runner.prototype.runTests = function (suite, fn) { var self = this; var tests = suite.tests.slice(); var test; - function hookErr(_, errSuite, after) { + function hookErr (_, errSuite, after) { // before/after Each hook for errSuite failed: var orig = self.suite; @@ -463,7 +469,7 @@ Runner.prototype.runTests = function(suite, fn) { if (self.suite) { // call hookUp afterEach - self.hookUp('afterEach', function(err2, errSuite2) { + self.hookUp('afterEach', function (err2, errSuite2) { self.suite = orig; // some hooks may fail even now if (err2) { @@ -479,7 +485,7 @@ Runner.prototype.runTests = function(suite, fn) { } } - function next(err, errSuite) { + function next (err, errSuite) { // if we bail after first err if (self.failures && suite._bail) { return fn(); @@ -531,7 +537,7 @@ Runner.prototype.runTests = function(suite, fn) { // execute test and hook(s) self.emit('test', self.test = test); - self.hookDown('beforeEach', function(err, errSuite) { + self.hookDown('beforeEach', function (err, errSuite) { if (test.isPending()) { self.emit('pending', test); self.emit('test end', test); @@ -541,7 +547,7 @@ Runner.prototype.runTests = function(suite, fn) { return hookErr(err, errSuite, false); } self.currentRunnable = self.test; - self.runTest(function(err) { + self.runTest(function (err) { test = self.test; if (err) { var retry = test.currentRetry(); @@ -588,7 +594,7 @@ Runner.prototype.runTests = function(suite, fn) { * @param {Suite} suite * @param {Function} fn */ -Runner.prototype.runSuite = function(suite, fn) { +Runner.prototype.runSuite = function (suite, fn) { var i = 0; var self = this; var total = this.grepTotal(suite); @@ -602,7 +608,7 @@ Runner.prototype.runSuite = function(suite, fn) { this.emit('suite', this.suite = suite); - function next(errSuite) { + function next (errSuite) { if (errSuite) { // current suite failed on a hook from errSuite if (errSuite === suite) { @@ -628,7 +634,7 @@ Runner.prototype.runSuite = function(suite, fn) { // huge recursive loop and thus a maximum call stack error. // See comment in `this.runTests()` for more information. if (self._grep !== self._defaultGrep) { - Runner.immediately(function() { + Runner.immediately(function () { self.runSuite(curr, next); }); } else { @@ -636,7 +642,7 @@ Runner.prototype.runSuite = function(suite, fn) { } } - function done(errSuite) { + function done (errSuite) { self.suite = suite; self.nextSuite = next; @@ -650,7 +656,7 @@ Runner.prototype.runSuite = function(suite, fn) { // remove reference to test delete self.test; - self.hook('afterAll', function() { + self.hook('afterAll', function () { self.emit('suite end', suite); fn(errSuite); }); @@ -659,7 +665,7 @@ Runner.prototype.runSuite = function(suite, fn) { this.nextSuite = next; - this.hook('beforeAll', function(err) { + this.hook('beforeAll', function (err) { if (err) { return done(); } @@ -673,9 +679,9 @@ Runner.prototype.runSuite = function(suite, fn) { * @param {Error} err * @api private */ -Runner.prototype.uncaught = function(err) { +Runner.prototype.uncaught = function (err) { if (err) { - debug('uncaught exception %s', err !== function() { + debug('uncaught exception %s', err !== function () { return this; }.call(err) ? err : (err.message || err)); } else { @@ -746,8 +752,8 @@ Runner.prototype.uncaught = function(err) { * * @param {Suite} suite */ -function cleanSuiteReferences(suite) { - function cleanArrReferences(arr) { +function cleanSuiteReferences (suite) { + function cleanArrReferences (arr) { for (var i = 0; i < arr.length; i++) { delete arr[i].fn; } @@ -784,7 +790,7 @@ function cleanSuiteReferences(suite) { * @param {Function} fn * @return {Runner} Runner instance. */ -Runner.prototype.run = function(fn) { +Runner.prototype.run = function (fn) { var self = this; var rootSuite = this.suite; @@ -793,16 +799,16 @@ Runner.prototype.run = function(fn) { filterOnly(rootSuite); } - fn = fn || function() {}; + fn = fn || function () {}; - function uncaught(err) { + function uncaught (err) { self.uncaught(err); } - function start() { + function start () { self.started = true; self.emit('start'); - self.runSuite(rootSuite, function() { + self.runSuite(rootSuite, function () { debug('finished running'); self.emit('end'); }); @@ -814,7 +820,7 @@ Runner.prototype.run = function(fn) { this.on('suite end', cleanSuiteReferences); // callback - this.on('end', function() { + this.on('end', function () { debug('end'); process.removeListener('uncaughtException', uncaught); fn(self.failures); @@ -841,7 +847,7 @@ Runner.prototype.run = function(fn) { * @api public * @return {Runner} Runner instance. */ -Runner.prototype.abort = function() { +Runner.prototype.abort = function () { debug('aborting'); this._abort = true; @@ -855,7 +861,7 @@ Runner.prototype.abort = function() { * @returns {Boolean} * @api private */ -function filterOnly(suite) { +function filterOnly (suite) { if (suite._onlyTests.length) { // If the suite contains `only` tests, run those and ignore any nested suites. suite.tests = suite._onlyTests; @@ -863,7 +869,7 @@ function filterOnly(suite) { } else { // Otherwise, do not run any of the tests in this suite. suite.tests = []; - utils.forEach(suite._onlySuites, function(onlySuite) { + utils.forEach(suite._onlySuites, function (onlySuite) { // If there are other `only` tests/suites nested in the current `only` suite, then filter that `only` suite. // Otherwise, all of the tests on this `only` suite should be run, so don't filter it. if (hasOnly(onlySuite)) { @@ -871,7 +877,7 @@ function filterOnly(suite) { } }); // Run the `only` suites, as well as any other suites that have `only` tests/suites as descendants. - suite.suites = filter(suite.suites, function(childSuite) { + suite.suites = filter(suite.suites, function (childSuite) { return indexOf(suite._onlySuites, childSuite) !== -1 || filterOnly(childSuite); }); } @@ -886,7 +892,7 @@ function filterOnly(suite) { * @returns {Boolean} * @api private */ -function hasOnly(suite) { +function hasOnly (suite) { return suite._onlyTests.length || suite._onlySuites.length || some(suite.suites, hasOnly); } @@ -898,8 +904,8 @@ function hasOnly(suite) { * @param {Array} globals * @return {Array} */ -function filterLeaks(ok, globals) { - return filter(globals, function(key) { +function filterLeaks (ok, globals) { + return filter(globals, function (key) { // Firefox and Chrome exposes iframes as index inside the window object if (/^\d+/.test(key)) { return false; @@ -923,7 +929,7 @@ function filterLeaks(ok, globals) { return false; } - var matched = filter(ok, function(ok) { + var matched = filter(ok, function (ok) { if (~ok.indexOf('*')) { return key.indexOf(ok.split('*')[0]) === 0; } @@ -939,10 +945,10 @@ function filterLeaks(ok, globals) { * @return {Array} * @api private */ -function extraGlobals() { +function extraGlobals () { if (typeof process === 'object' && typeof process.version === 'string') { var parts = process.version.split('.'); - var nodeVersion = utils.reduce(parts, function(a, v) { + var nodeVersion = utils.reduce(parts, function (a, v) { return a << 8 | v; }); diff --git a/tests/lib/mocha-3.1.0/lib/suite.js b/tests/lib/mocha-3.1.2/lib/suite.js index bf3e4e9fef..13617ab91d 100644 --- a/tests/lib/mocha-3.1.0/lib/suite.js +++ b/tests/lib/mocha-3.1.2/lib/suite.js @@ -1,3 +1,5 @@ +'use strict'; + /** * Module dependencies. */ @@ -25,7 +27,7 @@ exports = module.exports = Suite; * @param {string} title * @return {Suite} */ -exports.create = function(parent, title) { +exports.create = function (parent, title) { var suite = new Suite(title, parent.ctx); suite.parent = parent; title = suite.fullTitle(); @@ -40,12 +42,12 @@ exports.create = function(parent, title) { * @param {string} title * @param {Context} parentContext */ -function Suite(title, parentContext) { +function Suite (title, parentContext) { if (!utils.isString(title)) { throw new Error('Suite `title` should be a "string" but "' + typeof title + '" was given instead.'); } this.title = title; - function Context() {} + function Context () {} Context.prototype = parentContext; this.ctx = new Context(); this.suites = []; @@ -77,7 +79,7 @@ inherits(Suite, EventEmitter); * @api private * @return {Suite} */ -Suite.prototype.clone = function() { +Suite.prototype.clone = function () { var suite = new Suite(this.title); debug('clone'); suite.ctx = this.ctx; @@ -96,7 +98,7 @@ Suite.prototype.clone = function() { * @param {number|string} ms * @return {Suite|number} for chaining */ -Suite.prototype.timeout = function(ms) { +Suite.prototype.timeout = function (ms) { if (!arguments.length) { return this._timeout; } @@ -118,7 +120,7 @@ Suite.prototype.timeout = function(ms) { * @param {number|string} n * @return {Suite|number} for chaining */ -Suite.prototype.retries = function(n) { +Suite.prototype.retries = function (n) { if (!arguments.length) { return this._retries; } @@ -134,7 +136,7 @@ Suite.prototype.retries = function(n) { * @param {boolean} enabled * @return {Suite|boolean} self or enabled */ -Suite.prototype.enableTimeouts = function(enabled) { +Suite.prototype.enableTimeouts = function (enabled) { if (!arguments.length) { return this._enableTimeouts; } @@ -150,7 +152,7 @@ Suite.prototype.enableTimeouts = function(enabled) { * @param {number|string} ms * @return {Suite|number} for chaining */ -Suite.prototype.slow = function(ms) { +Suite.prototype.slow = function (ms) { if (!arguments.length) { return this._slow; } @@ -169,7 +171,7 @@ Suite.prototype.slow = function(ms) { * @param {boolean} bail * @return {Suite|number} for chaining */ -Suite.prototype.bail = function(bail) { +Suite.prototype.bail = function (bail) { if (!arguments.length) { return this._bail; } @@ -183,7 +185,7 @@ Suite.prototype.bail = function(bail) { * * @api private */ -Suite.prototype.isPending = function() { +Suite.prototype.isPending = function () { return this.pending || (this.parent && this.parent.isPending()); }; @@ -195,7 +197,7 @@ Suite.prototype.isPending = function() { * @param {Function} fn * @return {Suite} for chaining */ -Suite.prototype.beforeAll = function(title, fn) { +Suite.prototype.beforeAll = function (title, fn) { if (this.isPending()) { return this; } @@ -225,7 +227,7 @@ Suite.prototype.beforeAll = function(title, fn) { * @param {Function} fn * @return {Suite} for chaining */ -Suite.prototype.afterAll = function(title, fn) { +Suite.prototype.afterAll = function (title, fn) { if (this.isPending()) { return this; } @@ -255,7 +257,7 @@ Suite.prototype.afterAll = function(title, fn) { * @param {Function} fn * @return {Suite} for chaining */ -Suite.prototype.beforeEach = function(title, fn) { +Suite.prototype.beforeEach = function (title, fn) { if (this.isPending()) { return this; } @@ -285,7 +287,7 @@ Suite.prototype.beforeEach = function(title, fn) { * @param {Function} fn * @return {Suite} for chaining */ -Suite.prototype.afterEach = function(title, fn) { +Suite.prototype.afterEach = function (title, fn) { if (this.isPending()) { return this; } @@ -314,7 +316,7 @@ Suite.prototype.afterEach = function(title, fn) { * @param {Suite} suite * @return {Suite} for chaining */ -Suite.prototype.addSuite = function(suite) { +Suite.prototype.addSuite = function (suite) { suite.parent = this; suite.timeout(this.timeout()); suite.retries(this.retries()); @@ -333,7 +335,7 @@ Suite.prototype.addSuite = function(suite) { * @param {Test} test * @return {Suite} for chaining */ -Suite.prototype.addTest = function(test) { +Suite.prototype.addTest = function (test) { test.parent = this; test.timeout(this.timeout()); test.retries(this.retries()); @@ -352,7 +354,7 @@ Suite.prototype.addTest = function(test) { * @api public * @return {string} */ -Suite.prototype.fullTitle = function() { +Suite.prototype.fullTitle = function () { if (this.parent) { var full = this.parent.fullTitle(); if (full) { @@ -368,8 +370,8 @@ Suite.prototype.fullTitle = function() { * @api public * @return {number} */ -Suite.prototype.total = function() { - return utils.reduce(this.suites, function(sum, suite) { +Suite.prototype.total = function () { + return utils.reduce(this.suites, function (sum, suite) { return sum + suite.total(); }, 0) + this.tests.length; }; @@ -382,9 +384,9 @@ Suite.prototype.total = function() { * @param {Function} fn * @return {Suite} */ -Suite.prototype.eachTest = function(fn) { +Suite.prototype.eachTest = function (fn) { utils.forEach(this.tests, fn); - utils.forEach(this.suites, function(suite) { + utils.forEach(this.suites, function (suite) { suite.eachTest(fn); }); return this; @@ -393,7 +395,7 @@ Suite.prototype.eachTest = function(fn) { /** * This will run the root suite if we happen to be running in delayed mode. */ -Suite.prototype.run = function run() { +Suite.prototype.run = function run () { if (this.root) { this.emit('run'); } diff --git a/tests/lib/mocha-3.1.0/lib/template.html b/tests/lib/mocha-3.1.2/lib/template.html index 36c5e0b694..36c5e0b694 100644 --- a/tests/lib/mocha-3.1.0/lib/template.html +++ b/tests/lib/mocha-3.1.2/lib/template.html diff --git a/tests/lib/mocha-3.1.0/lib/test.js b/tests/lib/mocha-3.1.2/lib/test.js index 05d4ed86d5..66bb57cb42 100644 --- a/tests/lib/mocha-3.1.0/lib/test.js +++ b/tests/lib/mocha-3.1.2/lib/test.js @@ -1,3 +1,5 @@ +'use strict'; + /** * Module dependencies. */ @@ -19,7 +21,7 @@ module.exports = Test; * @param {String} title * @param {Function} fn */ -function Test(title, fn) { +function Test (title, fn) { if (!isString(title)) { throw new Error('Test `title` should be a "string" but "' + typeof title + '" was given instead.'); } @@ -35,7 +37,7 @@ Test.prototype = create(Runnable.prototype, { constructor: Test }); -Test.prototype.clone = function() { +Test.prototype.clone = function () { var test = new Test(this.title, this.fn); test.timeout(this.timeout()); test.slow(this.slow()); diff --git a/tests/lib/mocha-3.1.0/lib/to-iso-string/LICENSE b/tests/lib/mocha-3.1.2/lib/to-iso-string/LICENSE index c25db56595..c25db56595 100644 --- a/tests/lib/mocha-3.1.0/lib/to-iso-string/LICENSE +++ b/tests/lib/mocha-3.1.2/lib/to-iso-string/LICENSE diff --git a/tests/lib/mocha-3.1.0/lib/to-iso-string/index.js b/tests/lib/mocha-3.1.2/lib/to-iso-string/index.js index cd28d7be71..cd28d7be71 100644 --- a/tests/lib/mocha-3.1.0/lib/to-iso-string/index.js +++ b/tests/lib/mocha-3.1.2/lib/to-iso-string/index.js diff --git a/tests/lib/mocha-3.1.0/lib/utils.js b/tests/lib/mocha-3.1.2/lib/utils.js index c7947cb05d..2af3aac448 100644 --- a/tests/lib/mocha-3.1.0/lib/utils.js +++ b/tests/lib/mocha-3.1.2/lib/utils.js @@ -1,3 +1,5 @@ +'use strict'; + /* eslint-env browser */ /** @@ -31,7 +33,7 @@ exports.inherits = require('util').inherits; * @param {string} html * @return {string} */ -exports.escape = function(html) { +exports.escape = function (html) { return String(html) .replace(/&/g, '&') .replace(/"/g, '"') @@ -47,7 +49,7 @@ exports.escape = function(html) { * @param {Function} fn * @param {Object} scope */ -exports.forEach = function(arr, fn, scope) { +exports.forEach = function (arr, fn, scope) { for (var i = 0, l = arr.length; i < l; i++) { fn.call(scope, arr[i], i); } @@ -60,7 +62,7 @@ exports.forEach = function(arr, fn, scope) { * @param {Object} obj * @return {boolean} */ -exports.isString = function(obj) { +exports.isString = function (obj) { return typeof obj === 'string'; }; @@ -73,7 +75,7 @@ exports.isString = function(obj) { * @param {Object} scope * @return {Array} */ -exports.map = function(arr, fn, scope) { +exports.map = function (arr, fn, scope) { var result = []; for (var i = 0, l = arr.length; i < l; i++) { result.push(fn.call(scope, arr[i], i, arr)); @@ -90,7 +92,7 @@ exports.map = function(arr, fn, scope) { * @param {number} start * @return {number} */ -var indexOf = exports.indexOf = function(arr, obj, start) { +var indexOf = exports.indexOf = function (arr, obj, start) { for (var i = start || 0, l = arr.length; i < l; i++) { if (arr[i] === obj) { return i; @@ -108,7 +110,7 @@ var indexOf = exports.indexOf = function(arr, obj, start) { * @param {Object} val Initial value. * @return {*} */ -var reduce = exports.reduce = function(arr, fn, val) { +var reduce = exports.reduce = function (arr, fn, val) { var rval = val; for (var i = 0, l = arr.length; i < l; i++) { @@ -126,7 +128,7 @@ var reduce = exports.reduce = function(arr, fn, val) { * @param {Function} fn * @return {Array} */ -exports.filter = function(arr, fn) { +exports.filter = function (arr, fn) { var ret = []; for (var i = 0, l = arr.length; i < l; i++) { @@ -147,7 +149,7 @@ exports.filter = function(arr, fn) { * @param {Function} fn * @return {Array} */ -exports.some = function(arr, fn) { +exports.some = function (arr, fn) { for (var i = 0, l = arr.length; i < l; i++) { if (fn(arr[i])) { return true; @@ -163,7 +165,7 @@ exports.some = function(arr, fn) { * @param {Object} obj * @return {Array} keys */ -exports.keys = typeof Object.keys === 'function' ? Object.keys : function(obj) { +exports.keys = typeof Object.keys === 'function' ? Object.keys : function (obj) { var keys = []; var has = Object.prototype.hasOwnProperty; // for `window` on <=IE8 @@ -184,11 +186,11 @@ exports.keys = typeof Object.keys === 'function' ? Object.keys : function(obj) { * @param {Array} files * @param {Function} fn */ -exports.watch = function(files, fn) { +exports.watch = function (files, fn) { var options = { interval: 100 }; - files.forEach(function(file) { + files.forEach(function (file) { debug('file %s', file); - watchFile(file, options, function(curr, prev) { + watchFile(file, options, function (curr, prev) { if (prev.mtime < curr.mtime) { fn(file); } @@ -203,7 +205,7 @@ exports.watch = function(files, fn) { * @param {Object} obj * @return {Boolean} */ -var isArray = typeof Array.isArray === 'function' ? Array.isArray : function(obj) { +var isArray = typeof Array.isArray === 'function' ? Array.isArray : function (obj) { return Object.prototype.toString.call(obj) === '[object Array]'; }; @@ -215,7 +217,7 @@ exports.isArray = isArray; * @type {Function} */ if (typeof Buffer !== 'undefined' && Buffer.prototype) { - Buffer.prototype.toJSON = Buffer.prototype.toJSON || function() { + Buffer.prototype.toJSON = Buffer.prototype.toJSON || function () { return Array.prototype.slice.call(this, 0); }; } @@ -227,7 +229,7 @@ if (typeof Buffer !== 'undefined' && Buffer.prototype) { * @param {string} path * @return {boolean} */ -function ignored(path) { +function ignored (path) { return !~ignore.indexOf(path); } @@ -240,7 +242,7 @@ function ignored(path) { * @param {Array} [ret=[]] * @return {Array} */ -exports.files = function(dir, ext, ret) { +exports.files = function (dir, ext, ret) { ret = ret || []; ext = ext || ['js']; @@ -248,7 +250,7 @@ exports.files = function(dir, ext, ret) { readdirSync(dir) .filter(ignored) - .forEach(function(path) { + .forEach(function (path) { path = join(dir, path); if (statSync(path).isDirectory()) { exports.files(path, ext, ret); @@ -267,7 +269,7 @@ exports.files = function(dir, ext, ret) { * @param {string} str * @return {string} */ -exports.slug = function(str) { +exports.slug = function (str) { return str .toLowerCase() .replace(/ +/g, '-') @@ -280,7 +282,7 @@ exports.slug = function(str) { * @param {string} str * @return {string} */ -exports.clean = function(str) { +exports.clean = function (str) { str = str .replace(/\r\n?|[\n\u2028\u2029]/g, '\n').replace(/^\uFEFF/, '') // (traditional)-> space/name parameters body (lambda)-> parameters body multi-statement/single keep body content @@ -288,7 +290,7 @@ exports.clean = function(str) { var spaces = str.match(/^\n?( *)/)[1].length; var tabs = str.match(/^\n?(\t*)/)[1].length; - var re = new RegExp('^\n?' + (tabs ? '\t' : ' ') + '{' + (tabs ? tabs : spaces) + '}', 'gm'); + var re = new RegExp('^\n?' + (tabs ? '\t' : ' ') + '{' + (tabs || spaces) + '}', 'gm'); str = str.replace(re, ''); @@ -302,7 +304,7 @@ exports.clean = function(str) { * @param {string} str * @return {string} */ -exports.trim = function(str) { +exports.trim = function (str) { return str.replace(/^\s+|\s+$/g, ''); }; @@ -313,8 +315,8 @@ exports.trim = function(str) { * @param {string} qs * @return {Object} */ -exports.parseQuery = function(qs) { - return reduce(qs.replace('?', '').split('&'), function(obj, pair) { +exports.parseQuery = function (qs) { + return reduce(qs.replace('?', '').split('&'), function (obj, pair) { var i = pair.indexOf('='); var key = pair.slice(0, i); var val = pair.slice(++i); @@ -331,7 +333,7 @@ exports.parseQuery = function(qs) { * @param {string} js * @return {string} */ -function highlight(js) { +function highlight (js) { return js .replace(/</g, '<') .replace(/>/g, '>') @@ -349,7 +351,7 @@ function highlight(js) { * @api private * @param {string} name */ -exports.highlightTags = function(name) { +exports.highlightTags = function (name) { var code = document.getElementById('mocha').getElementsByTagName(name); for (var i = 0, len = code.length; i < len; ++i) { code[i].innerHTML = highlight(code[i].innerHTML); @@ -370,7 +372,7 @@ exports.highlightTags = function(name) { * @param {string} typeHint The type of the value * @returns {string} */ -function emptyRepresentation(value, typeHint) { +function emptyRepresentation (value, typeHint) { switch (typeHint) { case 'function': return '[Function]'; @@ -404,7 +406,7 @@ function emptyRepresentation(value, typeHint) { * type(global) // 'global' * type(new String('foo') // 'object' */ -var type = exports.type = function type(value) { +var type = exports.type = function type (value) { if (value === undefined) { return 'undefined'; } else if (value === null) { @@ -432,7 +434,7 @@ var type = exports.type = function type(value) { * @param {*} value * @return {string} */ -exports.stringify = function(value) { +exports.stringify = function (value) { var typeHint = type(value); if (!~indexOf(['object', 'array', 'function'], typeHint)) { @@ -446,7 +448,7 @@ exports.stringify = function(value) { // IE7/IE8 has a bizarre String constructor; needs to be coerced // into an array and back to obj. if (typeHint === 'string' && typeof value === 'object') { - value = reduce(value.split(''), function(acc, char, idx) { + value = reduce(value.split(''), function (acc, char, idx) { acc[idx] = char; return acc; }, {}); @@ -474,7 +476,7 @@ exports.stringify = function(value) { * @param {number=} depth * @returns {*} */ -function jsonStringify(object, spaces, depth) { +function jsonStringify (object, spaces, depth) { if (typeof spaces === 'undefined') { // primitive types return _stringify(object); @@ -486,11 +488,11 @@ function jsonStringify(object, spaces, depth) { var end = isArray(object) ? ']' : '}'; var length = typeof object.length === 'number' ? object.length : exports.keys(object).length; // `.repeat()` polyfill - function repeat(s, n) { + function repeat (s, n) { return new Array(n).join(s); } - function _stringify(val) { + function _stringify (val) { switch (type(val)) { case 'null': case 'undefined': @@ -536,15 +538,15 @@ function jsonStringify(object, spaces, depth) { continue; // not my business } --length; - str += '\n ' + repeat(' ', space) - + (isArray(object) ? '' : '"' + i + '": ') // key - + _stringify(object[i]) // value - + (length ? ',' : ''); // comma + str += '\n ' + repeat(' ', space) + + (isArray(object) ? '' : '"' + i + '": ') + // key + _stringify(object[i]) + // value + (length ? ',' : ''); // comma } - return str + return str + // [], {} - + (str.length !== 1 ? '\n' + repeat(' ', --space) + end : end); + (str.length !== 1 ? '\n' + repeat(' ', --space) + end : end); } /** @@ -554,7 +556,7 @@ function jsonStringify(object, spaces, depth) { * @param {*} value The value to test. * @return {boolean} True if `value` is a buffer, otherwise false */ -exports.isBuffer = function(value) { +exports.isBuffer = function (value) { return typeof Buffer !== 'undefined' && Buffer.isBuffer(value); }; @@ -577,13 +579,13 @@ exports.isBuffer = function(value) { * @param {string} [typeHint] Type hint * @return {(Object|Array|Function|string|undefined)} */ -exports.canonicalize = function canonicalize(value, stack, typeHint) { +exports.canonicalize = function canonicalize (value, stack, typeHint) { var canonicalizedObj; /* eslint-disable no-unused-vars */ var prop; /* eslint-enable no-unused-vars */ typeHint = typeHint || type(value); - function withStack(value, fn) { + function withStack (value, fn) { stack.push(value); fn(); stack.pop(); @@ -602,8 +604,8 @@ exports.canonicalize = function canonicalize(value, stack, typeHint) { canonicalizedObj = value; break; case 'array': - withStack(value, function() { - canonicalizedObj = exports.map(value, function(item) { + withStack(value, function () { + canonicalizedObj = exports.map(value, function (item) { return exports.canonicalize(item, stack); }); }); @@ -622,8 +624,8 @@ exports.canonicalize = function canonicalize(value, stack, typeHint) { /* falls through */ case 'object': canonicalizedObj = canonicalizedObj || {}; - withStack(value, function() { - exports.forEach(exports.keys(value).sort(), function(key) { + withStack(value, function () { + exports.forEach(exports.keys(value).sort(), function (key) { canonicalizedObj[key] = exports.canonicalize(value[key], stack); }); }); @@ -651,7 +653,7 @@ exports.canonicalize = function canonicalize(value, stack, typeHint) { * @param {boolean} recursive Whether or not to recurse into subdirectories. * @return {string[]} An array of paths. */ -exports.lookupFiles = function lookupFiles(path, extensions, recursive) { +exports.lookupFiles = function lookupFiles (path, extensions, recursive) { var files = []; var re = new RegExp('\\.(' + extensions.join('|') + ')$'); @@ -677,7 +679,7 @@ exports.lookupFiles = function lookupFiles(path, extensions, recursive) { return; } - readdirSync(path).forEach(function(file) { + readdirSync(path).forEach(function (file) { file = join(path, file); try { var stat = statSync(file); @@ -706,7 +708,7 @@ exports.lookupFiles = function lookupFiles(path, extensions, recursive) { * @return {Error} */ -exports.undefinedError = function() { +exports.undefinedError = function () { return new Error('Caught undefined error, did you throw without specifying what?'); }; @@ -717,7 +719,7 @@ exports.undefinedError = function() { * @return {Error} */ -exports.getError = function(err) { +exports.getError = function (err) { return err || exports.undefinedError(); }; @@ -730,7 +732,7 @@ exports.getError = function(err) { * (i.e: strip Mocha and internal node functions from stack trace). * @returns {Function} */ -exports.stackTraceFilter = function() { +exports.stackTraceFilter = function () { // TODO: Replace with `process.browser` var is = typeof document === 'undefined' ? { node: true } : { browser: true }; var slash = path.sep; @@ -742,26 +744,26 @@ exports.stackTraceFilter = function() { slash = '/'; } - function isMochaInternal(line) { - return (~line.indexOf('node_modules' + slash + 'mocha' + slash)) - || (~line.indexOf('node_modules' + slash + 'mocha.js')) - || (~line.indexOf('bower_components' + slash + 'mocha.js')) - || (~line.indexOf(slash + 'mocha.js')); + function isMochaInternal (line) { + return (~line.indexOf('node_modules' + slash + 'mocha' + slash)) || + (~line.indexOf('node_modules' + slash + 'mocha.js')) || + (~line.indexOf('bower_components' + slash + 'mocha.js')) || + (~line.indexOf(slash + 'mocha.js')); } - function isNodeInternal(line) { - return (~line.indexOf('(timers.js:')) - || (~line.indexOf('(events.js:')) - || (~line.indexOf('(node.js:')) - || (~line.indexOf('(module.js:')) - || (~line.indexOf('GeneratorFunctionPrototype.next (native)')) - || false; + function isNodeInternal (line) { + return (~line.indexOf('(timers.js:')) || + (~line.indexOf('(events.js:')) || + (~line.indexOf('(node.js:')) || + (~line.indexOf('(module.js:')) || + (~line.indexOf('GeneratorFunctionPrototype.next (native)')) || + false; } - return function(stack) { + return function (stack) { stack = stack.split('\n'); - stack = reduce(stack, function(list, line) { + stack = reduce(stack, function (list, line) { if (isMochaInternal(line)) { return list; } @@ -789,6 +791,12 @@ exports.stackTraceFilter = function() { * @param {*} value * @returns {boolean} Whether or not `value` is a Promise */ -exports.isPromise = function isPromise(value) { +exports.isPromise = function isPromise (value) { return typeof value === 'object' && typeof value.then === 'function'; }; + +/** + * It's a noop. + * @api + */ +exports.noop = function () {}; diff --git a/tests/lib/mocha-3.1.0/media/logo.svg b/tests/lib/mocha-3.1.2/media/logo.svg index bc3cb4b5df..bc3cb4b5df 100644 --- a/tests/lib/mocha-3.1.0/media/logo.svg +++ b/tests/lib/mocha-3.1.2/media/logo.svg diff --git a/tests/lib/mocha-3.1.0/mocha.css b/tests/lib/mocha-3.1.2/mocha.css index ec96b003c9..ec96b003c9 100644 --- a/tests/lib/mocha-3.1.0/mocha.css +++ b/tests/lib/mocha-3.1.2/mocha.css diff --git a/tests/lib/mocha-3.1.0/mocha.js b/tests/lib/mocha-3.1.2/mocha.js index 1d5b072aca..16d5619e27 100644 --- a/tests/lib/mocha-3.1.0/mocha.js +++ b/tests/lib/mocha-3.1.2/mocha.js @@ -1,6 +1,9 @@ (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ (function (process,global){ +'use strict'; + /* eslint no-unused-vars: off */ +/* eslint-env commonjs */ /** * Shim process.stdout. @@ -37,12 +40,12 @@ var originalOnerrorHandler = global.onerror; * Revert to original onerror handler if previously defined. */ -process.removeListener = function(e, fn) { +process.removeListener = function (e, fn) { if (e === 'uncaughtException') { if (originalOnerrorHandler) { global.onerror = originalOnerrorHandler; } else { - global.onerror = function() {}; + global.onerror = function () {}; } var i = Mocha.utils.indexOf(uncaughtExceptionHandlers, fn); if (i !== -1) { @@ -55,9 +58,9 @@ process.removeListener = function(e, fn) { * Implements uncaughtException listener. */ -process.on = function(e, fn) { +process.on = function (e, fn) { if (e === 'uncaughtException') { - global.onerror = function(err, url, line) { + global.onerror = function (err, url, line) { fn(new Error(err + ' (' + url + ':' + line + ')')); return !mocha.allowUncaught; }; @@ -73,7 +76,7 @@ mocha.suite.removeAllListeners('pre-require'); var immediateQueue = []; var immediateTimeout; -function timeslice() { +function timeslice () { var immediateStart = new Date().getTime(); while (immediateQueue.length && (new Date().getTime() - immediateStart) < 100) { immediateQueue.shift()(); @@ -89,7 +92,7 @@ function timeslice() { * High-performance override of Runner.immediately. */ -Mocha.Runner.immediately = function(callback) { +Mocha.Runner.immediately = function (callback) { immediateQueue.push(callback); if (!immediateTimeout) { immediateTimeout = setTimeout(timeslice, 0); @@ -101,8 +104,8 @@ Mocha.Runner.immediately = function(callback) { * This is useful when running tests in a browser because window.onerror will * only receive the 'message' attribute of the Error. */ -mocha.throwError = function(err) { - Mocha.utils.forEach(uncaughtExceptionHandlers, function(fn) { +mocha.throwError = function (err) { + Mocha.utils.forEach(uncaughtExceptionHandlers, function (fn) { fn(err); }); throw err; @@ -113,7 +116,7 @@ mocha.throwError = function(err) { * Normally this would happen in Mocha.prototype.loadFiles. */ -mocha.ui = function(ui) { +mocha.ui = function (ui) { Mocha.prototype.ui.call(this, ui); this.suite.emit('pre-require', global, null, this); return this; @@ -123,7 +126,7 @@ mocha.ui = function(ui) { * Setup mocha with the given setting options. */ -mocha.setup = function(opts) { +mocha.setup = function (opts) { if (typeof opts === 'string') { opts = { ui: opts }; } @@ -139,7 +142,7 @@ mocha.setup = function(opts) { * Run mocha, returning the Runner. */ -mocha.run = function(fn) { +mocha.run = function (fn) { var options = mocha.options; mocha.globals('location'); @@ -154,7 +157,7 @@ mocha.run = function(fn) { mocha.invert(); } - return Mocha.prototype.run.call(mocha, function(err) { + return Mocha.prototype.run.call(mocha, function (err) { // The DOM Document is not available in Web Workers. var document = global.document; if (document && document.getElementById('mocha') && options.noHighlighting !== true) { @@ -187,12 +190,17 @@ module.exports = global; }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) },{"./lib/mocha":14,"_process":67,"browser-stdout":41}],2:[function(require,module,exports){ -/* eslint-disable no-unused-vars */ -module.exports = function(type) { - return function() {}; +'use strict'; + +function noop () {} + +module.exports = function () { + return noop; }; },{}],3:[function(require,module,exports){ +'use strict'; + /** * Module exports. */ @@ -211,7 +219,7 @@ var objToString = Object.prototype.toString; * @param {*} val The value to test. * @return {boolean} true if the value is an array, otherwise false. */ -function isArray(val) { +function isArray (val) { return objToString.call(val) === '[object Array]'; } @@ -220,7 +228,7 @@ function isArray(val) { * * @api public */ -function EventEmitter() {} +function EventEmitter () {} /** * Add a listener. @@ -230,7 +238,7 @@ function EventEmitter() {} * @param {Function} fn Event handler. * @return {EventEmitter} Emitter instance. */ -EventEmitter.prototype.on = function(name, fn) { +EventEmitter.prototype.on = function (name, fn) { if (!this.$events) { this.$events = {}; } @@ -256,10 +264,10 @@ EventEmitter.prototype.addListener = EventEmitter.prototype.on; * @param {Function} fn Event handler. * @return {EventEmitter} Emitter instance. */ -EventEmitter.prototype.once = function(name, fn) { +EventEmitter.prototype.once = function (name, fn) { var self = this; - function on() { + function on () { self.removeListener(name, on); fn.apply(this, arguments); } @@ -278,7 +286,7 @@ EventEmitter.prototype.once = function(name, fn) { * @param {Function} fn Event handler. * @return {EventEmitter} Emitter instance. */ -EventEmitter.prototype.removeListener = function(name, fn) { +EventEmitter.prototype.removeListener = function (name, fn) { if (this.$events && this.$events[name]) { var list = this.$events[name]; @@ -316,7 +324,7 @@ EventEmitter.prototype.removeListener = function(name, fn) { * @param {string} name Event name. * @return {EventEmitter} Emitter instance. */ -EventEmitter.prototype.removeAllListeners = function(name) { +EventEmitter.prototype.removeAllListeners = function (name) { if (name === undefined) { this.$events = {}; return this; @@ -336,7 +344,7 @@ EventEmitter.prototype.removeAllListeners = function(name) { * @param {string} name Event name. * @return {EventEmitter} Emitter instance. */ -EventEmitter.prototype.listeners = function(name) { +EventEmitter.prototype.listeners = function (name) { if (!this.$events) { this.$events = {}; } @@ -359,7 +367,7 @@ EventEmitter.prototype.listeners = function(name) { * @param {string} name Event name. * @return {boolean} true if at least one handler was invoked, else false. */ -EventEmitter.prototype.emit = function(name) { +EventEmitter.prototype.emit = function (name) { if (!this.$events) { return false; } @@ -388,6 +396,8 @@ EventEmitter.prototype.emit = function(name) { }; },{}],4:[function(require,module,exports){ +'use strict'; + /** * Expose `Progress`. */ @@ -397,7 +407,7 @@ module.exports = Progress; /** * Initialize a new `Progress` indicator. */ -function Progress() { +function Progress () { this.percent = 0; this.size(0); this.fontSize(11); @@ -411,7 +421,7 @@ function Progress() { * @param {number} size * @return {Progress} Progress instance. */ -Progress.prototype.size = function(size) { +Progress.prototype.size = function (size) { this._size = size; return this; }; @@ -423,7 +433,7 @@ Progress.prototype.size = function(size) { * @param {string} text * @return {Progress} Progress instance. */ -Progress.prototype.text = function(text) { +Progress.prototype.text = function (text) { this._text = text; return this; }; @@ -435,7 +445,7 @@ Progress.prototype.text = function(text) { * @param {number} size * @return {Progress} Progress instance. */ -Progress.prototype.fontSize = function(size) { +Progress.prototype.fontSize = function (size) { this._fontSize = size; return this; }; @@ -446,7 +456,7 @@ Progress.prototype.fontSize = function(size) { * @param {string} family * @return {Progress} Progress instance. */ -Progress.prototype.font = function(family) { +Progress.prototype.font = function (family) { this._font = family; return this; }; @@ -457,7 +467,7 @@ Progress.prototype.font = function(family) { * @param {number} n * @return {Progress} Progress instance. */ -Progress.prototype.update = function(n) { +Progress.prototype.update = function (n) { this.percent = n; return this; }; @@ -468,7 +478,7 @@ Progress.prototype.update = function(n) { * @param {CanvasRenderingContext2d} ctx * @return {Progress} Progress instance. */ -Progress.prototype.draw = function(ctx) { +Progress.prototype.draw = function (ctx) { try { var percent = Math.min(this.percent, 100); var size = this._size; @@ -508,11 +518,13 @@ Progress.prototype.draw = function(ctx) { },{}],5:[function(require,module,exports){ (function (global){ -exports.isatty = function isatty() { +'use strict'; + +exports.isatty = function isatty () { return true; }; -exports.getWindowSize = function getWindowSize() { +exports.getWindowSize = function getWindowSize () { if ('innerHeight' in global) { return [global.innerHeight, global.innerWidth]; } @@ -522,6 +534,8 @@ exports.getWindowSize = function getWindowSize() { }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) },{}],6:[function(require,module,exports){ +'use strict'; + /** * Module dependencies. */ @@ -539,7 +553,7 @@ module.exports = Context; * * @api private */ -function Context() {} +function Context () {} /** * Set or get the context `Runnable` to `runnable`. @@ -548,7 +562,7 @@ function Context() {} * @param {Runnable} runnable * @return {Context} */ -Context.prototype.runnable = function(runnable) { +Context.prototype.runnable = function (runnable) { if (!arguments.length) { return this._runnable; } @@ -563,7 +577,7 @@ Context.prototype.runnable = function(runnable) { * @param {number} ms * @return {Context} self */ -Context.prototype.timeout = function(ms) { +Context.prototype.timeout = function (ms) { if (!arguments.length) { return this.runnable().timeout(); } @@ -578,7 +592,7 @@ Context.prototype.timeout = function(ms) { * @param {boolean} enabled * @return {Context} self */ -Context.prototype.enableTimeouts = function(enabled) { +Context.prototype.enableTimeouts = function (enabled) { this.runnable().enableTimeouts(enabled); return this; }; @@ -590,7 +604,7 @@ Context.prototype.enableTimeouts = function(enabled) { * @param {number} ms * @return {Context} self */ -Context.prototype.slow = function(ms) { +Context.prototype.slow = function (ms) { this.runnable().slow(ms); return this; }; @@ -601,7 +615,7 @@ Context.prototype.slow = function(ms) { * @api private * @return {Context} self */ -Context.prototype.skip = function() { +Context.prototype.skip = function () { this.runnable().skip(); return this; }; @@ -613,7 +627,7 @@ Context.prototype.skip = function() { * @param {number} n * @return {Context} self */ -Context.prototype.retries = function(n) { +Context.prototype.retries = function (n) { if (!arguments.length) { return this.runnable().retries(); } @@ -627,13 +641,15 @@ Context.prototype.retries = function(n) { * @api private * @return {string} */ -Context.prototype.inspect = function() { - return JSON.stringify(this, function(key, val) { +Context.prototype.inspect = function () { + return JSON.stringify(this, function (key, val) { return key === 'runnable' || key === 'test' ? undefined : val; }, 2); }; },{"json3":54}],7:[function(require,module,exports){ +'use strict'; + /** * Module dependencies. */ @@ -654,7 +670,7 @@ module.exports = Hook; * @param {Function} fn * @api private */ -function Hook(title, fn) { +function Hook (title, fn) { Runnable.call(this, title, fn); this.type = 'hook'; } @@ -671,7 +687,7 @@ inherits(Hook, Runnable); * @return {Error} * @api public */ -Hook.prototype.error = function(err) { +Hook.prototype.error = function (err) { if (!arguments.length) { err = this._error; this._error = null; @@ -682,6 +698,8 @@ Hook.prototype.error = function(err) { }; },{"./runnable":33,"./utils":38}],8:[function(require,module,exports){ +'use strict'; + /** * Module dependencies. */ @@ -705,10 +723,10 @@ var Test = require('../test'); * * @param {Suite} suite Root suite. */ -module.exports = function(suite) { +module.exports = function (suite) { var suites = [suite]; - suite.on('pre-require', function(context, file, mocha) { + suite.on('pre-require', function (context, file, mocha) { var common = require('./common')(suites, context, mocha); context.before = common.before; @@ -722,7 +740,7 @@ module.exports = function(suite) { * and/or tests. */ - context.describe = context.context = function(title, fn) { + context.describe = context.context = function (title, fn) { return common.suite.create({ title: title, file: file, @@ -734,7 +752,7 @@ module.exports = function(suite) { * Pending describe. */ - context.xdescribe = context.xcontext = context.describe.skip = function(title, fn) { + context.xdescribe = context.xcontext = context.describe.skip = function (title, fn) { return common.suite.skip({ title: title, file: file, @@ -746,7 +764,7 @@ module.exports = function(suite) { * Exclusive suite. */ - context.describe.only = function(title, fn) { + context.describe.only = function (title, fn) { return common.suite.only({ title: title, file: file, @@ -760,7 +778,7 @@ module.exports = function(suite) { * acting as a thunk. */ - context.it = context.specify = function(title, fn) { + context.it = context.specify = function (title, fn) { var suite = suites[0]; if (suite.isPending()) { fn = null; @@ -775,7 +793,7 @@ module.exports = function(suite) { * Exclusive test-case. */ - context.it.only = function(title, fn) { + context.it.only = function (title, fn) { return common.test.only(mocha, context.it(title, fn)); }; @@ -783,14 +801,14 @@ module.exports = function(suite) { * Pending test case. */ - context.xit = context.xspecify = context.it.skip = function(title) { + context.xit = context.xspecify = context.it.skip = function (title) { context.it(title); }; /** * Number of attempts to retry. */ - context.it.retries = function(n) { + context.it.retries = function (n) { context.retries(n); }; }); @@ -809,7 +827,7 @@ var Suite = require('../suite'); * @param {Mocha} mocha * @return {Object} An object containing common functions. */ -module.exports = function(suites, context, mocha) { +module.exports = function (suites, context, mocha) { return { /** * This is only present if flag --delay is passed into Mocha. It triggers @@ -818,8 +836,8 @@ module.exports = function(suites, context, mocha) { * @param {Suite} suite The root wuite. * @return {Function} A function which runs the root suite */ - runWithSuite: function runWithSuite(suite) { - return function run() { + runWithSuite: function runWithSuite (suite) { + return function run () { suite.run(); }; }, @@ -830,7 +848,7 @@ module.exports = function(suites, context, mocha) { * @param {string} name * @param {Function} fn */ - before: function(name, fn) { + before: function (name, fn) { suites[0].beforeAll(name, fn); }, @@ -840,7 +858,7 @@ module.exports = function(suites, context, mocha) { * @param {string} name * @param {Function} fn */ - after: function(name, fn) { + after: function (name, fn) { suites[0].afterAll(name, fn); }, @@ -850,7 +868,7 @@ module.exports = function(suites, context, mocha) { * @param {string} name * @param {Function} fn */ - beforeEach: function(name, fn) { + beforeEach: function (name, fn) { suites[0].beforeEach(name, fn); }, @@ -860,7 +878,7 @@ module.exports = function(suites, context, mocha) { * @param {string} name * @param {Function} fn */ - afterEach: function(name, fn) { + afterEach: function (name, fn) { suites[0].afterEach(name, fn); }, @@ -872,7 +890,7 @@ module.exports = function(suites, context, mocha) { * @param {Object} opts * @returns {Suite} */ - only: function only(opts) { + only: function only (opts) { mocha.options.hasOnly = true; opts.isOnly = true; return this.create(opts); @@ -885,7 +903,7 @@ module.exports = function(suites, context, mocha) { * @param {Object} opts * @returns {Suite} */ - skip: function skip(opts) { + skip: function skip (opts) { opts.pending = true; return this.create(opts); }, @@ -900,7 +918,7 @@ module.exports = function(suites, context, mocha) { * @param {boolean} [opts.isOnly] Is Suite exclusive? * @returns {Suite} */ - create: function create(opts) { + create: function create (opts) { var suite = Suite.create(suites[0], opts.title); suite.pending = Boolean(opts.pending); suite.file = opts.file; @@ -929,7 +947,7 @@ module.exports = function(suites, context, mocha) { * @param {Function} test * @returns {*} */ - only: function(mocha, test) { + only: function (mocha, test) { test.parent._onlyTests = test.parent._onlyTests.concat(test); mocha.options.hasOnly = true; return test; @@ -940,7 +958,7 @@ module.exports = function(suites, context, mocha) { * * @param {string} title */ - skip: function(title) { + skip: function (title) { context.test(title); }, @@ -949,7 +967,7 @@ module.exports = function(suites, context, mocha) { * * @param {number} n */ - retries: function(n) { + retries: function (n) { context.retries(n); } } @@ -957,6 +975,8 @@ module.exports = function(suites, context, mocha) { }; },{"../suite":35}],10:[function(require,module,exports){ +'use strict'; + /** * Module dependencies. */ @@ -981,12 +1001,12 @@ var Test = require('../test'); * * @param {Suite} suite Root suite. */ -module.exports = function(suite) { +module.exports = function (suite) { var suites = [suite]; suite.on('require', visit); - function visit(obj, file) { + function visit (obj, file) { var suite; for (var key in obj) { if (typeof obj[key] === 'function') { @@ -1020,12 +1040,16 @@ module.exports = function(suite) { }; },{"../suite":35,"../test":36}],11:[function(require,module,exports){ +'use strict'; + exports.bdd = require('./bdd'); exports.tdd = require('./tdd'); exports.qunit = require('./qunit'); exports.exports = require('./exports'); },{"./bdd":8,"./exports":10,"./qunit":12,"./tdd":13}],12:[function(require,module,exports){ +'use strict'; + /** * Module dependencies. */ @@ -1057,10 +1081,10 @@ var Test = require('../test'); * * @param {Suite} suite Root suite. */ -module.exports = function(suite) { +module.exports = function (suite) { var suites = [suite]; - suite.on('pre-require', function(context, file, mocha) { + suite.on('pre-require', function (context, file, mocha) { var common = require('./common')(suites, context, mocha); context.before = common.before; @@ -1072,7 +1096,7 @@ module.exports = function(suite) { * Describe a "suite" with the given `title`. */ - context.suite = function(title) { + context.suite = function (title) { if (suites.length > 1) { suites.shift(); } @@ -1087,7 +1111,7 @@ module.exports = function(suite) { * Exclusive Suite. */ - context.suite.only = function(title) { + context.suite.only = function (title) { if (suites.length > 1) { suites.shift(); } @@ -1104,7 +1128,7 @@ module.exports = function(suite) { * acting as a thunk. */ - context.test = function(title, fn) { + context.test = function (title, fn) { var test = new Test(title, fn); test.file = file; suites[0].addTest(test); @@ -1115,7 +1139,7 @@ module.exports = function(suite) { * Exclusive test-case. */ - context.test.only = function(title, fn) { + context.test.only = function (title, fn) { return common.test.only(mocha, context.test(title, fn)); }; @@ -1125,6 +1149,8 @@ module.exports = function(suite) { }; },{"../test":36,"./common":9}],13:[function(require,module,exports){ +'use strict'; + /** * Module dependencies. */ @@ -1156,10 +1182,10 @@ var Test = require('../test'); * * @param {Suite} suite Root suite. */ -module.exports = function(suite) { +module.exports = function (suite) { var suites = [suite]; - suite.on('pre-require', function(context, file, mocha) { + suite.on('pre-require', function (context, file, mocha) { var common = require('./common')(suites, context, mocha); context.setup = common.beforeEach; @@ -1172,7 +1198,7 @@ module.exports = function(suite) { * Describe a "suite" with the given `title` and callback `fn` containing * nested suites and/or tests. */ - context.suite = function(title, fn) { + context.suite = function (title, fn) { return common.suite.create({ title: title, file: file, @@ -1183,7 +1209,7 @@ module.exports = function(suite) { /** * Pending suite. */ - context.suite.skip = function(title, fn) { + context.suite.skip = function (title, fn) { return common.suite.skip({ title: title, file: file, @@ -1194,7 +1220,7 @@ module.exports = function(suite) { /** * Exclusive test-case. */ - context.suite.only = function(title, fn) { + context.suite.only = function (title, fn) { return common.suite.only({ title: title, file: file, @@ -1206,7 +1232,7 @@ module.exports = function(suite) { * Describe a specification or test-case with the given `title` and * callback `fn` acting as a thunk. */ - context.test = function(title, fn) { + context.test = function (title, fn) { var suite = suites[0]; if (suite.isPending()) { fn = null; @@ -1221,7 +1247,7 @@ module.exports = function(suite) { * Exclusive test-case. */ - context.test.only = function(title, fn) { + context.test.only = function (title, fn) { return common.test.only(mocha, context.test(title, fn)); }; @@ -1232,6 +1258,8 @@ module.exports = function(suite) { },{"../test":36,"./common":9}],14:[function(require,module,exports){ (function (process,global,__dirname){ +'use strict'; + /*! * mocha * Copyright(c) 2011 TJ Holowaychuk <tj@vision-media.ca> @@ -1283,7 +1311,7 @@ exports.Test = require('./test'); * @param {string} name * @return {string} */ -function image(name) { +function image (name) { return path.join(__dirname, '../images', name + '.png'); } @@ -1306,7 +1334,7 @@ function image(name) { * @param {Object} options * @api public */ -function Mocha(options) { +function Mocha (options) { options = options || {}; this.files = []; this.options = options; @@ -1341,7 +1369,7 @@ function Mocha(options) { * @api public * @param {boolean} [bail] */ -Mocha.prototype.bail = function(bail) { +Mocha.prototype.bail = function (bail) { if (!arguments.length) { bail = true; } @@ -1355,7 +1383,7 @@ Mocha.prototype.bail = function(bail) { * @api public * @param {string} file */ -Mocha.prototype.addFile = function(file) { +Mocha.prototype.addFile = function (file) { this.files.push(file); return this; }; @@ -1369,7 +1397,7 @@ Mocha.prototype.addFile = function(file) { * @param {string|Function} reporter name or constructor * @param {Object} reporterOptions optional options */ -Mocha.prototype.reporter = function(reporter, reporterOptions) { +Mocha.prototype.reporter = function (reporter, reporterOptions) { if (typeof reporter === 'function') { this._reporter = reporter; } else { @@ -1390,9 +1418,9 @@ Mocha.prototype.reporter = function(reporter, reporterOptions) { } } if (!_reporter && reporter === 'teamcity') { - console.warn('The Teamcity reporter was moved to a package named ' - + 'mocha-teamcity-reporter ' - + '(https://npmjs.org/package/mocha-teamcity-reporter).'); + console.warn('The Teamcity reporter was moved to a package named ' + + 'mocha-teamcity-reporter ' + + '(https://npmjs.org/package/mocha-teamcity-reporter).'); } if (!_reporter) { throw new Error('invalid reporter "' + reporter + '"'); @@ -1409,7 +1437,7 @@ Mocha.prototype.reporter = function(reporter, reporterOptions) { * @api public * @param {string} bdd */ -Mocha.prototype.ui = function(name) { +Mocha.prototype.ui = function (name) { name = name || 'bdd'; this._ui = exports.interfaces[name]; if (!this._ui) { @@ -1421,7 +1449,7 @@ Mocha.prototype.ui = function(name) { } this._ui = this._ui(this.suite); - this.suite.on('pre-require', function(context) { + this.suite.on('pre-require', function (context) { exports.afterEach = context.afterEach || context.teardown; exports.after = context.after || context.suiteTeardown; exports.beforeEach = context.beforeEach || context.setup; @@ -1445,10 +1473,10 @@ Mocha.prototype.ui = function(name) { * * @api private */ -Mocha.prototype.loadFiles = function(fn) { +Mocha.prototype.loadFiles = function (fn) { var self = this; var suite = this.suite; - this.files.forEach(function(file) { + this.files.forEach(function (file) { file = path.resolve(file); suite.emit('pre-require', global, file, self); suite.emit('require', require(file), file, self); @@ -1462,10 +1490,10 @@ Mocha.prototype.loadFiles = function(fn) { * * @api private */ -Mocha.prototype._growl = function(runner, reporter) { +Mocha.prototype._growl = function (runner, reporter) { var notify = require('growl'); - runner.on('end', function() { + runner.on('end', function () { var stats = reporter.stats; if (stats.failures) { var msg = stats.failures + ' of ' + runner.total + ' tests failed'; @@ -1487,7 +1515,7 @@ Mocha.prototype._growl = function(runner, reporter) { * @param str * @returns {Mocha} */ -Mocha.prototype.fgrep = function(str) { +Mocha.prototype.fgrep = function (str) { return this.grep(new RegExp(escapeRe(str))); }; @@ -1500,7 +1528,7 @@ Mocha.prototype.fgrep = function(str) { * @param {RegExp|string} re * @return {Mocha} */ -Mocha.prototype.grep = function(re) { +Mocha.prototype.grep = function (re) { if (utils.isString(re)) { // extract args if it's regex-like, i.e: [string, pattern, flag] var arg = re.match(/^\/(.*)\/(g|i|)$|.*/); @@ -1516,7 +1544,7 @@ Mocha.prototype.grep = function(re) { * @return {Mocha} * @api public */ -Mocha.prototype.invert = function() { +Mocha.prototype.invert = function () { this.options.invert = true; return this; }; @@ -1530,7 +1558,7 @@ Mocha.prototype.invert = function() { * @param {boolean} ignore * @return {Mocha} */ -Mocha.prototype.ignoreLeaks = function(ignore) { +Mocha.prototype.ignoreLeaks = function (ignore) { this.options.ignoreLeaks = Boolean(ignore); return this; }; @@ -1541,7 +1569,7 @@ Mocha.prototype.ignoreLeaks = function(ignore) { * @return {Mocha} * @api public */ -Mocha.prototype.checkLeaks = function() { +Mocha.prototype.checkLeaks = function () { this.options.ignoreLeaks = false; return this; }; @@ -1552,7 +1580,7 @@ Mocha.prototype.checkLeaks = function() { * @return {Mocha} * @api public */ -Mocha.prototype.fullTrace = function() { +Mocha.prototype.fullTrace = function () { this.options.fullStackTrace = true; return this; }; @@ -1563,7 +1591,7 @@ Mocha.prototype.fullTrace = function() { * @return {Mocha} * @api public */ -Mocha.prototype.growl = function() { +Mocha.prototype.growl = function () { this.options.growl = true; return this; }; @@ -1577,7 +1605,7 @@ Mocha.prototype.growl = function() { * @param {Array|string} globals * @return {Mocha} */ -Mocha.prototype.globals = function(globals) { +Mocha.prototype.globals = function (globals) { this.options.globals = (this.options.globals || []).concat(globals); return this; }; @@ -1591,7 +1619,7 @@ Mocha.prototype.globals = function(globals) { * @param {boolean} colors * @return {Mocha} */ -Mocha.prototype.useColors = function(colors) { +Mocha.prototype.useColors = function (colors) { if (colors !== undefined) { this.options.useColors = colors; } @@ -1607,7 +1635,7 @@ Mocha.prototype.useColors = function(colors) { * @param {boolean} inlineDiffs * @return {Mocha} */ -Mocha.prototype.useInlineDiffs = function(inlineDiffs) { +Mocha.prototype.useInlineDiffs = function (inlineDiffs) { this.options.useInlineDiffs = inlineDiffs !== undefined && inlineDiffs; return this; }; @@ -1621,7 +1649,7 @@ Mocha.prototype.useInlineDiffs = function(inlineDiffs) { * @param {number} timeout * @return {Mocha} */ -Mocha.prototype.timeout = function(timeout) { +Mocha.prototype.timeout = function (timeout) { this.suite.timeout(timeout); return this; }; @@ -1633,7 +1661,7 @@ Mocha.prototype.timeout = function(timeout) { * @return {Mocha} * @api public */ -Mocha.prototype.retries = function(n) { +Mocha.prototype.retries = function (n) { this.suite.retries(n); return this; }; @@ -1647,7 +1675,7 @@ Mocha.prototype.retries = function(n) { * @param {number} slow * @return {Mocha} */ -Mocha.prototype.slow = function(slow) { +Mocha.prototype.slow = function (slow) { this.suite.slow(slow); return this; }; @@ -1661,7 +1689,7 @@ Mocha.prototype.slow = function(slow) { * @param {boolean} enabled * @return {Mocha} */ -Mocha.prototype.enableTimeouts = function(enabled) { +Mocha.prototype.enableTimeouts = function (enabled) { this.suite.enableTimeouts(arguments.length && enabled !== undefined ? enabled : true); return this; }; @@ -1672,7 +1700,7 @@ Mocha.prototype.enableTimeouts = function(enabled) { * @return {Mocha} * @api public */ -Mocha.prototype.asyncOnly = function() { +Mocha.prototype.asyncOnly = function () { this.options.asyncOnly = true; return this; }; @@ -1682,7 +1710,7 @@ Mocha.prototype.asyncOnly = function() { * * @api public */ -Mocha.prototype.noHighlighting = function() { +Mocha.prototype.noHighlighting = function () { this.options.noHighlighting = true; return this; }; @@ -1693,7 +1721,7 @@ Mocha.prototype.noHighlighting = function() { * @return {Mocha} * @api public */ -Mocha.prototype.allowUncaught = function() { +Mocha.prototype.allowUncaught = function () { this.options.allowUncaught = true; return this; }; @@ -1702,7 +1730,7 @@ Mocha.prototype.allowUncaught = function() { * Delay root suite execution. * @returns {Mocha} */ -Mocha.prototype.delay = function delay() { +Mocha.prototype.delay = function delay () { this.options.delay = true; return this; }; @@ -1714,7 +1742,7 @@ Mocha.prototype.delay = function delay() { * @param {Function} fn * @return {Runner} */ -Mocha.prototype.run = function(fn) { +Mocha.prototype.run = function (fn) { if (this.files.length) { this.loadFiles(); } @@ -1742,7 +1770,7 @@ Mocha.prototype.run = function(fn) { } exports.reporters.Base.inlineDiffs = options.useInlineDiffs; - function done(failures) { + function done (failures) { if (reporter.done) { reporter.done(failures, fn); } else { @@ -1755,6 +1783,8 @@ Mocha.prototype.run = function(fn) { }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},"/lib") },{"./context":6,"./hook":7,"./interfaces":11,"./reporters":21,"./runnable":33,"./runner":34,"./suite":35,"./test":36,"./utils":38,"_process":67,"escape-string-regexp":47,"growl":49,"path":42}],15:[function(require,module,exports){ +'use strict'; + /** * Helpers. */ @@ -1777,7 +1807,7 @@ var y = d * 365.25; * @param {Object} options * @return {string|number} */ -module.exports = function(val, options) { +module.exports = function (val, options) { options = options || {}; if (typeof val === 'string') { return parse(val); @@ -1793,7 +1823,7 @@ module.exports = function(val, options) { * @param {string} str * @return {number} */ -function parse(str) { +function parse (str) { var match = (/^((?:\d+)?\.?\d+) *(ms|seconds?|s|minutes?|m|hours?|h|days?|d|years?|y)?$/i).exec(str); if (!match) { return; @@ -1835,7 +1865,7 @@ function parse(str) { * @param {number} ms * @return {string} */ -function shortFormat(ms) { +function shortFormat (ms) { if (ms >= d) { return Math.round(ms / d) + 'd'; } @@ -1858,12 +1888,12 @@ function shortFormat(ms) { * @param {number} ms * @return {string} */ -function longFormat(ms) { - return plural(ms, d, 'day') - || plural(ms, h, 'hour') - || plural(ms, m, 'minute') - || plural(ms, s, 'second') - || ms + ' ms'; +function longFormat (ms) { + return plural(ms, d, 'day') || + plural(ms, h, 'hour') || + plural(ms, m, 'minute') || + plural(ms, s, 'second') || + ms + ' ms'; } /** @@ -1874,7 +1904,7 @@ function longFormat(ms) { * @param {number} n * @param {string} name */ -function plural(ms, n, name) { +function plural (ms, n, name) { if (ms < n) { return; } @@ -1885,6 +1915,7 @@ function plural(ms, n, name) { } },{}],16:[function(require,module,exports){ +'use strict'; /** * Expose `Pending`. @@ -1897,12 +1928,14 @@ module.exports = Pending; * * @param {string} message */ -function Pending(message) { +function Pending (message) { this.message = message; } },{}],17:[function(require,module,exports){ (function (process,global){ +'use strict'; + /** * Module dependencies. */ @@ -2006,7 +2039,7 @@ if (process.platform === 'win32') { * @return {string} * @api private */ -var color = exports.color = function(type, str) { +var color = exports.color = function (type, str) { if (!exports.useColors) { return String(str); } @@ -2032,23 +2065,23 @@ if (isatty) { */ exports.cursor = { - hide: function() { + hide: function () { isatty && process.stdout.write('\u001b[?25l'); }, - show: function() { + show: function () { isatty && process.stdout.write('\u001b[?25h'); }, - deleteLine: function() { + deleteLine: function () { isatty && process.stdout.write('\u001b[2K'); }, - beginningOfLine: function() { + beginningOfLine: function () { isatty && process.stdout.write('\u001b[0G'); }, - CR: function() { + CR: function () { if (isatty) { exports.cursor.deleteLine(); exports.cursor.beginningOfLine(); @@ -2065,13 +2098,13 @@ exports.cursor = { * @api public */ -exports.list = function(failures) { +exports.list = function (failures) { console.log(); - failures.forEach(function(test, i) { + failures.forEach(function (test, i) { // format - var fmt = color('error title', ' %s) %s:\n') - + color('error message', ' %s') - + color('error stack', '\n%s\n'); + var fmt = color('error title', ' %s) %s:\n') + + color('error message', ' %s') + + color('error stack', '\n%s\n'); // msg var msg; @@ -2141,7 +2174,7 @@ exports.list = function(failures) { * @api public */ -function Base(runner) { +function Base (runner) { var stats = this.stats = { suites: 0, tests: 0, passes: 0, pending: 0, failures: 0 }; var failures = this.failures = []; @@ -2152,21 +2185,21 @@ function Base(runner) { runner.stats = stats; - runner.on('start', function() { + runner.on('start', function () { stats.start = new Date(); }); - runner.on('suite', function(suite) { + runner.on('suite', function (suite) { stats.suites = stats.suites || 0; suite.root || stats.suites++; }); - runner.on('test end', function() { + runner.on('test end', function () { stats.tests = stats.tests || 0; stats.tests++; }); - runner.on('pass', function(test) { + runner.on('pass', function (test) { stats.passes = stats.passes || 0; if (test.duration > test.slow()) { @@ -2180,19 +2213,19 @@ function Base(runner) { stats.passes++; }); - runner.on('fail', function(test, err) { + runner.on('fail', function (test, err) { stats.failures = stats.failures || 0; stats.failures++; test.err = err; failures.push(test); }); - runner.on('end', function() { + runner.on('end', function () { stats.end = new Date(); stats.duration = new Date() - stats.start; }); - runner.on('pending', function() { + runner.on('pending', function () { stats.pending++; }); } @@ -2203,16 +2236,16 @@ function Base(runner) { * * @api public */ -Base.prototype.epilogue = function() { +Base.prototype.epilogue = function () { var stats = this.stats; var fmt; console.log(); // passes - fmt = color('bright pass', ' ') - + color('green', ' %d passing') - + color('light', ' (%s)'); + fmt = color('bright pass', ' ') + + color('green', ' %d passing') + + color('light', ' (%s)'); console.log(fmt, stats.passes || 0, @@ -2220,8 +2253,8 @@ Base.prototype.epilogue = function() { // pending if (stats.pending) { - fmt = color('pending', ' ') - + color('pending', ' %d pending'); + fmt = color('pending', ' ') + + color('pending', ' %d pending'); console.log(fmt, stats.pending); } @@ -2247,7 +2280,7 @@ Base.prototype.epilogue = function() { * @param {string} len * @return {string} */ -function pad(str, len) { +function pad (str, len) { str = String(str); return Array(len - str.length + 1).join(' ') + str; } @@ -2260,26 +2293,26 @@ function pad(str, len) { * @param {boolean} escape * @return {string} Diff */ -function inlineDiff(err, escape) { +function inlineDiff (err, escape) { var msg = errorDiff(err, 'WordsWithSpace', escape); // linenos var lines = msg.split('\n'); if (lines.length > 4) { var width = String(lines.length).length; - msg = lines.map(function(str, i) { + msg = lines.map(function (str, i) { return pad(++i, width) + ' |' + ' ' + str; }).join('\n'); } // legend - msg = '\n' - + color('diff removed', 'actual') - + ' ' - + color('diff added', 'expected') - + '\n\n' - + msg - + '\n'; + msg = '\n' + + color('diff removed', 'actual') + + ' ' + + color('diff added', 'expected') + + '\n\n' + + msg + + '\n'; // indent msg = msg.replace(/^/gm, ' '); @@ -2294,9 +2327,9 @@ function inlineDiff(err, escape) { * @param {boolean} escape * @return {string} The diff. */ -function unifiedDiff(err, escape) { +function unifiedDiff (err, escape) { var indent = ' '; - function cleanUp(line) { + function cleanUp (line) { if (escape) { line = escapeInvisibles(line); } @@ -2306,7 +2339,7 @@ function unifiedDiff(err, escape) { if (line[0] === '-') { return indent + colorLines('diff removed', line); } - if (line.match(/\@\@/)) { + if (line.match(/@@/)) { return null; } if (line.match(/\\ No newline/)) { @@ -2314,16 +2347,16 @@ function unifiedDiff(err, escape) { } return indent + line; } - function notBlank(line) { + function notBlank (line) { return typeof line !== 'undefined' && line !== null; } var msg = diff.createPatch('string', err.actual, err.expected); var lines = msg.split('\n').splice(4); - return '\n ' - + colorLines('diff added', '+ expected') + ' ' - + colorLines('diff removed', '- actual') - + '\n\n' - + lines.map(cleanUp).filter(notBlank).join('\n'); + return '\n ' + + colorLines('diff added', '+ expected') + ' ' + + colorLines('diff removed', '- actual') + + '\n\n' + + lines.map(cleanUp).filter(notBlank).join('\n'); } /** @@ -2335,10 +2368,10 @@ function unifiedDiff(err, escape) { * @param {boolean} escape * @return {string} */ -function errorDiff(err, type, escape) { +function errorDiff (err, type, escape) { var actual = escape ? escapeInvisibles(err.actual) : err.actual; var expected = escape ? escapeInvisibles(err.expected) : err.expected; - return diff['diff' + type](actual, expected).map(function(str) { + return diff['diff' + type](actual, expected).map(function (str) { if (str.added) { return colorLines('diff added', str.value); } @@ -2356,7 +2389,7 @@ function errorDiff(err, type, escape) { * @param {string} line * @return {string} */ -function escapeInvisibles(line) { +function escapeInvisibles (line) { return line.replace(/\t/g, '<tab>') .replace(/\r/g, '<CR>') .replace(/\n/g, '<LF>\n'); @@ -2370,8 +2403,8 @@ function escapeInvisibles(line) { * @param {string} str * @return {string} */ -function colorLines(name, str) { - return str.split('\n').map(function(str) { +function colorLines (name, str) { + return str.split('\n').map(function (str) { return color(name, str); }).join('\n'); } @@ -2389,12 +2422,14 @@ var objToString = Object.prototype.toString; * @param {Object} b * @return {boolean} */ -function sameType(a, b) { +function sameType (a, b) { return objToString.call(a) === objToString.call(b); } }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) },{"../ms":15,"../utils":38,"_process":67,"diff":46,"supports-color":42,"tty":5}],18:[function(require,module,exports){ +'use strict'; + /** * Module dependencies. */ @@ -2414,16 +2449,16 @@ exports = module.exports = Doc; * @param {Runner} runner * @api public */ -function Doc(runner) { +function Doc (runner) { Base.call(this, runner); var indents = 2; - function indent() { + function indent () { return Array(indents).join(' '); } - runner.on('suite', function(suite) { + runner.on('suite', function (suite) { if (suite.root) { return; } @@ -2434,7 +2469,7 @@ function Doc(runner) { console.log('%s<dl>', indent()); }); - runner.on('suite end', function(suite) { + runner.on('suite end', function (suite) { if (suite.root) { return; } @@ -2444,13 +2479,13 @@ function Doc(runner) { --indents; }); - runner.on('pass', function(test) { + runner.on('pass', function (test) { console.log('%s <dt>%s</dt>', indent(), utils.escape(test.title)); var code = utils.escape(utils.clean(test.body)); console.log('%s <dd><pre><code>%s</code></pre></dd>', indent(), code); }); - runner.on('fail', function(test, err) { + runner.on('fail', function (test, err) { console.log('%s <dt class="error">%s</dt>', indent(), utils.escape(test.title)); var code = utils.escape(utils.clean(test.body)); console.log('%s <dd class="error"><pre><code>%s</code></pre></dd>', indent(), code); @@ -2460,6 +2495,8 @@ function Doc(runner) { },{"../utils":38,"./base":17}],19:[function(require,module,exports){ (function (process){ +'use strict'; + /** * Module dependencies. */ @@ -2480,25 +2517,25 @@ exports = module.exports = Dot; * @api public * @param {Runner} runner */ -function Dot(runner) { +function Dot (runner) { Base.call(this, runner); var self = this; - var width = Base.window.width * .75 | 0; + var width = Base.window.width * 0.75 | 0; var n = -1; - runner.on('start', function() { + runner.on('start', function () { process.stdout.write('\n'); }); - runner.on('pending', function() { + runner.on('pending', function () { if (++n % width === 0) { process.stdout.write('\n '); } process.stdout.write(color('pending', Base.symbols.comma)); }); - runner.on('pass', function(test) { + runner.on('pass', function (test) { if (++n % width === 0) { process.stdout.write('\n '); } @@ -2509,14 +2546,14 @@ function Dot(runner) { } }); - runner.on('fail', function() { + runner.on('fail', function () { if (++n % width === 0) { process.stdout.write('\n '); } process.stdout.write(color('fail', Base.symbols.bang)); }); - runner.on('end', function() { + runner.on('end', function () { console.log(); self.epilogue(); }); @@ -2530,6 +2567,8 @@ inherits(Dot, Base); }).call(this,require('_process')) },{"../utils":38,"./base":17,"_process":67}],20:[function(require,module,exports){ (function (global){ +'use strict'; + /* eslint-env browser */ /** @@ -2564,12 +2603,12 @@ exports = module.exports = HTML; * Stats template. */ -var statsTemplate = '<ul id="mocha-stats">' - + '<li class="progress"><canvas width="40" height="40"></canvas></li>' - + '<li class="passes"><a href="javascript:void(0);">passes:</a> <em>0</em></li>' - + '<li class="failures"><a href="javascript:void(0);">failures:</a> <em>0</em></li>' - + '<li class="duration">duration: <em>0</em>s</li>' - + '</ul>'; +var statsTemplate = '<ul id="mocha-stats">' + + '<li class="progress"><canvas width="40" height="40"></canvas></li>' + + '<li class="passes"><a href="javascript:void(0);">passes:</a> <em>0</em></li>' + + '<li class="failures"><a href="javascript:void(0);">failures:</a> <em>0</em></li>' + + '<li class="duration">duration: <em>0</em>s</li>' + + '</ul>'; /** * Initialize a new `HTML` reporter. @@ -2577,7 +2616,7 @@ var statsTemplate = '<ul id="mocha-stats">' * @api public * @param {Runner} runner */ -function HTML(runner) { +function HTML (runner) { Base.call(this, runner); var self = this; @@ -2612,7 +2651,7 @@ function HTML(runner) { } // pass toggle - on(passesLink, 'click', function(evt) { + on(passesLink, 'click', function (evt) { evt.preventDefault(); unhide(); var name = (/pass/).test(report.className) ? '' : ' pass'; @@ -2623,7 +2662,7 @@ function HTML(runner) { }); // failure toggle - on(failuresLink, 'click', function(evt) { + on(failuresLink, 'click', function (evt) { evt.preventDefault(); unhide(); var name = (/fail/).test(report.className) ? '' : ' fail'; @@ -2640,7 +2679,7 @@ function HTML(runner) { progress.size(40); } - runner.on('suite', function(suite) { + runner.on('suite', function (suite) { if (suite.root) { return; } @@ -2655,7 +2694,7 @@ function HTML(runner) { el.appendChild(stack[0]); }); - runner.on('suite end', function(suite) { + runner.on('suite end', function (suite) { if (suite.root) { updateStats(); return; @@ -2663,17 +2702,17 @@ function HTML(runner) { stack.shift(); }); - runner.on('pass', function(test) { + runner.on('pass', function (test) { var url = self.testURL(test); - var markup = '<li class="test pass %e"><h2>%e<span class="duration">%ems</span> ' - + '<a href="%s" class="replay">‣</a></h2></li>'; + var markup = '<li class="test pass %e"><h2>%e<span class="duration">%ems</span> ' + + '<a href="%s" class="replay">‣</a></h2></li>'; var el = fragment(markup, test.speed, test.title, test.duration, url); self.addCodeToggle(el, test.body); appendToStack(el); updateStats(); }); - runner.on('fail', function(test) { + runner.on('fail', function (test) { var el = fragment('<li class="test fail"><h2>%e <a href="%e" class="replay">‣</a></h2></li>', test.title, self.testURL(test)); var stackString; // Note: Includes leading newline @@ -2713,20 +2752,20 @@ function HTML(runner) { updateStats(); }); - runner.on('pending', function(test) { + runner.on('pending', function (test) { var el = fragment('<li class="test pass pending"><h2>%e</h2></li>', test.title); appendToStack(el); updateStats(); }); - function appendToStack(el) { + function appendToStack (el) { // Don't call .appendChild if #mocha-report was already .shift()'ed off the stack. if (stack[0]) { stack[0].appendChild(el); } } - function updateStats() { + function updateStats () { // TODO: add to stats var percent = stats.tests / runner.total * 100 | 0; if (progress) { @@ -2747,7 +2786,7 @@ function HTML(runner) { * @param {string} s * @return {string} A new URL. */ -function makeUrl(s) { +function makeUrl (s) { var search = window.location.search; // Remove previous grep query parameter if present @@ -2763,7 +2802,7 @@ function makeUrl(s) { * * @param {Object} [suite] */ -HTML.prototype.suiteURL = function(suite) { +HTML.prototype.suiteURL = function (suite) { return makeUrl(suite.fullTitle()); }; @@ -2772,7 +2811,7 @@ HTML.prototype.suiteURL = function(suite) { * * @param {Object} [test] */ -HTML.prototype.testURL = function(test) { +HTML.prototype.testURL = function (test) { return makeUrl(test.fullTitle()); }; @@ -2782,10 +2821,10 @@ HTML.prototype.testURL = function(test) { * @param {HTMLLIElement} el * @param {string} contents */ -HTML.prototype.addCodeToggle = function(el, contents) { +HTML.prototype.addCodeToggle = function (el, contents) { var h2 = el.getElementsByTagName('h2')[0]; - on(h2, 'click', function() { + on(h2, 'click', function () { pre.style.display = pre.style.display === 'none' ? 'block' : 'none'; }); @@ -2799,7 +2838,7 @@ HTML.prototype.addCodeToggle = function(el, contents) { * * @param {string} msg */ -function error(msg) { +function error (msg) { document.body.appendChild(fragment('<div id="mocha-error">%s</div>', msg)); } @@ -2808,12 +2847,12 @@ function error(msg) { * * @param {string} html */ -function fragment(html) { +function fragment (html) { var args = arguments; var div = document.createElement('div'); var i = 1; - div.innerHTML = html.replace(/%([se])/g, function(_, type) { + div.innerHTML = html.replace(/%([se])/g, function (_, type) { switch (type) { case 's': return String(args[i++]); case 'e': return escape(args[i++]); @@ -2830,7 +2869,7 @@ function fragment(html) { * * @param {text} classname */ -function hideSuitesWithout(classname) { +function hideSuitesWithout (classname) { var suites = document.getElementsByClassName('suite'); for (var i = 0; i < suites.length; i++) { var els = suites[i].getElementsByClassName(classname); @@ -2843,7 +2882,7 @@ function hideSuitesWithout(classname) { /** * Unhide .hidden suites. */ -function unhide() { +function unhide () { var els = document.getElementsByClassName('suite hidden'); for (var i = 0; i < els.length; ++i) { els[i].className = els[i].className.replace('suite hidden', 'suite'); @@ -2856,7 +2895,7 @@ function unhide() { * @param {HTMLElement} el * @param {string} contents */ -function text(el, contents) { +function text (el, contents) { if (el.textContent) { el.textContent = contents; } else { @@ -2867,7 +2906,7 @@ function text(el, contents) { /** * Listen on `event` with callback `fn`. */ -function on(el, event, fn) { +function on (el, event, fn) { if (el.addEventListener) { el.addEventListener(event, fn, false); } else { @@ -2877,6 +2916,8 @@ function on(el, event, fn) { }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) },{"../browser/progress":4,"../utils":38,"./base":17,"escape-string-regexp":47}],21:[function(require,module,exports){ +'use strict'; + // Alias exports to a their normalized format Mocha#reporter to prevent a need // for dynamic (try/catch) requires, which Browserify doesn't handle. exports.Base = exports.base = require('./base'); @@ -2897,6 +2938,8 @@ exports.JSONStream = exports['json-stream'] = require('./json-stream'); },{"./base":17,"./doc":18,"./dot":19,"./html":20,"./json":23,"./json-stream":22,"./landing":24,"./list":25,"./markdown":26,"./min":27,"./nyan":28,"./progress":29,"./spec":30,"./tap":31,"./xunit":32}],22:[function(require,module,exports){ (function (process){ +'use strict'; + /** * Module dependencies. */ @@ -2916,28 +2959,28 @@ exports = module.exports = List; * @api public * @param {Runner} runner */ -function List(runner) { +function List (runner) { Base.call(this, runner); var self = this; var total = runner.total; - runner.on('start', function() { + runner.on('start', function () { console.log(JSON.stringify(['start', { total: total }])); }); - runner.on('pass', function(test) { + runner.on('pass', function (test) { console.log(JSON.stringify(['pass', clean(test)])); }); - runner.on('fail', function(test, err) { + runner.on('fail', function (test, err) { test = clean(test); test.err = err.message; test.stack = err.stack || null; console.log(JSON.stringify(['fail', test])); }); - runner.on('end', function() { + runner.on('end', function () { process.stdout.write(JSON.stringify(['end', self.stats])); }); } @@ -2950,7 +2993,7 @@ function List(runner) { * @param {Object} test * @return {Object} */ -function clean(test) { +function clean (test) { return { title: test.title, fullTitle: test.fullTitle(), @@ -2962,6 +3005,8 @@ function clean(test) { }).call(this,require('_process')) },{"./base":17,"_process":67,"json3":54}],23:[function(require,module,exports){ (function (process){ +'use strict'; + /** * Module dependencies. */ @@ -2980,7 +3025,7 @@ exports = module.exports = JSONReporter; * @api public * @param {Runner} runner */ -function JSONReporter(runner) { +function JSONReporter (runner) { Base.call(this, runner); var self = this; @@ -2989,23 +3034,23 @@ function JSONReporter(runner) { var failures = []; var passes = []; - runner.on('test end', function(test) { + runner.on('test end', function (test) { tests.push(test); }); - runner.on('pass', function(test) { + runner.on('pass', function (test) { passes.push(test); }); - runner.on('fail', function(test) { + runner.on('fail', function (test) { failures.push(test); }); - runner.on('pending', function(test) { + runner.on('pending', function (test) { pending.push(test); }); - runner.on('end', function() { + runner.on('end', function () { var obj = { stats: self.stats, tests: tests.map(clean), @@ -3028,7 +3073,7 @@ function JSONReporter(runner) { * @param {Object} test * @return {Object} */ -function clean(test) { +function clean (test) { return { title: test.title, fullTitle: test.fullTitle(), @@ -3045,9 +3090,9 @@ function clean(test) { * @param {Error} err * @return {Object} */ -function errorJSON(err) { +function errorJSON (err) { var res = {}; - Object.getOwnPropertyNames(err).forEach(function(key) { + Object.getOwnPropertyNames(err).forEach(function (key) { res[key] = err[key]; }, err); return res; @@ -3056,6 +3101,8 @@ function errorJSON(err) { }).call(this,require('_process')) },{"./base":17,"_process":67}],24:[function(require,module,exports){ (function (process){ +'use strict'; + /** * Module dependencies. */ @@ -3095,28 +3142,28 @@ Base.colors.runway = 90; * @api public * @param {Runner} runner */ -function Landing(runner) { +function Landing (runner) { Base.call(this, runner); var self = this; - var width = Base.window.width * .75 | 0; + var width = Base.window.width * 0.75 | 0; var total = runner.total; var stream = process.stdout; var plane = color('plane', '✈'); var crashed = -1; var n = 0; - function runway() { + function runway () { var buf = Array(width).join('-'); return ' ' + color('runway', buf); } - runner.on('start', function() { + runner.on('start', function () { stream.write('\n\n\n '); cursor.hide(); }); - runner.on('test end', function(test) { + runner.on('test end', function (test) { // check if the plane crashed var col = crashed === -1 ? width * ++n / total | 0 : crashed; @@ -3137,7 +3184,7 @@ function Landing(runner) { stream.write('\u001b[0m'); }); - runner.on('end', function() { + runner.on('end', function () { cursor.show(); console.log(); self.epilogue(); @@ -3152,6 +3199,8 @@ inherits(Landing, Base); }).call(this,require('_process')) },{"../utils":38,"./base":17,"_process":67}],25:[function(require,module,exports){ (function (process){ +'use strict'; + /** * Module dependencies. */ @@ -3173,35 +3222,35 @@ exports = module.exports = List; * @api public * @param {Runner} runner */ -function List(runner) { +function List (runner) { Base.call(this, runner); var self = this; var n = 0; - runner.on('start', function() { + runner.on('start', function () { console.log(); }); - runner.on('test', function(test) { + runner.on('test', function (test) { process.stdout.write(color('pass', ' ' + test.fullTitle() + ': ')); }); - runner.on('pending', function(test) { - var fmt = color('checkmark', ' -') - + color('pending', ' %s'); + runner.on('pending', function (test) { + var fmt = color('checkmark', ' -') + + color('pending', ' %s'); console.log(fmt, test.fullTitle()); }); - runner.on('pass', function(test) { - var fmt = color('checkmark', ' ' + Base.symbols.dot) - + color('pass', ' %s: ') - + color(test.speed, '%dms'); + runner.on('pass', function (test) { + var fmt = color('checkmark', ' ' + Base.symbols.dot) + + color('pass', ' %s: ') + + color(test.speed, '%dms'); cursor.CR(); console.log(fmt, test.fullTitle(), test.duration); }); - runner.on('fail', function(test) { + runner.on('fail', function (test) { cursor.CR(); console.log(color('fail', ' %d) %s'), ++n, test.fullTitle()); }); @@ -3217,6 +3266,8 @@ inherits(List, Base); }).call(this,require('_process')) },{"../utils":38,"./base":17,"_process":67}],26:[function(require,module,exports){ (function (process){ +'use strict'; + /** * Module dependencies. */ @@ -3242,29 +3293,29 @@ exports = module.exports = Markdown; * @api public * @param {Runner} runner */ -function Markdown(runner) { +function Markdown (runner) { Base.call(this, runner); var level = 0; var buf = ''; - function title(str) { + function title (str) { return Array(level).join('#') + ' ' + str; } - function mapTOC(suite, obj) { + function mapTOC (suite, obj) { var ret = obj; var key = SUITE_PREFIX + suite.title; obj = obj[key] = obj[key] || { suite: suite }; - suite.suites.forEach(function(suite) { + suite.suites.forEach(function (suite) { mapTOC(suite, obj); }); return ret; } - function stringifyTOC(obj, level) { + function stringifyTOC (obj, level) { ++level; var buf = ''; var link; @@ -3282,25 +3333,25 @@ function Markdown(runner) { return buf; } - function generateTOC(suite) { + function generateTOC (suite) { var obj = mapTOC(suite, {}); return stringifyTOC(obj, 0); } generateTOC(runner.suite); - runner.on('suite', function(suite) { + runner.on('suite', function (suite) { ++level; var slug = utils.slug(suite.fullTitle()); buf += '<a name="' + slug + '"></a>' + '\n'; buf += title(suite.title) + '\n'; }); - runner.on('suite end', function() { + runner.on('suite end', function () { --level; }); - runner.on('pass', function(test) { + runner.on('pass', function (test) { var code = utils.clean(test.body); buf += test.title + '.\n'; buf += '\n```js\n'; @@ -3308,7 +3359,7 @@ function Markdown(runner) { buf += '```\n\n'; }); - runner.on('end', function() { + runner.on('end', function () { process.stdout.write('# TOC\n'); process.stdout.write(generateTOC(runner.suite)); process.stdout.write(buf); @@ -3318,6 +3369,8 @@ function Markdown(runner) { }).call(this,require('_process')) },{"../utils":38,"./base":17,"_process":67}],27:[function(require,module,exports){ (function (process){ +'use strict'; + /** * Module dependencies. */ @@ -3337,10 +3390,10 @@ exports = module.exports = Min; * @api public * @param {Runner} runner */ -function Min(runner) { +function Min (runner) { Base.call(this, runner); - runner.on('start', function() { + runner.on('start', function () { // clear screen process.stdout.write('\u001b[2J'); // set cursor position @@ -3358,6 +3411,8 @@ inherits(Min, Base); }).call(this,require('_process')) },{"../utils":38,"./base":17,"_process":67}],28:[function(require,module,exports){ (function (process){ +'use strict'; + /** * Module dependencies. */ @@ -3378,11 +3433,11 @@ exports = module.exports = NyanCat; * @api public */ -function NyanCat(runner) { +function NyanCat (runner) { Base.call(this, runner); var self = this; - var width = Base.window.width * .75 | 0; + var width = Base.window.width * 0.75 | 0; var nyanCatWidth = this.nyanCatWidth = 11; this.colorIndex = 0; @@ -3393,24 +3448,24 @@ function NyanCat(runner) { this.trajectories = [[], [], [], []]; this.trajectoryWidthMax = (width - nyanCatWidth); - runner.on('start', function() { + runner.on('start', function () { Base.cursor.hide(); self.draw(); }); - runner.on('pending', function() { + runner.on('pending', function () { self.draw(); }); - runner.on('pass', function() { + runner.on('pass', function () { self.draw(); }); - runner.on('fail', function() { + runner.on('fail', function () { self.draw(); }); - runner.on('end', function() { + runner.on('end', function () { Base.cursor.show(); for (var i = 0; i < self.numberOfLines; i++) { write('\n'); @@ -3430,7 +3485,7 @@ inherits(NyanCat, Base); * @api private */ -NyanCat.prototype.draw = function() { +NyanCat.prototype.draw = function () { this.appendRainbow(); this.drawScoreboard(); this.drawRainbow(); @@ -3445,10 +3500,10 @@ NyanCat.prototype.draw = function() { * @api private */ -NyanCat.prototype.drawScoreboard = function() { +NyanCat.prototype.drawScoreboard = function () { var stats = this.stats; - function draw(type, n) { + function draw (type, n) { write(' '); write(Base.color(type, n)); write('\n'); @@ -3468,7 +3523,7 @@ NyanCat.prototype.drawScoreboard = function() { * @api private */ -NyanCat.prototype.appendRainbow = function() { +NyanCat.prototype.appendRainbow = function () { var segment = this.tick ? '_' : '-'; var rainbowified = this.rainbowify(segment); @@ -3487,10 +3542,10 @@ NyanCat.prototype.appendRainbow = function() { * @api private */ -NyanCat.prototype.drawRainbow = function() { +NyanCat.prototype.drawRainbow = function () { var self = this; - this.trajectories.forEach(function(line) { + this.trajectories.forEach(function (line) { write('\u001b[' + self.scoreboardWidth + 'C'); write(line.join('')); write('\n'); @@ -3504,7 +3559,7 @@ NyanCat.prototype.drawRainbow = function() { * * @api private */ -NyanCat.prototype.drawNyanCat = function() { +NyanCat.prototype.drawNyanCat = function () { var self = this; var startWidth = this.scoreboardWidth + this.trajectories[0].length; var dist = '\u001b[' + startWidth + 'C'; @@ -3540,7 +3595,7 @@ NyanCat.prototype.drawNyanCat = function() { * @return {string} */ -NyanCat.prototype.face = function() { +NyanCat.prototype.face = function () { var stats = this.stats; if (stats.failures) { return '( x .x)'; @@ -3559,7 +3614,7 @@ NyanCat.prototype.face = function() { * @param {number} n */ -NyanCat.prototype.cursorUp = function(n) { +NyanCat.prototype.cursorUp = function (n) { write('\u001b[' + n + 'A'); }; @@ -3570,7 +3625,7 @@ NyanCat.prototype.cursorUp = function(n) { * @param {number} n */ -NyanCat.prototype.cursorDown = function(n) { +NyanCat.prototype.cursorDown = function (n) { write('\u001b[' + n + 'B'); }; @@ -3580,7 +3635,7 @@ NyanCat.prototype.cursorDown = function(n) { * @api private * @return {Array} */ -NyanCat.prototype.generateColors = function() { +NyanCat.prototype.generateColors = function () { var colors = []; for (var i = 0; i < (6 * 7); i++) { @@ -3602,7 +3657,7 @@ NyanCat.prototype.generateColors = function() { * @param {string} str * @return {string} */ -NyanCat.prototype.rainbowify = function(str) { +NyanCat.prototype.rainbowify = function (str) { if (!Base.useColors) { return str; } @@ -3616,13 +3671,15 @@ NyanCat.prototype.rainbowify = function(str) { * * @param {string} string A message to write to stdout. */ -function write(string) { +function write (string) { process.stdout.write(string); } }).call(this,require('_process')) },{"../utils":38,"./base":17,"_process":67}],29:[function(require,module,exports){ (function (process){ +'use strict'; + /** * Module dependencies. */ @@ -3651,11 +3708,11 @@ Base.colors.progress = 90; * @param {Runner} runner * @param {Object} options */ -function Progress(runner, options) { +function Progress (runner, options) { Base.call(this, runner); var self = this; - var width = Base.window.width * .50 | 0; + var width = Base.window.width * 0.50 | 0; var total = runner.total; var complete = 0; var lastN = -1; @@ -3669,13 +3726,13 @@ function Progress(runner, options) { options.verbose = false; // tests started - runner.on('start', function() { + runner.on('start', function () { console.log(); cursor.hide(); }); // tests complete - runner.on('test end', function() { + runner.on('test end', function () { complete++; var percent = complete / total; @@ -3701,7 +3758,7 @@ function Progress(runner, options) { // tests are complete, output some stats // and the failures if any - runner.on('end', function() { + runner.on('end', function () { cursor.show(); console.log(); self.epilogue(); @@ -3715,6 +3772,8 @@ inherits(Progress, Base); }).call(this,require('_process')) },{"../utils":38,"./base":17,"_process":67}],30:[function(require,module,exports){ +'use strict'; + /** * Module dependencies. */ @@ -3735,55 +3794,55 @@ exports = module.exports = Spec; * @api public * @param {Runner} runner */ -function Spec(runner) { +function Spec (runner) { Base.call(this, runner); var self = this; var indents = 0; var n = 0; - function indent() { + function indent () { return Array(indents).join(' '); } - runner.on('start', function() { + runner.on('start', function () { console.log(); }); - runner.on('suite', function(suite) { + runner.on('suite', function (suite) { ++indents; console.log(color('suite', '%s%s'), indent(), suite.title); }); - runner.on('suite end', function() { + runner.on('suite end', function () { --indents; if (indents === 1) { console.log(); } }); - runner.on('pending', function(test) { + runner.on('pending', function (test) { var fmt = indent() + color('pending', ' - %s'); console.log(fmt, test.title); }); - runner.on('pass', function(test) { + runner.on('pass', function (test) { var fmt; if (test.speed === 'fast') { - fmt = indent() - + color('checkmark', ' ' + Base.symbols.ok) - + color('pass', ' %s'); + fmt = indent() + + color('checkmark', ' ' + Base.symbols.ok) + + color('pass', ' %s'); console.log(fmt, test.title); } else { - fmt = indent() - + color('checkmark', ' ' + Base.symbols.ok) - + color('pass', ' %s') - + color(test.speed, ' (%dms)'); + fmt = indent() + + color('checkmark', ' ' + Base.symbols.ok) + + color('pass', ' %s') + + color(test.speed, ' (%dms)'); console.log(fmt, test.title, test.duration); } }); - runner.on('fail', function(test) { + runner.on('fail', function (test) { console.log(indent() + color('fail', ' %d) %s'), ++n, test.title); }); @@ -3796,6 +3855,8 @@ function Spec(runner) { inherits(Spec, Base); },{"../utils":38,"./base":17}],31:[function(require,module,exports){ +'use strict'; + /** * Module dependencies. */ @@ -3814,32 +3875,32 @@ exports = module.exports = TAP; * @api public * @param {Runner} runner */ -function TAP(runner) { +function TAP (runner) { Base.call(this, runner); var n = 1; var passes = 0; var failures = 0; - runner.on('start', function() { + runner.on('start', function () { var total = runner.grepTotal(runner.suite); console.log('%d..%d', 1, total); }); - runner.on('test end', function() { + runner.on('test end', function () { ++n; }); - runner.on('pending', function(test) { + runner.on('pending', function (test) { console.log('ok %d %s # SKIP -', n, title(test)); }); - runner.on('pass', function(test) { + runner.on('pass', function (test) { passes++; console.log('ok %d %s', n, title(test)); }); - runner.on('fail', function(test, err) { + runner.on('fail', function (test, err) { failures++; console.log('not ok %d %s', n, title(test)); if (err.stack) { @@ -3847,7 +3908,7 @@ function TAP(runner) { } }); - runner.on('end', function() { + runner.on('end', function () { console.log('# tests ' + (passes + failures)); console.log('# pass ' + passes); console.log('# fail ' + failures); @@ -3861,12 +3922,14 @@ function TAP(runner) { * @param {Object} test * @return {String} */ -function title(test) { +function title (test) { return test.fullTitle().replace(/#/g, ''); } },{"./base":17}],32:[function(require,module,exports){ (function (process,global){ +'use strict'; + /** * Module dependencies. */ @@ -3903,7 +3966,7 @@ exports = module.exports = XUnit; * @api public * @param {Runner} runner */ -function XUnit(runner, options) { +function XUnit (runner, options) { Base.call(this, runner); var stats = this.stats; @@ -3918,19 +3981,19 @@ function XUnit(runner, options) { self.fileStream = fs.createWriteStream(options.reporterOptions.output); } - runner.on('pending', function(test) { + runner.on('pending', function (test) { tests.push(test); }); - runner.on('pass', function(test) { + runner.on('pass', function (test) { tests.push(test); }); - runner.on('fail', function(test) { + runner.on('fail', function (test) { tests.push(test); }); - runner.on('end', function() { + runner.on('end', function () { self.write(tag('testsuite', { name: 'Mocha Tests', tests: stats.tests, @@ -3941,7 +4004,7 @@ function XUnit(runner, options) { time: (stats.duration / 1000) || 0 }, false)); - tests.forEach(function(t) { + tests.forEach(function (t) { self.test(t); }); @@ -3960,9 +4023,9 @@ inherits(XUnit, Base); * @param failures * @param {Function} fn */ -XUnit.prototype.done = function(failures, fn) { +XUnit.prototype.done = function (failures, fn) { if (this.fileStream) { - this.fileStream.end(function() { + this.fileStream.end(function () { fn(failures); }); } else { @@ -3975,7 +4038,7 @@ XUnit.prototype.done = function(failures, fn) { * * @param {string} line */ -XUnit.prototype.write = function(line) { +XUnit.prototype.write = function (line) { if (this.fileStream) { this.fileStream.write(line + '\n'); } else if (typeof process === 'object' && process.stdout) { @@ -3990,7 +4053,7 @@ XUnit.prototype.write = function(line) { * * @param {Test} test */ -XUnit.prototype.test = function(test) { +XUnit.prototype.test = function (test) { var attrs = { classname: test.parent.fullTitle(), name: test.title, @@ -4016,7 +4079,7 @@ XUnit.prototype.test = function(test) { * @param content * @return {string} */ -function tag(name, attrs, close, content) { +function tag (name, attrs, close, content) { var end = close ? '/>' : '>'; var pairs = []; var tag; @@ -4037,6 +4100,8 @@ function tag(name, attrs, close, content) { }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) },{"../utils":38,"./base":17,"_process":67,"fs":42,"mkdirp":64,"path":42}],33:[function(require,module,exports){ (function (global){ +'use strict'; + /** * Module dependencies. */ @@ -4082,7 +4147,7 @@ module.exports = Runnable; * @param {string} title * @param {Function} fn */ -function Runnable(title, fn) { +function Runnable (title, fn) { this.title = title; this.fn = fn; this.body = (fn || '').toString(); @@ -4112,7 +4177,7 @@ Runnable.prototype = create(EventEmitter.prototype, { * @param {number|string} ms * @return {Runnable|number} ms or Runnable instance. */ -Runnable.prototype.timeout = function(ms) { +Runnable.prototype.timeout = function (ms) { if (!arguments.length) { return this._timeout; } @@ -4138,7 +4203,7 @@ Runnable.prototype.timeout = function(ms) { * @param {number|string} ms * @return {Runnable|number} ms or Runnable instance. */ -Runnable.prototype.slow = function(ms) { +Runnable.prototype.slow = function (ms) { if (typeof ms === 'undefined') { return this._slow; } @@ -4157,7 +4222,7 @@ Runnable.prototype.slow = function(ms) { * @param {boolean} enabled * @return {Runnable|boolean} enabled or Runnable instance. */ -Runnable.prototype.enableTimeouts = function(enabled) { +Runnable.prototype.enableTimeouts = function (enabled) { if (!arguments.length) { return this._enableTimeouts; } @@ -4171,7 +4236,7 @@ Runnable.prototype.enableTimeouts = function(enabled) { * * @api public */ -Runnable.prototype.skip = function() { +Runnable.prototype.skip = function () { throw new Pending('sync skip'); }; @@ -4180,7 +4245,7 @@ Runnable.prototype.skip = function() { * * @api private */ -Runnable.prototype.isPending = function() { +Runnable.prototype.isPending = function () { return this.pending || (this.parent && this.parent.isPending()); }; @@ -4189,7 +4254,7 @@ Runnable.prototype.isPending = function() { * * @api private */ -Runnable.prototype.retries = function(n) { +Runnable.prototype.retries = function (n) { if (!arguments.length) { return this._retries; } @@ -4201,7 +4266,7 @@ Runnable.prototype.retries = function(n) { * * @api private */ -Runnable.prototype.currentRetry = function(n) { +Runnable.prototype.currentRetry = function (n) { if (!arguments.length) { return this._currentRetry; } @@ -4215,7 +4280,7 @@ Runnable.prototype.currentRetry = function(n) { * @api public * @return {string} */ -Runnable.prototype.fullTitle = function() { +Runnable.prototype.fullTitle = function () { return this.parent.fullTitle() + ' ' + this.title; }; @@ -4224,7 +4289,7 @@ Runnable.prototype.fullTitle = function() { * * @api private */ -Runnable.prototype.clearTimeout = function() { +Runnable.prototype.clearTimeout = function () { clearTimeout(this.timer); }; @@ -4234,8 +4299,8 @@ Runnable.prototype.clearTimeout = function() { * @api private * @return {string} */ -Runnable.prototype.inspect = function() { - return JSON.stringify(this, function(key, val) { +Runnable.prototype.inspect = function () { + return JSON.stringify(this, function (key, val) { if (key[0] === '_') { return; } @@ -4254,7 +4319,7 @@ Runnable.prototype.inspect = function() { * * @api private */ -Runnable.prototype.resetTimeout = function() { +Runnable.prototype.resetTimeout = function () { var self = this; var ms = this.timeout() || 1e9; @@ -4262,7 +4327,7 @@ Runnable.prototype.resetTimeout = function() { return; } this.clearTimeout(); - this.timer = setTimeout(function() { + this.timer = setTimeout(function () { if (!self._enableTimeouts) { return; } @@ -4277,7 +4342,7 @@ Runnable.prototype.resetTimeout = function() { * @api private * @param {string[]} globals */ -Runnable.prototype.globals = function(globals) { +Runnable.prototype.globals = function (globals) { if (!arguments.length) { return this._allowedGlobals; } @@ -4290,7 +4355,7 @@ Runnable.prototype.globals = function(globals) { * @param {Function} fn * @api private */ -Runnable.prototype.run = function(fn) { +Runnable.prototype.run = function (fn) { var self = this; var start = new Date(); var ctx = this.ctx; @@ -4303,7 +4368,7 @@ Runnable.prototype.run = function(fn) { } // called multiple times - function multiple(err) { + function multiple (err) { if (emitted) { return; } @@ -4312,7 +4377,7 @@ Runnable.prototype.run = function(fn) { } // finished - function done(err) { + function done (err) { var ms = self.timeout(); if (self.timedOut) { return; @@ -4338,7 +4403,7 @@ Runnable.prototype.run = function(fn) { this.resetTimeout(); // allows skip() to be used in an explicit async context - this.skip = function asyncSkip() { + this.skip = function asyncSkip () { done(new Pending('async skip call')); // halt execution. the Runnable will be marked pending // by the previous call, and the uncaught handler will ignore @@ -4352,6 +4417,7 @@ Runnable.prototype.run = function(fn) { try { callFnAsync(this.fn); } catch (err) { + emitted = true; done(utils.getError(err)); } return; @@ -4371,21 +4437,22 @@ Runnable.prototype.run = function(fn) { callFn(this.fn); } } catch (err) { + emitted = true; done(utils.getError(err)); } - function callFn(fn) { + function callFn (fn) { var result = fn.call(ctx); if (result && typeof result.then === 'function') { self.resetTimeout(); result - .then(function() { + .then(function () { done(); // Return null so libraries like bluebird do not warn about // subsequently constructed Promises. return null; }, - function(reason) { + function (reason) { done(reason || new Error('Promise rejected with no or falsy reason')); }); } else { @@ -4397,15 +4464,15 @@ Runnable.prototype.run = function(fn) { } } - function callFnAsync(fn) { - var result = fn.call(ctx, function(err) { + function callFnAsync (fn) { + var result = fn.call(ctx, function (err) { if (err instanceof Error || toString.call(err) === '[object Error]') { return done(err); } if (err) { if (Object.prototype.toString.call(err) === '[object Object]') { - return done(new Error('done() invoked with non-Error: ' - + JSON.stringify(err))); + return done(new Error('done() invoked with non-Error: ' + + JSON.stringify(err))); } return done(new Error('done() invoked with non-Error: ' + err)); } @@ -4421,6 +4488,8 @@ Runnable.prototype.run = function(fn) { }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) },{"./ms":15,"./pending":16,"./utils":38,"debug":2,"events":3,"json3":54,"lodash.create":60}],34:[function(require,module,exports){ (function (process,global){ +'use strict'; + /** * Module dependencies. */ @@ -4484,7 +4553,7 @@ module.exports = Runner; * @param {boolean} [delay] Whether or not to delay execution of root suite * until ready. */ -function Runner(suite, delay) { +function Runner (suite, delay) { var self = this; this._globals = []; this._abort = false; @@ -4493,10 +4562,10 @@ function Runner(suite, delay) { this.started = false; this.total = suite.total(); this.failures = 0; - this.on('test end', function(test) { + this.on('test end', function (test) { self.checkGlobals(test); }); - this.on('hook end', function(hook) { + this.on('hook end', function (hook) { self.checkGlobals(hook); }); this._defaultGrep = /.*/; @@ -4529,7 +4598,7 @@ inherits(Runner, EventEmitter); * @param {boolean} invert * @return {Runner} Runner instance. */ -Runner.prototype.grep = function(re, invert) { +Runner.prototype.grep = function (re, invert) { debug('grep %s', re); this._grep = re; this._invert = invert; @@ -4547,11 +4616,11 @@ Runner.prototype.grep = function(re, invert) { * @param {Suite} suite * @return {number} */ -Runner.prototype.grepTotal = function(suite) { +Runner.prototype.grepTotal = function (suite) { var self = this; var total = 0; - suite.eachTest(function(test) { + suite.eachTest(function (test) { var match = self._grep.test(test.fullTitle()); if (self._invert) { match = !match; @@ -4570,7 +4639,7 @@ Runner.prototype.grepTotal = function(suite) { * @return {Array} * @api private */ -Runner.prototype.globalProps = function() { +Runner.prototype.globalProps = function () { var props = keys(global); // non-enumerables @@ -4593,7 +4662,7 @@ Runner.prototype.globalProps = function() { * @param {Array} arr * @return {Runner} Runner instance. */ -Runner.prototype.globals = function(arr) { +Runner.prototype.globals = function (arr) { if (!arguments.length) { return this._globals; } @@ -4607,7 +4676,7 @@ Runner.prototype.globals = function(arr) { * * @api private */ -Runner.prototype.checkGlobals = function(test) { +Runner.prototype.checkGlobals = function (test) { if (this.ignoreLeaks) { return; } @@ -4642,7 +4711,7 @@ Runner.prototype.checkGlobals = function(test) { * @param {Test} test * @param {Error} err */ -Runner.prototype.fail = function(test, err) { +Runner.prototype.fail = function (test, err) { if (test.isPending()) { return; } @@ -4654,9 +4723,13 @@ Runner.prototype.fail = function(test, err) { err = new Error('the ' + type(err) + ' ' + stringify(err) + ' was thrown, throw an Error :)'); } - err.stack = (this.fullStackTrace || !err.stack) - ? err.stack - : stackFilter(err.stack); + try { + err.stack = (this.fullStackTrace || !err.stack) + ? err.stack + : stackFilter(err.stack); + } catch (ignored) { + // some environments do not take kindly to monkeying with the stack + } this.emit('fail', test, err); }; @@ -4681,7 +4754,7 @@ Runner.prototype.fail = function(test, err) { * @param {Hook} hook * @param {Error} err */ -Runner.prototype.failHook = function(hook, err) { +Runner.prototype.failHook = function (hook, err) { if (hook.ctx && hook.ctx.currentTest) { hook.originalTitle = hook.originalTitle || hook.title; hook.title = hook.originalTitle + ' for "' + hook.ctx.currentTest.title + '"'; @@ -4701,12 +4774,12 @@ Runner.prototype.failHook = function(hook, err) { * @param {Function} fn */ -Runner.prototype.hook = function(name, fn) { +Runner.prototype.hook = function (name, fn) { var suite = this.suite; var hooks = suite['_' + name]; var self = this; - function next(i) { + function next (i) { var hook = hooks[i]; if (!hook) { return fn(); @@ -4718,12 +4791,12 @@ Runner.prototype.hook = function(name, fn) { self.emit('hook', hook); if (!hook.listeners('error').length) { - hook.on('error', function(err) { + hook.on('error', function (err) { self.failHook(hook, err); }); } - hook.run(function(err) { + hook.run(function (err) { var testError = hook.error(); if (testError) { self.fail(self.test, testError); @@ -4733,7 +4806,7 @@ Runner.prototype.hook = function(name, fn) { if (name === 'beforeEach' || name === 'afterEach') { self.test.pending = true; } else { - utils.forEach(suite.tests, function(test) { + utils.forEach(suite.tests, function (test) { test.pending = true; }); // a pending hook won't be executed twice. @@ -4752,7 +4825,7 @@ Runner.prototype.hook = function(name, fn) { }); } - Runner.immediately(function() { + Runner.immediately(function () { next(0); }); }; @@ -4766,11 +4839,11 @@ Runner.prototype.hook = function(name, fn) { * @param {Array} suites * @param {Function} fn */ -Runner.prototype.hooks = function(name, suites, fn) { +Runner.prototype.hooks = function (name, suites, fn) { var self = this; var orig = this.suite; - function next(suite) { + function next (suite) { self.suite = suite; if (!suite) { @@ -4778,7 +4851,7 @@ Runner.prototype.hooks = function(name, suites, fn) { return fn(); } - self.hook(name, function(err) { + self.hook(name, function (err) { if (err) { var errSuite = self.suite; self.suite = orig; @@ -4799,7 +4872,7 @@ Runner.prototype.hooks = function(name, suites, fn) { * @param {Function} fn * @api private */ -Runner.prototype.hookUp = function(name, fn) { +Runner.prototype.hookUp = function (name, fn) { var suites = [this.suite].concat(this.parents()).reverse(); this.hooks(name, suites, fn); }; @@ -4811,7 +4884,7 @@ Runner.prototype.hookUp = function(name, fn) { * @param {Function} fn * @api private */ -Runner.prototype.hookDown = function(name, fn) { +Runner.prototype.hookDown = function (name, fn) { var suites = [this.suite].concat(this.parents()); this.hooks(name, suites, fn); }; @@ -4823,7 +4896,7 @@ Runner.prototype.hookDown = function(name, fn) { * @return {Array} * @api private */ -Runner.prototype.parents = function() { +Runner.prototype.parents = function () { var suite = this.suite; var suites = []; while (suite.parent) { @@ -4839,7 +4912,7 @@ Runner.prototype.parents = function() { * @param {Function} fn * @api private */ -Runner.prototype.runTest = function(fn) { +Runner.prototype.runTest = function (fn) { var self = this; var test = this.test; @@ -4855,7 +4928,7 @@ Runner.prototype.runTest = function(fn) { return test.run(fn); } try { - test.on('error', function(err) { + test.on('error', function (err) { self.fail(test, err); }); test.run(fn); @@ -4871,12 +4944,12 @@ Runner.prototype.runTest = function(fn) { * @param {Suite} suite * @param {Function} fn */ -Runner.prototype.runTests = function(suite, fn) { +Runner.prototype.runTests = function (suite, fn) { var self = this; var tests = suite.tests.slice(); var test; - function hookErr(_, errSuite, after) { + function hookErr (_, errSuite, after) { // before/after Each hook for errSuite failed: var orig = self.suite; @@ -4886,7 +4959,7 @@ Runner.prototype.runTests = function(suite, fn) { if (self.suite) { // call hookUp afterEach - self.hookUp('afterEach', function(err2, errSuite2) { + self.hookUp('afterEach', function (err2, errSuite2) { self.suite = orig; // some hooks may fail even now if (err2) { @@ -4902,7 +4975,7 @@ Runner.prototype.runTests = function(suite, fn) { } } - function next(err, errSuite) { + function next (err, errSuite) { // if we bail after first err if (self.failures && suite._bail) { return fn(); @@ -4954,7 +5027,7 @@ Runner.prototype.runTests = function(suite, fn) { // execute test and hook(s) self.emit('test', self.test = test); - self.hookDown('beforeEach', function(err, errSuite) { + self.hookDown('beforeEach', function (err, errSuite) { if (test.isPending()) { self.emit('pending', test); self.emit('test end', test); @@ -4964,7 +5037,7 @@ Runner.prototype.runTests = function(suite, fn) { return hookErr(err, errSuite, false); } self.currentRunnable = self.test; - self.runTest(function(err) { + self.runTest(function (err) { test = self.test; if (err) { var retry = test.currentRetry(); @@ -5011,7 +5084,7 @@ Runner.prototype.runTests = function(suite, fn) { * @param {Suite} suite * @param {Function} fn */ -Runner.prototype.runSuite = function(suite, fn) { +Runner.prototype.runSuite = function (suite, fn) { var i = 0; var self = this; var total = this.grepTotal(suite); @@ -5025,7 +5098,7 @@ Runner.prototype.runSuite = function(suite, fn) { this.emit('suite', this.suite = suite); - function next(errSuite) { + function next (errSuite) { if (errSuite) { // current suite failed on a hook from errSuite if (errSuite === suite) { @@ -5051,7 +5124,7 @@ Runner.prototype.runSuite = function(suite, fn) { // huge recursive loop and thus a maximum call stack error. // See comment in `this.runTests()` for more information. if (self._grep !== self._defaultGrep) { - Runner.immediately(function() { + Runner.immediately(function () { self.runSuite(curr, next); }); } else { @@ -5059,7 +5132,7 @@ Runner.prototype.runSuite = function(suite, fn) { } } - function done(errSuite) { + function done (errSuite) { self.suite = suite; self.nextSuite = next; @@ -5073,7 +5146,7 @@ Runner.prototype.runSuite = function(suite, fn) { // remove reference to test delete self.test; - self.hook('afterAll', function() { + self.hook('afterAll', function () { self.emit('suite end', suite); fn(errSuite); }); @@ -5082,7 +5155,7 @@ Runner.prototype.runSuite = function(suite, fn) { this.nextSuite = next; - this.hook('beforeAll', function(err) { + this.hook('beforeAll', function (err) { if (err) { return done(); } @@ -5096,9 +5169,9 @@ Runner.prototype.runSuite = function(suite, fn) { * @param {Error} err * @api private */ -Runner.prototype.uncaught = function(err) { +Runner.prototype.uncaught = function (err) { if (err) { - debug('uncaught exception %s', err !== function() { + debug('uncaught exception %s', err !== function () { return this; }.call(err) ? err : (err.message || err)); } else { @@ -5169,8 +5242,8 @@ Runner.prototype.uncaught = function(err) { * * @param {Suite} suite */ -function cleanSuiteReferences(suite) { - function cleanArrReferences(arr) { +function cleanSuiteReferences (suite) { + function cleanArrReferences (arr) { for (var i = 0; i < arr.length; i++) { delete arr[i].fn; } @@ -5207,7 +5280,7 @@ function cleanSuiteReferences(suite) { * @param {Function} fn * @return {Runner} Runner instance. */ -Runner.prototype.run = function(fn) { +Runner.prototype.run = function (fn) { var self = this; var rootSuite = this.suite; @@ -5216,16 +5289,16 @@ Runner.prototype.run = function(fn) { filterOnly(rootSuite); } - fn = fn || function() {}; + fn = fn || function () {}; - function uncaught(err) { + function uncaught (err) { self.uncaught(err); } - function start() { + function start () { self.started = true; self.emit('start'); - self.runSuite(rootSuite, function() { + self.runSuite(rootSuite, function () { debug('finished running'); self.emit('end'); }); @@ -5237,7 +5310,7 @@ Runner.prototype.run = function(fn) { this.on('suite end', cleanSuiteReferences); // callback - this.on('end', function() { + this.on('end', function () { debug('end'); process.removeListener('uncaughtException', uncaught); fn(self.failures); @@ -5264,7 +5337,7 @@ Runner.prototype.run = function(fn) { * @api public * @return {Runner} Runner instance. */ -Runner.prototype.abort = function() { +Runner.prototype.abort = function () { debug('aborting'); this._abort = true; @@ -5278,7 +5351,7 @@ Runner.prototype.abort = function() { * @returns {Boolean} * @api private */ -function filterOnly(suite) { +function filterOnly (suite) { if (suite._onlyTests.length) { // If the suite contains `only` tests, run those and ignore any nested suites. suite.tests = suite._onlyTests; @@ -5286,7 +5359,7 @@ function filterOnly(suite) { } else { // Otherwise, do not run any of the tests in this suite. suite.tests = []; - utils.forEach(suite._onlySuites, function(onlySuite) { + utils.forEach(suite._onlySuites, function (onlySuite) { // If there are other `only` tests/suites nested in the current `only` suite, then filter that `only` suite. // Otherwise, all of the tests on this `only` suite should be run, so don't filter it. if (hasOnly(onlySuite)) { @@ -5294,7 +5367,7 @@ function filterOnly(suite) { } }); // Run the `only` suites, as well as any other suites that have `only` tests/suites as descendants. - suite.suites = filter(suite.suites, function(childSuite) { + suite.suites = filter(suite.suites, function (childSuite) { return indexOf(suite._onlySuites, childSuite) !== -1 || filterOnly(childSuite); }); } @@ -5309,7 +5382,7 @@ function filterOnly(suite) { * @returns {Boolean} * @api private */ -function hasOnly(suite) { +function hasOnly (suite) { return suite._onlyTests.length || suite._onlySuites.length || some(suite.suites, hasOnly); } @@ -5321,8 +5394,8 @@ function hasOnly(suite) { * @param {Array} globals * @return {Array} */ -function filterLeaks(ok, globals) { - return filter(globals, function(key) { +function filterLeaks (ok, globals) { + return filter(globals, function (key) { // Firefox and Chrome exposes iframes as index inside the window object if (/^\d+/.test(key)) { return false; @@ -5346,7 +5419,7 @@ function filterLeaks(ok, globals) { return false; } - var matched = filter(ok, function(ok) { + var matched = filter(ok, function (ok) { if (~ok.indexOf('*')) { return key.indexOf(ok.split('*')[0]) === 0; } @@ -5362,10 +5435,10 @@ function filterLeaks(ok, globals) { * @return {Array} * @api private */ -function extraGlobals() { +function extraGlobals () { if (typeof process === 'object' && typeof process.version === 'string') { var parts = process.version.split('.'); - var nodeVersion = utils.reduce(parts, function(a, v) { + var nodeVersion = utils.reduce(parts, function (a, v) { return a << 8 | v; }); @@ -5381,6 +5454,8 @@ function extraGlobals() { }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) },{"./pending":16,"./runnable":33,"./utils":38,"_process":67,"debug":2,"events":3}],35:[function(require,module,exports){ +'use strict'; + /** * Module dependencies. */ @@ -5408,7 +5483,7 @@ exports = module.exports = Suite; * @param {string} title * @return {Suite} */ -exports.create = function(parent, title) { +exports.create = function (parent, title) { var suite = new Suite(title, parent.ctx); suite.parent = parent; title = suite.fullTitle(); @@ -5423,12 +5498,12 @@ exports.create = function(parent, title) { * @param {string} title * @param {Context} parentContext */ -function Suite(title, parentContext) { +function Suite (title, parentContext) { if (!utils.isString(title)) { throw new Error('Suite `title` should be a "string" but "' + typeof title + '" was given instead.'); } this.title = title; - function Context() {} + function Context () {} Context.prototype = parentContext; this.ctx = new Context(); this.suites = []; @@ -5460,7 +5535,7 @@ inherits(Suite, EventEmitter); * @api private * @return {Suite} */ -Suite.prototype.clone = function() { +Suite.prototype.clone = function () { var suite = new Suite(this.title); debug('clone'); suite.ctx = this.ctx; @@ -5479,7 +5554,7 @@ Suite.prototype.clone = function() { * @param {number|string} ms * @return {Suite|number} for chaining */ -Suite.prototype.timeout = function(ms) { +Suite.prototype.timeout = function (ms) { if (!arguments.length) { return this._timeout; } @@ -5501,7 +5576,7 @@ Suite.prototype.timeout = function(ms) { * @param {number|string} n * @return {Suite|number} for chaining */ -Suite.prototype.retries = function(n) { +Suite.prototype.retries = function (n) { if (!arguments.length) { return this._retries; } @@ -5517,7 +5592,7 @@ Suite.prototype.retries = function(n) { * @param {boolean} enabled * @return {Suite|boolean} self or enabled */ -Suite.prototype.enableTimeouts = function(enabled) { +Suite.prototype.enableTimeouts = function (enabled) { if (!arguments.length) { return this._enableTimeouts; } @@ -5533,7 +5608,7 @@ Suite.prototype.enableTimeouts = function(enabled) { * @param {number|string} ms * @return {Suite|number} for chaining */ -Suite.prototype.slow = function(ms) { +Suite.prototype.slow = function (ms) { if (!arguments.length) { return this._slow; } @@ -5552,7 +5627,7 @@ Suite.prototype.slow = function(ms) { * @param {boolean} bail * @return {Suite|number} for chaining */ -Suite.prototype.bail = function(bail) { +Suite.prototype.bail = function (bail) { if (!arguments.length) { return this._bail; } @@ -5566,7 +5641,7 @@ Suite.prototype.bail = function(bail) { * * @api private */ -Suite.prototype.isPending = function() { +Suite.prototype.isPending = function () { return this.pending || (this.parent && this.parent.isPending()); }; @@ -5578,7 +5653,7 @@ Suite.prototype.isPending = function() { * @param {Function} fn * @return {Suite} for chaining */ -Suite.prototype.beforeAll = function(title, fn) { +Suite.prototype.beforeAll = function (title, fn) { if (this.isPending()) { return this; } @@ -5608,7 +5683,7 @@ Suite.prototype.beforeAll = function(title, fn) { * @param {Function} fn * @return {Suite} for chaining */ -Suite.prototype.afterAll = function(title, fn) { +Suite.prototype.afterAll = function (title, fn) { if (this.isPending()) { return this; } @@ -5638,7 +5713,7 @@ Suite.prototype.afterAll = function(title, fn) { * @param {Function} fn * @return {Suite} for chaining */ -Suite.prototype.beforeEach = function(title, fn) { +Suite.prototype.beforeEach = function (title, fn) { if (this.isPending()) { return this; } @@ -5668,7 +5743,7 @@ Suite.prototype.beforeEach = function(title, fn) { * @param {Function} fn * @return {Suite} for chaining */ -Suite.prototype.afterEach = function(title, fn) { +Suite.prototype.afterEach = function (title, fn) { if (this.isPending()) { return this; } @@ -5697,7 +5772,7 @@ Suite.prototype.afterEach = function(title, fn) { * @param {Suite} suite * @return {Suite} for chaining */ -Suite.prototype.addSuite = function(suite) { +Suite.prototype.addSuite = function (suite) { suite.parent = this; suite.timeout(this.timeout()); suite.retries(this.retries()); @@ -5716,7 +5791,7 @@ Suite.prototype.addSuite = function(suite) { * @param {Test} test * @return {Suite} for chaining */ -Suite.prototype.addTest = function(test) { +Suite.prototype.addTest = function (test) { test.parent = this; test.timeout(this.timeout()); test.retries(this.retries()); @@ -5735,7 +5810,7 @@ Suite.prototype.addTest = function(test) { * @api public * @return {string} */ -Suite.prototype.fullTitle = function() { +Suite.prototype.fullTitle = function () { if (this.parent) { var full = this.parent.fullTitle(); if (full) { @@ -5751,8 +5826,8 @@ Suite.prototype.fullTitle = function() { * @api public * @return {number} */ -Suite.prototype.total = function() { - return utils.reduce(this.suites, function(sum, suite) { +Suite.prototype.total = function () { + return utils.reduce(this.suites, function (sum, suite) { return sum + suite.total(); }, 0) + this.tests.length; }; @@ -5765,9 +5840,9 @@ Suite.prototype.total = function() { * @param {Function} fn * @return {Suite} */ -Suite.prototype.eachTest = function(fn) { +Suite.prototype.eachTest = function (fn) { utils.forEach(this.tests, fn); - utils.forEach(this.suites, function(suite) { + utils.forEach(this.suites, function (suite) { suite.eachTest(fn); }); return this; @@ -5776,13 +5851,15 @@ Suite.prototype.eachTest = function(fn) { /** * This will run the root suite if we happen to be running in delayed mode. */ -Suite.prototype.run = function run() { +Suite.prototype.run = function run () { if (this.root) { this.emit('run'); } }; },{"./hook":7,"./ms":15,"./utils":38,"debug":2,"events":3}],36:[function(require,module,exports){ +'use strict'; + /** * Module dependencies. */ @@ -5804,7 +5881,7 @@ module.exports = Test; * @param {String} title * @param {Function} fn */ -function Test(title, fn) { +function Test (title, fn) { if (!isString(title)) { throw new Error('Test `title` should be a "string" but "' + typeof title + '" was given instead.'); } @@ -5820,7 +5897,7 @@ Test.prototype = create(Runnable.prototype, { constructor: Test }); -Test.prototype.clone = function() { +Test.prototype.clone = function () { var test = new Test(this.title, this.fn); test.timeout(this.timeout()); test.slow(this.slow()); @@ -5875,6 +5952,8 @@ module.exports = toISOString; },{}],38:[function(require,module,exports){ (function (process,Buffer){ +'use strict'; + /* eslint-env browser */ /** @@ -5908,7 +5987,7 @@ exports.inherits = require('util').inherits; * @param {string} html * @return {string} */ -exports.escape = function(html) { +exports.escape = function (html) { return String(html) .replace(/&/g, '&') .replace(/"/g, '"') @@ -5924,7 +6003,7 @@ exports.escape = function(html) { * @param {Function} fn * @param {Object} scope */ -exports.forEach = function(arr, fn, scope) { +exports.forEach = function (arr, fn, scope) { for (var i = 0, l = arr.length; i < l; i++) { fn.call(scope, arr[i], i); } @@ -5937,7 +6016,7 @@ exports.forEach = function(arr, fn, scope) { * @param {Object} obj * @return {boolean} */ -exports.isString = function(obj) { +exports.isString = function (obj) { return typeof obj === 'string'; }; @@ -5950,7 +6029,7 @@ exports.isString = function(obj) { * @param {Object} scope * @return {Array} */ -exports.map = function(arr, fn, scope) { +exports.map = function (arr, fn, scope) { var result = []; for (var i = 0, l = arr.length; i < l; i++) { result.push(fn.call(scope, arr[i], i, arr)); @@ -5967,7 +6046,7 @@ exports.map = function(arr, fn, scope) { * @param {number} start * @return {number} */ -var indexOf = exports.indexOf = function(arr, obj, start) { +var indexOf = exports.indexOf = function (arr, obj, start) { for (var i = start || 0, l = arr.length; i < l; i++) { if (arr[i] === obj) { return i; @@ -5985,7 +6064,7 @@ var indexOf = exports.indexOf = function(arr, obj, start) { * @param {Object} val Initial value. * @return {*} */ -var reduce = exports.reduce = function(arr, fn, val) { +var reduce = exports.reduce = function (arr, fn, val) { var rval = val; for (var i = 0, l = arr.length; i < l; i++) { @@ -6003,7 +6082,7 @@ var reduce = exports.reduce = function(arr, fn, val) { * @param {Function} fn * @return {Array} */ -exports.filter = function(arr, fn) { +exports.filter = function (arr, fn) { var ret = []; for (var i = 0, l = arr.length; i < l; i++) { @@ -6024,7 +6103,7 @@ exports.filter = function(arr, fn) { * @param {Function} fn * @return {Array} */ -exports.some = function(arr, fn) { +exports.some = function (arr, fn) { for (var i = 0, l = arr.length; i < l; i++) { if (fn(arr[i])) { return true; @@ -6040,7 +6119,7 @@ exports.some = function(arr, fn) { * @param {Object} obj * @return {Array} keys */ -exports.keys = typeof Object.keys === 'function' ? Object.keys : function(obj) { +exports.keys = typeof Object.keys === 'function' ? Object.keys : function (obj) { var keys = []; var has = Object.prototype.hasOwnProperty; // for `window` on <=IE8 @@ -6061,11 +6140,11 @@ exports.keys = typeof Object.keys === 'function' ? Object.keys : function(obj) { * @param {Array} files * @param {Function} fn */ -exports.watch = function(files, fn) { +exports.watch = function (files, fn) { var options = { interval: 100 }; - files.forEach(function(file) { + files.forEach(function (file) { debug('file %s', file); - watchFile(file, options, function(curr, prev) { + watchFile(file, options, function (curr, prev) { if (prev.mtime < curr.mtime) { fn(file); } @@ -6080,7 +6159,7 @@ exports.watch = function(files, fn) { * @param {Object} obj * @return {Boolean} */ -var isArray = typeof Array.isArray === 'function' ? Array.isArray : function(obj) { +var isArray = typeof Array.isArray === 'function' ? Array.isArray : function (obj) { return Object.prototype.toString.call(obj) === '[object Array]'; }; @@ -6092,7 +6171,7 @@ exports.isArray = isArray; * @type {Function} */ if (typeof Buffer !== 'undefined' && Buffer.prototype) { - Buffer.prototype.toJSON = Buffer.prototype.toJSON || function() { + Buffer.prototype.toJSON = Buffer.prototype.toJSON || function () { return Array.prototype.slice.call(this, 0); }; } @@ -6104,7 +6183,7 @@ if (typeof Buffer !== 'undefined' && Buffer.prototype) { * @param {string} path * @return {boolean} */ -function ignored(path) { +function ignored (path) { return !~ignore.indexOf(path); } @@ -6117,7 +6196,7 @@ function ignored(path) { * @param {Array} [ret=[]] * @return {Array} */ -exports.files = function(dir, ext, ret) { +exports.files = function (dir, ext, ret) { ret = ret || []; ext = ext || ['js']; @@ -6125,7 +6204,7 @@ exports.files = function(dir, ext, ret) { readdirSync(dir) .filter(ignored) - .forEach(function(path) { + .forEach(function (path) { path = join(dir, path); if (statSync(path).isDirectory()) { exports.files(path, ext, ret); @@ -6144,7 +6223,7 @@ exports.files = function(dir, ext, ret) { * @param {string} str * @return {string} */ -exports.slug = function(str) { +exports.slug = function (str) { return str .toLowerCase() .replace(/ +/g, '-') @@ -6157,7 +6236,7 @@ exports.slug = function(str) { * @param {string} str * @return {string} */ -exports.clean = function(str) { +exports.clean = function (str) { str = str .replace(/\r\n?|[\n\u2028\u2029]/g, '\n').replace(/^\uFEFF/, '') // (traditional)-> space/name parameters body (lambda)-> parameters body multi-statement/single keep body content @@ -6165,7 +6244,7 @@ exports.clean = function(str) { var spaces = str.match(/^\n?( *)/)[1].length; var tabs = str.match(/^\n?(\t*)/)[1].length; - var re = new RegExp('^\n?' + (tabs ? '\t' : ' ') + '{' + (tabs ? tabs : spaces) + '}', 'gm'); + var re = new RegExp('^\n?' + (tabs ? '\t' : ' ') + '{' + (tabs || spaces) + '}', 'gm'); str = str.replace(re, ''); @@ -6179,7 +6258,7 @@ exports.clean = function(str) { * @param {string} str * @return {string} */ -exports.trim = function(str) { +exports.trim = function (str) { return str.replace(/^\s+|\s+$/g, ''); }; @@ -6190,8 +6269,8 @@ exports.trim = function(str) { * @param {string} qs * @return {Object} */ -exports.parseQuery = function(qs) { - return reduce(qs.replace('?', '').split('&'), function(obj, pair) { +exports.parseQuery = function (qs) { + return reduce(qs.replace('?', '').split('&'), function (obj, pair) { var i = pair.indexOf('='); var key = pair.slice(0, i); var val = pair.slice(++i); @@ -6208,7 +6287,7 @@ exports.parseQuery = function(qs) { * @param {string} js * @return {string} */ -function highlight(js) { +function highlight (js) { return js .replace(/</g, '<') .replace(/>/g, '>') @@ -6226,7 +6305,7 @@ function highlight(js) { * @api private * @param {string} name */ -exports.highlightTags = function(name) { +exports.highlightTags = function (name) { var code = document.getElementById('mocha').getElementsByTagName(name); for (var i = 0, len = code.length; i < len; ++i) { code[i].innerHTML = highlight(code[i].innerHTML); @@ -6247,7 +6326,7 @@ exports.highlightTags = function(name) { * @param {string} typeHint The type of the value * @returns {string} */ -function emptyRepresentation(value, typeHint) { +function emptyRepresentation (value, typeHint) { switch (typeHint) { case 'function': return '[Function]'; @@ -6281,7 +6360,7 @@ function emptyRepresentation(value, typeHint) { * type(global) // 'global' * type(new String('foo') // 'object' */ -var type = exports.type = function type(value) { +var type = exports.type = function type (value) { if (value === undefined) { return 'undefined'; } else if (value === null) { @@ -6309,7 +6388,7 @@ var type = exports.type = function type(value) { * @param {*} value * @return {string} */ -exports.stringify = function(value) { +exports.stringify = function (value) { var typeHint = type(value); if (!~indexOf(['object', 'array', 'function'], typeHint)) { @@ -6323,7 +6402,7 @@ exports.stringify = function(value) { // IE7/IE8 has a bizarre String constructor; needs to be coerced // into an array and back to obj. if (typeHint === 'string' && typeof value === 'object') { - value = reduce(value.split(''), function(acc, char, idx) { + value = reduce(value.split(''), function (acc, char, idx) { acc[idx] = char; return acc; }, {}); @@ -6351,7 +6430,7 @@ exports.stringify = function(value) { * @param {number=} depth * @returns {*} */ -function jsonStringify(object, spaces, depth) { +function jsonStringify (object, spaces, depth) { if (typeof spaces === 'undefined') { // primitive types return _stringify(object); @@ -6363,11 +6442,11 @@ function jsonStringify(object, spaces, depth) { var end = isArray(object) ? ']' : '}'; var length = typeof object.length === 'number' ? object.length : exports.keys(object).length; // `.repeat()` polyfill - function repeat(s, n) { + function repeat (s, n) { return new Array(n).join(s); } - function _stringify(val) { + function _stringify (val) { switch (type(val)) { case 'null': case 'undefined': @@ -6413,15 +6492,15 @@ function jsonStringify(object, spaces, depth) { continue; // not my business } --length; - str += '\n ' + repeat(' ', space) - + (isArray(object) ? '' : '"' + i + '": ') // key - + _stringify(object[i]) // value - + (length ? ',' : ''); // comma + str += '\n ' + repeat(' ', space) + + (isArray(object) ? '' : '"' + i + '": ') + // key + _stringify(object[i]) + // value + (length ? ',' : ''); // comma } - return str + return str + // [], {} - + (str.length !== 1 ? '\n' + repeat(' ', --space) + end : end); + (str.length !== 1 ? '\n' + repeat(' ', --space) + end : end); } /** @@ -6431,7 +6510,7 @@ function jsonStringify(object, spaces, depth) { * @param {*} value The value to test. * @return {boolean} True if `value` is a buffer, otherwise false */ -exports.isBuffer = function(value) { +exports.isBuffer = function (value) { return typeof Buffer !== 'undefined' && Buffer.isBuffer(value); }; @@ -6454,13 +6533,13 @@ exports.isBuffer = function(value) { * @param {string} [typeHint] Type hint * @return {(Object|Array|Function|string|undefined)} */ -exports.canonicalize = function canonicalize(value, stack, typeHint) { +exports.canonicalize = function canonicalize (value, stack, typeHint) { var canonicalizedObj; /* eslint-disable no-unused-vars */ var prop; /* eslint-enable no-unused-vars */ typeHint = typeHint || type(value); - function withStack(value, fn) { + function withStack (value, fn) { stack.push(value); fn(); stack.pop(); @@ -6479,8 +6558,8 @@ exports.canonicalize = function canonicalize(value, stack, typeHint) { canonicalizedObj = value; break; case 'array': - withStack(value, function() { - canonicalizedObj = exports.map(value, function(item) { + withStack(value, function () { + canonicalizedObj = exports.map(value, function (item) { return exports.canonicalize(item, stack); }); }); @@ -6499,8 +6578,8 @@ exports.canonicalize = function canonicalize(value, stack, typeHint) { /* falls through */ case 'object': canonicalizedObj = canonicalizedObj || {}; - withStack(value, function() { - exports.forEach(exports.keys(value).sort(), function(key) { + withStack(value, function () { + exports.forEach(exports.keys(value).sort(), function (key) { canonicalizedObj[key] = exports.canonicalize(value[key], stack); }); }); @@ -6528,7 +6607,7 @@ exports.canonicalize = function canonicalize(value, stack, typeHint) { * @param {boolean} recursive Whether or not to recurse into subdirectories. * @return {string[]} An array of paths. */ -exports.lookupFiles = function lookupFiles(path, extensions, recursive) { +exports.lookupFiles = function lookupFiles (path, extensions, recursive) { var files = []; var re = new RegExp('\\.(' + extensions.join('|') + ')$'); @@ -6554,7 +6633,7 @@ exports.lookupFiles = function lookupFiles(path, extensions, recursive) { return; } - readdirSync(path).forEach(function(file) { + readdirSync(path).forEach(function (file) { file = join(path, file); try { var stat = statSync(file); @@ -6583,7 +6662,7 @@ exports.lookupFiles = function lookupFiles(path, extensions, recursive) { * @return {Error} */ -exports.undefinedError = function() { +exports.undefinedError = function () { return new Error('Caught undefined error, did you throw without specifying what?'); }; @@ -6594,7 +6673,7 @@ exports.undefinedError = function() { * @return {Error} */ -exports.getError = function(err) { +exports.getError = function (err) { return err || exports.undefinedError(); }; @@ -6607,7 +6686,7 @@ exports.getError = function(err) { * (i.e: strip Mocha and internal node functions from stack trace). * @returns {Function} */ -exports.stackTraceFilter = function() { +exports.stackTraceFilter = function () { // TODO: Replace with `process.browser` var is = typeof document === 'undefined' ? { node: true } : { browser: true }; var slash = path.sep; @@ -6619,26 +6698,26 @@ exports.stackTraceFilter = function() { slash = '/'; } - function isMochaInternal(line) { - return (~line.indexOf('node_modules' + slash + 'mocha' + slash)) - || (~line.indexOf('node_modules' + slash + 'mocha.js')) - || (~line.indexOf('bower_components' + slash + 'mocha.js')) - || (~line.indexOf(slash + 'mocha.js')); + function isMochaInternal (line) { + return (~line.indexOf('node_modules' + slash + 'mocha' + slash)) || + (~line.indexOf('node_modules' + slash + 'mocha.js')) || + (~line.indexOf('bower_components' + slash + 'mocha.js')) || + (~line.indexOf(slash + 'mocha.js')); } - function isNodeInternal(line) { - return (~line.indexOf('(timers.js:')) - || (~line.indexOf('(events.js:')) - || (~line.indexOf('(node.js:')) - || (~line.indexOf('(module.js:')) - || (~line.indexOf('GeneratorFunctionPrototype.next (native)')) - || false; + function isNodeInternal (line) { + return (~line.indexOf('(timers.js:')) || + (~line.indexOf('(events.js:')) || + (~line.indexOf('(node.js:')) || + (~line.indexOf('(module.js:')) || + (~line.indexOf('GeneratorFunctionPrototype.next (native)')) || + false; } - return function(stack) { + return function (stack) { stack = stack.split('\n'); - stack = reduce(stack, function(list, line) { + stack = reduce(stack, function (list, line) { if (isMochaInternal(line)) { return list; } @@ -6666,14 +6745,21 @@ exports.stackTraceFilter = function() { * @param {*} value * @returns {boolean} Whether or not `value` is a Promise */ -exports.isPromise = function isPromise(value) { +exports.isPromise = function isPromise (value) { return typeof value === 'object' && typeof value.then === 'function'; }; +/** + * It's a noop. + * @api + */ +exports.noop = function () {}; + }).call(this,require('_process'),require("buffer").Buffer) },{"./to-iso-string":37,"_process":67,"buffer":44,"debug":2,"fs":42,"glob":42,"json3":54,"path":42,"util":84}],39:[function(require,module,exports){ 'use strict' +exports.byteLength = byteLength exports.toByteArray = toByteArray exports.fromByteArray = fromByteArray @@ -6681,23 +6767,17 @@ var lookup = [] var revLookup = [] var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array -function init () { - var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' - for (var i = 0, len = code.length; i < len; ++i) { - lookup[i] = code[i] - revLookup[code.charCodeAt(i)] = i - } - - revLookup['-'.charCodeAt(0)] = 62 - revLookup['_'.charCodeAt(0)] = 63 +var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' +for (var i = 0, len = code.length; i < len; ++i) { + lookup[i] = code[i] + revLookup[code.charCodeAt(i)] = i } -init() +revLookup['-'.charCodeAt(0)] = 62 +revLookup['_'.charCodeAt(0)] = 63 -function toByteArray (b64) { - var i, j, l, tmp, placeHolders, arr +function placeHoldersCount (b64) { var len = b64.length - if (len % 4 > 0) { throw new Error('Invalid string. Length must be a multiple of 4') } @@ -6707,9 +6787,19 @@ function toByteArray (b64) { // represent one byte // if there is only one, then the three characters before it represent 2 bytes // this is just a cheap hack to not do indexOf twice - placeHolders = b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0 + return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0 +} +function byteLength (b64) { // base64 is 4/3 + up to two characters of the original data + return b64.length * 3 / 4 - placeHoldersCount(b64) +} + +function toByteArray (b64) { + var i, j, l, tmp, placeHolders, arr + var len = b64.length + placeHolders = placeHoldersCount(b64) + arr = new Arr(len * 3 / 4 - placeHolders) // if there are placeholders, only get up to the last complete 4 chars diff --git a/tests/lib/mocha-3.1.0/package.json b/tests/lib/mocha-3.1.2/package.json index 4ec6546e6d..475f92513f 100644 --- a/tests/lib/mocha-3.1.0/package.json +++ b/tests/lib/mocha-3.1.2/package.json @@ -1,6 +1,6 @@ { "name": "mocha", - "version": "3.1.0", + "version": "3.1.2", "description": "simple, flexible, fun test framework", "keywords": [ "mocha", @@ -314,17 +314,24 @@ "supports-color": "3.1.2" }, "devDependencies": { + "assert": "^1.4.1", "browserify": "^13.0.0", "coffee-script": "^1.10.0", "eslint": "^2.13.1", + "eslint-config-semistandard": "^6.0.2", + "eslint-config-standard": "^5.0.0", + "eslint-plugin-promise": "^2.0.1", + "eslint-plugin-standard": "1.3.2", "expect.js": "^0.3.1", "karma": "^1.1.0", "karma-browserify": "^5.0.5", + "karma-chrome-launcher": "^2.0.0", "karma-expect": "^1.1.2", "karma-no-mocha": "^2.0.0", "karma-phantomjs-launcher": "^0.2.3", "karma-sauce-launcher": "^1.0.0", "karma-spec-reporter": "0.0.26", + "os-name": "^2.0.1", "phantomjs": "1.9.8", "rimraf": "^2.5.2", "should": "^9.0.2", diff --git a/tests/lib/mocha-3.1.0/scripts/dedefine.js b/tests/lib/mocha-3.1.2/scripts/dedefine.js index c647c0e083..3e297586c9 100644 --- a/tests/lib/mocha-3.1.0/scripts/dedefine.js +++ b/tests/lib/mocha-3.1.2/scripts/dedefine.js @@ -8,16 +8,16 @@ var through = require('through2'); var defineRx = /typeof define === ['"]function['"] && define\.amd/g; -function createStream() { - return through.obj(function(chunk, enc, next) { +function createStream () { + return through.obj(function (chunk, enc, next) { this.push(String(chunk) .replace(defineRx, 'false')); next(); }); } -module.exports = function(b) { - function wrap() { +module.exports = function (b) { + function wrap () { b.pipeline.get('wrap').push(createStream()); } diff --git a/tests/lib/mocha-3.1.0/scripts/travis-after-script.sh b/tests/lib/mocha-3.1.2/scripts/travis-after-script.sh index e93c98f796..e93c98f796 100644 --- a/tests/lib/mocha-3.1.0/scripts/travis-after-script.sh +++ b/tests/lib/mocha-3.1.2/scripts/travis-after-script.sh diff --git a/tests/lib/mocha-3.1.0/scripts/travis-before-install.sh b/tests/lib/mocha-3.1.2/scripts/travis-before-install.sh index 9913070ae9..9913070ae9 100644 --- a/tests/lib/mocha-3.1.0/scripts/travis-before-install.sh +++ b/tests/lib/mocha-3.1.2/scripts/travis-before-install.sh diff --git a/tests/lib/mocha-3.1.0/scripts/travis-before-script.sh b/tests/lib/mocha-3.1.2/scripts/travis-before-script.sh index e5c6b25414..e5c6b25414 100644 --- a/tests/lib/mocha-3.1.0/scripts/travis-before-script.sh +++ b/tests/lib/mocha-3.1.2/scripts/travis-before-script.sh diff --git a/tests/lib/mocha-3.1.2/test/.eslintrc.yaml b/tests/lib/mocha-3.1.2/test/.eslintrc.yaml new file mode 100644 index 0000000000..1830a0b6f4 --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/.eslintrc.yaml @@ -0,0 +1,7 @@ +env: + mocha: true +globals: + expect: false + assert: false + # https://github.com/sindresorhus/globals/pull/102 + run: false diff --git a/tests/lib/mocha-3.1.0/test/acceptance/context.spec.js b/tests/lib/mocha-3.1.2/test/acceptance/context.spec.js index 69dea139c9..cbcdedb49d 100644 --- a/tests/lib/mocha-3.1.0/test/acceptance/context.spec.js +++ b/tests/lib/mocha-3.1.2/test/acceptance/context.spec.js @@ -1,72 +1,73 @@ -describe('Context', function(){ - beforeEach(function(){ +'use strict'; + +describe('Context', function () { + beforeEach(function () { this.calls = ['before']; - }) + }); - describe('nested', function(){ - beforeEach(function(){ + describe('nested', function () { + beforeEach(function () { this.calls.push('before two'); - }) + }); - it('should work', function(){ + it('should work', function () { expect(this.calls).to.eql(['before', 'before two']); this.calls.push('test'); - }) + }); - after(function(){ + after(function () { expect(this.calls).to.eql(['before', 'before two', 'test']); this.calls.push('after two'); - }) - }) + }); + }); - after(function(){ + after(function () { expect(this.calls).to.eql(['before', 'before two', 'test', 'after two']); - }) -}) + }); +}); -describe('Context Siblings', function(){ - beforeEach(function(){ +describe('Context Siblings', function () { + beforeEach(function () { this.calls = ['before']; - }) + }); - describe('sequestered sibling', function(){ - beforeEach(function(){ + describe('sequestered sibling', function () { + beforeEach(function () { this.calls.push('before two'); this.hiddenFromSibling = 'This should be hidden'; - }) + }); - it('should work', function(){ - expect(this.hiddenFromSibling).to.eql('This should be hidden') - }) - }) + it('should work', function () { + expect(this.hiddenFromSibling).to.eql('This should be hidden'); + }); + }); - describe('sibling verifiction', function(){ - beforeEach(function(){ + describe('sibling verifiction', function () { + beforeEach(function () { this.calls.push('before sibling'); - }) + }); - it('should not have value set within a sibling describe', function(){ + it('should not have value set within a sibling describe', function () { expect('This should be hidden').not.to.eql(this.hiddenFromSibling); this.visibleFromTestSibling = 'Visible from test sibling'; - }) + }); - it('should allow test siblings to modify shared context', function(){ + it('should allow test siblings to modify shared context', function () { expect('Visible from test sibling').to.eql(this.visibleFromTestSibling); - }) + }); - it('should have reset this.calls before describe', function(){ + it('should have reset this.calls before describe', function () { expect(this.calls).to.eql(['before', 'before sibling']); - }) - }) + }); + }); - after(function(){ + after(function () { expect(this.calls).to.eql(['before', 'before sibling']); - }) - -}) + }); +}); -describe('timeout()', function(){ - it('should return the timeout', function(){ +describe('timeout()', function () { + it('should return the timeout', function () { expect(this.timeout()).to.equal(200); }); }); diff --git a/tests/lib/mocha-3.1.2/test/acceptance/duration.spec.js b/tests/lib/mocha-3.1.2/test/acceptance/duration.spec.js new file mode 100644 index 0000000000..0194d4408c --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/acceptance/duration.spec.js @@ -0,0 +1,27 @@ +'use strict'; + +describe('durations', function () { + describe('when slow', function () { + it('should highlight in red', function (done) { + setTimeout(function () { + done(); + }, 100); + }); + }); + + describe('when reasonable', function () { + it('should highlight in yellow', function (done) { + setTimeout(function () { + done(); + }, 50); + }); + }); + + describe('when fast', function () { + it('should highlight in green', function (done) { + setTimeout(function () { + done(); + }, 10); + }); + }); +}); diff --git a/tests/lib/mocha-3.1.2/test/acceptance/fs.spec.js b/tests/lib/mocha-3.1.2/test/acceptance/fs.spec.js new file mode 100644 index 0000000000..9d0357c382 --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/acceptance/fs.spec.js @@ -0,0 +1,22 @@ +'use strict'; + +var fs = require('fs'); +var path = require('path'); +var os = require('os'); +var tmpFile = path.join.bind(path, os.tmpdir()); + +describe('fs.readFile()', function () { + describe('when the file exists', function () { + it('should succeed', function (done) { + fs.writeFile(tmpFile('mocha'), 'wahoo', done); + }); + }); + + describe('when the file does not exist', function () { + it('should fail', function (done) { + // uncomment + // fs.readFile(tmpFile('does-not-exist'), done); + done(); + }); + }); +}); diff --git a/tests/lib/mocha-3.1.0/test/acceptance/glob/glob.sh b/tests/lib/mocha-3.1.2/test/acceptance/glob/glob.sh index 823ba07fb9..823ba07fb9 100644 --- a/tests/lib/mocha-3.1.0/test/acceptance/glob/glob.sh +++ b/tests/lib/mocha-3.1.2/test/acceptance/glob/glob.sh diff --git a/tests/lib/mocha-3.1.2/test/acceptance/glob/glob.spec.js b/tests/lib/mocha-3.1.2/test/acceptance/glob/glob.spec.js new file mode 100644 index 0000000000..eca3733898 --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/acceptance/glob/glob.spec.js @@ -0,0 +1,7 @@ +'use strict'; + +describe('globbing test', function () { + it('should find this test', function () { + // see glob.sh for details + }); +}); diff --git a/tests/lib/mocha-3.1.0/test/acceptance/globals.spec.js b/tests/lib/mocha-3.1.2/test/acceptance/globals.spec.js index f8ef804b23..b87df9fd99 100644 --- a/tests/lib/mocha-3.1.0/test/acceptance/globals.spec.js +++ b/tests/lib/mocha-3.1.2/test/acceptance/globals.spec.js @@ -1,40 +1,42 @@ -describe('global leaks', function(){ - before(function(){ +'use strict'; + +describe('global leaks', function () { + before(function () { // uncomment to test // foo = 'hey'; // bar = 'hey'; - }) + }); - beforeEach(function(){ + beforeEach(function () { // uncomment to test // foo = 'bar' }); - it('should cause tests to fail', function(){ + it('should cause tests to fail', function () { // uncomment to test // foo = 'bar'; // bar = 'baz'; // baz = 'raz'; }); - it('should pass when accepted', function(){ + it('should pass when accepted', function () { global.okGlobalA = 1; global.okGlobalB = 1; global.okGlobalC = 1; - }) + }); - it('should pass with wildcard', function(){ + it('should pass with wildcard', function () { global.callback123 = 'foo'; global.callback345 = 'bar'; }); - it('should pass when prefixed "mocha-"', function(){ + it('should pass when prefixed "mocha-"', function () { // Opera and IE do this for HTML element IDs anyway // but to sure we can assert this in any browser, simulate it. global['mocha-example'] = { nodeType: 1 }; }); - afterEach(function(){ + afterEach(function () { // uncomment to test // foo = 'bar' }); diff --git a/tests/lib/mocha-3.1.2/test/acceptance/http.spec.js b/tests/lib/mocha-3.1.2/test/acceptance/http.spec.js new file mode 100644 index 0000000000..b8bc2f7e26 --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/acceptance/http.spec.js @@ -0,0 +1,18 @@ +'use strict'; + +var http = require('http'); + +var server = http.createServer(function (req, res) { + res.end('Hello World\n'); +}); + +server.listen(8888); + +describe('http', function () { + it('should provide an example', function (done) { + http.get({ path: '/', port: 8888 }, function (res) { + expect(res).to.have.property('statusCode', 200); + done(); + }); + }); +}); diff --git a/tests/lib/mocha-3.1.2/test/acceptance/interfaces/bdd.spec.js b/tests/lib/mocha-3.1.2/test/acceptance/interfaces/bdd.spec.js new file mode 100644 index 0000000000..f6e24d88a8 --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/acceptance/interfaces/bdd.spec.js @@ -0,0 +1,34 @@ +'use strict'; + +describe('integer primitives', function () { + describe('arithmetic', function () { + it('should add', function () { + expect(1 + 1).to.equal(2); + expect(2 + 2).to.equal(4); + }); + + it('should subtract', function () { + expect(1 - 1).to.equal(0); + expect(2 - 1).to.equal(1); + }); + }); +}); + +describe('integer primitives', function () { + describe('arithmetic is not', function () { + it('should add', function () { + expect(1 + 1).not.to.equal(3); + expect(2 + 2).not.to.equal(5); + }); + }); +}); + +context('test suite', function () { + beforeEach(function () { + this.number = 5; + }); + + specify('share a property', function () { + expect(this.number).to.equal(5); + }); +}); diff --git a/tests/lib/mocha-3.1.2/test/acceptance/interfaces/exports.spec.js b/tests/lib/mocha-3.1.2/test/acceptance/interfaces/exports.spec.js new file mode 100644 index 0000000000..f53c6a4ca0 --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/acceptance/interfaces/exports.spec.js @@ -0,0 +1,48 @@ +'use strict'; + +var calls = []; + +exports.Array = { + before: function () { + calls.push('before'); + }, + + after: function () { + calls.push('after'); + expect(calls) + .to + .eql([ + 'before', + 'before each', + 'one', + 'after each', + 'before each', + 'two', + 'after each', + 'after' + ]); + }, + + '#indexOf()': { + beforeEach: function () { + calls.push('before each'); + }, + + afterEach: function () { + calls.push('after each'); + }, + + 'should return -1 when the value is not present': function () { + calls.push('one'); + expect([1, 2, 3].indexOf(5)).to.equal(-1); + expect([1, 2, 3].indexOf(0)).to.equal(-1); + }, + + 'should return the correct index when the value is present': function () { + calls.push('two'); + expect([1, 2, 3].indexOf(1)).to.equal(0); + expect([1, 2, 3].indexOf(2)).to.equal(1); + expect([1, 2, 3].indexOf(3)).to.equal(2); + } + } +}; diff --git a/tests/lib/mocha-3.1.2/test/acceptance/interfaces/qunit.spec.js b/tests/lib/mocha-3.1.2/test/acceptance/interfaces/qunit.spec.js new file mode 100644 index 0000000000..0d15272f0b --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/acceptance/interfaces/qunit.spec.js @@ -0,0 +1,25 @@ +'use strict'; + +function ok (expr, msg) { + if (!expr) throw new Error(msg); +} + +suite('integer primitives'); + +test('should add', function () { + var number = 2 + 2; + ok(number === 4); +}); + +test('should decrement', function () { + var number = 3; + ok(--number === 2); + ok(--number === 1); + ok(--number === 0); +}); + +suite('String'); + +test('#length', function () { + ok('foo'.length === 3); +}); diff --git a/tests/lib/mocha-3.1.0/test/acceptance/interfaces/tdd.spec.js b/tests/lib/mocha-3.1.2/test/acceptance/interfaces/tdd.spec.js index 7ad079e36d..c2db518d70 100644 --- a/tests/lib/mocha-3.1.0/test/acceptance/interfaces/tdd.spec.js +++ b/tests/lib/mocha-3.1.2/test/acceptance/interfaces/tdd.spec.js @@ -1,38 +1,40 @@ -suite('integer primitives', function(){ - suite('arithmetic', function(){ +'use strict'; + +suite('integer primitives', function () { + suite('arithmetic', function () { var initialValue = 41; - suiteSetup(function(done){ + suiteSetup(function (done) { expect(initialValue).to.eql(41); initialValue += 1; done(); }); - test('should add', function(){ + test('should add', function () { expect(initialValue).to.eql(42); expect(1 + 1).to.equal(2); expect(2 + 2).to.equal(4); }); - test('should subtract', function(){ + test('should subtract', function () { expect(initialValue).to.eql(42); expect(1 - 1).to.equal(0); expect(2 - 1).to.equal(1); }); - test.skip('should skip this test', function(){ + test.skip('should skip this test', function () { var zero = 0; expect(zero).to.equal(1, 'this test should have been skipped'); }); - suite.skip('should skip this suite', function(){ - test('should skip this test', function(){ + suite.skip('should skip this suite', function () { + test('should skip this test', function () { var zero = 0; expect(zero).to.equal(1, 'this test should have been skipped'); }); }); - suiteTeardown(function(done){ + suiteTeardown(function (done) { expect(initialValue).to.eql(42); done(); }); diff --git a/tests/lib/mocha-3.1.0/test/acceptance/lookup-files.spec.js b/tests/lib/mocha-3.1.2/test/acceptance/lookup-files.spec.js index 5d4a48d8af..faf31b1375 100644 --- a/tests/lib/mocha-3.1.0/test/acceptance/lookup-files.spec.js +++ b/tests/lib/mocha-3.1.2/test/acceptance/lookup-files.spec.js @@ -7,13 +7,13 @@ var os = require('os'); var mkdirp = require('mkdirp'); var rimraf = require('rimraf'); -describe('lookupFiles', function() { +describe('lookupFiles', function () { var tmpDir = path.join(os.tmpDir(), 'mocha-lookup-files'); var existsSync = fs.existsSync; var tmpFile = path.join.bind(path, tmpDir); var symlinkSupported = false; - (function testSymlinkSupport() { + (function testSymlinkSupport () { makeTempDir(); fs.writeFileSync(tmpFile('mocha-utils.js'), 'yippy skippy ying yang yow'); @@ -27,7 +27,7 @@ describe('lookupFiles', function() { } }()); - beforeEach(function() { + beforeEach(function () { makeTempDir(); fs.writeFileSync(tmpFile('mocha-utils.js'), 'yippy skippy ying yang yow'); @@ -36,7 +36,7 @@ describe('lookupFiles', function() { } }); - (symlinkSupported ? it : it.skip)('should not choke on symlinks', function() { + (symlinkSupported ? it : it.skip)('should not choke on symlinks', function () { expect(utils.lookupFiles(tmpDir, ['js'], false)) .to .contain(tmpFile('mocha-utils-link.js')) @@ -57,7 +57,7 @@ describe('lookupFiles', function() { .eql([]); }); - it('should accept a glob "path" value', function() { + it('should accept a glob "path" value', function () { var res = utils.lookupFiles(tmpFile('mocha-utils*'), ['js'], false) .map(path.normalize.bind(path)); @@ -80,11 +80,11 @@ describe('lookupFiles', function() { afterEach(removeTempDir); - function makeTempDir() { + function makeTempDir () { mkdirp.sync(tmpDir); } - function removeTempDir() { + function removeTempDir () { rimraf.sync(tmpDir); } }); diff --git a/tests/lib/mocha-3.1.0/test/acceptance/misc/exit.spec.js b/tests/lib/mocha-3.1.2/test/acceptance/misc/exit.spec.js index 113e392300..916752f9b1 100644 --- a/tests/lib/mocha-3.1.0/test/acceptance/misc/exit.spec.js +++ b/tests/lib/mocha-3.1.2/test/acceptance/misc/exit.spec.js @@ -1,18 +1,20 @@ -describe('exit', function(){ - //note --bail works nicely in that it still allows an 'early exit' in an error scenario - it('should not exit even in error scenario if called with --no-exit', function(done){ +'use strict'; + +describe('exit', function () { + // note --bail works nicely in that it still allows an 'early exit' in an error scenario + it('should not exit even in error scenario if called with --no-exit', function (done) { done(new Error('failure')); - }) + }); - it('should take a long time to exit if called with --no-exit', function(done){ + it('should take a long time to exit if called with --no-exit', function (done) { done(); - setTimeout(function() { + setTimeout(function () { console.log('all done'); - }, 2500) - }) + }, 2500); + }); it('should kill all processes when SIGINT received', function () { // uncomment to test - //while (true) {} + // while (true) {} }); -}) +}); diff --git a/tests/lib/mocha-3.1.0/test/acceptance/misc/many.spec.js b/tests/lib/mocha-3.1.2/test/acceptance/misc/many.spec.js index 26538bc66e..d4e4a1e806 100644 --- a/tests/lib/mocha-3.1.0/test/acceptance/misc/many.spec.js +++ b/tests/lib/mocha-3.1.2/test/acceptance/misc/many.spec.js @@ -1,27 +1,28 @@ +'use strict'; + // Useful for testing SIGINT handler // use env.big_number to tune iterations so that you have time to ctrl+c -describe('a load of tests', function(){ - it('should fail the first test', function(){ +describe('a load of tests', function () { + it('should fail the first test', function () { throw new Error('this should appear in the summary'); - }) + }); var iterations = (process.env.big_number || 1e7); - function work() { + function work () { var a = 0; - for(var i=0; i<iterations; ++i) { + for (var i = 0; i < iterations; ++i) { a += i; } } - function addTest() { - it('should pass test ' + i, function(){ + function addTest () { + it('should pass test ' + i, function () { work(); - }) + }); } - for(var i=0; i<500; ++i) { + for (var i = 0; i < 500; ++i) { addTest(); } - -}) +}); diff --git a/tests/lib/mocha-3.1.2/test/acceptance/misc/nontty.spec.js b/tests/lib/mocha-3.1.2/test/acceptance/misc/nontty.spec.js new file mode 100644 index 0000000000..ea57b9733f --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/acceptance/misc/nontty.spec.js @@ -0,0 +1,11 @@ +'use strict'; + +describe('tests for non-tty', function () { + it('should pass', function () { + + }); + + it('should fail', function () { + throw new Error('oh noes'); + }); +}); diff --git a/tests/lib/mocha-3.1.0/test/acceptance/misc/only/bdd-require.spec.js b/tests/lib/mocha-3.1.2/test/acceptance/misc/only/bdd-require.spec.js index 516dad7afa..14710c4cd2 100644 --- a/tests/lib/mocha-3.1.0/test/acceptance/misc/only/bdd-require.spec.js +++ b/tests/lib/mocha-3.1.2/test/acceptance/misc/only/bdd-require.spec.js @@ -1,4 +1,6 @@ -/*jshint node: true */ +'use strict'; + +/* jshint node: true */ var mocha = require('../../../../lib/mocha'); @@ -6,12 +8,12 @@ var beforeEach = mocha.beforeEach; var it = mocha.it; var describe = mocha.describe; -describe('it.only via require("mocha")', function() { - beforeEach(function() { +describe('it.only via require("mocha")', function () { + beforeEach(function () { this.didRunBeforeEach = true; }); - describe("nested within a describe/context", function() { - it.only('should run all enclosing beforeEach hooks', function() { + describe('nested within a describe/context', function () { + it.only('should run all enclosing beforeEach hooks', function () { require('assert').equal(this.didRunBeforeEach, true); }); }); diff --git a/tests/lib/mocha-3.1.0/test/acceptance/misc/only/bdd.spec.js b/tests/lib/mocha-3.1.2/test/acceptance/misc/only/bdd.spec.js index 7a33a74eac..639ab30e1b 100644 --- a/tests/lib/mocha-3.1.0/test/acceptance/misc/only/bdd.spec.js +++ b/tests/lib/mocha-3.1.2/test/acceptance/misc/only/bdd.spec.js @@ -1,75 +1,77 @@ -describe('should only run .only test in this bdd suite', function() { - it('should not run this test', function() { +'use strict'; + +describe('should only run .only test in this bdd suite', function () { + it('should not run this test', function () { (0).should.equal(1, 'this test should have been skipped'); }); - it.only('should run this test', function() { + it.only('should run this test', function () { (0).should.equal(0, 'this .only test should run'); }); - it('should run this test, not (includes the title of the .only test)', function() { + it('should run this test, not (includes the title of the .only test)', function () { (0).should.equal(1, 'this test should have been skipped'); }); }); -describe('should not run this suite', function() { - it('should not run this test', function() { +describe('should not run this suite', function () { + it('should not run this test', function () { (true).should.equal(false); }); - it('should not run this test', function() { + it('should not run this test', function () { (true).should.equal(false); }); - it('should not run this test', function() { + it('should not run this test', function () { (true).should.equal(false); }); }); -describe.only('should run all tests in this bdd suite', function() { - it('should run this test #1', function() { +describe.only('should run all tests in this bdd suite', function () { + it('should run this test #1', function () { (true).should.equal(true); }); - it('should run this test #2', function() { + it('should run this test #2', function () { (1).should.equal(1); }); - it('should run this test #3', function() { + it('should run this test #3', function () { ('foo').should.equal('foo'); }); }); -describe('should run only suites that marked as `only`', function() { - describe.only('should run all this tdd suite', function() { - it('should run this test #1', function() { +describe('should run only suites that marked as `only`', function () { + describe.only('should run all this tdd suite', function () { + it('should run this test #1', function () { (true).should.equal(true); }); - it('should run this test #2', function() { + it('should run this test #2', function () { (true).should.equal(true); }); }); - describe('should not run this suite', function() { - it('should run this test', function() { + describe('should not run this suite', function () { + it('should run this test', function () { (true).should.equal(false); }); }); }); // Nested situation -describe('should not run parent tests', function() { - it('should not run this test', function() { +describe('should not run parent tests', function () { + it('should not run this test', function () { (true).should.equal(false); }); - describe('and not the child tests too', function() { - it('should not run this test', function() { + describe('and not the child tests too', function () { + it('should not run this test', function () { (true).should.equal(false); }); - describe.only('but run all the tests in this suite', function() { - it('should run this test #1', function() { + describe.only('but run all the tests in this suite', function () { + it('should run this test #1', function () { (true).should.equal(true); }); - it('should run this test #2', function() { + it('should run this test #2', function () { (true).should.equal(true); }); }); @@ -77,49 +79,49 @@ describe('should not run parent tests', function() { }); // mark test as `only` override the suite behavior -describe.only('should run only tests that marked as `only`', function() { - it('should not run this test #1', function() { +describe.only('should run only tests that marked as `only`', function () { + it('should not run this test #1', function () { (false).should.equal(true); }); - it.only('should run this test #2', function() { + it.only('should run this test #2', function () { (true).should.equal(true); }); - it('should not run this test #3', function() { + it('should not run this test #3', function () { (false).should.equal(true); }); - it.only('should run this test #4', function() { + it.only('should run this test #4', function () { (true).should.equal(true); }); }); -describe.only('Should run only test cases that mark as only', function() { - it.only('should runt his test', function() { +describe.only('Should run only test cases that mark as only', function () { + it.only('should runt his test', function () { (true).should.equal(true); }); - it('should not run this test', function() { + it('should not run this test', function () { (false).should.equal(true); }); - describe('should not run this suite', function() { - it('should not run this test', function() { + describe('should not run this suite', function () { + it('should not run this test', function () { (false).should.equal(true); }); }); }); // Root Suite -it.only('#Root-Suite, should run this test-case #1', function() { +it.only('#Root-Suite, should run this test-case #1', function () { (true).should.equal(true); }); -it.only('#Root-Suite, should run this test-case #2', function() { +it.only('#Root-Suite, should run this test-case #2', function () { (true).should.equal(true); }); -it('#Root-Suite, should not run this test', function() { +it('#Root-Suite, should not run this test', function () { (false).should.equal(true); }); diff --git a/tests/lib/mocha-3.1.0/test/acceptance/misc/only/global/bdd.spec.js b/tests/lib/mocha-3.1.2/test/acceptance/misc/only/global/bdd.spec.js index e923876f84..1fc3d14384 100644 --- a/tests/lib/mocha-3.1.0/test/acceptance/misc/only/global/bdd.spec.js +++ b/tests/lib/mocha-3.1.2/test/acceptance/misc/only/global/bdd.spec.js @@ -1,12 +1,14 @@ +'use strict'; + // Root-only test cases -it.only('#Root-Suite, should run this bdd test-case #1', function() { +it.only('#Root-Suite, should run this bdd test-case #1', function () { (true).should.equal(true); }); -it('#Root-Suite, should not run this bdd test-case #2', function() { +it('#Root-Suite, should not run this bdd test-case #2', function () { (false).should.equal(true); }); -it('#Root-Suite, should not run this bdd test-case #3', function() { +it('#Root-Suite, should not run this bdd test-case #3', function () { (false).should.equal(true); -});
\ No newline at end of file +}); diff --git a/tests/lib/mocha-3.1.0/test/acceptance/misc/only/global/qunit.spec.js b/tests/lib/mocha-3.1.2/test/acceptance/misc/only/global/qunit.spec.js index 59ad72c3bf..69bbd3467a 100644 --- a/tests/lib/mocha-3.1.0/test/acceptance/misc/only/global/qunit.spec.js +++ b/tests/lib/mocha-3.1.2/test/acceptance/misc/only/global/qunit.spec.js @@ -1,12 +1,14 @@ +'use strict'; + // Root-only test cases -test.only('#Root-Suite, should run this qunit test-case #1', function() { +test.only('#Root-Suite, should run this qunit test-case #1', function () { (true).should.equal(true); }); -test('#Root-Suite, should not run this qunit test-case #2', function() { +test('#Root-Suite, should not run this qunit test-case #2', function () { (false).should.equal(true); }); -test('#Root-Suite, should not run this qunit test-case #3', function() { +test('#Root-Suite, should not run this qunit test-case #3', function () { (false).should.equal(true); -});
\ No newline at end of file +}); diff --git a/tests/lib/mocha-3.1.0/test/acceptance/misc/only/global/tdd.spec.js b/tests/lib/mocha-3.1.2/test/acceptance/misc/only/global/tdd.spec.js index 08d456848b..03fdea768f 100644 --- a/tests/lib/mocha-3.1.0/test/acceptance/misc/only/global/tdd.spec.js +++ b/tests/lib/mocha-3.1.2/test/acceptance/misc/only/global/tdd.spec.js @@ -1,12 +1,14 @@ +'use strict'; + // Root-only test cases -test.only('#Root-Suite, should run this tdd test-case #1', function() { +test.only('#Root-Suite, should run this tdd test-case #1', function () { (true).should.equal(true); }); -test('#Root-Suite, should not run this tdd test-case #2', function() { +test('#Root-Suite, should not run this tdd test-case #2', function () { (false).should.equal(true); }); -test('#Root-Suite, should not run this tdd test-case #3', function() { +test('#Root-Suite, should not run this tdd test-case #3', function () { (false).should.equal(true); -});
\ No newline at end of file +}); diff --git a/tests/lib/mocha-3.1.0/test/acceptance/misc/only/qunit.spec.js b/tests/lib/mocha-3.1.2/test/acceptance/misc/only/qunit.spec.js index 1248adeba7..77bdfcc64f 100644 --- a/tests/lib/mocha-3.1.0/test/acceptance/misc/only/qunit.spec.js +++ b/tests/lib/mocha-3.1.2/test/acceptance/misc/only/qunit.spec.js @@ -1,73 +1,75 @@ +'use strict'; + // Root Suite -test.only('#Root-Suite, should run this test-case #1', function() { +test.only('#Root-Suite, should run this test-case #1', function () { (true).should.equal(true); }); -test.only('#Root-Suite, should run this test-case #2', function() { +test.only('#Root-Suite, should run this test-case #2', function () { (true).should.equal(true); }); -test('#Root-Suite, should not run this test', function() { +test('#Root-Suite, should not run this test', function () { (false).should.equal(true); }); suite('should only run .only test in this qunit suite'); -test('should not run this test', function() { +test('should not run this test', function () { (0).should.equal(1, 'this test should have been skipped'); }); -test.only('should run this test', function() { +test.only('should run this test', function () { (0).should.equal(0, 'this .only test should run'); }); -test('should run this test, not (includes the title of the .only test)', function() { +test('should run this test, not (includes the title of the .only test)', function () { (0).should.equal(1, 'this test should have been skipped'); }); // Mark suite suite.only('should run all tests in this suite'); -test('should run this test #1', function() { +test('should run this test #1', function () { (true).should.equal(true); }); -test('should run this test #2', function() { +test('should run this test #2', function () { (true).should.equal(true); }); -test('should run this test #3', function() { +test('should run this test #3', function () { (true).should.equal(true); }); // Unmark this suite suite('should not run any of this suite\'s tests'); -test('should not run this test', function() { +test('should not run this test', function () { (false).should.equal(true); }); -test('should not run this test', function() { +test('should not run this test', function () { (false).should.equal(true); }); -test('should not run this test', function() { +test('should not run this test', function () { (false).should.equal(true); }); // Mark test as `only` override the suite behavior suite.only('should run only tests that marked as `only`'); -test('should not run this test #1', function() { +test('should not run this test #1', function () { (false).should.equal(true); }); -test.only('should not run this test #2', function() { +test.only('should not run this test #2', function () { (true).should.equal(true); }); -test('should not run this test #3', function() { +test('should not run this test #3', function () { (false).should.equal(true); }); -test.only('should not run this test #4', function() { +test.only('should not run this test #4', function () { (true).should.equal(true); -});
\ No newline at end of file +}); diff --git a/tests/lib/mocha-3.1.2/test/acceptance/misc/only/tdd.spec.js b/tests/lib/mocha-3.1.2/test/acceptance/misc/only/tdd.spec.js new file mode 100644 index 0000000000..da5f45b198 --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/acceptance/misc/only/tdd.spec.js @@ -0,0 +1,127 @@ +'use strict'; + +suite('should only run .only test in this tdd suite', function () { + test('should not run this test', function () { + (0).should.equal(1, 'this test should have been skipped'); + }); + test.only('should run this test', function () { + (0).should.equal(0, 'this .only test should run'); + }); + test('should run this test, not (includes the title of the .only test)', function () { + (0).should.equal(1, 'this test should have been skipped'); + }); +}); + +suite('should not run this suite', function () { + test('should not run this test', function () { + (true).should.equal(false); + }); + + test('should not run this test', function () { + (true).should.equal(false); + }); + + test('should not run this test', function () { + (true).should.equal(false); + }); +}); + +suite.only('should run all tests in this tdd suite', function () { + test('should run this test #1', function () { + (true).should.equal(true); + }); + + test('should run this test #2', function () { + (1).should.equal(1); + }); + + test('should run this test #3', function () { + ('foo').should.equal('foo'); + }); +}); + +suite('should run only suites that marked as `only`', function () { + suite.only('should run all this tdd suite', function () { + test('should run this test #1', function () { + (true).should.equal(true); + }); + + test('should run this test #2', function () { + (true).should.equal(true); + }); + }); + + suite('should not run this suite', function () { + test('should not run this test', function () { + (true).should.equal(false); + }); + }); +}); + +// Nested situation +suite('should not run parent tests', function () { + test('should not run this test', function () { + (true).should.equal(false); + }); + suite('and not the child tests too', function () { + test('should not run this test', function () { + (true).should.equal(false); + }); + suite.only('but run all the tests in this suite', function () { + test('should run this test #1', function () { + (true).should.equal(true); + }); + test('should run this test #2', function () { + (true).should.equal(true); + }); + }); + }); +}); + +// mark test as `only` override the suite behavior +suite.only('should run only tests that marked as `only`', function () { + test('should not run this test #1', function () { + (false).should.equal(true); + }); + + test.only('should run this test #2', function () { + (true).should.equal(true); + }); + + test('should not run this test #3', function () { + (false).should.equal(true); + }); + + test.only('should run this test #4', function () { + (true).should.equal(true); + }); +}); + +suite.only('Should run only test cases that mark as only', function () { + test.only('should runt his test', function () { + (true).should.equal(true); + }); + + test('should not run this test', function () { + (false).should.equal(true); + }); + + suite('should not run this suite', function () { + test('should not run this test', function () { + (false).should.equal(true); + }); + }); +}); + +// Root Suite +test.only('#Root-Suite, should run this test-case #1', function () { + (true).should.equal(true); +}); + +test.only('#Root-Suite, should run this test-case #2', function () { + (true).should.equal(true); +}); + +test('#Root-Suite, should not run this test', function () { + (false).should.equal(true); +}); diff --git a/tests/lib/mocha-3.1.0/test/acceptance/overspecified-async.spec.js b/tests/lib/mocha-3.1.2/test/acceptance/overspecified-async.spec.js index 2844920379..0f9b6c9ff5 100644 --- a/tests/lib/mocha-3.1.0/test/acceptance/overspecified-async.spec.js +++ b/tests/lib/mocha-3.1.2/test/acceptance/overspecified-async.spec.js @@ -1,5 +1,7 @@ -describe('overspecified asynchronous resolution method', function() { - it('should fail when multiple methods are used', function(done) { +'use strict'; + +describe('overspecified asynchronous resolution method', function () { + it('should fail when multiple methods are used', function (done) { setTimeout(done, 0); // uncomment diff --git a/tests/lib/mocha-3.1.2/test/acceptance/require/a.js b/tests/lib/mocha-3.1.2/test/acceptance/require/a.js new file mode 100644 index 0000000000..949b8af2f0 --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/acceptance/require/a.js @@ -0,0 +1,4 @@ +'use strict'; + +global.required = (global.required || []); +global.required.push('a.js'); diff --git a/tests/lib/mocha-3.1.0/test/acceptance/require/b.coffee b/tests/lib/mocha-3.1.2/test/acceptance/require/b.coffee index 045cc7591b..045cc7591b 100644 --- a/tests/lib/mocha-3.1.0/test/acceptance/require/b.coffee +++ b/tests/lib/mocha-3.1.2/test/acceptance/require/b.coffee diff --git a/tests/lib/mocha-3.1.2/test/acceptance/require/c.js b/tests/lib/mocha-3.1.2/test/acceptance/require/c.js new file mode 100644 index 0000000000..4d68dc4549 --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/acceptance/require/c.js @@ -0,0 +1,4 @@ +'use strict'; + +global.required = (global.required || []); +global.required.push('c.js'); diff --git a/tests/lib/mocha-3.1.0/test/acceptance/require/d.coffee b/tests/lib/mocha-3.1.2/test/acceptance/require/d.coffee index d5ebbf60ed..d5ebbf60ed 100644 --- a/tests/lib/mocha-3.1.0/test/acceptance/require/d.coffee +++ b/tests/lib/mocha-3.1.2/test/acceptance/require/d.coffee diff --git a/tests/lib/mocha-3.1.0/test/acceptance/require/require.spec.js b/tests/lib/mocha-3.1.2/test/acceptance/require/require.spec.js index 22570e62ff..f959a859a8 100644 --- a/tests/lib/mocha-3.1.0/test/acceptance/require/require.spec.js +++ b/tests/lib/mocha-3.1.2/test/acceptance/require/require.spec.js @@ -1,9 +1,11 @@ -describe('require test', function(){ - it('should require args in order', function(){ +'use strict'; + +describe('require test', function () { + it('should require args in order', function () { var req = global.required; expect(req.indexOf('a.js')).to.equal(0); expect(req.indexOf('b.coffee')).to.equal(1); expect(req.indexOf('c.js')).to.equal(2); expect(req.indexOf('d.coffee')).to.equal(3); - }) + }); }); diff --git a/tests/lib/mocha-3.1.0/test/acceptance/required-tokens.spec.js b/tests/lib/mocha-3.1.2/test/acceptance/required-tokens.spec.js index 6944cee40c..2b44dee59b 100644 --- a/tests/lib/mocha-3.1.0/test/acceptance/required-tokens.spec.js +++ b/tests/lib/mocha-3.1.2/test/acceptance/required-tokens.spec.js @@ -1,3 +1,5 @@ +'use strict'; + var assert = require('assert'); var describe = require('../..').describe; var it = require('../..').it; @@ -6,5 +8,5 @@ describe('using imported describe', function () { it('using imported it', function (done) { assert.ok(true); done(); - }) -}) + }); +}); diff --git a/tests/lib/mocha-3.1.2/test/acceptance/root.spec.js b/tests/lib/mocha-3.1.2/test/acceptance/root.spec.js new file mode 100644 index 0000000000..abd8d4192e --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/acceptance/root.spec.js @@ -0,0 +1,13 @@ +'use strict'; + +var calls = []; + +before(function () { + calls.push('before'); +}); + +describe('root', function () { + it('should be a valid suite', function () { + expect(calls).to.eql(['before']); + }); +}); diff --git a/tests/lib/mocha-3.1.0/test/acceptance/test.coffee b/tests/lib/mocha-3.1.2/test/acceptance/test.coffee index b8e309f515..b8e309f515 100644 --- a/tests/lib/mocha-3.1.0/test/acceptance/test.coffee +++ b/tests/lib/mocha-3.1.2/test/acceptance/test.coffee diff --git a/tests/lib/mocha-3.1.0/test/acceptance/test.foo b/tests/lib/mocha-3.1.2/test/acceptance/test.foo index d00491fd7e..d00491fd7e 100644 --- a/tests/lib/mocha-3.1.0/test/acceptance/test.foo +++ b/tests/lib/mocha-3.1.2/test/acceptance/test.foo diff --git a/tests/lib/mocha-3.1.0/test/acceptance/throw.spec.js b/tests/lib/mocha-3.1.2/test/acceptance/throw.spec.js index 46cfbad6ad..68e8cd2c1d 100644 --- a/tests/lib/mocha-3.1.0/test/acceptance/throw.spec.js +++ b/tests/lib/mocha-3.1.2/test/acceptance/throw.spec.js @@ -1,3 +1,7 @@ +'use strict'; + +/* eslint no-throw-literal: off */ + var Suite = require('../../lib/suite'); var Test = require('../../lib/test'); var Runner = require('../../lib/runner'); @@ -5,34 +9,33 @@ var Runner = require('../../lib/runner'); describe('a test that throws', function () { var suite, runner; - beforeEach(function(){ + beforeEach(function () { suite = new Suite('Suite', 'root'); runner = new Runner(suite); - }) - - describe('undefined', function (){ - it('should not pass if throwing sync and test is sync', function(done) { - var test = new Test('im sync and throw undefined sync', function(){ + }); + + describe('undefined', function () { + it('should not pass if throwing sync and test is sync', function (done) { + var test = new Test('im sync and throw undefined sync', function () { throw undefined; }); suite.addTest(test); runner = new Runner(suite); - runner.on('end', function(){ + runner.on('end', function () { expect(runner.failures).to.equal(1); expect(test.state).to.equal('failed'); done(); }); runner.run(); - }) + }); - it('should not pass if throwing sync and test is async', function(done){ - var test = new Test('im async and throw undefined sync', function(done2){ + it('should not pass if throwing sync and test is async', function (done) { + var test = new Test('im async and throw undefined sync', function (done2) { throw undefined; - process.nexTick(done2); }); suite.addTest(test); runner = new Runner(suite); - runner.on('end', function(){ + runner.on('end', function () { expect(runner.failures).to.equal(1); expect(test.state).to.equal('failed'); done(); @@ -40,47 +43,45 @@ describe('a test that throws', function () { runner.run(); }); - it('should not pass if throwing async and test is async', function(done){ - var test = new Test('im async and throw undefined async', function(done2){ - process.nexTick(function(){ + it('should not pass if throwing async and test is async', function (done) { + var test = new Test('im async and throw undefined async', function (done2) { + process.nexTick(function () { throw undefined; - done2(); }); }); suite.addTest(test); runner = new Runner(suite); - runner.on('end', function(){ + runner.on('end', function () { expect(runner.failures).to.equal(1); expect(test.state).to.equal('failed'); done(); }); runner.run(); - }) - }) + }); + }); - describe('null', function (){ - it('should not pass if throwing sync and test is sync', function(done) { - var test = new Test('im sync and throw null sync', function(){ + describe('null', function () { + it('should not pass if throwing sync and test is sync', function (done) { + var test = new Test('im sync and throw null sync', function () { throw null; }); suite.addTest(test); runner = new Runner(suite); - runner.on('end', function(){ + runner.on('end', function () { expect(runner.failures).to.equal(1); expect(test.state).to.equal('failed'); done(); }); runner.run(); - }) + }); - it('should not pass if throwing sync and test is async', function(done){ - var test = new Test('im async and throw null sync', function(done2){ + it('should not pass if throwing sync and test is async', function (done) { + var test = new Test('im async and throw null sync', function (done2) { throw null; - process.nexTick(done2); }); suite.addTest(test); runner = new Runner(suite); - runner.on('end', function(){ + runner.on('end', function () { expect(runner.failures).to.equal(1); expect(test.state).to.equal('failed'); done(); @@ -88,21 +89,20 @@ describe('a test that throws', function () { runner.run(); }); - it('should not pass if throwing async and test is async', function(done){ - var test = new Test('im async and throw null async', function(done2){ - process.nexTick(function(){ + it('should not pass if throwing async and test is async', function (done) { + var test = new Test('im async and throw null async', function (done2) { + process.nexTick(function () { throw null; - done2(); }); }); suite.addTest(test); runner = new Runner(suite); - runner.on('end', function(){ + runner.on('end', function () { expect(runner.failures).to.equal(1); expect(test.state).to.equal('failed'); done(); }); runner.run(); - }) - }) -}) + }); + }); +}); diff --git a/tests/lib/mocha-3.1.2/test/acceptance/timeout.spec.js b/tests/lib/mocha-3.1.2/test/acceptance/timeout.spec.js new file mode 100644 index 0000000000..b3fc632a0d --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/acceptance/timeout.spec.js @@ -0,0 +1,79 @@ +'use strict'; + +describe('timeouts', function () { + beforeEach(function (done) { + // uncomment + // setTimeout(done, 3000); + done(); + }); + + it('should error on timeout', function (done) { + // uncomment + // setTimeout(done, 3000); + done(); + }); + + it('should allow overriding per-test', function (done) { + this.timeout(1000); + setTimeout(function () { + done(); + }, 300); + }); + + describe('disabling', function () { + it('should allow overriding per-test', function (done) { + this.enableTimeouts(false); + this.timeout(1); + setTimeout(done, 2); + }); + + it('should work with timeout(0)', function (done) { + this.timeout(0); + setTimeout(done, 1); + }); + + describe('using beforeEach', function () { + beforeEach(function () { + this.timeout(0); + }); + + it('should work with timeout(0)', function (done) { + setTimeout(done, 1); + }); + }); + + describe('using before', function () { + before(function () { + this.timeout(0); + }); + + it('should work with timeout(0)', function (done) { + setTimeout(done, 1); + }); + }); + + describe('using enableTimeouts(false)', function () { + this.timeout(4); + + it('should suppress timeout(4)', function (done) { + // The test is in the before() call. + this.enableTimeouts(false); + setTimeout(done, 50); + }); + }); + + describe('suite-level', function () { + this.timeout(0); + + it('should work with timeout(0)', function (done) { + setTimeout(done, 1); + }); + + describe('nested suite', function () { + it('should work with timeout(0)', function (done) { + setTimeout(done, 1); + }); + }); + }); + }); +}); diff --git a/tests/lib/mocha-3.1.0/test/acceptance/utils.spec.js b/tests/lib/mocha-3.1.2/test/acceptance/utils.spec.js index cab0f42b01..545bdfd265 100644 --- a/tests/lib/mocha-3.1.0/test/acceptance/utils.spec.js +++ b/tests/lib/mocha-3.1.2/test/acceptance/utils.spec.js @@ -1,100 +1,103 @@ +'use strict'; + var utils = require('../../lib/utils'); var toISOString = require('../../lib/to-iso-string'); var JSON = require('json3'); describe('lib/utils', function () { describe('clean', function () { - it("should format a single line test function", function () { + it('should format a single line test function', function () { var fn = [ - "function () {" - , " var a = 1;" - , "}" - ].join("\n"); - expect(utils.clean(fn)).to.equal("var a = 1;"); + 'function () {', + ' var a = 1;', + '}' + ].join('\n'); + expect(utils.clean(fn)).to.equal('var a = 1;'); }); - it("should format a multi line test indented with spaces", function () { + it('should format a multi line test indented with spaces', function () { // and no new lines after curly braces, shouldn't matter var fn = [ - "function(){ var a = 1;" - , " var b = 2;" // this one has more spaces - , " var c = 3; }" - ].join("\n"); - expect(utils.clean(fn)).to.equal("var a = 1;\n var b = 2;\nvar c = 3;"); + 'function(){ var a = 1;', + // this one has more spaces + ' var b = 2;', + ' var c = 3; }' + ].join('\n'); + expect(utils.clean(fn)).to.equal('var a = 1;\n var b = 2;\nvar c = 3;'); }); - it("should format a multi line test indented with tabs", function () { + it('should format a multi line test indented with tabs', function () { var fn = [ - "function (arg1, arg2) {" - , "\tif (true) {" - , "\t\tvar a = 1;" - , "\t}" - , "}" - ].join("\n"); - expect(utils.clean(fn)).to.equal("if (true) {\n\tvar a = 1;\n}"); + 'function (arg1, arg2) {', + '\tif (true) {', + '\t\tvar a = 1;', + '\t}', + '}' + ].join('\n'); + expect(utils.clean(fn)).to.equal('if (true) {\n\tvar a = 1;\n}'); }); - it("should format functions saved in windows style - spaces", function () { + it('should format functions saved in windows style - spaces', function () { var fn = [ - "function (one) {" - , " do {" - , ' "nothing";' - , " } while (false);" - , ' }' - ].join("\r\n"); + 'function (one) {', + ' do {', + ' "nothing";', + ' } while (false);', + ' }' + ].join('\r\n'); expect(utils.clean(fn)).to.equal('do {\n "nothing";\n} while (false);'); }); - it("should format functions saved in windows style - tabs", function () { + it('should format functions saved in windows style - tabs', function () { var fn = [ - "function ( ) {" - , "\tif (false) {" - , "\t\tvar json = {" - , '\t\t\tone : 1' - , '\t\t};' - , "\t}" - , "}" - ].join("\r\n"); - expect(utils.clean(fn)).to.equal("if (false) {\n\tvar json = {\n\t\tone : 1\n\t};\n}"); - }); - - it("should format es6 arrow functions", function () { + 'function ( ) {', + '\tif (false) {', + '\t\tvar json = {', + '\t\t\tone : 1', + '\t\t};', + '\t}', + '}' + ].join('\r\n'); + expect(utils.clean(fn)).to.equal('if (false) {\n\tvar json = {\n\t\tone : 1\n\t};\n}'); + }); + + it('should format es6 arrow functions', function () { var fn = [ - "() => {", - " var a = 1;", - "}" - ].join("\n"); - expect(utils.clean(fn)).to.equal("var a = 1;"); + '() => {', + ' var a = 1;', + '}' + ].join('\n'); + expect(utils.clean(fn)).to.equal('var a = 1;'); }); - it("should format es6 arrow functions with implicit return", function () { - var fn = "() => foo()"; - expect(utils.clean(fn)).to.equal("foo()"); + it('should format es6 arrow functions with implicit return', function () { + var fn = '() => foo()'; + expect(utils.clean(fn)).to.equal('foo()'); }); }); - describe('stringify', function(){ - + describe('stringify', function () { var stringify = utils.stringify; - it('should return an object representation of a string created with a String constructor', function() { + it('should return an object representation of a string created with a String constructor', function () { + /* eslint no-new-wrappers: off */ expect(stringify(new String('foo'))).to.equal('{\n "0": "f"\n "1": "o"\n "2": "o"\n}'); }); - it('should return Buffer with .toJSON representation', function() { + it('should return Buffer with .toJSON representation', function () { expect(stringify(new Buffer([0x01]))).to.equal('[\n 1\n]'); expect(stringify(new Buffer([0x01, 0x02]))).to.equal('[\n 1\n 2\n]'); expect(stringify(new Buffer('ABCD'))).to.equal('[\n 65\n 66\n 67\n 68\n]'); }); - it('should return Date object with .toISOString() + string prefix', function() { + it('should return Date object with .toISOString() + string prefix', function () { expect(stringify(new Date(0))).to.equal('[Date: ' + shimToISOString(new Date(0)) + ']'); var date = new Date(); // now expect(stringify(date)).to.equal('[Date: ' + shimToISOString(date) + ']'); - function shimToISOString(date) { + function shimToISOString (date) { if (date.toISOString) { return date.toISOString(); } else { @@ -103,32 +106,32 @@ describe('lib/utils', function () { } }); - it('should return invalid Date object with .toString() + string prefix', function() { + it('should return invalid Date object with .toString() + string prefix', function () { expect(stringify(new Date(''))).to.equal('[Date: ' + new Date('').toString() + ']'); }); - describe('#Number', function() { - it('should show the handle -0 situations', function() { + describe('#Number', function () { + it('should show the handle -0 situations', function () { expect(stringify(-0)).to.eql('-0'); expect(stringify(0)).to.eql('0'); expect(stringify('-0')).to.eql('"-0"'); }); - it('should work well with `NaN` and `Infinity`', function() { + it('should work well with `NaN` and `Infinity`', function () { expect(stringify(NaN)).to.equal('NaN'); expect(stringify(Infinity)).to.equal('Infinity'); expect(stringify(-Infinity)).to.equal('-Infinity'); }); - it('floats and ints', function() { + it('floats and ints', function () { expect(stringify(1)).to.equal('1'); expect(stringify(1.2)).to.equal('1.2'); expect(stringify(1e9)).to.equal('1000000000'); }); }); - describe('canonicalize example', function() { - it('should represent the actual full result', function() { + describe('canonicalize example', function () { + it('should represent the actual full result', function () { var expected = { str: 'string', int: 90, @@ -138,148 +141,155 @@ describe('lib/utils', function () { undef: undefined, regex: /^[a-z|A-Z]/, date: new Date(0), - func: function() {}, + func: function () {}, infi: Infinity, nan: NaN, zero: -0, buffer: new Buffer([0x01, 0x02]), - array: [1,2,3], + array: [1, 2, 3], empArr: [], - matrix: [[1], [2,3,4] ], + matrix: [[1], + [ + 2, + 3, + 4 + ] + ], object: { a: 1, b: 2 }, canObj: { a: { b: 1, c: 2 }, b: {} }, empObj: {} }; expected.circular = expected; // Make `Circular` situation - var actual = ['{' - , ' "array": [' - , ' 1' - , ' 2' - , ' 3' - , ' ]' - , ' "boolean": false' - , ' "buffer": [Buffer: [' - , ' 1' - , ' 2' - , ' ]]' - , ' "canObj": {' - , ' "a": {' - , ' "b": 1' - , ' "c": 2' - , ' }' - , ' "b": {}' - , ' }' - , ' "circular": [Circular]' - , ' "date": [Date: 1970-01-01T00:00:00.000Z]' - , ' "empArr": []' - , ' "empObj": {}' - , ' "float": 9.99' - , ' "func": [Function]' - , ' "infi": Infinity' - , ' "int": 90' - , ' "matrix": [' - , ' [' - , ' 1' - , ' ]' - , ' [' - , ' 2' - , ' 3' - , ' 4' - , ' ]' - , ' ]' - , ' "nan": NaN' - , ' "nil": [null]' - , ' "object": {' - , ' "a": 1' - , ' "b": 2' - , ' }' - , ' "regex": /^[a-z|A-Z]/' - , ' "str": "string"' - , ' "undef": [undefined]' - , ' "zero": -0' - , '}'].join('\n'); + var actual = [ + '{', + ' "array": [', + ' 1', + ' 2', + ' 3', + ' ]', + ' "boolean": false', + ' "buffer": [Buffer: [', + ' 1', + ' 2', + ' ]]', + ' "canObj": {', + ' "a": {', + ' "b": 1', + ' "c": 2', + ' }', + ' "b": {}', + ' }', + ' "circular": [Circular]', + ' "date": [Date: 1970-01-01T00:00:00.000Z]', + ' "empArr": []', + ' "empObj": {}', + ' "float": 9.99', + ' "func": [Function]', + ' "infi": Infinity', + ' "int": 90', + ' "matrix": [', + ' [', + ' 1', + ' ]', + ' [', + ' 2', + ' 3', + ' 4', + ' ]', + ' ]', + ' "nan": NaN', + ' "nil": [null]', + ' "object": {', + ' "a": 1', + ' "b": 2', + ' }', + ' "regex": /^[a-z|A-Z]/', + ' "str": "string"', + ' "undef": [undefined]', + ' "zero": -0', + '}' + ].join('\n'); expect(stringify(expected)).to.equal(actual); }); }); - it('should canonicalize the object', function(){ + it('should canonicalize the object', function () { var travis = { name: 'travis', age: 24 }; var travis2 = { age: 24, name: 'travis' }; expect(stringify(travis)).to.equal(stringify(travis2)); }); - it('should handle circular structures in objects', function(){ + it('should handle circular structures in objects', function () { var travis = { name: 'travis' }; travis.whoami = travis; expect(stringify(travis)).to.equal('{\n "name": "travis"\n "whoami": [Circular]\n}'); }); - it('should handle circular structures in arrays', function(){ + it('should handle circular structures in arrays', function () { var travis = ['travis']; travis.push(travis); expect(stringify(travis)).to.equal('[\n "travis"\n [Circular]\n]'); }); - it('should handle circular structures in functions', function(){ + it('should handle circular structures in functions', function () { var travis = function () {}; travis.fn = travis; expect(stringify(travis)).to.equal('{\n "fn": [Circular]\n}'); }); - it('should handle various non-undefined, non-null, non-object, non-array, non-date, and non-function values', function () { - var regexp = new RegExp("(?:)"), - regExpObj = { regexp: regexp }, - regexpString = '/(?:)/'; + var regexp = new RegExp('(?:)'); + var regExpObj = {regexp: regexp}; + var regexpString = '/(?:)/'; expect(stringify(regExpObj)).to.equal('{\n "regexp": ' + regexpString + '\n}'); expect(stringify(regexp)).to.equal(regexpString); - var number = 1, - numberObj = { number: number }, - numberString = '1'; + var number = 1; + var numberObj = {number: number}; + var numberString = '1'; expect(stringify(numberObj)).to.equal('{\n "number": ' + number + '\n}'); expect(stringify(number)).to.equal(numberString); - var boolean = false, - booleanObj = { boolean: boolean }, - booleanString = 'false'; + var boolean = false; + var booleanObj = {boolean: boolean}; + var booleanString = 'false'; expect(stringify(booleanObj)).to.equal('{\n "boolean": ' + boolean + '\n}'); expect(stringify(boolean)).to.equal(booleanString); - var string = 'sneepy', - stringObj = { string: string }; + var string = 'sneepy'; + var stringObj = {string: string}; expect(stringify(stringObj)).to.equal('{\n "string": "' + string + '"\n}'); expect(stringify(string)).to.equal(JSON.stringify(string)); - var nullValue = null, - nullObj = { 'null': null }, - nullString = '[null]'; + var nullValue = null; + var nullObj = {'null': null}; + var nullString = '[null]'; expect(stringify(nullObj)).to.equal('{\n "null": [null]\n}'); expect(stringify(nullValue)).to.equal(nullString); }); it('should handle arrays', function () { - var array = ['dave', 'dave', 'dave', 'dave'], - arrayObj = {array: array}, - arrayString = ' "dave"\n "dave"\n "dave"\n "dave"' + var array = ['dave', 'dave', 'dave', 'dave']; + var arrayObj = {array: array}; + var arrayString = ' "dave"\n "dave"\n "dave"\n "dave"'; expect(stringify(arrayObj)).to.equal('{\n "array": [\n' + arrayString + '\n ]\n}'); expect(stringify(array)).to.equal('[' + arrayString.replace(/\s+/g, '\n ') + '\n]'); }); it('should handle functions', function () { - var fn = function() {}, - fnObj = {fn: fn}, - fnString = '[Function]'; + var fn = function () {}; + var fnObj = {fn: fn}; + var fnString = '[Function]'; expect(stringify(fnObj)).to.equal('{\n "fn": ' + fnString + '\n}'); expect(stringify(fn)).to.equal('[Function]'); @@ -296,17 +306,17 @@ describe('lib/utils', function () { }); it('should handle non-empty arrays', function () { - expect(stringify(['a', 'b', 'c'])).to.equal('[\n "a"\n "b"\n "c"\n]') + expect(stringify(['a', 'b', 'c'])).to.equal('[\n "a"\n "b"\n "c"\n]'); }); it('should handle empty functions (with no properties)', function () { - expect(stringify(function(){})).to.equal('[Function]'); - expect(stringify({foo: function() {}})).to.equal('{\n "foo": [Function]\n}'); - expect(stringify({foo: function() {}, bar: 'baz'})).to.equal('{\n "bar": "baz"\n "foo": [Function]\n}'); + expect(stringify(function () {})).to.equal('[Function]'); + expect(stringify({foo: function () {}})).to.equal('{\n "foo": [Function]\n}'); + expect(stringify({foo: function () {}, bar: 'baz'})).to.equal('{\n "bar": "baz"\n "foo": [Function]\n}'); }); it('should handle functions w/ properties', function () { - var fn = function(){}; + var fn = function () {}; fn.bar = 'baz'; expect(stringify(fn)).to.equal('{\n "bar": "baz"\n}'); expect(stringify({foo: fn})).to.equal('{\n "foo": {\n "bar": "baz"\n }\n}'); @@ -354,23 +364,25 @@ describe('lib/utils', function () { it('should handle Symbol', function () { var symbol = Symbol('value'); expect(stringify(symbol)).to.equal('Symbol(value)'); - expect(stringify({symbol: symbol})).to.equal('{\n "symbol": Symbol(value)\n}') + expect(stringify({symbol: symbol})).to.equal('{\n "symbol": Symbol(value)\n}'); }); } it('should handle length properties that cannot be coerced to a number', function () { expect(stringify({length: {nonBuiltinProperty: 0}})).to.equal('{\n "length": {\n "nonBuiltinProperty": 0\n }\n}'); - expect(stringify({length: "a string where length should be"})).to.equal('{\n "length": "a string where length should be"\n}'); + expect(stringify({length: 'a string where length should be'})).to.equal('{\n "length": "a string where length should be"\n}'); }); }); describe('type', function () { + /* eslint no-extend-native: off */ + var type = utils.type; var toString = Object.prototype.toString; - beforeEach(function() { + beforeEach(function () { // some JS engines such as PhantomJS 1.x exhibit this behavior - Object.prototype.toString = function() { + Object.prototype.toString = function () { if (this === global) { return '[object DOMWindow]'; } diff --git a/tests/lib/mocha-3.1.0/test/browser-fixtures/bdd.fixture.js b/tests/lib/mocha-3.1.2/test/browser-fixtures/bdd.fixture.js index 72b4a8a47c..d19993676a 100644 --- a/tests/lib/mocha-3.1.0/test/browser-fixtures/bdd.fixture.js +++ b/tests/lib/mocha-3.1.2/test/browser-fixtures/bdd.fixture.js @@ -1,3 +1,5 @@ +'use strict'; + /* eslint-env browser */ window.mocha.timeout(200) diff --git a/tests/lib/mocha-3.1.0/test/browser-fixtures/exports.fixture.js b/tests/lib/mocha-3.1.2/test/browser-fixtures/exports.fixture.js index 32c26a12ff..97b8b97cbe 100644 --- a/tests/lib/mocha-3.1.0/test/browser-fixtures/exports.fixture.js +++ b/tests/lib/mocha-3.1.2/test/browser-fixtures/exports.fixture.js @@ -1,3 +1,5 @@ +'use strict'; + /* eslint-env browser */ window.mocha.timeout(200) diff --git a/tests/lib/mocha-3.1.0/test/browser-fixtures/qunit.fixture.js b/tests/lib/mocha-3.1.2/test/browser-fixtures/qunit.fixture.js index 8804d0b994..a3fd887940 100644 --- a/tests/lib/mocha-3.1.0/test/browser-fixtures/qunit.fixture.js +++ b/tests/lib/mocha-3.1.2/test/browser-fixtures/qunit.fixture.js @@ -1,3 +1,5 @@ +'use strict'; + /* eslint-env browser */ window.mocha.timeout(200) diff --git a/tests/lib/mocha-3.1.0/test/browser-fixtures/tdd.fixture.js b/tests/lib/mocha-3.1.2/test/browser-fixtures/tdd.fixture.js index 997a47dc18..0c36f0c54b 100644 --- a/tests/lib/mocha-3.1.0/test/browser-fixtures/tdd.fixture.js +++ b/tests/lib/mocha-3.1.2/test/browser-fixtures/tdd.fixture.js @@ -1,3 +1,5 @@ +'use strict'; + /* eslint-env browser */ window.mocha.timeout(200) diff --git a/tests/lib/mocha-3.1.2/test/browser/array.spec.js b/tests/lib/mocha-3.1.2/test/browser/array.spec.js new file mode 100644 index 0000000000..edf66ac458 --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/browser/array.spec.js @@ -0,0 +1,39 @@ +'use strict'; + +describe('Array', function () { + describe('#push()', function () { + it('should append a value', function () { + var arr = []; + arr.push('foo'); + arr.push('bar'); + arr.push('baz'); + assert(arr[0] === 'foo'); // to test indentation + assert(arr[1] === 'bar'); + assert(arr[2] === 'baz'); + }); + + it('should return the length', function () { + var arr = []; + assert(arr.push('foo') === 1); + assert(arr.push('bar') === 2); + assert(arr.push('baz') === 3); + }); + }); +}); + +describe('Array', function () { + describe('#pop()', function () { + it('should remove and return the last value', function () { + var arr = [1, 2, 3]; + assert(arr.pop() === 3); + assert(arr.pop() === 2); + assert(arr.pop() === -1); + }); + + it('should adjust .length', function () { + var arr = [1, 2, 3]; + arr.pop(); + assert(arr.length === 2); + }); + }); +}); diff --git a/tests/lib/mocha-3.1.0/test/browser/grep.html b/tests/lib/mocha-3.1.2/test/browser/grep.html index 0ba47c8533..0ba47c8533 100644 --- a/tests/lib/mocha-3.1.0/test/browser/grep.html +++ b/tests/lib/mocha-3.1.2/test/browser/grep.html diff --git a/tests/lib/mocha-3.1.2/test/browser/grep.spec.js b/tests/lib/mocha-3.1.2/test/browser/grep.spec.js new file mode 100644 index 0000000000..6c5a83aeb5 --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/browser/grep.spec.js @@ -0,0 +1,110 @@ +'use strict'; + +// numbers +describe('21', function () { + it('1', function () { + assert(true); + }); + it('2', function () { + assert(true); + }); +}); +// symbols +describe('@Array', function () { + it('.pop()', function () { + assert(true); + }); + it('.push()', function () { + assert(true); + }); + it('.length', function () { + assert(true); + }); +}); + +describe('@Function', function () { + it('.call()', function () { + assert(true); + }); + it('.apply()', function () { + assert(true); + }); + it('.length', function () { + assert(true); + }); + it('.name', function () { + assert(true); + }); + it('.prototype', function () { + assert(true); + }); +}); + +// url with hashtags +describe('#Services', function () { + describe('#http', function () { + it('.createClient()', function () { + assert(true); + }); + it('.Server()', function () { + assert(true); + }); + }); + describe('#crypto', function () { + it('.randomBytes()', function () { + assert(true); + }); + it('.Hmac()', function () { + assert(true); + }); + }); +}); + +// Uppercase +describe('CONSTANTS', function () { + it('.STATUS_CODES', function () { + assert(true); + }); +}); + +// Dates +describe('Date:', function () { + it('01/02/2015', function () { + assert(true); + }); + it('01/03/2015', function () { + assert(true); + }); + it('01/06/2015', function () { + assert(true); + }); +}); + +// etc.. +describe('booking/summary', function () { + it('should be run last', function () { + assert(true); + }); +}); + +describe('component/booking/summary', function () { + it('should be run second', function () { + assert(true); + }); +}); + +describe('component/booking/intro', function () { + it('should be run first', function () { + assert(true); + }); +}); + +describe('contains numbers', function () { + it('should run if the number 92 matching', function () { + assert(true); + }); + + it('should run if the number 8 matching', function () { + assert(true); + }); +}); diff --git a/tests/lib/mocha-3.1.0/test/browser/index.html b/tests/lib/mocha-3.1.2/test/browser/index.html index 9200b977e5..9200b977e5 100644 --- a/tests/lib/mocha-3.1.0/test/browser/index.html +++ b/tests/lib/mocha-3.1.2/test/browser/index.html diff --git a/tests/lib/mocha-3.1.0/test/browser/large.html b/tests/lib/mocha-3.1.2/test/browser/large.html index 1804b3a000..1804b3a000 100644 --- a/tests/lib/mocha-3.1.0/test/browser/large.html +++ b/tests/lib/mocha-3.1.2/test/browser/large.html diff --git a/tests/lib/mocha-3.1.0/test/browser/large.spec.js b/tests/lib/mocha-3.1.2/test/browser/large.spec.js index 56757eae27..7dfa62f2a2 100644 --- a/tests/lib/mocha-3.1.0/test/browser/large.spec.js +++ b/tests/lib/mocha-3.1.2/test/browser/large.spec.js @@ -1,37 +1,38 @@ +'use strict'; + var n = 30; while (n--) { - describe('Array ' + n, function(){ + describe('Array ' + n, function () { var arr; - beforeEach(function(){ - arr = [1,2,3]; - }) + beforeEach(function () { + arr = [1, 2, 3]; + }); - describe('#indexOf()', function(){ - it('should return -1 when the value is not present', function(){ - assert(-1 == arr.indexOf(5)); - }) + describe('#indexOf()', function () { + it('should return -1 when the value is not present', function () { + assert(arr.indexOf(5) === -1); + }); - it('should return the correct index when the value is present', function(done){ - assert(0 == arr.indexOf(1)); - assert(1 == arr.indexOf(2)); + it('should return the correct index when the value is present', function (done) { + assert(arr.indexOf(1) === 0); + assert(arr.indexOf(2) === 1); done(); - }) - }) - }) + }); + }); + }); } -describe('something', function(){ - it('should provide a useful error', function(done){ - setTimeout(function(){ +describe('something', function () { + it('should provide a useful error', function (done) { + setTimeout(function () { throw new Error('boom'); - done(); }, 1); - }) + }); - it('should provide an even better error on phantomjs', function(done){ - setTimeout(function(){ - var AssertionError = function(message, actual, expected) { + it('should provide an even better error on phantomjs', function (done) { + setTimeout(function () { + var AssertionError = function (message, actual, expected) { this.message = message; this.actual = actual; this.expected = expected; @@ -44,5 +45,5 @@ describe('something', function(){ mocha.throwError(new AssertionError('kabooom', 'text with a typo', 'text without a typo')); done(); }, 1); - }) -}) + }); +}); diff --git a/tests/lib/mocha-3.1.0/test/browser/multiple-done.spec.js b/tests/lib/mocha-3.1.2/test/browser/multiple-done.spec.js index d8a9d49ae2..ddb536735e 100644 --- a/tests/lib/mocha-3.1.0/test/browser/multiple-done.spec.js +++ b/tests/lib/mocha-3.1.2/test/browser/multiple-done.spec.js @@ -1,16 +1,18 @@ -describe('Multiple Done calls', function(){ - it('should report an error if done was called more than once', function(done){ +'use strict'; + +describe('Multiple Done calls', function () { + it('should report an error if done was called more than once', function (done) { done(); done(); - }) + }); it('should report an error if an exception happened async after done was called', function (done) { done(); setTimeout(done, 50); - }) + }); - it('should report an error if an exception happened after done was called', function(done){ + it('should report an error if an exception happened after done was called', function (done) { done(); - throw new Error("thrown error"); - }) -}) + throw new Error('thrown error'); + }); +}); diff --git a/tests/lib/mocha-3.1.0/test/browser/opts.html b/tests/lib/mocha-3.1.2/test/browser/opts.html index ec49a418fc..ec49a418fc 100644 --- a/tests/lib/mocha-3.1.0/test/browser/opts.html +++ b/tests/lib/mocha-3.1.2/test/browser/opts.html diff --git a/tests/lib/mocha-3.1.2/test/browser/opts.spec.js b/tests/lib/mocha-3.1.2/test/browser/opts.spec.js new file mode 100644 index 0000000000..7b93f22615 --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/browser/opts.spec.js @@ -0,0 +1,7 @@ +'use strict'; + +describe('Options', function () { + it('should set timeout value', function () { + assert(this.test._timeout === 1500); + }); +}); diff --git a/tests/lib/mocha-3.1.0/test/browser/stack-trace.html b/tests/lib/mocha-3.1.2/test/browser/stack-trace.html index 0f267dab98..0f267dab98 100644 --- a/tests/lib/mocha-3.1.0/test/browser/stack-trace.html +++ b/tests/lib/mocha-3.1.2/test/browser/stack-trace.html diff --git a/tests/lib/mocha-3.1.2/test/browser/stack-trace.spec.js b/tests/lib/mocha-3.1.2/test/browser/stack-trace.spec.js new file mode 100644 index 0000000000..a4801bf32f --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/browser/stack-trace.spec.js @@ -0,0 +1,22 @@ +'use strict'; +describe('Stack trace', function () { + it('should prettify the stack-trace', function () { + var err = new Error(); + // We do this fake stack-trace because we under development, + // and our root isn't `node_modules`, `bower` or `components` + err.stack = [ + 'Error: failed', + 'at assert (stack-trace.html:11:30)', + 'at Context.<anonymous> (stack-trace.js:5:5)', + 'at callFn (http://localhost:63342/node_modules/mocha.js:4546:21)', + 'at Test.require.register.Runnable.run (http://localhost:63342/node_modules/mocha.js:4539:7)', + 'at Runner.require.register.Runner.runTest (http://localhost:63342/node_modules/mocha.js:4958:10)', + 'at http://localhost:63342/bower_components/mocha.js:5041:12', + 'at next (http://localhost:63342/bower_components/mocha.js:4883:14)', + 'at http://localhost:63342/bower_components/mocha.js:4893:7', + 'at next (http://localhost:63342/bower_components/mocha.js:4828:23)', + 'at http://localhost:63342/bower_components/mocha.js:4860:5' + ].join('\n'); + assert(false, err); + }); +}); diff --git a/tests/lib/mocha-3.1.0/test/browser/ui.html b/tests/lib/mocha-3.1.2/test/browser/ui.html index 071c7798a0..071c7798a0 100644 --- a/tests/lib/mocha-3.1.0/test/browser/ui.html +++ b/tests/lib/mocha-3.1.2/test/browser/ui.html diff --git a/tests/lib/mocha-3.1.0/test/browser/ui.spec.js b/tests/lib/mocha-3.1.2/test/browser/ui.spec.js index 48236e9497..159cab6d95 100644 --- a/tests/lib/mocha-3.1.0/test/browser/ui.spec.js +++ b/tests/lib/mocha-3.1.2/test/browser/ui.spec.js @@ -1,10 +1,12 @@ +'use strict'; + // test titles containing regex-conflicting characters // leading $ -describe('$.jQuery', function() { +describe('$.jQuery', function () { // parens describe('.on()', function () { - it('should set an event', function() { + it('should set an event', function () { assert(true); }); }); @@ -18,14 +20,14 @@ describe('$.jQuery', function() { // another generic describe block to verify it is absent // when greeping on $.jQuery -describe('@Array', function() { - it('.pop()', function() { +describe('@Array', function () { + it('.pop()', function () { assert(true); }); - it('.push()', function() { + it('.push()', function () { assert(true); }); - it('.length', function() { + it('.length', function () { assert(true); }); }); diff --git a/tests/lib/mocha-3.1.0/test/color.spec.js b/tests/lib/mocha-3.1.2/test/color.spec.js index 5ee46e71c4..bffd30e6eb 100644 --- a/tests/lib/mocha-3.1.0/test/color.spec.js +++ b/tests/lib/mocha-3.1.2/test/color.spec.js @@ -1,13 +1,15 @@ +'use strict'; + var assert = require('assert'); -var child_process = require('child_process'); +var childProcess = require('child_process'); var path = require('path'); -describe('Mocha', function() { +describe('Mocha', function () { this.timeout(2000); - it('should not output colors to pipe', function(cb) { + it('should not output colors to pipe', function (cb) { var command = [path.join('bin', 'mocha'), '--grep', 'missing-test']; - child_process.execFile(process.execPath, command, function(err, stdout, stderr) { + childProcess.execFile(process.execPath, command, function (err, stdout, stderr) { if (err) return cb(err); assert(stdout.indexOf('[90m') === -1); diff --git a/tests/lib/mocha-3.1.0/test/compiler/foo.js b/tests/lib/mocha-3.1.2/test/compiler/foo.js index b13101a77b..753d08e740 100644 --- a/tests/lib/mocha-3.1.0/test/compiler/foo.js +++ b/tests/lib/mocha-3.1.2/test/compiler/foo.js @@ -1,8 +1,10 @@ +'use strict'; + var fs = require('fs'); -require.extensions['.foo'] = function(module, filename) { +require.extensions['.foo'] = function (module, filename) { var content; content = fs.readFileSync(filename, 'utf8'); - var test = 'describe("custom compiler",function(){ it("should work",function() { ' - + content + '.should.eql(1); }); });'; + var test = 'describe("custom compiler",function(){ it("should work",function() { ' + + content + '.should.eql(1); }); });'; return module._compile(test, filename); }; diff --git a/tests/lib/mocha-3.1.0/test/grep.spec.js b/tests/lib/mocha-3.1.2/test/grep.spec.js index bbc5c55eba..dd21cf0090 100644 --- a/tests/lib/mocha-3.1.0/test/grep.spec.js +++ b/tests/lib/mocha-3.1.2/test/grep.spec.js @@ -1,48 +1,50 @@ +'use strict'; + var Mocha = require('../'); -describe('Mocha', function(){ - describe('"grep" option', function(){ - it('should add a RegExp to the mocha.options object', function(){ +describe('Mocha', function () { + describe('"grep" option', function () { + it('should add a RegExp to the mocha.options object', function () { var mocha = new Mocha({ grep: /foo.*/ }); mocha.options.grep.toString().should.equal('/foo.*/'); }); - it('should convert string to a RegExp', function(){ + it('should convert string to a RegExp', function () { var mocha = new Mocha({ grep: 'foo.*' }); mocha.options.grep.toString().should.equal('/foo.*/'); }); }); - describe('"fgrep" option', function(){ - it('should escape and convert string to a RegExp', function(){ + describe('"fgrep" option', function () { + it('should escape and convert string to a RegExp', function () { var mocha = new Mocha({ fgrep: 'foo.*' }); mocha.options.grep.toString().should.equal('/foo\\.\\*/'); }); }); - describe('.grep()', function() { + describe('.grep()', function () { // Test helper - function testGrep(mocha) { - return function testGrep(grep, expected) { + function testGrep (mocha) { + return function testGrep (grep, expected) { mocha.grep(grep); mocha.options.grep.toString().should.equal(expected); - } + }; } - it('should add a RegExp to the mocha.options object', function() { - var test = testGrep(new Mocha); + it('should add a RegExp to the mocha.options object', function () { + var test = testGrep(new Mocha()); test(/foo/, '/foo/'); }); - it('should convert grep string to a RegExp', function() { - var test = testGrep(new Mocha); + it('should convert grep string to a RegExp', function () { + var test = testGrep(new Mocha()); test('foo', '/foo/'); test('^foo.*bar$', '/^foo.*bar$/'); test('^@.*(?=\\(\\)$)', '/^@.*(?=\\(\\)$)/'); }); - it('should covert grep regex-like string to a RegExp', function() { - var test = testGrep(new Mocha); + it('should covert grep regex-like string to a RegExp', function () { + var test = testGrep(new Mocha()); test('/foo/', '/foo/'); // Keep the flags test('/baz/i', '/baz/i'); @@ -50,14 +52,14 @@ describe('Mocha', function(){ test('/^foo(.*)bar/g', '/^foo(.*)bar/g'); }); - it('should return it\'s parent Mocha object for chainability', function(){ - var mocha = new Mocha; + it('should return it\'s parent Mocha object for chainability', function () { + var mocha = new Mocha(); mocha.grep().should.equal(mocha); }); }); - describe('"invert" option', function(){ - it('should add a Boolean to the mocha.options object', function(){ + describe('"invert" option', function () { + it('should add a Boolean to the mocha.options object', function () { var mocha = new Mocha({ invert: true }); mocha.options.invert.should.be.ok; }); diff --git a/tests/lib/mocha-3.1.2/test/hook-async.spec.js b/tests/lib/mocha-3.1.2/test/hook-async.spec.js new file mode 100644 index 0000000000..a03821e32c --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/hook-async.spec.js @@ -0,0 +1,135 @@ +'use strict'; + +describe('async', function () { + var calls = []; + + before(function () { + calls.push('root before all'); + }); + + after(function () { + calls.push('root after all'); + calls.should.eql([ + 'root before all', + 'before all', + 'parent before', + 'before', + 'before test one', + 'one', + 'after', + 'after test one passed', + 'parent after', + 'parent before', + 'before', + 'before test two', + 'two', + 'after', + 'after test two passed', + 'parent after', + 'parent before', + 'before', + 'before test three', + 'three', + 'after', + 'after test three passed', + 'parent after', + 'after all', + 'root after all' + ]); + }); + + beforeEach(function () { + calls.push('parent before'); + }); + + afterEach(function () { + calls.push('parent after'); + }); + + describe('hooks', function () { + before(function () { + calls.push('before all'); + }); + + after(function () { + calls.push('after all'); + }); + + beforeEach(function (done) { + var ctx = this; + process.nextTick(function () { + calls.push('before'); + if (ctx.currentTest) { + calls.push('before test ' + ctx.currentTest.title); + } + done(); + }); + }); + + it('one', function (done) { + calls.should.eql([ + 'root before all', + 'before all', + 'parent before', + 'before', + 'before test one' + ]); + calls.push('one'); + process.nextTick(done); + }); + + it('two', function () { + calls.should.eql([ + 'root before all', + 'before all', + 'parent before', + 'before', + 'before test one', + 'one', + 'after', + 'after test one passed', + 'parent after', + 'parent before', + 'before', + 'before test two' + ]); + calls.push('two'); + }); + + it('three', function () { + calls.should.eql([ + 'root before all', + 'before all', + 'parent before', + 'before', + 'before test one', + 'one', + 'after', + 'after test one passed', + 'parent after', + 'parent before', + 'before', + 'before test two', + 'two', + 'after', + 'after test two passed', + 'parent after', + 'parent before', + 'before', + 'before test three' + ]); + calls.push('three'); + }); + + afterEach(function (done) { + var ctx = this; + process.nextTick(function () { + calls.push('after'); + if (ctx.currentTest) { + calls.push('after test ' + ctx.currentTest.title + ' ' + ctx.currentTest.state); + } + done(); + }); + }); + }); +}); diff --git a/tests/lib/mocha-3.1.2/test/hook-sync-nested.spec.js b/tests/lib/mocha-3.1.2/test/hook-sync-nested.spec.js new file mode 100644 index 0000000000..3f1929f547 --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/hook-sync-nested.spec.js @@ -0,0 +1,104 @@ +'use strict'; + +describe('serial', function () { + describe('nested', function () { + var calls = []; + + beforeEach(function () { + calls.push('parent before'); + if (this.currentTest) { + calls.push('parent before test ' + this.currentTest.title); + } + }); + + afterEach(function () { + calls.push('parent after'); + if (this.currentTest) { + calls.push('parent after test ' + this.currentTest.title + ' ' + this.currentTest.state); + } + }); + + it('foo', function () { + calls.should.eql([ + 'parent before', + 'parent before test foo' + ]); + calls.push('foo'); + }); + + it('bar', function () { + calls.should.eql([ + 'parent before', + 'parent before test foo', + 'foo', + 'parent after', + 'parent after test foo passed', + 'parent before', + 'parent before test bar' + ]); + }); + + describe('hooks', function () { + beforeEach(function () { + calls.push('before'); + if (this.currentTest) { + calls.push('before test ' + this.currentTest.title); + } + }); + + it('one', function () { + calls.should.eql([ + 'parent before', + 'parent before test foo', + 'foo', + 'parent after', + 'parent after test foo passed', + 'parent before', + 'parent before test bar', + 'parent after', + 'parent after test bar passed', + 'parent before', + 'parent before test one', + 'before', + 'before test one' + ]); + calls.push('one'); + }); + + it('two', function () { + calls.should.eql([ + 'parent before', + 'parent before test foo', + 'foo', + 'parent after', + 'parent after test foo passed', + 'parent before', + 'parent before test bar', + 'parent after', + 'parent after test bar passed', + 'parent before', + 'parent before test one', + 'before', + 'before test one', + 'one', + 'after', + 'after test one passed', + 'parent after', + 'parent after test one passed', + 'parent before', + 'parent before test two', + 'before', + 'before test two' + ]); + calls.push('two'); + }); + + afterEach(function () { + calls.push('after'); + if (this.currentTest) { + calls.push('after test ' + this.currentTest.title + ' ' + this.currentTest.state); + } + }); + }); + }); +}); diff --git a/tests/lib/mocha-3.1.2/test/hook-sync.spec.js b/tests/lib/mocha-3.1.2/test/hook-sync.spec.js new file mode 100644 index 0000000000..b1138a6db8 --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/hook-sync.spec.js @@ -0,0 +1,103 @@ +'use strict'; + +describe('serial', function () { + var calls = []; + + beforeEach(function () { + calls.push('parent before'); + }); + + afterEach(function () { + calls.push('parent after'); + }); + + describe('hooks', function () { + beforeEach(function () { + calls.push('before'); + if (this.currentTest) { + calls.push('before test ' + this.currentTest.title); + } + }); + + it('one', function () { + calls.should.eql([ + 'parent before', + 'before', + 'before test one' + ]); + calls.push('one'); + }); + + it('two', function () { + calls.should.eql([ + 'parent before', + 'before', + 'before test one', + 'one', + 'after', + 'after test one passed', + 'parent after', + 'parent before', + 'before', + 'before test two' + ]); + calls.push('two'); + }); + + it('three', function () { + calls.should.eql([ + 'parent before', + 'before', + 'before test one', + 'one', + 'after', + 'after test one passed', + 'parent after', + 'parent before', + 'before', + 'before test two', + 'two', + 'after', + 'after test two passed', + 'parent after', + 'parent before', + 'before', + 'before test three' + ]); + calls.push('three'); + }); + + afterEach(function () { + calls.push('after'); + if (this.currentTest) { + calls.push('after test ' + this.currentTest.title + ' ' + this.currentTest.state); + } + }); + + after(function () { + calls.should.eql([ + 'parent before', + 'before', + 'before test one', + 'one', + 'after', + 'after test one passed', + 'parent after', + 'parent before', + 'before', + 'before test two', + 'two', + 'after', + 'after test two passed', + 'parent after', + 'parent before', + 'before', + 'before test three', + 'three', + 'after', + 'after test three passed', + 'parent after' + ]); + }); + }); +}); diff --git a/tests/lib/mocha-3.1.2/test/hook-timeout.spec.js b/tests/lib/mocha-3.1.2/test/hook-timeout.spec.js new file mode 100644 index 0000000000..c16c3011fb --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/hook-timeout.spec.js @@ -0,0 +1,10 @@ +'use strict'; + +before(function (done) { + this.timeout(100); + setTimeout(done, 50); +}); + +it('should work', function (done) { + done(); +}); diff --git a/tests/lib/mocha-3.1.0/test/http-meta-2.spec.js b/tests/lib/mocha-3.1.2/test/http-meta-2.spec.js index fe9662b2e6..4530969041 100644 --- a/tests/lib/mocha-3.1.0/test/http-meta-2.spec.js +++ b/tests/lib/mocha-3.1.2/test/http-meta-2.spec.js @@ -1,10 +1,12 @@ +'use strict'; + var http = require('http'); var PORT = 8899; -var server = http.createServer(function(req, res){ - var accept = req.headers.accept || '' - , json = ~accept.indexOf('json'); +var server = http.createServer(function (req, res) { + var accept = req.headers.accept || ''; + var json = ~accept.indexOf('json'); switch (req.url) { case '/': @@ -18,43 +20,43 @@ var server = http.createServer(function(req, res){ } break; } -}) +}); -function get(url) { - var fields - , expected - , header = {}; +function get (url) { + var fields; + var expected; + var header = {}; - function request(done) { - http.get({ path: url, port: PORT, headers: header }, function(res){ + function request (done) { + http.get({ path: url, port: PORT, headers: header }, function (res) { var buf = ''; res.should.have.property('statusCode', 200); res.setEncoding('utf8'); - res.on('data', function(chunk){ buf += chunk }); - res.on('end', function(){ + res.on('data', function (chunk) { buf += chunk; }); + res.on('end', function () { buf.should.equal(expected); done(); }); - }) + }); } return { - set: function(field, val){ + set: function (field, val) { header[field] = val; return this; }, should: { - respond: function(body){ - fields = Object.keys(header).map(function(field){ + respond: function (body) { + fields = Object.keys(header).map(function (field) { return field + ': ' + header[field]; }).join(', '); expected = body; - describe('GET ' + url, function(){ + describe('GET ' + url, function () { this.timeout(500); if (fields) { - describe('when given ' + fields, function(){ + describe('when given ' + fields, function () { it('should respond with "' + body + '"', request); }); } else { @@ -66,26 +68,25 @@ function get(url) { }; } -describe('http server', function(){ - - before(function(done) { +describe('http server', function () { + before(function (done) { server.listen(PORT, done); }); - after(function() { + after(function () { server.close(); }); get('/') .should - .respond('hello') + .respond('hello'); get('/users') .should - .respond('tobi, loki, jane') + .respond('tobi, loki, jane'); get('/users') .set('Accept', 'application/json') .should - .respond('["tobi","loki","jane"]') -}) + .respond('["tobi","loki","jane"]'); +}); diff --git a/tests/lib/mocha-3.1.0/test/http-meta.spec.js b/tests/lib/mocha-3.1.2/test/http-meta.spec.js index 5d1fb6750b..c92dbd2307 100644 --- a/tests/lib/mocha-3.1.0/test/http-meta.spec.js +++ b/tests/lib/mocha-3.1.2/test/http-meta.spec.js @@ -1,10 +1,12 @@ +'use strict'; + var http = require('http'); var PORT = 8889; -var server = http.createServer(function(req, res){ - var accept = req.headers.accept || '' - , json = ~accept.indexOf('json'); +var server = http.createServer(function (req, res) { + var accept = req.headers.accept || ''; + var json = ~accept.indexOf('json'); switch (req.url) { case '/': @@ -20,42 +22,44 @@ var server = http.createServer(function(req, res){ } }); - -function get(url, body, header) { - return function(done){ - http.get({ path: url, port: PORT, headers: header || {}}, function(res){ +function get (url, body, header) { + return function (done) { + http.get({ + path: url, + port: PORT, + headers: header || {} + }, function (res) { var buf = ''; res.should.have.property('statusCode', 200); res.setEncoding('utf8'); - res.on('data', function(chunk){ buf += chunk }); - res.on('end', function(){ + res.on('data', function (chunk) { buf += chunk; }); + res.on('end', function () { buf.should.equal(body); done(); }); - }) - } + }); + }; } describe('http requests', function () { - - before(function(done) { + before(function (done) { server.listen(PORT, done); }); - after(function() { + after(function () { server.close(); }); describe('GET /', function () { it('should respond with hello', - get('/', 'hello')) - }) + get('/', 'hello')); + }); - describe('GET /users', function(){ + describe('GET /users', function () { it('should respond with users', - get('/users', 'tobi, loki, jane')) + get('/users', 'tobi, loki, jane')); it('should respond with users', - get('/users', '["tobi","loki","jane"]', { Accept: 'application/json' })) - }) -}) + get('/users', '["tobi","loki","jane"]', { Accept: 'application/json' })); + }); +}); diff --git a/tests/lib/mocha-3.1.0/test/integration/diffs.spec.js b/tests/lib/mocha-3.1.2/test/integration/diffs.spec.js index b779b84ada..7d620e7489 100644 --- a/tests/lib/mocha-3.1.0/test/integration/diffs.spec.js +++ b/tests/lib/mocha-3.1.2/test/integration/diffs.spec.js @@ -1,23 +1,25 @@ -var assert = require('assert'); -var helpers = require('./helpers'); -var run = helpers.runMocha; -var fs = require('fs'); +'use strict'; + +var assert = require('assert'); +var helpers = require('./helpers'); +var run = helpers.runMocha; +var fs = require('fs'); var getDiffs = helpers.getDiffs; -function getExpectedOutput() { +function getExpectedOutput () { var output = fs.readFileSync('test/integration/fixtures/diffs/output', 'UTF8'); // Diffs are delimited in file by "// DIFF" - return output.split(/\s*\/\/ DIFF/).slice(1).map(function(diff) { + return output.split(/\s*\/\/ DIFF/).slice(1).map(function (diff) { return diff.split('\n').filter(Boolean).join('\n'); }); } -describe('diffs', function() { +describe('diffs', function () { var diffs, expected; - before(function(done) { - run('diffs/diffs.fixture.js', ['-C'], function(err, res) { + before(function (done) { + run('diffs/diffs.fixture.js', ['-C'], function (err, res) { expected = getExpectedOutput(); diffs = getDiffs(res.output); done(err); @@ -36,8 +38,8 @@ describe('diffs', function() { 'should work with objects', 'should show value diffs and not be affected by commas', 'should display diff by data and not like an objects' - ].forEach(function(title, i) { - it(title, function() { + ].forEach(function (title, i) { + it(title, function () { assert.equal(diffs[i], expected[i]); }); }); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/cascade.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/cascade.fixture.js index 10b1c37ffd..259c81af2d 100644 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/cascade.fixture.js +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/cascade.fixture.js @@ -1,55 +1,57 @@ -describe('one', function() { - before(function() { +'use strict'; + +describe('one', function () { + before(function () { console.log('before one'); }); - after(function() { + after(function () { console.log('after one'); }); - beforeEach(function() { + beforeEach(function () { console.log(' before each one'); }); - afterEach(function() { + afterEach(function () { console.log(' after each one'); }); - describe('two', function() { - before(function() { + describe('two', function () { + before(function () { console.log(' before two'); }); - after(function() { + after(function () { console.log(' after two'); }); - beforeEach(function() { + beforeEach(function () { console.log(' before each two'); }); - afterEach(function() { + afterEach(function () { console.log(' after each two'); }); - describe('three', function() { - before(function() { + describe('three', function () { + before(function () { console.log(' before three'); }); - after(function() { + after(function () { console.log(' after three'); }); - beforeEach(function() { + beforeEach(function () { console.log(' before each three'); }); - afterEach(function() { + afterEach(function () { console.log(' after each three'); }); - it('should three', function() { + it('should three', function () { console.log(' TEST three'); }); }); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/diffs/diffs.css.in b/tests/lib/mocha-3.1.2/test/integration/fixtures/diffs/diffs.css.in index 09a3ca5363..09a3ca5363 100644 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/diffs/diffs.css.in +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/diffs/diffs.css.in diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/diffs/diffs.css.out b/tests/lib/mocha-3.1.2/test/integration/fixtures/diffs/diffs.css.out index 53b3ec906e..53b3ec906e 100644 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/diffs/diffs.css.out +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/diffs/diffs.css.out diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/diffs/diffs.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/diffs/diffs.fixture.js index cf538fd777..50ea00bee0 100644 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/diffs/diffs.fixture.js +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/diffs/diffs.fixture.js @@ -1,58 +1,87 @@ -var fs = require('fs'); -var assert = require('assert'); -var cssin = fs.readFileSync('test/integration/fixtures/diffs/diffs.css.in', 'ascii'); +'use strict'; + +var fs = require('fs'); +var cssin = fs.readFileSync('test/integration/fixtures/diffs/diffs.css.in', 'ascii'); var cssout = fs.readFileSync('test/integration/fixtures/diffs/diffs.css.out', 'ascii'); -describe('diffs', function() { +describe('diffs', function () { var actual, expected; - it('should display a diff for small strings', function() { + it('should display a diff for small strings', function () { actual = 'foo rar baz'; expected = 'foo bar baz'; actual.should.equal(expected); }); - it('should display a diff of canonicalized objects', function() { + it('should display a diff of canonicalized objects', function () { actual = { name: 'travis j', age: 23 }; expected = { age: 23, name: 'travis' }; actual.should.equal(expected); }); - it('should display a diff for medium strings', function() { + it('should display a diff for medium strings', function () { actual = 'foo bar baz\nfoo rar baz\nfoo bar raz'; expected = 'foo bar baz\nfoo bar baz\nfoo bar baz'; actual.should.equal(expected); }); - it('should display a diff for entire object dumps', function() { - actual = { name: 'joel', age: 30, address: {city: 'new york', country: 'usa' }}; - expected = { name: 'joe', age: 30, address: {city: 'new york', country: 'us' }}; + it('should display a diff for entire object dumps', function () { + actual = { + name: 'joel', + age: 30, + address: { + city: 'new york', + country: 'usa' + } + }; + expected = { + name: 'joe', + age: 30, + address: { + city: 'new york', + country: 'us' + } + }; actual.should.equal(expected); }); - it('should display a diff for multi-line strings', function() { - actual = 'one two three\nfour zzzz six\nseven eight nine'; + it('should display a diff for multi-line strings', function () { + actual = 'one two three\nfour zzzz six\nseven eight nine'; expected = 'one two three\nfour five six\nseven eight nine'; actual.should.equal(expected); }); - it('should display a diff for entire object dumps', function() { - actual = { name: 'joel', age: 30, address: {city: 'new york', country: 'usa' }}; - expected = { name: 'joe', age: 30, address: {city: 'new york', country: 'us' }} + it('should display a diff for entire object dumps', function () { + actual = { + name: 'joel', + age: 30, + address: { + city: 'new york', + country: 'usa' + } + }; + expected = { + name: 'joe', + age: 30, + address: { + city: 'new york', + country: 'us' + } + }; actual.should.equal(expected); }); - it('should display a full-comparison with escaped special characters', function() { - actual = 'one\ttab\ntwo\t\t\ttabs'; + it('should display a full-comparison with escaped special characters', function () { + actual = 'one\ttab\ntwo\t\t\ttabs'; expected = 'one\ttab\ntwo\t\ttabs'; actual.should.equal(expected); }); - it('should display a word diff for large strings', function() { + it('should display a word diff for large strings', function () { cssin.should.equal(cssout); }); - it('should work with objects', function() { + it('should work with objects', function () { actual = { name: 'tobi', species: 'ferret', @@ -70,13 +99,13 @@ describe('diffs', function() { actual.should.eql(expected); }); - it('should show value diffs and not be affected by commas', function() { + it('should show value diffs and not be affected by commas', function () { actual = { a: 123 }; expected = { a: 123, b: 456 }; actual.should.equal(expected); }); - it('should display diff by data and not like an objects', function() { + it('should display diff by data and not like an objects', function () { actual = new Buffer([0x01]); expected = new Buffer([0x02]); actual.should.equal(expected); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/diffs/output b/tests/lib/mocha-3.1.2/test/integration/fixtures/diffs/output index bf56a96397..bf56a96397 100644 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/diffs/output +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/diffs/output diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/hooks/after-hook-async-error.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/hooks/after-hook-async-error.fixture.js index dc55537a60..f3dfe7e1ae 100644 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/hooks/after-hook-async-error.fixture.js +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/hooks/after-hook-async-error.fixture.js @@ -1,3 +1,5 @@ +'use strict'; + describe('spec 1', function () { after(function (done) { console.log('after'); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/hooks/after-hook-error.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/hooks/after-hook-error.fixture.js index e84856e433..7fc258f46d 100644 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/hooks/after-hook-error.fixture.js +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/hooks/after-hook-error.fixture.js @@ -1,3 +1,5 @@ +'use strict'; + describe('spec 1', function () { after(function () { console.log('after'); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/hooks/afterEach-hook-async-error.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/hooks/afterEach-hook-async-error.fixture.js index d4f4c9bdd9..442ad9321f 100644 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/hooks/afterEach-hook-async-error.fixture.js +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/hooks/afterEach-hook-async-error.fixture.js @@ -1,3 +1,5 @@ +'use strict'; + describe('spec 1', function () { afterEach(function (done) { console.log('after'); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/hooks/afterEach-hook-error.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/hooks/afterEach-hook-error.fixture.js index 9d28632fa3..5fb9a36c8d 100644 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/hooks/afterEach-hook-error.fixture.js +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/hooks/afterEach-hook-error.fixture.js @@ -1,3 +1,5 @@ +'use strict'; + describe('spec 1', function () { afterEach(function () { console.log('after'); diff --git a/tests/lib/mocha-3.1.2/test/integration/fixtures/hooks/before-hook-async-error-tip.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/hooks/before-hook-async-error-tip.fixture.js new file mode 100644 index 0000000000..04801c1946 --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/hooks/before-hook-async-error-tip.fixture.js @@ -0,0 +1,13 @@ +'use strict'; + +describe('spec 1', function () { + it('should not blame me', function () { }); +}); +describe('spec 2', function () { + before(function (done) { + process.nextTick(function () { + throw new Error('before hook error'); + }); + }); + it('skipped'); +}); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/hooks/before-hook-async-error.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/hooks/before-hook-async-error.fixture.js index 10ea95156b..2530eec783 100644 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/hooks/before-hook-async-error.fixture.js +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/hooks/before-hook-async-error.fixture.js @@ -1,3 +1,5 @@ +'use strict'; + describe('spec 1', function () { before(function (done) { console.log('before'); diff --git a/tests/lib/mocha-3.1.2/test/integration/fixtures/hooks/before-hook-error-tip.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/hooks/before-hook-error-tip.fixture.js new file mode 100644 index 0000000000..64df731573 --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/hooks/before-hook-error-tip.fixture.js @@ -0,0 +1,11 @@ +'use strict'; + +describe('spec 1', function () { + it('should not blame me', function () { }); +}); +describe('spec 2', function () { + before(function () { + throw new Error('before hook error'); + }); + it('skipped'); +}); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/hooks/before-hook-error.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/hooks/before-hook-error.fixture.js index b3d6ea6640..547e54a243 100644 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/hooks/before-hook-error.fixture.js +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/hooks/before-hook-error.fixture.js @@ -1,3 +1,5 @@ +'use strict'; + describe('spec 1', function () { before(function () { console.log('before'); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/hooks/beforeEach-hook-async-error.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/hooks/beforeEach-hook-async-error.fixture.js index a34ed755e2..6ce27784a6 100644 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/hooks/beforeEach-hook-async-error.fixture.js +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/hooks/beforeEach-hook-async-error.fixture.js @@ -1,3 +1,5 @@ +'use strict'; + describe('spec 1', function () { beforeEach(function (done) { console.log('before'); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/hooks/beforeEach-hook-error.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/hooks/beforeEach-hook-error.fixture.js index bd84e8fe74..4c0ab2f237 100644 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/hooks/beforeEach-hook-error.fixture.js +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/hooks/beforeEach-hook-error.fixture.js @@ -1,3 +1,5 @@ +'use strict'; + describe('spec 1', function () { beforeEach(function () { console.log('before'); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/hooks/multiple-hook-async-error.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/hooks/multiple-hook-async-error.fixture.js index 93ace7ff0d..858bbb3c5e 100644 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/hooks/multiple-hook-async-error.fixture.js +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/hooks/multiple-hook-async-error.fixture.js @@ -1,3 +1,5 @@ +'use strict'; + before(function () { console.log('root before'); }); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/hooks/multiple-hook-error.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/hooks/multiple-hook-error.fixture.js index 53d167b1cf..085978ef79 100644 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/hooks/multiple-hook-error.fixture.js +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/hooks/multiple-hook-error.fixture.js @@ -1,3 +1,5 @@ +'use strict'; + before(function () { console.log('root before'); }); diff --git a/tests/lib/mocha-3.1.2/test/integration/fixtures/multiple-done-before.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/multiple-done-before.fixture.js new file mode 100644 index 0000000000..1e1bc71a16 --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/multiple-done-before.fixture.js @@ -0,0 +1,12 @@ +'use strict'; + +describe('suite', function () { + before(function (done) { + setTimeout(done, 10); + setTimeout(done, 30); + }); + + it('test1', function (done) { + setTimeout(done, 50); + }); +}); diff --git a/tests/lib/mocha-3.1.2/test/integration/fixtures/multiple-done-beforeEach.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/multiple-done-beforeEach.fixture.js new file mode 100644 index 0000000000..32de2bf442 --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/multiple-done-beforeEach.fixture.js @@ -0,0 +1,16 @@ +'use strict'; + +describe('suite', function () { + beforeEach(function (done) { + setTimeout(done, 10); + setTimeout(done, 20); + }); + + it('test1', function (done) { + setTimeout(done, 50); + }); + + it('test2', function (done) { + setTimeout(done, 50); + }); +}); diff --git a/tests/lib/mocha-3.1.2/test/integration/fixtures/multiple-done-specs.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/multiple-done-specs.fixture.js new file mode 100644 index 0000000000..a8ae6d1ac4 --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/multiple-done-specs.fixture.js @@ -0,0 +1,12 @@ +'use strict'; + +describe('suite', function () { + it('test1', function (done) { + done(); + setTimeout(done, 10); + }); + + it('test2', function (done) { + setTimeout(done, 20); + }); +}); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/multiple-done.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/multiple-done.fixture.js index 63a704061c..f1b471c678 100644 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/multiple-done.fixture.js +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/multiple-done.fixture.js @@ -1,3 +1,5 @@ +'use strict'; + // The suite below should result in an additional error, but does // not. Uncomment once this bug is resolved. @@ -10,8 +12,8 @@ // it('test', function() {}); // }); -it('should fail in a test-case', function(done) { - process.nextTick(function(){ +it('should fail in a test-case', function (done) { + process.nextTick(function () { done(); done(); }); diff --git a/tests/lib/mocha-3.1.2/test/integration/fixtures/options/async-only-async.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/options/async-only-async.fixture.js new file mode 100644 index 0000000000..d5ba2b37a0 --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/options/async-only-async.fixture.js @@ -0,0 +1,5 @@ +'use strict'; + +it('should pass', function (done) { + done(); +}); diff --git a/tests/lib/mocha-3.1.2/test/integration/fixtures/options/async-only-sync.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/options/async-only-sync.fixture.js new file mode 100644 index 0000000000..512fd0e4db --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/options/async-only-sync.fixture.js @@ -0,0 +1,3 @@ +'use strict'; + +it('throws an error', function () {}); diff --git a/tests/lib/mocha-3.1.2/test/integration/fixtures/options/bail.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/options/bail.fixture.js new file mode 100644 index 0000000000..5095e63158 --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/options/bail.fixture.js @@ -0,0 +1,23 @@ +'use strict'; + +describe('suite1', function () { + it('should display this spec', function () {}); + + it('should only display this error', function (done) { + throw new Error('this should be displayed'); + }); + + it('should not display this error', function (done) { + throw new Error('this should not be displayed'); + }); +}); + +describe('suite2', function () { + before(function (done) { + throw new Error('this hook should not be displayed'); + }); + + it('should not display this error', function (done) { + throw new Error('this should not be displayed'); + }); +}); diff --git a/tests/lib/mocha-3.1.2/test/integration/fixtures/options/delay-fail.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/options/delay-fail.fixture.js new file mode 100644 index 0000000000..644cbc0281 --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/options/delay-fail.fixture.js @@ -0,0 +1,8 @@ +'use strict'; + +setTimeout(function () { + throw new Error('oops'); + /* eslint no-unreachable: off */ + it('test', function () {}); + run(); +}, 100); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/options/delay.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/options/delay.fixture.js index a8bf2d4112..b2d49217db 100644 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/options/delay.fixture.js +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/options/delay.fixture.js @@ -1,9 +1,11 @@ +'use strict'; + var assert = require('assert'); -var delay = 500; +var delay = 500; -setTimeout(function() { - describe('delayed execution', function() { - it('should have no effect if attempted twice in the same suite', function() { +setTimeout(function () { + describe('delayed execution', function () { + it('should have no effect if attempted twice in the same suite', function () { assert(true); run(); assert(true); diff --git a/tests/lib/mocha-3.1.2/test/integration/fixtures/options/grep.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/options/grep.fixture.js new file mode 100644 index 0000000000..0939d084ec --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/options/grep.fixture.js @@ -0,0 +1,19 @@ +'use strict'; + +describe('grep', function () { + describe('Match', function () { + it('should run', function () {}); + it('should also run', function () {}); + }); + + describe('match', function () { + it('should run', function () {}); + it('should also run', function () {}); + }); + + describe('fail', function () { + it('should not be ran', function () { + throw new Error('Spec should not run'); + }); + }); +}); diff --git a/tests/lib/mocha-3.1.2/test/integration/fixtures/options/only/bdd.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/options/only/bdd.fixture.js new file mode 100644 index 0000000000..39323f3567 --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/options/only/bdd.fixture.js @@ -0,0 +1,72 @@ +'use strict'; + +describe.only('should run this suite', function () { + it('should run this test', function () {}); + + it('should run this test', function () {}); + + it('should run this test', function () {}); +}); + +describe('should not run this suite', function () { + it('should not run this test', function () { + (true).should.equal(false); + }); + + it('should not run this test', function () { + (true).should.equal(false); + }); + + it('should not run this test', function () { + (true).should.equal(false); + }); +}); + +describe.only('should run this suite too', function () { + describe('should run this nested suite', function () { + it('should run this test', function () {}); + + it('should run this test', function () {}); + + it('should run this test', function () {}); + }); +}); + +describe.only('should run this suite, even', function () { + describe('should run this nested suite, even', function () { + describe('should run this doubly-nested suite!', function () { + it('should run this test', function () {}); + + it('should run this test', function () {}); + + it('should run this test', function () {}); + }); + }); +}); + +describe('should run this suite with an exclusive test', function () { + it.only('should run this test', function () {}); + + describe('should not run this nested suite', function () { + describe.only('should not run this doubly-nested suite', function () { + it('should not run this test', function () {}); + + it('should not run this test', function () {}); + + it('should not run this test', function () {}); + }); + }); +}); + +describe('should run this suite with an exclusive test (reverse order)', function () { + describe('should not run this nested suite', function () { + describe.only('should not run this doubly-nested suite', function () { + it('should not run this test', function () {}); + + it('should not run this test', function () {}); + + it('should not run this test', function () {}); + }); + }); + it.only('should run this test', function () {}); +}); diff --git a/tests/lib/mocha-3.1.2/test/integration/fixtures/options/only/qunit.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/options/only/qunit.fixture.js new file mode 100644 index 0000000000..8bc598030d --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/options/only/qunit.fixture.js @@ -0,0 +1,27 @@ +'use strict'; + +suite.only('should run all tests in this suite'); + +test('should run this test #1', function () {}); + +test('should run this test #2', function () {}); + +test('should run this test #3', function () {}); + +test('should run this test #4', function () {}); + +test('should run this test #5', function () {}); + +suite('should not run any of this suite\'s tests'); + +test('should not run this test', function () { + (false).should.equal(true); +}); + +test('should not run this test', function () { + (false).should.equal(true); +}); + +test('should not run this test', function () { + (false).should.equal(true); +}); diff --git a/tests/lib/mocha-3.1.2/test/integration/fixtures/options/only/tdd.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/options/only/tdd.fixture.js new file mode 100644 index 0000000000..987ee6bfba --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/options/only/tdd.fixture.js @@ -0,0 +1,37 @@ +'use strict'; + +suite.only('should run all tests in this tdd suite', function () { + test('should run this test #1', function () {}); + + test('should run this test #2', function () {}); + + test('should run this test #3', function () {}); + + test('should run this test #4', function () {}); +}); + +suite('should not run this suite', function () { + test('should not run this test', function () { + (true).should.equal(false); + }); + + test('should not run this test', function () { + (true).should.equal(false); + }); + + test('should not run this test', function () { + (true).should.equal(false); + }); +}); + +suite.only('should run this suite too', function () { + suite('should run this nested suite', function () { + test('should run this test', function () {}); + + test('should run this test', function () {}); + + test('should run this test', function () {}); + + test('should run this test', function () {}); + }); +}); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/options/retries.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/options/retries.fixture.js index b2f76e12ea..8d2b0a40b6 100644 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/options/retries.fixture.js +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/options/retries.fixture.js @@ -1,4 +1,6 @@ -describe('retries', function() { +'use strict'; + +describe('retries', function () { it('should fail', function () { throw new Error('retry failure'); }); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/options/sort-alpha.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/options/sort-alpha.fixture.js index 7a5302994f..dd74303163 100644 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/options/sort-alpha.fixture.js +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/options/sort-alpha.fixture.js @@ -1,5 +1,7 @@ -describe('alpha', function(){ - it('should be executed first', function(){ +'use strict'; + +describe('alpha', function () { + it('should be executed first', function () { if (global.beta) { throw new Error('alpha was not executed first'); } diff --git a/tests/lib/mocha-3.1.2/test/integration/fixtures/options/sort-beta.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/options/sort-beta.fixture.js new file mode 100644 index 0000000000..56da4a6523 --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/options/sort-beta.fixture.js @@ -0,0 +1,7 @@ +'use strict'; + +describe('beta', function () { + it('should be executed second', function () { + global.beta = 1; + }); +}); diff --git a/tests/lib/mocha-3.1.2/test/integration/fixtures/passing.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/passing.fixture.js new file mode 100644 index 0000000000..baf142026d --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/passing.fixture.js @@ -0,0 +1,13 @@ +'use strict'; + +var assert = require('assert'); + +describe('suite', function () { + it('test1', function () { + assert(true); + }); + + it('test2', function () { + assert(true); + }); +}); diff --git a/tests/lib/mocha-3.1.2/test/integration/fixtures/pending/skip-async-before.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/pending/skip-async-before.fixture.js new file mode 100644 index 0000000000..efeaa93899 --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/pending/skip-async-before.fixture.js @@ -0,0 +1,18 @@ +'use strict'; + +describe('skip in before', function () { + before(function (done) { + var self = this; + setTimeout(function () { + self.skip(); + }, 50); + }); + + it('should never run this test', function () { + throw new Error('never thrown'); + }); + + it('should never run this test', function () { + throw new Error('never thrown'); + }); +}); diff --git a/tests/lib/mocha-3.1.2/test/integration/fixtures/pending/skip-async-beforeEach.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/pending/skip-async-beforeEach.fixture.js new file mode 100644 index 0000000000..d6225564ba --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/pending/skip-async-beforeEach.fixture.js @@ -0,0 +1,18 @@ +'use strict'; + +describe('skip in beforeEach', function () { + beforeEach(function (done) { + var self = this; + setTimeout(function () { + self.skip(); + }, 50); + }); + + it('should never run this test', function () { + throw new Error('never thrown'); + }); + + it('should never run this test', function () { + throw new Error('never thrown'); + }); +}); diff --git a/tests/lib/mocha-3.1.2/test/integration/fixtures/pending/skip-async-spec.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/pending/skip-async-spec.fixture.js new file mode 100644 index 0000000000..44707b026c --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/pending/skip-async-spec.fixture.js @@ -0,0 +1,14 @@ +'use strict'; + +describe('skip in test', function () { + it('should skip async', function (done) { + var self = this; + setTimeout(function () { + self.skip(); + }, 50); + }); + + it('should run other tests in the suite', function () { + // Do nothing + }); +}); diff --git a/tests/lib/mocha-3.1.2/test/integration/fixtures/pending/skip-sync-before.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/pending/skip-sync-before.fixture.js new file mode 100644 index 0000000000..5e3b208efa --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/pending/skip-sync-before.fixture.js @@ -0,0 +1,15 @@ +'use strict'; + +describe('skip in before', function () { + before(function () { + this.skip(); + }); + + it('should never run this test', function () { + throw new Error('never thrown'); + }); + + it('should never run this test', function () { + throw new Error('never thrown'); + }); +}); diff --git a/tests/lib/mocha-3.1.2/test/integration/fixtures/pending/skip-sync-beforeEach.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/pending/skip-sync-beforeEach.fixture.js new file mode 100644 index 0000000000..0bd155ba55 --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/pending/skip-sync-beforeEach.fixture.js @@ -0,0 +1,15 @@ +'use strict'; + +describe('skip in beforeEach', function () { + beforeEach(function () { + this.skip(); + }); + + it('should never run this test', function () { + throw new Error('never thrown'); + }); + + it('should never run this test', function () { + throw new Error('never thrown'); + }); +}); diff --git a/tests/lib/mocha-3.1.2/test/integration/fixtures/pending/skip-sync-spec.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/pending/skip-sync-spec.fixture.js new file mode 100644 index 0000000000..1d22f0b77d --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/pending/skip-sync-spec.fixture.js @@ -0,0 +1,12 @@ +'use strict'; + +describe('skip in test', function () { + it('should skip immediately', function () { + this.skip(); + throw new Error('never thrown'); + }); + + it('should run other tests in the suite', function () { + // Do nothing + }); +}); diff --git a/tests/lib/mocha-3.1.2/test/integration/fixtures/pending/spec.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/pending/spec.fixture.js new file mode 100644 index 0000000000..d750fcad1a --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/pending/spec.fixture.js @@ -0,0 +1,5 @@ +'use strict'; + +describe('suite', function () { + it('pending spec'); +}); diff --git a/tests/lib/mocha-3.1.2/test/integration/fixtures/regression/1794/issue-1794.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/regression/1794/issue-1794.fixture.js new file mode 100644 index 0000000000..8867369546 --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/regression/1794/issue-1794.fixture.js @@ -0,0 +1,5 @@ +'use strict'; + +test('pass', function () { + // pass +}); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/regression/1794/simple-ui.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/regression/1794/simple-ui.js index 1fdf33d665..5cfde0465f 100644 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/regression/1794/simple-ui.js +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/regression/1794/simple-ui.js @@ -1,13 +1,14 @@ -var path = '../../../../../lib/', - Mocha = require(path + 'mocha'); - Suite = require(path + 'suite'), - Test = require(path + 'test'); +'use strict'; + +var path = '../../../../../lib/'; +var Mocha = require(path + 'mocha'); +var Test = require(path + 'test'); /** * A simple UI that only exposes a single function: test */ -module.exports = Mocha.interfaces['simple-ui'] = function(suite) { - suite.on('pre-require', function(context, file, mocha) { +module.exports = Mocha.interfaces['simple-ui'] = function (suite) { + suite.on('pre-require', function (context, file, mocha) { var common = require(path + 'interfaces/common')([suite], context); context.run = mocha.options.delay && common.runWithSuite(suite); @@ -16,7 +17,7 @@ module.exports = Mocha.interfaces['simple-ui'] = function(suite) { * Describes a specification or test-case with the given `title` * and callback `fn` acting as a thunk. */ - context.test = function(title, fn) { + context.test = function (title, fn) { var test = new Test(title, fn); test.file = file; suite.addTest(test); diff --git a/tests/lib/mocha-3.1.2/test/integration/fixtures/regression/issue-1327.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/regression/issue-1327.fixture.js new file mode 100644 index 0000000000..e788278d6d --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/regression/issue-1327.fixture.js @@ -0,0 +1,17 @@ +'use strict'; + +it('test 1', function () { + console.log('testbody1'); + process.nextTick(function () { + throw new Error('Too bad'); + }); +}); + +it('test 2', function () { + console.log('testbody2'); +}); + +it('test 3', function () { + console.log('testbody3'); + throw new Error('OUCH'); +}); diff --git a/tests/lib/mocha-3.1.2/test/integration/fixtures/regression/issue-1417.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/regression/issue-1417.js new file mode 100644 index 0000000000..13ce053784 --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/regression/issue-1417.js @@ -0,0 +1,22 @@ +'use strict'; + +/** + * This file should generate only one failure per spec for the thrown error. + * It should not report misleading 'multiple calls to done()'. + */ + +it('fails exactly once when a global error is thrown synchronously and done errors', function (done) { + setTimeout(function () { + done(new Error('test error')); + }, 1); // Not 0 - it will 'succeed', but won't test the breaking condition + + throw new Error('sync error'); +}); + +it('fails exactly once when a global error is thrown synchronously and done completes', function (done) { + setTimeout(function () { + done(); + }, 1); // Not 0 - it will 'succeed', but won't test the breaking condition + + throw new Error('sync error'); +}); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/regression/issue-1991.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/regression/issue-1991.fixture.js index 96860332a2..024f02519f 100644 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/regression/issue-1991.fixture.js +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/regression/issue-1991.fixture.js @@ -1,7 +1,11 @@ -function MemoryLeak() { +'use strict'; + +/* eslint no-unused-vars: off */ + +function MemoryLeak () { this.myArr = []; for (var i = 0; i < 1000000; i++) { - this.myArr.push(i) + this.myArr.push(i); } } @@ -13,7 +17,6 @@ for (var i = 0; i < numOfTests; i += 1) { * if all the deferred functions references have not been cleared */ describe('Memory Leak Suite #' + i, function () { - // The <closureVar> variable will be accessed by the test below. // As long as those test's functions are // referenced in memory, the closure variable may not be garbage collected @@ -22,19 +25,19 @@ for (var i = 0; i < numOfTests; i += 1) { var closureVar; before(function () { - var x = closureVar ? 1 : 2 + var x = closureVar ? 1 : 2; }); after(function () { - var x = closureVar[0] + var x = closureVar[0]; }); beforeEach(function () { - var x = closureVar ? 1 : 2 + var x = closureVar ? 1 : 2; }); afterEach(function () { - var x = closureVar[0] + var x = closureVar[0]; }); it('access a variable via a closure', function () { @@ -42,6 +45,5 @@ for (var i = 0; i < numOfTests; i += 1) { this.timeout(1000); closureVar = new MemoryLeak(); }); - }); } diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/regression/issue-2315.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/regression/issue-2315.js index cdfb201059..fe18841d1c 100644 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/regression/issue-2315.js +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/regression/issue-2315.js @@ -1,3 +1,5 @@ +'use strict'; + describe('issue-2315: cannot read property currentRetry of undefined', function () { before(function () { process.nextTick(function () { diff --git a/tests/lib/mocha-3.1.2/test/integration/fixtures/regression/issue-2406.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/regression/issue-2406.fixture.js new file mode 100644 index 0000000000..b3770014dd --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/regression/issue-2406.fixture.js @@ -0,0 +1,17 @@ +'use strict'; + +describe('outer describe', function () { + it('should not run this test', function () {}); + describe('this suite should not run', function () { + it('should not run this test', function () {}); + }); + describe.only('this .only suite should run', function () { + describe('this suite should run', function () { + it('should run this test in a nested suite', function () {}); + }); + it('should run this test', function () {}); + }); + describe('this suite should not run', function () { + it('should not run this test', function () {}); + }); +}); diff --git a/tests/lib/mocha-3.1.2/test/integration/fixtures/regression/issue-2417.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/regression/issue-2417.fixture.js new file mode 100644 index 0000000000..58f49cf846 --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/regression/issue-2417.fixture.js @@ -0,0 +1,9 @@ +'use strict'; + +describe('outer describe', function () { + describe.only('outer describe.only', function () { + it.only('inner it.only', function () { + // should run and exit without error + }); + }); +}); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/retries/async.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/retries/async.fixture.js index 0e917e52f3..56d067fc05 100644 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/retries/async.fixture.js +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/retries/async.fixture.js @@ -1,4 +1,6 @@ -describe('retries', function() { +'use strict'; + +describe('retries', function () { var times = 0; before(function () { console.log('before'); @@ -8,7 +10,7 @@ describe('retries', function() { console.log('after'); }); - beforeEach(function() { + beforeEach(function () { console.log('before each', times); }); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/retries/early-pass.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/retries/early-pass.fixture.js index 0010d120fa..ddad40399e 100644 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/retries/early-pass.fixture.js +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/retries/early-pass.fixture.js @@ -1,8 +1,10 @@ -describe('retries', function() { +'use strict'; + +describe('retries', function () { this.retries(1); var times = 0; - it('should pass after 1 retry', function() { + it('should pass after 1 retry', function () { times++; if (times !== 2) { throw new Error('retry error ' + times); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/retries/hooks.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/retries/hooks.fixture.js index 47f6c6a1b7..b4fc081aaa 100644 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/retries/hooks.fixture.js +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/retries/hooks.fixture.js @@ -1,4 +1,6 @@ -describe('retries', function() { +'use strict'; + +describe('retries', function () { var times = 0; before(function () { console.log('before'); @@ -8,7 +10,7 @@ describe('retries', function() { console.log('after'); }); - beforeEach(function() { + beforeEach(function () { console.log('before each', times); }); @@ -16,7 +18,7 @@ describe('retries', function() { console.log('after each', times); }); - it('should allow override and run appropriate hooks', function(){ + it('should allow override and run appropriate hooks', function () { this.retries(4); console.log('TEST', times); times++; diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/retries/nested.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/retries/nested.fixture.js index 43c40cb236..877d519d7f 100644 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/retries/nested.fixture.js +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/retries/nested.fixture.js @@ -1,7 +1,9 @@ -describe('retries', function() { +'use strict'; + +describe('retries', function () { this.retries(3); describe('nested', function () { - it('should fail after only 1 retry', function(){ + it('should fail after only 1 retry', function () { this.retries(1); throw new Error('retry error'); }); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/suite/suite-no-callback.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/suite/suite-no-callback.fixture.js index de55b358a3..80d046438f 100644 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/suite/suite-no-callback.fixture.js +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/suite/suite-no-callback.fixture.js @@ -1 +1,3 @@ +'use strict'; + describe('a suite without a callback'); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/suite/suite-skipped-callback.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/suite/suite-skipped-callback.fixture.js index b30b67ee2e..6def25de7f 100644 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/suite/suite-skipped-callback.fixture.js +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/suite/suite-skipped-callback.fixture.js @@ -1 +1,3 @@ +'use strict'; + xdescribe('a pending suite with a callback', function () {}); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/suite/suite-skipped-no-callback.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/suite/suite-skipped-no-callback.fixture.js index c5bca84a47..e9381159bf 100644 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/suite/suite-skipped-no-callback.fixture.js +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/suite/suite-skipped-no-callback.fixture.js @@ -1 +1,3 @@ +'use strict'; + xdescribe('a pending suite without a callback'); diff --git a/tests/lib/mocha-3.1.2/test/integration/fixtures/timeout.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/timeout.fixture.js new file mode 100644 index 0000000000..d237436811 --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/timeout.fixture.js @@ -0,0 +1,19 @@ +'use strict'; + +describe('timeout', function () { + this.timeout(1); + + it('should be honored with sync suites', function () { + sleep(2); + }); + + it('should be honored with async suites', function (done) { + sleep(2); + done(); + }); + + function sleep (ms) { + var start = Date.now(); + while (start + ms > Date.now()); + } +}); diff --git a/tests/lib/mocha-3.1.2/test/integration/fixtures/uncaught-hook.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/uncaught-hook.fixture.js new file mode 100644 index 0000000000..54f30c56e9 --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/uncaught-hook.fixture.js @@ -0,0 +1,15 @@ +'use strict'; + +describe('uncaught', function () { + beforeEach(function (done) { + process.nextTick(function () { + throw new Error('oh noes'); + }); + }); + + it('test', function (done) { + process.nextTick(function () { + throw new Error("I'm uncaught!"); + }); + }); +}); diff --git a/tests/lib/mocha-3.1.0/test/integration/fixtures/uncaught.fixture.js b/tests/lib/mocha-3.1.2/test/integration/fixtures/uncaught.fixture.js index 054d1d857b..6a2ded880c 100644 --- a/tests/lib/mocha-3.1.0/test/integration/fixtures/uncaught.fixture.js +++ b/tests/lib/mocha-3.1.2/test/integration/fixtures/uncaught.fixture.js @@ -5,22 +5,18 @@ * Mocha is capable of detecting two distinct exceptions during test execution. */ -it('fails exactly once when a global error is thrown first', function(done) { - setTimeout(function() { +it('fails exactly once when a global error is thrown first', function (done) { + setTimeout(function () { throw new Error('global error'); - - setTimeout(function() { - done(new Error('test error')); - }, 0); }, 0); }); -it('fails exactly once when a global error is thrown second', function(done) { - setTimeout(function() { +it('fails exactly once when a global error is thrown second', function (done) { + setTimeout(function () { done(new Error('test error')); }, 0); - setTimeout(function() { + setTimeout(function () { throw new Error('global error'); }, 0); }); diff --git a/tests/lib/mocha-3.1.0/test/integration/helpers.js b/tests/lib/mocha-3.1.2/test/integration/helpers.js index 2720eb3bda..7f6a608a6f 100644 --- a/tests/lib/mocha-3.1.0/test/integration/helpers.js +++ b/tests/lib/mocha-3.1.2/test/integration/helpers.js @@ -1,5 +1,7 @@ +'use strict'; + var spawn = require('child_process').spawn; -var path = require('path'); +var path = require('path'); var fs = require('fs'); var baseReporter = require('../../lib/reporters/base'); @@ -24,13 +26,13 @@ module.exports = { * @param {array} args * @param {function} fn */ - runMocha: function(fixturePath, args, fn) { + runMocha: function (fixturePath, args, fn) { var path; path = resolveFixturePath(fixturePath); args = args || []; - invokeMocha(args.concat(['-C', path]), function(err, res) { + invokeMocha(args.concat(['-C', path]), function (err, res) { if (err) return fn(err); fn(null, getSummary(res)); @@ -57,19 +59,19 @@ module.exports = { * @param {array} args * @param {function} fn */ - runMochaFunction: function(fixture, args, fn) { + runMochaFunction: function (fixture, args, fn) { var path = resolveFixturePath(fixture.name + '.js' || 'tempfile.js'); args = args || []; var fixtureContent = 'var fn = ' + fixture.toString() + '; fn()'; fs.writeFileSync(path, fixtureContent, 'utf8'); - function cleanup() { + function cleanup () { fs.unlink(path); fn.apply(this, arguments); } - invokeMocha(args.concat(['-C', path]), function(err, res) { + invokeMocha(args.concat(['-C', path]), function (err, res) { if (err) { return cleanup(err); } @@ -86,13 +88,13 @@ module.exports = { * @param {array} args * @param {function} fn */ - runMochaJSON: function(fixturePath, args, fn) { + runMochaJSON: function (fixturePath, args, fn) { var path; path = resolveFixturePath(fixturePath); args = args || []; - invokeMocha(args.concat(['--reporter', 'json', path]), function(err, res) { + invokeMocha(args.concat(['--reporter', 'json', path]), function (err, res) { if (err) return fn(err); try { @@ -113,12 +115,12 @@ module.exports = { * @param {string} output * returns {string[]} */ - getDiffs: function(output) { + getDiffs: function (output) { var diffs, i, inDiff, inStackTrace; diffs = []; - output.split('\n').forEach(function(line) { - if (line.match(/^ \d+\)/)) { + output.split('\n').forEach(function (line) { + if (line.match(/^\s{2}\d+\)/)) { // New spec, e.g. "1) spec title" diffs.push([]); i = diffs.length - 1; @@ -140,7 +142,7 @@ module.exports = { }); // Ignore empty lines before/after diff - return diffs.map(function(diff) { + return diffs.map(function (diff) { return diff.slice(1, -3).join('\n'); }); }, @@ -151,14 +153,14 @@ module.exports = { splitRegExp: new RegExp('[\\n' + baseReporter.symbols.dot + ']+') }; -function invokeMocha(args, fn) { +function invokeMocha (args, fn) { var output, mocha, listener; output = ''; args = [path.join('bin', 'mocha')].concat(args); mocha = spawn(process.execPath, args); - listener = function(data) { + listener = function (data) { output += data; }; @@ -166,7 +168,7 @@ function invokeMocha(args, fn) { mocha.stderr.on('data', listener); mocha.on('error', fn); - mocha.on('close', function(code) { + mocha.on('close', function (code) { fn(null, { output: output.split('\n').join('\n'), code: code @@ -174,12 +176,12 @@ function invokeMocha(args, fn) { }); } -function resolveFixturePath(fixture) { +function resolveFixturePath (fixture) { return path.join('./test/integration/fixtures', fixture); } -function getSummary(res) { - return ['passing', 'pending', 'failing'].reduce(function(summary, type) { +function getSummary (res) { + return ['passing', 'pending', 'failing'].reduce(function (summary, type) { var pattern, match; pattern = new RegExp(' (\\d+) ' + type + '\\s'); diff --git a/tests/lib/mocha-3.1.0/test/integration/hook-err.spec.js b/tests/lib/mocha-3.1.2/test/integration/hook-err.spec.js index be18721f31..fbdd7e8e38 100644 --- a/tests/lib/mocha-3.1.0/test/integration/hook-err.spec.js +++ b/tests/lib/mocha-3.1.2/test/integration/hook-err.spec.js @@ -1,14 +1,16 @@ +'use strict'; + var assert = require('assert'); var runMocha = require('./helpers').runMocha; var splitRegExp = require('./helpers').splitRegExp; var bang = require('../../lib/reporters/base').symbols.bang; -describe('hook error handling', function() { +describe('hook error handling', function () { var lines; - describe('before hook error', function() { + describe('before hook error', function () { before(run('hooks/before-hook-error.fixture.js')); - it('should verify results', function() { + it('should verify results', function () { assert.deepEqual( lines, ['before', bang + 'test 3'] @@ -16,9 +18,9 @@ describe('hook error handling', function() { }); }); - describe('before hook error tip', function() { + describe('before hook error tip', function () { before(run('hooks/before-hook-error-tip.fixture.js', onlyErrorTitle)); - it('should verify results', function() { + it('should verify results', function () { assert.deepEqual( lines, ['1) spec 2 "before all" hook:'] @@ -26,9 +28,9 @@ describe('hook error handling', function() { }); }); - describe('before each hook error', function() { + describe('before each hook error', function () { before(run('hooks/beforeEach-hook-error.fixture.js')); - it('should verify results', function() { + it('should verify results', function () { assert.deepEqual( lines, ['before', bang + 'test 3'] @@ -36,9 +38,9 @@ describe('hook error handling', function() { }); }); - describe('after hook error', function() { + describe('after hook error', function () { before(run('hooks/after-hook-error.fixture.js')); - it('should verify results', function() { + it('should verify results', function () { assert.deepEqual( lines, ['test 1', 'test 2', 'after', bang + 'test 3'] @@ -46,9 +48,9 @@ describe('hook error handling', function() { }); }); - describe('after each hook error', function() { + describe('after each hook error', function () { before(run('hooks/afterEach-hook-error.fixture.js')); - it('should verify results', function() { + it('should verify results', function () { assert.deepEqual( lines, ['test 1', 'after', bang + 'test 3'] @@ -56,9 +58,9 @@ describe('hook error handling', function() { }); }); - describe('multiple hook errors', function() { + describe('multiple hook errors', function () { before(run('hooks/multiple-hook-error.fixture.js')); - it('should verify results', function() { + it('should verify results', function () { assert.deepEqual( lines, [ @@ -94,9 +96,9 @@ describe('hook error handling', function() { }); }); - describe('async - before hook error', function() { + describe('async - before hook error', function () { before(run('hooks/before-hook-async-error.fixture.js')); - it('should verify results', function() { + it('should verify results', function () { assert.deepEqual( lines, ['before', bang + 'test 3'] @@ -104,9 +106,9 @@ describe('hook error handling', function() { }); }); - describe('async - before hook error tip', function() { + describe('async - before hook error tip', function () { before(run('hooks/before-hook-async-error-tip.fixture.js', onlyErrorTitle)); - it('should verify results', function() { + it('should verify results', function () { assert.deepEqual( lines, ['1) spec 2 "before all" hook:'] @@ -114,9 +116,9 @@ describe('hook error handling', function() { }); }); - describe('async - before each hook error', function() { + describe('async - before each hook error', function () { before(run('hooks/beforeEach-hook-async-error.fixture.js')); - it('should verify results', function() { + it('should verify results', function () { assert.deepEqual( lines, ['before', bang + 'test 3'] @@ -124,9 +126,9 @@ describe('hook error handling', function() { }); }); - describe('async - after hook error', function() { + describe('async - after hook error', function () { before(run('hooks/after-hook-async-error.fixture.js')); - it('should verify results', function() { + it('should verify results', function () { assert.deepEqual( lines, ['test 1', 'test 2', 'after', bang + 'test 3'] @@ -134,9 +136,9 @@ describe('hook error handling', function() { }); }); - describe('async - after each hook error', function() { + describe('async - after each hook error', function () { before(run('hooks/afterEach-hook-async-error.fixture.js')); - it('should verify results', function() { + it('should verify results', function () { assert.deepEqual( lines, ['test 1', 'after', bang + 'test 3'] @@ -144,9 +146,9 @@ describe('hook error handling', function() { }); }); - describe('async - multiple hook errors', function() { + describe('async - multiple hook errors', function () { before(run('hooks/multiple-hook-async-error.fixture.js')); - it('should verify results', function() { + it('should verify results', function () { assert.deepEqual( lines, [ @@ -182,14 +184,14 @@ describe('hook error handling', function() { }); }); - function run(fnPath, outputFilter) { - return function(done) { - runMocha(fnPath, [], function(err, res) { + function run (fnPath, outputFilter) { + return function (done) { + runMocha(fnPath, [], function (err, res) { assert.ifError(err); lines = res.output .split(splitRegExp) - .map(function(line) { + .map(function (line) { return line.trim(); }) .filter(outputFilter || onlyConsoleOutput()); @@ -200,9 +202,9 @@ describe('hook error handling', function() { } }); -function onlyConsoleOutput() { +function onlyConsoleOutput () { var foundSummary = false; - return function(line) { + return function (line) { if (!foundSummary) { foundSummary = !!(/\(\d+ms\)/).exec(line); } @@ -210,6 +212,6 @@ function onlyConsoleOutput() { }; } -function onlyErrorTitle(line) { +function onlyErrorTitle (line) { return !!(/^1\)/).exec(line); } diff --git a/tests/lib/mocha-3.1.0/test/integration/hooks.spec.js b/tests/lib/mocha-3.1.2/test/integration/hooks.spec.js index 7633cb5630..0d31cbfdf4 100644 --- a/tests/lib/mocha-3.1.0/test/integration/hooks.spec.js +++ b/tests/lib/mocha-3.1.2/test/integration/hooks.spec.js @@ -1,18 +1,20 @@ +'use strict'; + var assert = require('assert'); -var run = require('./helpers').runMocha; +var run = require('./helpers').runMocha; var splitRegExp = require('./helpers').splitRegExp; -var args = []; +var args = []; -describe('hooks', function() { - it('are ran in correct order', function(done) { - run('cascade.fixture.js', args, function(err, res) { +describe('hooks', function () { + it('are ran in correct order', function (done) { + run('cascade.fixture.js', args, function (err, res) { var lines, expected; assert(!err); - lines = res.output.split(splitRegExp).map(function(line) { + lines = res.output.split(splitRegExp).map(function (line) { return line.trim(); - }).filter(function(line) { + }).filter(function (line) { return line.length; }).slice(0, -1); @@ -32,7 +34,7 @@ describe('hooks', function() { 'after one' ]; - expected.forEach(function(line, i) { + expected.forEach(function (line, i) { assert.equal(lines[i], line); }); diff --git a/tests/lib/mocha-3.1.0/test/integration/multiple-done.spec.js b/tests/lib/mocha-3.1.2/test/integration/multiple-done.spec.js index 47e82dbebb..76a6483115 100644 --- a/tests/lib/mocha-3.1.0/test/integration/multiple-done.spec.js +++ b/tests/lib/mocha-3.1.2/test/integration/multiple-done.spec.js @@ -1,92 +1,94 @@ +'use strict'; + var assert = require('assert'); -var run = require('./helpers').runMochaJSON; -var args = []; +var run = require('./helpers').runMochaJSON; +var args = []; -describe('multiple calls to done()', function() { +describe('multiple calls to done()', function () { var res; - describe('from a spec', function() { - before(function(done) { - run('multiple-done.fixture.js', args, function(err, result) { + describe('from a spec', function () { + before(function (done) { + run('multiple-done.fixture.js', args, function (err, result) { res = result; done(err); }); }); - it('results in failures', function() { + it('results in failures', function () { assert.equal(res.stats.pending, 0); assert.equal(res.stats.passes, 1); assert.equal(res.stats.failures, 1); assert.equal(res.code, 1); }); - it('throws a descriptive error', function() { + it('throws a descriptive error', function () { assert.equal(res.failures[0].err.message, 'done() called multiple times'); }); }); - describe('with multiple specs', function() { - before(function(done) { - run('multiple-done-specs.fixture.js', args, function(err, result) { + describe('with multiple specs', function () { + before(function (done) { + run('multiple-done-specs.fixture.js', args, function (err, result) { res = result; done(err); }); }); - it('results in a failure', function() { + it('results in a failure', function () { assert.equal(res.stats.pending, 0); assert.equal(res.stats.passes, 2); assert.equal(res.stats.failures, 1); assert.equal(res.code, 1); }); - it('correctly attributes the error', function() { + it('correctly attributes the error', function () { assert.equal(res.failures[0].fullTitle, 'suite test1'); assert.equal(res.failures[0].err.message, 'done() called multiple times'); }); }); - describe('from a before hook', function() { - before(function(done) { - run('multiple-done-before.fixture.js', args, function(err, result) { + describe('from a before hook', function () { + before(function (done) { + run('multiple-done-before.fixture.js', args, function (err, result) { res = result; done(err); }); }); - it('results in a failure', function() { + it('results in a failure', function () { assert.equal(res.stats.pending, 0); assert.equal(res.stats.passes, 1); assert.equal(res.stats.failures, 1); assert.equal(res.code, 1); }); - it('correctly attributes the error', function() { + it('correctly attributes the error', function () { assert.equal(res.failures[0].fullTitle, 'suite "before all" hook'); assert.equal(res.failures[0].err.message, 'done() called multiple times'); }); }); - describe('from a beforeEach hook', function() { - before(function(done) { - run('multiple-done-beforeEach.fixture.js', args, function(err, result) { + describe('from a beforeEach hook', function () { + before(function (done) { + run('multiple-done-beforeEach.fixture.js', args, function (err, result) { res = result; done(err); }); }); - it('results in a failure', function() { + it('results in a failure', function () { assert.equal(res.stats.pending, 0); assert.equal(res.stats.passes, 2); assert.equal(res.stats.failures, 2); assert.equal(res.code, 2); }); - it('correctly attributes the errors', function() { + it('correctly attributes the errors', function () { assert.equal(res.failures.length, 2); - res.failures.forEach(function(failure) { + res.failures.forEach(function (failure) { assert.equal(failure.fullTitle, 'suite "before each" hook'); assert.equal(failure.err.message, 'done() called multiple times'); diff --git a/tests/lib/mocha-3.1.0/test/integration/only.spec.js b/tests/lib/mocha-3.1.2/test/integration/only.spec.js index 61254ce1d3..b37a4b263e 100644 --- a/tests/lib/mocha-3.1.0/test/integration/only.spec.js +++ b/tests/lib/mocha-3.1.2/test/integration/only.spec.js @@ -1,10 +1,12 @@ +'use strict'; + var run = require('./helpers').runMochaJSON; var assert = require('assert'); -describe('.only()', function() { - describe('bdd', function() { - it('should run only tests that marked as `only`', function(done) { - run('options/only/bdd.fixture.js', ['--ui', 'bdd'], function(err, res) { +describe('.only()', function () { + describe('bdd', function () { + it('should run only tests that marked as `only`', function (done) { + run('options/only/bdd.fixture.js', ['--ui', 'bdd'], function (err, res) { assert(!err); assert.equal(res.stats.pending, 0); assert.equal(res.stats.passes, 11); @@ -15,9 +17,9 @@ describe('.only()', function() { }); }); - describe('tdd', function() { - it('should run only tests that marked as `only`', function(done) { - run('options/only/tdd.fixture.js', ['--ui', 'tdd'], function(err, res) { + describe('tdd', function () { + it('should run only tests that marked as `only`', function (done) { + run('options/only/tdd.fixture.js', ['--ui', 'tdd'], function (err, res) { assert(!err); assert.equal(res.stats.pending, 0); assert.equal(res.stats.passes, 8); @@ -28,11 +30,9 @@ describe('.only()', function() { }); }); - describe('qunit', function() { - it('should run only tests that marked as `only`', function(done) { - run('options/only/qunit.fixture.js', ['--ui', 'qunit'], function(err, res) { - console.log(err); - + describe('qunit', function () { + it('should run only tests that marked as `only`', function (done) { + run('options/only/qunit.fixture.js', ['--ui', 'qunit'], function (err, res) { assert(!err); assert.equal(res.stats.pending, 0); assert.equal(res.stats.passes, 5); diff --git a/tests/lib/mocha-3.1.0/test/integration/options.spec.js b/tests/lib/mocha-3.1.2/test/integration/options.spec.js index 4755647f76..7c7a3cc75e 100644 --- a/tests/lib/mocha-3.1.0/test/integration/options.spec.js +++ b/tests/lib/mocha-3.1.2/test/integration/options.spec.js @@ -1,16 +1,17 @@ -var assert = require('assert'); -var run = require('./helpers').runMochaJSON; -var args = []; +'use strict'; -describe('options', function() { - describe('--async-only', function() { +var assert = require('assert'); +var run = require('./helpers').runMochaJSON; +var args = []; - before(function() { +describe('options', function () { + describe('--async-only', function () { + before(function () { args = ['--async-only']; }); - it('should fail synchronous specs', function(done) { - run('options/async-only-sync.fixture.js', args, function(err, res) { + it('should fail synchronous specs', function (done) { + run('options/async-only-sync.fixture.js', args, function (err, res) { assert(!err); assert.equal(res.stats.pending, 0); assert.equal(res.stats.passes, 0); @@ -22,8 +23,8 @@ describe('options', function() { }); }); - it('should allow asynchronous specs', function(done) { - run('options/async-only-async.fixture.js', args, function(err, res) { + it('should allow asynchronous specs', function (done) { + run('options/async-only-async.fixture.js', args, function (err, res) { assert(!err); assert.equal(res.stats.pending, 0); assert.equal(res.stats.passes, 1); @@ -36,13 +37,13 @@ describe('options', function() { }); }); - describe('--bail', function() { - before(function() { + describe('--bail', function () { + before(function () { args = ['--bail']; }); - it('should stop after the first error', function(done) { - run('options/bail.fixture.js', args, function(err, res) { + it('should stop after the first error', function (done) { + run('options/bail.fixture.js', args, function (err, res) { assert(!err); assert.equal(res.stats.pending, 0); assert.equal(res.stats.passes, 1); @@ -56,13 +57,13 @@ describe('options', function() { }); }); - describe('--sort', function() { - before(function() { + describe('--sort', function () { + before(function () { args = ['--sort']; }); - it('should sort tests in alphabetical order', function(done) { - run('options/sort*', args, function(err, res) { + it('should sort tests in alphabetical order', function (done) { + run('options/sort*', args, function (err, res) { assert(!err); assert.equal(res.stats.pending, 0); assert.equal(res.stats.passes, 2); @@ -76,13 +77,13 @@ describe('options', function() { }); }); - describe('--delay', function() { - before(function() { + describe('--delay', function () { + before(function () { args = ['--delay']; }); - it('should run the generated test suite', function(done) { - run('options/delay.fixture.js', args, function(err, res) { + it('should run the generated test suite', function (done) { + run('options/delay.fixture.js', args, function (err, res) { assert(!err); assert.equal(res.stats.pending, 0); assert.equal(res.stats.passes, 1); @@ -95,8 +96,8 @@ describe('options', function() { }); }); - it('should throw an error if the test suite failed to run', function(done) { - run('options/delay-fail.fixture.js', args, function(err, res) { + it('should throw an error if the test suite failed to run', function (done) { + run('options/delay-fail.fixture.js', args, function (err, res) { assert(!err); assert.equal(res.stats.pending, 0); assert.equal(res.stats.passes, 0); @@ -110,10 +111,10 @@ describe('options', function() { }); }); - describe('--grep', function() { - it('runs specs matching a string', function(done) { + describe('--grep', function () { + it('runs specs matching a string', function (done) { args = ['--grep', 'match']; - run('options/grep.fixture.js', args, function(err, res) { + run('options/grep.fixture.js', args, function (err, res) { assert(!err); assert.equal(res.stats.pending, 0); assert.equal(res.stats.passes, 2); @@ -123,10 +124,10 @@ describe('options', function() { }); }); - describe('runs specs matching a RegExp', function() { - it('with RegExp like strings(pattern follow by flag)', function(done) { + describe('runs specs matching a RegExp', function () { + it('with RegExp like strings(pattern follow by flag)', function (done) { args = ['--grep', '/match/i']; - run('options/grep.fixture.js', args, function(err, res) { + run('options/grep.fixture.js', args, function (err, res) { assert(!err); assert.equal(res.stats.pending, 0); assert.equal(res.stats.passes, 4); @@ -136,9 +137,9 @@ describe('options', function() { }); }); - it('string as pattern', function(done) { + it('string as pattern', function (done) { args = ['--grep', '.*']; - run('options/grep.fixture.js', args, function(err, res) { + run('options/grep.fixture.js', args, function (err, res) { assert(!err); assert.equal(res.stats.pending, 0); assert.equal(res.stats.passes, 4); @@ -149,10 +150,10 @@ describe('options', function() { }); }); - describe('with --invert', function() { - it('runs specs that do not match the pattern', function(done) { + describe('with --invert', function () { + it('runs specs that do not match the pattern', function (done) { args = ['--grep', 'fail', '--invert']; - run('options/grep.fixture.js', args, function(err, res) { + run('options/grep.fixture.js', args, function (err, res) { assert(!err); assert.equal(res.stats.pending, 0); assert.equal(res.stats.passes, 4); @@ -164,10 +165,10 @@ describe('options', function() { }); }); - describe('--retries', function() { + describe('--retries', function () { it('retries after a certain threshold', function (done) { args = ['--retries', '3']; - run('options/retries.fixture.js', args, function(err, res) { + run('options/retries.fixture.js', args, function (err, res) { assert(!err); assert.equal(res.stats.pending, 0); assert.equal(res.stats.passes, 0); @@ -177,6 +178,6 @@ describe('options', function() { assert.equal(res.code, 1); done(); }); - }) + }); }); }); diff --git a/tests/lib/mocha-3.1.0/test/integration/pending.spec.js b/tests/lib/mocha-3.1.2/test/integration/pending.spec.js index 4d4beffc2a..19ae30ad3a 100644 --- a/tests/lib/mocha-3.1.0/test/integration/pending.spec.js +++ b/tests/lib/mocha-3.1.2/test/integration/pending.spec.js @@ -1,11 +1,13 @@ +'use strict'; + var assert = require('assert'); -var run = require('./helpers').runMochaJSON; -var args = []; +var run = require('./helpers').runMochaJSON; +var args = []; -describe('pending', function() { - describe('pending specs', function() { - it('should be created by omitting a function', function(done) { - run('pending/spec.fixture.js', args, function(err, res) { +describe('pending', function () { + describe('pending specs', function () { + it('should be created by omitting a function', function (done) { + run('pending/spec.fixture.js', args, function (err, res) { assert(!err); assert.equal(res.stats.pending, 1); assert.equal(res.stats.passes, 0); @@ -16,10 +18,10 @@ describe('pending', function() { }); }); - describe('synchronous skip()', function() { - describe('in spec', function() { - it('should immediately skip the spec and run all others', function(done) { - run('pending/skip-sync-spec.fixture.js', args, function(err, res) { + describe('synchronous skip()', function () { + describe('in spec', function () { + it('should immediately skip the spec and run all others', function (done) { + run('pending/skip-sync-spec.fixture.js', args, function (err, res) { assert(!err); assert.equal(res.stats.pending, 1); assert.equal(res.stats.passes, 1); @@ -30,9 +32,9 @@ describe('pending', function() { }); }); - describe('in before', function() { - it('should skip all suite specs', function(done) { - run('pending/skip-sync-before.fixture.js', args, function(err, res) { + describe('in before', function () { + it('should skip all suite specs', function (done) { + run('pending/skip-sync-before.fixture.js', args, function (err, res) { assert(!err); assert.equal(res.stats.pending, 2); assert.equal(res.stats.passes, 0); @@ -43,9 +45,9 @@ describe('pending', function() { }); }); - describe('in beforeEach', function() { - it('should skip all suite specs', function(done) { - run('pending/skip-sync-beforeEach.fixture.js', args, function(err, res) { + describe('in beforeEach', function () { + it('should skip all suite specs', function (done) { + run('pending/skip-sync-beforeEach.fixture.js', args, function (err, res) { assert(!err); assert.equal(res.stats.pending, 2); assert.equal(res.stats.passes, 0); @@ -57,10 +59,10 @@ describe('pending', function() { }); }); - describe('asynchronous skip()', function() { - describe('in spec', function() { - it('should immediately skip the spec and run all others', function(done) { - run('pending/skip-async-spec.fixture.js', args, function(err, res) { + describe('asynchronous skip()', function () { + describe('in spec', function () { + it('should immediately skip the spec and run all others', function (done) { + run('pending/skip-async-spec.fixture.js', args, function (err, res) { assert(!err); assert.equal(res.stats.pending, 1); assert.equal(res.stats.passes, 1); @@ -71,9 +73,9 @@ describe('pending', function() { }); }); - describe('in before', function() { - it('should skip all suite specs', function(done) { - run('pending/skip-async-before.fixture.js', args, function(err, res) { + describe('in before', function () { + it('should skip all suite specs', function (done) { + run('pending/skip-async-before.fixture.js', args, function (err, res) { assert(!err); assert.equal(res.stats.pending, 2); assert.equal(res.stats.passes, 0); @@ -84,9 +86,9 @@ describe('pending', function() { }); }); - describe('in beforeEach', function() { - it('should skip all suite specs', function(done) { - run('pending/skip-sync-beforeEach.fixture.js', args, function(err, res) { + describe('in beforeEach', function () { + it('should skip all suite specs', function (done) { + run('pending/skip-sync-beforeEach.fixture.js', args, function (err, res) { assert(!err); assert.equal(res.stats.pending, 2); assert.equal(res.stats.passes, 0); diff --git a/tests/lib/mocha-3.1.0/test/integration/regression.spec.js b/tests/lib/mocha-3.1.2/test/integration/regression.spec.js index f2a435a34c..ffd17aa979 100644 --- a/tests/lib/mocha-3.1.0/test/integration/regression.spec.js +++ b/tests/lib/mocha-3.1.2/test/integration/regression.spec.js @@ -1,14 +1,16 @@ -var assert = require('assert'); -var fs = require('fs'); -var path = require('path'); -var run = require('./helpers').runMocha; +'use strict'; + +var assert = require('assert'); +var fs = require('fs'); +var path = require('path'); +var run = require('./helpers').runMocha; var runJSON = require('./helpers').runMochaJSON; -describe('regressions', function() { - it('issue-1327: should run all 3 specs exactly once', function(done) { +describe('regressions', function () { + it('issue-1327: should run all 3 specs exactly once', function (done) { var args = []; - run('regression/issue-1327.fixture.js', args, function(err, res) { - var occurences = function(str) { + run('regression/issue-1327.fixture.js', args, function (err, res) { + var occurences = function (str) { var pattern = new RegExp(str, 'g'); return (res.output.match(pattern) || []).length; }; @@ -23,32 +25,34 @@ describe('regressions', function() { }); }); - it('should not duplicate mocha.opts args in process.argv', function() { + it('should not duplicate mocha.opts args in process.argv', function () { var processArgv = process.argv.join(''); var mochaOpts = fs.readFileSync(path.join(__dirname, '..', 'mocha.opts'), 'utf-8').split(/[\s]+/).join(''); assert.notEqual(processArgv.indexOf(mochaOpts), -1, 'process.argv missing mocha.opts'); assert.equal(processArgv.indexOf(mochaOpts), processArgv.lastIndexOf(mochaOpts), 'process.argv contains duplicated mocha.opts'); }); - it('issue-1794: Can\'t --require custom UI and use it', function(done) { + it('issue-1794: Can\'t --require custom UI and use it', function (done) { var simpleUiPath = path.join(__dirname, 'fixtures', 'regression', '1794', 'simple-ui.js'); var args = ['--require', simpleUiPath, '--ui', 'simple-ui']; - run('regression/1794/issue-1794.fixture.js', args, function(err, res) { + run('regression/1794/issue-1794.fixture.js', args, function (err, res) { + assert(!err); assert.equal(res.code, 0, 'Custom UI should be loaded'); done(); }); }); - it('issue-1991: Declarations do not get cleaned up unless you set them to `null` - Memory Leak', function(done) { + it('issue-1991: Declarations do not get cleaned up unless you set them to `null` - Memory Leak', function (done) { // on a modern MBP takes ±5 seconds on node 4.0, but on older laptops with node 0.12 ±40 seconds. // Could easily take longer on even weaker machines (Travis-CI containers for example). this.timeout(120000); - run('regression/issue-1991.fixture.js', [], function(err, res) { + run('regression/issue-1991.fixture.js', [], function (err, res) { + assert(!err); assert.equal(/process out of memory/.test(res.output), false, 'fixture\'s process out of memory!'); assert.equal(res.code, 0, 'Runnable fn (it/before[Each]/after[Each]) references should be deleted to avoid memory leaks'); done(); }); - }) + }); describe('issue-2286: after doesn\'t execute if test was skipped in beforeEach', function () { var afterWasRun = false; @@ -56,14 +60,14 @@ describe('regressions', function() { beforeEach(function () { this.skip(); }); after(function () { afterWasRun = true; }); it('should be pending', function () {}); - }) + }); after('meta test', function () { afterWasRun.should.be.ok(); }); }); it('issue-2315: cannot read property currentRetry of undefined', function (done) { - runJSON('regression/issue-2315.js', [], function(err, res) { + runJSON('regression/issue-2315.js', [], function (err, res) { assert(!err); assert.equal(res.stats.pending, 0); assert.equal(res.stats.passes, 0); @@ -73,9 +77,9 @@ describe('regressions', function() { }); }); - it('issue-2406: should run nested describe.only suites', function(done) { + it('issue-2406: should run nested describe.only suites', function (done) { this.timeout(2000); - runJSON('regression/issue-2406.fixture.js', [], function(err, res) { + runJSON('regression/issue-2406.fixture.js', [], function (err, res) { assert(!err); assert.equal(res.stats.pending, 0); assert.equal(res.stats.passes, 2); @@ -85,8 +89,8 @@ describe('regressions', function() { }); }); - it('issue-2417: should not recurse infinitely with .only suites nested within each other', function() { - runJSON('regression/issue-2417.fixture.js', [], function(err, res) { + it('issue-2417: should not recurse infinitely with .only suites nested within each other', function () { + runJSON('regression/issue-2417.fixture.js', [], function (err, res) { assert(!err); assert.equal(res.stats.pending, 0); assert.equal(res.stats.passes, 1); @@ -94,4 +98,22 @@ describe('regressions', function() { assert.equal(res.code, 0); }); }); + + it('issue-1417 uncaught exceptions from async specs', function (done) { + runJSON('regression/issue-1417.js', [], function (err, res) { + assert(!err); + assert.equal(res.stats.pending, 0); + assert.equal(res.stats.passes, 0); + assert.equal(res.stats.failures, 2); + + assert.equal(res.failures[0].title, + 'fails exactly once when a global error is thrown synchronously and done errors'); + assert.equal(res.failures[0].err.message, 'sync error'); + assert.equal(res.failures[1].title, + 'fails exactly once when a global error is thrown synchronously and done completes'); + assert.equal(res.failures[1].err.message, 'sync error'); + assert.equal(res.code, 2); + done(); + }); + }); }); diff --git a/tests/lib/mocha-3.1.0/test/integration/reporters.spec.js b/tests/lib/mocha-3.1.2/test/integration/reporters.spec.js index 9595611829..5cfee57037 100644 --- a/tests/lib/mocha-3.1.0/test/integration/reporters.spec.js +++ b/tests/lib/mocha-3.1.2/test/integration/reporters.spec.js @@ -1,26 +1,28 @@ +'use strict'; + var assert = require('assert'); -var os = require('os'); -var fs = require('fs'); +var os = require('os'); +var fs = require('fs'); var crypto = require('crypto'); -var path = require('path'); -var run = require('./helpers').runMocha; +var path = require('path'); +var run = require('./helpers').runMocha; -describe('reporters', function() { - describe('markdown', function() { +describe('reporters', function () { + describe('markdown', function () { var res; - before(function(done) { - run('passing.fixture.js', ['--reporter', 'markdown'], function(err, result) { + before(function (done) { + run('passing.fixture.js', ['--reporter', 'markdown'], function (err, result) { res = result; done(err); }); }); - it('does not exceed maximum callstack (issue: 1875)', function() { + it('does not exceed maximum callstack (issue: 1875)', function () { assert(res.output.indexOf('RangeError') === -1, 'Threw RangeError'); }); - it('contains spec src', function() { + it('contains spec src', function () { var src = [ '```js', 'assert(true);', @@ -31,8 +33,8 @@ describe('reporters', function() { }); }); - describe('xunit', function() { - it('prints test cases with --reporter-options output (issue: 1864)', function(done) { + describe('xunit', function () { + it('prints test cases with --reporter-options output (issue: 1864)', function (done) { var randomStr = crypto.randomBytes(8).toString('hex'); var tmpDir = os.tmpDir().replace(new RegExp(path.sep + '$'), ''); var tmpFile = tmpDir + path.sep + 'test-issue-1864-' + randomStr + '.xml'; @@ -44,13 +46,13 @@ describe('reporters', function() { '</testsuite>' ]; - run('passing.fixture.js', args, function(err, result) { + run('passing.fixture.js', args, function (err, result) { if (err) return done(err); var xml = fs.readFileSync(tmpFile, 'utf8'); fs.unlinkSync(tmpFile); - expectedOutput.forEach(function(line) { + expectedOutput.forEach(function (line) { assert(xml.indexOf(line) !== -1, 'XML did not contain ' + line); }); diff --git a/tests/lib/mocha-3.1.0/test/integration/retries.spec.js b/tests/lib/mocha-3.1.2/test/integration/retries.spec.js index ce76545b00..28ed702c5f 100644 --- a/tests/lib/mocha-3.1.0/test/integration/retries.spec.js +++ b/tests/lib/mocha-3.1.2/test/integration/retries.spec.js @@ -1,18 +1,20 @@ +'use strict'; + var assert = require('assert'); var helpers = require('./helpers'); -var args = []; +var args = []; var bang = require('../../lib/reporters/base').symbols.bang; -describe('retries', function() { - it('are ran in correct order', function(done) { - helpers.runMocha('retries/hooks.fixture.js', args, function(err, res) { +describe('retries', function () { + it('are ran in correct order', function (done) { + helpers.runMocha('retries/hooks.fixture.js', args, function (err, res) { var lines, expected; assert(!err); - lines = res.output.split(helpers.splitRegExp).map(function(line) { + lines = res.output.split(helpers.splitRegExp).map(function (line) { return line.trim(); - }).filter(function(line) { + }).filter(function (line) { return line.length; }).slice(0, -1); @@ -36,7 +38,7 @@ describe('retries', function() { 'after' ]; - expected.forEach(function(line, i) { + expected.forEach(function (line, i) { assert.equal(lines[i], line); }); @@ -46,7 +48,7 @@ describe('retries', function() { }); it('should exit early if test passes', function (done) { - helpers.runMochaJSON('retries/early-pass.fixture.js', args, function(err, res) { + helpers.runMochaJSON('retries/early-pass.fixture.js', args, function (err, res) { assert(!err); assert.equal(res.stats.passes, 1); assert.equal(res.stats.failures, 0); @@ -58,7 +60,7 @@ describe('retries', function() { }); it('should let test override', function (done) { - helpers.runMochaJSON('retries/nested.fixture.js', args, function(err, res) { + helpers.runMochaJSON('retries/nested.fixture.js', args, function (err, res) { assert(!err); assert.equal(res.stats.passes, 0); assert.equal(res.stats.failures, 1); @@ -70,14 +72,14 @@ describe('retries', function() { }); it('should not hang w/ async test', function (done) { - helpers.runMocha('retries/async.fixture.js', args, function(err, res) { + helpers.runMocha('retries/async.fixture.js', args, function (err, res) { var lines, expected; assert(!err); - lines = res.output.split(helpers.splitRegExp).map(function(line) { + lines = res.output.split(helpers.splitRegExp).map(function (line) { return line.trim(); - }).filter(function(line) { + }).filter(function (line) { return line.length; }).slice(0, -1); @@ -95,7 +97,7 @@ describe('retries', function() { 'after' ]; - expected.forEach(function(line, i) { + expected.forEach(function (line, i) { assert.equal(lines[i], line); }); diff --git a/tests/lib/mocha-3.1.0/test/integration/suite.spec.js b/tests/lib/mocha-3.1.2/test/integration/suite.spec.js index 00066a34f4..171a929ed1 100644 --- a/tests/lib/mocha-3.1.0/test/integration/suite.spec.js +++ b/tests/lib/mocha-3.1.2/test/integration/suite.spec.js @@ -1,11 +1,13 @@ +'use strict'; + var assert = require('assert'); var run = require('./helpers').runMocha; var args = []; -describe('suite w/no callback', function() { +describe('suite w/no callback', function () { this.timeout(1000); - it('should throw a helpful error message when a callback for suite is not supplied', function(done) { - run('suite/suite-no-callback.fixture.js', args, function(err, res) { + it('should throw a helpful error message when a callback for suite is not supplied', function (done) { + run('suite/suite-no-callback.fixture.js', args, function (err, res) { assert(!err); var result = res.output.match(/no callback was supplied/) || []; assert.equal(result.length, 1); @@ -14,12 +16,12 @@ describe('suite w/no callback', function() { }); }); -describe('skipped suite w/no callback', function() { +describe('skipped suite w/no callback', function () { this.timeout(1000); - it('should not throw an error when a callback for skipped suite is not supplied', function(done) { - run('suite/suite-skipped-no-callback.fixture.js', args, function(err, res) { + it('should not throw an error when a callback for skipped suite is not supplied', function (done) { + run('suite/suite-skipped-no-callback.fixture.js', args, function (err, res) { assert(!err); - pattern = new RegExp("Error", 'g'); + var pattern = new RegExp('Error', 'g'); var result = res.output.match(pattern) || []; assert.equal(result.length, 0); done(); @@ -27,13 +29,12 @@ describe('skipped suite w/no callback', function() { }); }); - -describe('skipped suite w/ callback', function() { +describe('skipped suite w/ callback', function () { this.timeout(1000); - it('should not throw an error when a callback for skipped suite is supplied', function(done) { - run('suite/suite-skipped-callback.fixture.js', args, function(err, res) { + it('should not throw an error when a callback for skipped suite is supplied', function (done) { + run('suite/suite-skipped-callback.fixture.js', args, function (err, res) { assert(!err); - pattern = new RegExp("Error", 'g'); + var pattern = new RegExp('Error', 'g'); var result = res.output.match(pattern) || []; assert.equal(result.length, 0); done(); diff --git a/tests/lib/mocha-3.1.0/test/integration/timeout.spec.js b/tests/lib/mocha-3.1.2/test/integration/timeout.spec.js index 33b8e33093..4e0f989e86 100644 --- a/tests/lib/mocha-3.1.0/test/integration/timeout.spec.js +++ b/tests/lib/mocha-3.1.2/test/integration/timeout.spec.js @@ -1,10 +1,12 @@ +'use strict'; + var assert = require('assert'); -var run = require('./helpers').runMochaJSON; -var args = []; +var run = require('./helpers').runMochaJSON; +var args = []; -describe('this.timeout()', function() { - it('is respected by sync and async suites', function(done) { - run('timeout.fixture.js', args, function(err, res) { +describe('this.timeout()', function () { + it('is respected by sync and async suites', function (done) { + run('timeout.fixture.js', args, function (err, res) { assert(!err); assert.equal(res.stats.pending, 0); assert.equal(res.stats.passes, 0); diff --git a/tests/lib/mocha-3.1.0/test/integration/uncaught.spec.js b/tests/lib/mocha-3.1.2/test/integration/uncaught.spec.js index 87dde90902..92e39c195e 100644 --- a/tests/lib/mocha-3.1.0/test/integration/uncaught.spec.js +++ b/tests/lib/mocha-3.1.2/test/integration/uncaught.spec.js @@ -1,10 +1,12 @@ +'use strict'; + var assert = require('assert'); -var run = require('./helpers').runMochaJSON; -var args = []; +var run = require('./helpers').runMochaJSON; +var args = []; -describe('uncaught exceptions', function() { - it('handles uncaught exceptions from hooks', function(done) { - run('uncaught-hook.fixture.js', args, function(err, res) { +describe('uncaught exceptions', function () { + it('handles uncaught exceptions from hooks', function (done) { + run('uncaught-hook.fixture.js', args, function (err, res) { assert(!err); assert.equal(res.stats.pending, 0); assert.equal(res.stats.passes, 0); @@ -17,8 +19,8 @@ describe('uncaught exceptions', function() { }); }); - it('handles uncaught exceptions from async specs', function(done) { - run('uncaught.fixture.js', args, function(err, res) { + it('handles uncaught exceptions from async specs', function (done) { + run('uncaught.fixture.js', args, function (err, res) { assert(!err); assert.equal(res.stats.pending, 0); assert.equal(res.stats.passes, 0); diff --git a/tests/lib/mocha-3.1.0/test/jsapi/index.js b/tests/lib/mocha-3.1.2/test/jsapi/index.js index a096186b96..42133578e0 100644 --- a/tests/lib/mocha-3.1.0/test/jsapi/index.js +++ b/tests/lib/mocha-3.1.2/test/jsapi/index.js @@ -1,5 +1,6 @@ -var Mocha = require('../../') - , path = require('path'); +'use strict'; + +var Mocha = require('../../'); var mocha = new Mocha({ ui: 'bdd', @@ -22,8 +23,8 @@ mocha.addFile('test/acceptance/fs.spec.js'); mocha.addFile('test/acceptance/globals.spec.js'); mocha.addFile('test/acceptance/timeout.spec.js'); -mocha.run(function(){ +mocha.run(function () { console.log('done'); -}).on('pass', function(test){ +}).on('pass', function (test) { // console.log('... %s', test.title); }); diff --git a/tests/lib/mocha-3.1.0/test/mocha.opts b/tests/lib/mocha-3.1.2/test/mocha.opts index cd797e2ae0..36146eb65e 100644 --- a/tests/lib/mocha-3.1.0/test/mocha.opts +++ b/tests/lib/mocha-3.1.2/test/mocha.opts @@ -1,5 +1,5 @@ --require should ---require ./test/fixture-expect.js +--require ./test/setup --reporter dot --ui bdd --globals okGlobalA,okGlobalB diff --git a/tests/lib/mocha-3.1.0/test/mocha.spec.js b/tests/lib/mocha-3.1.2/test/mocha.spec.js index 46411fc18b..618742cdbd 100644 --- a/tests/lib/mocha-3.1.0/test/mocha.spec.js +++ b/tests/lib/mocha-3.1.2/test/mocha.spec.js @@ -1,33 +1,35 @@ +'use strict'; + var Mocha = require('../'); var Test = Mocha.Test; -describe('Mocha', function(){ - var blankOpts = { reporter: function(){} }; // no output +describe('Mocha', function () { + var blankOpts = { reporter: function () {} }; // no output - describe('.run(fn)', function(){ - it('should not raise errors if callback was not provided', function(){ + describe('.run(fn)', function () { + it('should not raise errors if callback was not provided', function () { var mocha = new Mocha(blankOpts); mocha.run(); - }) + }); - it('should execute the callback when complete', function(done) { + it('should execute the callback when complete', function (done) { var mocha = new Mocha(blankOpts); - mocha.run(function(){ + mocha.run(function () { done(); - }) - }) + }); + }); - it('should execute the callback with the number of failures '+ - 'as parameter', function(done) { + it('should execute the callback with the number of failures ' + + 'as parameter', function (done) { var mocha = new Mocha(blankOpts); - var failingTest = new Test('failing test', function(){ + var failingTest = new Test('failing test', function () { throw new Error('such fail'); }); mocha.suite.addTest(failingTest); - mocha.run(function(failures) { + mocha.run(function (failures) { failures.should.equal(1); done(); }); - }) - }) -}) + }); + }); +}); diff --git a/tests/lib/mocha-3.1.0/test/ms.spec.js b/tests/lib/mocha-3.1.2/test/ms.spec.js index 1fd9740a62..26f5c30209 100644 --- a/tests/lib/mocha-3.1.0/test/ms.spec.js +++ b/tests/lib/mocha-3.1.2/test/ms.spec.js @@ -1,71 +1,71 @@ 'use strict'; var ms = require('../lib/ms'); -describe('.ms()', function() { +describe('.ms()', function () { // Helpers var time = { - minutes: function(n) { return n * 60 * 1000; }, + minutes: function (n) { return n * 60 * 1000; }, hours: function (n) { return n * this.minutes(60); }, - days: function(n) { return n * this.hours(24); }, - years: function(n) { return n * this.days(365.25); } + days: function (n) { return n * this.hours(24); }, + years: function (n) { return n * this.days(365.25); } }; - describe('get a value that less than 1 second', function() { - it('should return milliseconds representation', function() { + describe('get a value that less than 1 second', function () { + it('should return milliseconds representation', function () { ms(200).should.equal('200ms'); ms(30).should.equal('30ms'); ms(2000).should.not.equal('2000ms'); }); }); - describe('seconds representation', function() { - it('should return short format', function() { + describe('seconds representation', function () { + it('should return short format', function () { ms(2000).should.equal('2s'); }); - it('should return long format', function() { + it('should return long format', function () { ms(2000, { long: true }).should.equal('2 seconds'); ms(1000, { long: true }).should.equal('1 second'); ms(1010, { long: true }).should.equal('1 second'); }); }); - describe('minutess representation', function() { - it('should return short format', function() { + describe('minutess representation', function () { + it('should return short format', function () { ms(time.minutes(1)).should.equal('1m'); }); - it('should return long format', function() { + it('should return long format', function () { ms(time.minutes(1), { long: true }).should.equal('1 minute'); ms(time.minutes(3), { long: true }).should.equal('3 minutes'); }); }); - describe('hours representation', function() { - it('should return short format', function() { + describe('hours representation', function () { + it('should return short format', function () { ms(time.hours(1)).should.equal('1h'); }); - it('should return long format', function() { + it('should return long format', function () { ms(time.hours(1), { long: true }).should.equal('1 hour'); ms(time.hours(3), { long: true }).should.equal('3 hours'); }); }); - describe('days representation', function() { - it('should return short format', function() { + describe('days representation', function () { + it('should return short format', function () { ms(time.days(1)).should.equal('1d'); }); - it('should return long format', function() { + it('should return long format', function () { ms(time.days(1), { long: true }).should.equal('1 day'); ms(time.days(3), { long: true }).should.equal('3 days'); }); }); - describe('Getting string value', function() { - it('should return the milliseconds representation(Number)', function() { + describe('Getting string value', function () { + it('should return the milliseconds representation(Number)', function () { ms('1 second').should.equal(1000); - + ms('1 minute').should.equal(time.minutes(1)); ms('6 minutes').should.equal(time.minutes(6)); diff --git a/tests/lib/mocha-3.1.0/test/reporters/base.spec.js b/tests/lib/mocha-3.1.2/test/reporters/base.spec.js index bbd0d3a9a7..6282d882ff 100644 --- a/tests/lib/mocha-3.1.0/test/reporters/base.spec.js +++ b/tests/lib/mocha-3.1.2/test/reporters/base.spec.js @@ -1,9 +1,11 @@ +'use strict'; + var assert = require('assert'); -var Base = require('../../lib/reporters/base') - , Assert = require('assert').AssertionError; +var Base = require('../../lib/reporters/base'); +var Assert = require('assert').AssertionError; -function makeTest(err) { +function makeTest (err) { return { err: err, fullTitle: function () { @@ -13,9 +15,9 @@ function makeTest(err) { } describe('Base reporter', function () { - var stdout - , stdoutWrite - , useColors; + var stdout; + var stdoutWrite; + var useColors; beforeEach(function () { stdout = []; @@ -32,10 +34,10 @@ describe('Base reporter', function () { Base.useColors = useColors; }); - describe('showDiff', function() { + describe('showDiff', function () { it('should show diffs by default', function () { - var err = new Assert({ actual: 'foo', expected: 'bar' }) - , errOut; + var err = new Assert({ actual: 'foo', expected: 'bar' }); + var errOut; var test = makeTest(err); @@ -47,13 +49,12 @@ describe('Base reporter', function () { }); it('should show diffs if property set to `true`', function () { - var err = new Assert({ actual: 'foo', expected: 'bar' }) - , errOut; + var err = new Assert({ actual: 'foo', expected: 'bar' }); + var errOut; err.showDiff = true; var test = makeTest(err); - Base.list([test]); errOut = stdout.join('\n'); @@ -62,8 +63,8 @@ describe('Base reporter', function () { }); it('should not show diffs when showDiff property set to `false`', function () { - var err = new Assert({ actual: 'foo', expected: 'bar' }) - , errOut; + var err = new Assert({ actual: 'foo', expected: 'bar' }); + var errOut; err.showDiff = false; var test = makeTest(err); @@ -76,8 +77,8 @@ describe('Base reporter', function () { }); it('should not show diffs when expected is not defined', function () { - var err = new Error('ouch') - , errOut; + var err = new Error('ouch'); + var errOut; var test = makeTest(err); @@ -87,14 +88,13 @@ describe('Base reporter', function () { errOut.should.not.match(/\- actual/); errOut.should.not.match(/\+ expected/); }); - }); - describe('Getting two strings', function() { + describe('Getting two strings', function () { // Fix regression V1.2.1(see: issue #1241) it('should show strings diff as is', function () { - var err = new Error('test'), - errOut; + var err = new Error('test'); + var errOut; err.actual = 'foo\nbar'; err.expected = 'foo\nbaz'; @@ -114,11 +114,11 @@ describe('Base reporter', function () { }); it('should stringify objects', function () { - var err = new Error('test'), - errOut; + var err = new Error('test'); + var errOut; - err.actual = {key:"a1"}; - err.expected = {key:"e1"}; + err.actual = {key: 'a1'}; + err.expected = {key: 'e1'}; err.showDiff = true; var test = makeTest(err); @@ -132,8 +132,8 @@ describe('Base reporter', function () { }); it('should stringify Object.create(null)', function () { - var err = new Error('test'), - errOut; + var err = new Error('test'); + var errOut; err.actual = Object.create(null); err.actual.hasOwnProperty = 1; @@ -189,7 +189,7 @@ describe('Base reporter', function () { it('should use the inspect() property if `message` is not set', function () { var err = { showDiff: false, - inspect: function() { return 'an error happened'; }, + inspect: function () { return 'an error happened'; } }; var test = makeTest(err); Base.list([test]); @@ -210,5 +210,4 @@ describe('Base reporter', function () { var errOut = stdout.join('\n').trim(); errOut.should.equal('1) test title:\n Error\n foo\n bar'); }); - }); diff --git a/tests/lib/mocha-3.1.2/test/reporters/json.spec.js b/tests/lib/mocha-3.1.2/test/reporters/json.spec.js new file mode 100644 index 0000000000..74151fdc8b --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/reporters/json.spec.js @@ -0,0 +1,63 @@ +'use strict'; + +var Mocha = require('../../'); +var Suite = Mocha.Suite; +var Runner = Mocha.Runner; +var Test = Mocha.Test; + +describe('json reporter', function () { + var suite, runner; + + beforeEach(function () { + var mocha = new Mocha({ + reporter: 'json' + }); + suite = new Suite('JSON suite', 'root'); + runner = new Runner(suite); + /* eslint no-unused-vars: off */ + var mochaReporter = new mocha._reporter(runner); + }); + + it('should have 1 test failure', function (done) { + var testTitle = 'json test 1'; + var error = { message: 'oh shit' }; + + suite.addTest(new Test(testTitle, function (done) { + done(new Error(error.message)); + })); + + runner.run(function (failureCount) { + failureCount.should.be.exactly(1); + runner.should.have.property('testResults'); + runner.testResults.should.have.property('failures'); + runner.testResults.failures.should.be.an.instanceOf(Array); + runner.testResults.failures.should.have.a.lengthOf(1); + + var failure = runner.testResults.failures[0]; + failure.should.have.property('title', testTitle); + failure.err.message.should.equal(error.message); + failure.should.have.properties('err'); + + done(); + }); + }); + + it('should have 1 test pending', function (done) { + var testTitle = 'json test 1'; + + suite.addTest(new Test(testTitle)); + + runner.run(function (failureCount) { + failureCount.should.be.exactly(0); + runner.should.have.property('testResults'); + runner.testResults.should.have.property('pending'); + runner.testResults.pending.should.be.an.instanceOf(Array); + runner.testResults.pending.should.have.a.lengthOf(1); + + var pending = runner.testResults.pending[0]; + pending.should.have.property('title', testTitle); + + done(); + }); + }); +}); diff --git a/tests/lib/mocha-3.1.0/test/reporters/nyan.spec.js b/tests/lib/mocha-3.1.2/test/reporters/nyan.spec.js index 37c9b7c372..07c455efd3 100644 --- a/tests/lib/mocha-3.1.0/test/reporters/nyan.spec.js +++ b/tests/lib/mocha-3.1.2/test/reporters/nyan.spec.js @@ -1,30 +1,31 @@ -var reporters = require('../../').reporters - , NyanCat = reporters.Nyan; +'use strict'; +var reporters = require('../../').reporters; +var NyanCat = reporters.Nyan; describe('nyan face', function () { it('nyan face:(x .x) when "failures" at least one', function () { - var nyanCat = new NyanCat({on: function(){}}); + var nyanCat = new NyanCat({on: function () {}}); nyanCat.stats = { passes: 2, pending: 1, failures: 1 }; - nyanCat.face.call(nyanCat).should.equal('( x .x)'); + nyanCat.face().should.equal('( x .x)'); }); it('expected nyan face:(x .x) when "pending" at least one and no failing', function () { - var nyanCat = new NyanCat({on: function(){}}); + var nyanCat = new NyanCat({on: function () {}}); nyanCat.stats = { passes: 2, pending: 1, failures: 0 }; - nyanCat.face.call(nyanCat).should.equal('( o .o)'); + nyanCat.face().should.equal('( o .o)'); }); it('expected nyan face:(^ .^) when "passing" only', function () { - var nyanCat = new NyanCat({on: function(){}}); + var nyanCat = new NyanCat({on: function () {}}); nyanCat.stats = { passes: 1, pending: 0, failures: 0 }; - nyanCat.face.call(nyanCat).should.equal('( ^ .^)'); + nyanCat.face().should.equal('( ^ .^)'); }); it('nyan face:(- .-) when otherwise', function (done) { - var nyanCat = new NyanCat({on: function(){}}); + var nyanCat = new NyanCat({on: function () {}}); nyanCat.stats = { passes: 0, pending: 0, failures: 0 }; - nyanCat.face.call(nyanCat).should.equal('( - .-)'); + nyanCat.face().should.equal('( - .-)'); done(); }); }); diff --git a/tests/lib/mocha-3.1.0/test/runnable.spec.js b/tests/lib/mocha-3.1.2/test/runnable.spec.js index d6b020a6a1..67cfcca38a 100644 --- a/tests/lib/mocha-3.1.0/test/runnable.spec.js +++ b/tests/lib/mocha-3.1.2/test/runnable.spec.js @@ -1,187 +1,188 @@ -var mocha = require('../') - , utils = mocha.utils - , Runnable = mocha.Runnable - , EventEmitter = require('events').EventEmitter; +'use strict'; -describe('Runnable(title, fn)', function(){ +var mocha = require('../'); +var utils = mocha.utils; +var Runnable = mocha.Runnable; + +describe('Runnable(title, fn)', function () { // For every test we poison the global time-related methods. // runnable.js etc. should keep its own local copy, in order to fix GH-237. // NB: we can't poison global.Date because the normal implementation of // global.setTimeout uses it [1] so if the runnable.js keeps a copy of // global.setTimeout (like it's supposed to), that will blow up. // [1]: https://github.com/joyent/node/blob/7fc835afe362ebd30a0dbec81d3360bd24525222/lib/timers.js#L74 - var setTimeout = global.setTimeout - , setInterval = global.setInterval - , clearTimeout = global.clearTimeout - , clearInterval = global.clearInterval; + var setTimeout = global.setTimeout; + var setInterval = global.setInterval; + var clearTimeout = global.clearTimeout; + var clearInterval = global.clearInterval; - function poisonPill() { + function poisonPill () { throw new Error("Don't use global time-related stuff."); } - beforeEach(function(){ + beforeEach(function () { global.setTimeout = global.setInterval = global.clearTimeout = global.clearInterval = poisonPill; - }) + }); - afterEach(function(){ + afterEach(function () { global.setTimeout = setTimeout; global.setInterval = setInterval; global.clearTimeout = clearTimeout; global.clearInterval = clearInterval; - }) + }); - describe('#timeout(ms)', function(){ - it('should set the timeout', function(){ - var run = new Runnable; - run.timeout(1000) + describe('#timeout(ms)', function () { + it('should set the timeout', function () { + var run = new Runnable(); + run.timeout(1000); run.timeout().should.equal(1000); - }) - }) + }); + }); - describe('#timeout(ms) when ms>2^31', function() { - it('should set disabled', function() { + describe('#timeout(ms) when ms>2^31', function () { + it('should set disabled', function () { var run = new Runnable(); run.timeout(1e10); run.enableTimeouts().should.be.false; }); }); - describe('#enableTimeouts(enabled)', function(){ - it('should set enabled', function(){ - var run = new Runnable; + describe('#enableTimeouts(enabled)', function () { + it('should set enabled', function () { + var run = new Runnable(); run.enableTimeouts(false); run.enableTimeouts().should.equal(false); }); }); - describe('#slow(ms)', function() { + describe('#slow(ms)', function () { var run; - beforeEach(function() { + beforeEach(function () { run = new Runnable(); }); - it('should set the slow threshold', function() { + it('should set the slow threshold', function () { run.slow(100); run.slow().should.equal(100); }); - it('should not set the slow threshold if the parameter is not passed', function() { + it('should not set the slow threshold if the parameter is not passed', function () { run.slow(); run.slow().should.equal(75); }); - it('should not set the slow threshold if the parameter is undefined', function() { + it('should not set the slow threshold if the parameter is undefined', function () { run.slow(undefined); run.slow().should.equal(75); }); - }) + }); - describe('.title', function(){ - it('should be present', function(){ + describe('.title', function () { + it('should be present', function () { new Runnable('foo').title.should.equal('foo'); - }) - }) + }); + }); - describe('when arity >= 1', function(){ - it('should be .async', function(){ - var run = new Runnable('foo', function(done){}); + describe('when arity >= 1', function () { + it('should be .async', function () { + var run = new Runnable('foo', function (done) {}); run.async.should.equal(1); run.sync.should.be.false(); - }) - }) + }); + }); - describe('when arity == 0', function(){ - it('should be .sync', function(){ - var run = new Runnable('foo', function(){}); + describe('when arity == 0', function () { + it('should be .sync', function () { + var run = new Runnable('foo', function () {}); run.async.should.be.equal(0); run.sync.should.be.true(); - }) - }) + }); + }); - describe('#globals', function(){ - it('should allow for whitelisting globals', function(done){ - var test = new Runnable('foo', function(){}); + describe('#globals', function () { + it('should allow for whitelisting globals', function (done) { + var test = new Runnable('foo', function () {}); test.async.should.be.equal(0); test.sync.should.be.true(); test.globals(['foobar']); test.run(done); - }) - }) + }); + }); - describe('#retries(n)', function(){ - it('should set the number of retries', function(){ - var run = new Runnable; + describe('#retries(n)', function () { + it('should set the number of retries', function () { + var run = new Runnable(); run.retries(1); run.retries().should.equal(1); - }) - }) + }); + }); - describe('.run(fn)', function(){ - describe('when .pending', function(){ - it('should not invoke the callback', function(done){ - var test = new Runnable('foo', function(){ + describe('.run(fn)', function () { + describe('when .pending', function () { + it('should not invoke the callback', function (done) { + var test = new Runnable('foo', function () { throw new Error('should not be called'); }); test.pending = true; test.run(done); - }) - }) + }); + }); - describe('when sync', function(){ - describe('without error', function(){ - it('should invoke the callback', function(done){ + describe('when sync', function () { + describe('without error', function () { + it('should invoke the callback', function (done) { var calls = 0; - var test = new Runnable('foo', function(){ + var test = new Runnable('foo', function () { ++calls; }); - test.run(function(err){ + test.run(function (err) { calls.should.equal(1); test.duration.should.be.type('number'); done(err); - }) - }) - }) + }); + }); + }); - describe('when an exception is thrown', function(){ - it('should invoke the callback', function(done){ + describe('when an exception is thrown', function () { + it('should invoke the callback', function (done) { var calls = 0; - var test = new Runnable('foo', function(){ + var test = new Runnable('foo', function () { ++calls; throw new Error('fail'); }); - test.run(function(err){ + test.run(function (err) { calls.should.equal(1); err.message.should.equal('fail'); done(); - }) - }) - }) + }); + }); + }); - describe('when an exception is thrown and is allowed to remain uncaught', function(){ - it('throws an error when it is allowed', function(done) { - var test = new Runnable('foo', function(){ + describe('when an exception is thrown and is allowed to remain uncaught', function () { + it('throws an error when it is allowed', function (done) { + var test = new Runnable('foo', function () { throw new Error('fail'); }); test.allowUncaught = true; - function fail() { - test.run(function(err) {}); + function fail () { + test.run(function () {}); } fail.should.throw('fail'); done(); - }) - }) - }) + }); + }); + }); - describe('when timeouts are disabled', function() { - it('should not error with timeout', function(done) { - var test = new Runnable('foo', function(done){ + describe('when timeouts are disabled', function () { + it('should not error with timeout', function (done) { + var test = new Runnable('foo', function (done) { setTimeout(process.nextTick.bind(undefined, done), 2); }); test.timeout(1); @@ -190,32 +191,31 @@ describe('Runnable(title, fn)', function(){ }); }); - describe('when async', function(){ - describe('without error', function(){ - it('should invoke the callback', function(done){ - var calls = 0; - var test = new Runnable('foo', function(done){ + describe('when async', function () { + describe('without error', function () { + it('should invoke the callback', function (done) { + var test = new Runnable('foo', function (done) { process.nextTick(done); }); test.run(done); - }) - }) + }); + }); - describe('when the callback is invoked several times', function(){ - describe('without an error', function(){ - it('should emit a single "error" event', function(done){ + describe('when the callback is invoked several times', function () { + describe('without an error', function () { + it('should emit a single "error" event', function (done) { var calls = 0; var errCalls = 0; - var test = new Runnable('foo', function(done){ + var test = new Runnable('foo', function (done) { process.nextTick(done); process.nextTick(done); process.nextTick(done); process.nextTick(done); }); - test.on('error', function(err){ + test.on('error', function (err) { ++errCalls; err.message.should.equal('done() called multiple times'); calls.should.equal(1); @@ -223,18 +223,18 @@ describe('Runnable(title, fn)', function(){ done(); }); - test.run(function(){ + test.run(function () { ++calls; }); - }) - }) + }); + }); - describe('with an error', function(){ - it('should emit a single "error" event', function(done){ + describe('with an error', function () { + it('should emit a single "error" event', function (done) { var calls = 0; var errCalls = 0; - var test = new Runnable('foo', function(done){ + var test = new Runnable('foo', function (done) { done(new Error('fail')); process.nextTick(done); done(new Error('fail')); @@ -242,7 +242,7 @@ describe('Runnable(title, fn)', function(){ process.nextTick(done); }); - test.on('error', function(err){ + test.on('error', function (err) { ++errCalls; err.message.should.equal('fail'); calls.should.equal(1); @@ -250,133 +250,129 @@ describe('Runnable(title, fn)', function(){ done(); }); - test.run(function(){ + test.run(function () { ++calls; }); - }) - }) - }) + }); + }); + }); - describe('when an exception is thrown', function(){ - it('should invoke the callback', function(done){ - var calls = 0; - var test = new Runnable('foo', function(done){ + describe('when an exception is thrown', function () { + it('should invoke the callback', function (done) { + var test = new Runnable('foo', function (done) { throw new Error('fail'); - process.nextTick(done); }); - test.run(function(err){ + test.run(function (err) { err.message.should.equal('fail'); done(); }); - }) + }); it('should not throw its own exception if passed a non-object', function (done) { - var test = new Runnable('foo', function(done) { + var test = new Runnable('foo', function (done) { + /* eslint no-throw-literal: off */ throw null; - process.nextTick(done); }); - test.run(function(err) { + test.run(function (err) { err.message.should.equal(utils.undefinedError().message); done(); - }) + }); }); - }) + }); - describe('when an exception is thrown and is allowed to remain uncaught', function(){ - it('throws an error when it is allowed', function(done) { - var test = new Runnable('foo', function(done){ + describe('when an exception is thrown and is allowed to remain uncaught', function () { + it('throws an error when it is allowed', function (done) { + var test = new Runnable('foo', function (done) { throw new Error('fail'); - process.nextTick(done); }); test.allowUncaught = true; - function fail() { - test.run(function(err) {}); + function fail () { + test.run(function () {}); } fail.should.throw('fail'); done(); - }) - }) + }); + }); - describe('when an error is passed', function(){ - it('should invoke the callback', function(done){ - var calls = 0; - var test = new Runnable('foo', function(done){ + describe('when an error is passed', function () { + it('should invoke the callback', function (done) { + var test = new Runnable('foo', function (done) { done(new Error('fail')); }); - test.run(function(err){ + test.run(function (err) { err.message.should.equal('fail'); done(); }); - }) - }) + }); + }); - describe('when done() is invoked with a non-Error object', function(){ - it('should invoke the callback', function(done){ - var test = new Runnable('foo', function(done){ + describe('when done() is invoked with a non-Error object', function () { + it('should invoke the callback', function (done) { + var test = new Runnable('foo', function (done) { done({ error: 'Test error' }); }); - test.run(function(err){ + test.run(function (err) { err.message.should.equal('done() invoked with non-Error: {"error":"Test error"}'); done(); }); - }) - }) + }); + }); - describe('when done() is invoked with a string', function(){ - it('should invoke the callback', function(done){ - var test = new Runnable('foo', function(done){ + describe('when done() is invoked with a string', function () { + it('should invoke the callback', function (done) { + var test = new Runnable('foo', function (done) { done('Test error'); }); - test.run(function(err){ + test.run(function (err) { err.message.should.equal('done() invoked with non-Error: Test error'); done(); }); - }) - }) + }); + }); - it('should allow updating the timeout', function(done){ + it('should allow updating the timeout', function (done) { var callCount = 0; - var increment = function() { + var increment = function () { callCount++; }; - var test = new Runnable('foo', function(done){ + var test = new Runnable('foo', function (done) { setTimeout(increment, 1); setTimeout(increment, 100); }); test.timeout(10); - test.run(function(err){ + test.run(function (err) { err.should.be.ok(); callCount.should.equal(1); done(); }); - }) + }); - it('should allow a timeout of 0') - }) + it('should allow a timeout of 0'); + }); - describe('when fn returns a promise', function(){ - describe('when the promise is fulfilled with no value', function(){ + describe('when fn returns a promise', function () { + describe('when the promise is fulfilled with no value', function () { var fulfilledPromise = { then: function (fulfilled, rejected) { process.nextTick(fulfilled); } }; - it('should invoke the callback', function(done){ - var test = new Runnable('foo', function(){ + it('should invoke the callback', function (done) { + var test = new Runnable('foo', function () { return fulfilledPromise; }); test.run(done); - }) - }) + }); + }); - describe('when the promise is fulfilled with a value', function(){ + describe('when the promise is fulfilled with a value', function () { var fulfilledPromise = { then: function (fulfilled, rejected) { process.nextTick(function () { @@ -385,16 +381,16 @@ describe('Runnable(title, fn)', function(){ } }; - it('should invoke the callback', function(done){ - var test = new Runnable('foo', function(){ + it('should invoke the callback', function (done) { + var test = new Runnable('foo', function () { return fulfilledPromise; }); test.run(done); - }) - }) + }); + }); - describe('when the promise is rejected', function(){ + describe('when the promise is rejected', function () { var expectedErr = new Error('fail'); var rejectedPromise = { then: function (fulfilled, rejected) { @@ -404,19 +400,19 @@ describe('Runnable(title, fn)', function(){ } }; - it('should invoke the callback', function(done){ - var test = new Runnable('foo', function(){ + it('should invoke the callback', function (done) { + var test = new Runnable('foo', function () { return rejectedPromise; }); - test.run(function(err){ + test.run(function (err) { err.should.equal(expectedErr); done(); }); - }) - }) + }); + }); - describe('when the promise is rejected without a reason', function(){ + describe('when the promise is rejected without a reason', function () { var expectedErr = new Error('Promise rejected with no or falsy reason'); var rejectedPromise = { then: function (fulfilled, rejected) { @@ -426,45 +422,45 @@ describe('Runnable(title, fn)', function(){ } }; - it('should invoke the callback', function(done){ - var test = new Runnable('foo', function(){ + it('should invoke the callback', function (done) { + var test = new Runnable('foo', function () { return rejectedPromise; }); - test.run(function(err){ + test.run(function (err) { err.should.eql(expectedErr); done(); }); - }) - }) + }); + }); - describe('when the promise takes too long to settle', function(){ + describe('when the promise takes too long to settle', function () { var foreverPendingPromise = { then: function () { } }; - it('should give the timeout error', function(done){ - var test = new Runnable('foo', function(){ + it('should give the timeout error', function (done) { + var test = new Runnable('foo', function () { return foreverPendingPromise; }); test.timeout(10); - test.run(function(err){ + test.run(function (err) { err.should.be.ok(); done(); }); - }) - }) - }) - - describe('when fn returns a non-promise', function(){ - it('should invoke the callback', function(done){ - var test = new Runnable('foo', function(){ - return { then: "i ran my tests" }; + }); + }); + }); + + describe('when fn returns a non-promise', function () { + it('should invoke the callback', function (done) { + var test = new Runnable('foo', function () { + return { then: 'i ran my tests' }; }); test.run(done); - }) - }) - }) -}) + }); + }); + }); +}); diff --git a/tests/lib/mocha-3.1.0/test/runner.spec.js b/tests/lib/mocha-3.1.2/test/runner.spec.js index 5392d0077b..7c69846ec8 100644 --- a/tests/lib/mocha-3.1.0/test/runner.spec.js +++ b/tests/lib/mocha-3.1.2/test/runner.spec.js @@ -1,23 +1,24 @@ +'use strict'; + var mocha = require('../'); var Suite = mocha.Suite; var Runner = mocha.Runner; var Test = mocha.Test; var Hook = mocha.Hook; var path = require('path'); +var noop = mocha.utils.noop; -function noop() {} - -describe('Runner', function() { +describe('Runner', function () { var suite; var runner; - beforeEach(function() { + beforeEach(function () { suite = new Suite('Suite', 'root'); runner = new Runner(suite); }); - describe('.grep()', function() { - it('should update the runner.total with number of matched tests', function() { + describe('.grep()', function () { + it('should update the runner.total with number of matched tests', function () { suite.addTest(new Test('im a test about lions', noop)); suite.addTest(new Test('im another test about lions', noop)); suite.addTest(new Test('im a test about bears', noop)); @@ -26,7 +27,7 @@ describe('Runner', function() { newRunner.total.should.equal(2); }); - it('should update the runner.total with number of matched tests when inverted', function() { + it('should update the runner.total with number of matched tests when inverted', function () { suite.addTest(new Test('im a test about lions', noop)); suite.addTest(new Test('im another test about lions', noop)); suite.addTest(new Test('im a test about bears', noop)); @@ -36,8 +37,8 @@ describe('Runner', function() { }); }); - describe('.grepTotal()', function() { - it('should return the total number of matched tests', function() { + describe('.grepTotal()', function () { + it('should return the total number of matched tests', function () { suite.addTest(new Test('im a test about lions', noop)); suite.addTest(new Test('im another test about lions', noop)); suite.addTest(new Test('im a test about bears', noop)); @@ -45,7 +46,7 @@ describe('Runner', function() { runner.grepTotal(suite).should.equal(2); }); - it('should return the total number of matched tests when inverted', function() { + it('should return the total number of matched tests when inverted', function () { suite.addTest(new Test('im a test about lions', noop)); suite.addTest(new Test('im another test about lions', noop)); suite.addTest(new Test('im a test about bears', noop)); @@ -54,8 +55,8 @@ describe('Runner', function() { }); }); - describe('.globalProps()', function() { - it('should include common non enumerable globals', function() { + describe('.globalProps()', function () { + it('should include common non enumerable globals', function () { var props = runner.globalProps(); props.should.containEql('setTimeout'); props.should.containEql('clearTimeout'); @@ -66,20 +67,20 @@ describe('Runner', function() { }); }); - describe('.globals()', function() { - it('should default to the known globals', function() { + describe('.globals()', function () { + it('should default to the known globals', function () { runner.globals().length.should.be.above(16); }); - it('should white-list globals', function() { + it('should white-list globals', function () { runner.globals(['foo', 'bar']); runner.globals().should.containEql('foo'); runner.globals().should.containEql('bar'); }); }); - describe('.checkGlobals(test)', function() { - it('should allow variables that match a wildcard', function(done) { + describe('.checkGlobals(test)', function () { + it('should allow variables that match a wildcard', function (done) { runner.globals(['foo*', 'giz*']); global.foo = 'baz'; global.gizmo = 'quux'; @@ -89,11 +90,11 @@ describe('Runner', function() { done(); }); - it('should emit "fail" when a new global is introduced', function(done) { + it('should emit "fail" when a new global is introduced', function (done) { var test = new Test('im a test', noop); runner.checkGlobals(); global.foo = 'bar'; - runner.on('fail', function(_test, err) { + runner.on('fail', function (_test, err) { _test.should.equal(test); err.message.should.equal('global leak detected: foo'); delete global.foo; @@ -102,11 +103,11 @@ describe('Runner', function() { runner.checkGlobals(test); }); - it('should emit "fail" when a single new disallowed global is introduced after a single extra global is allowed', function(done) { + it('should emit "fail" when a single new disallowed global is introduced after a single extra global is allowed', function (done) { var doneCalled = false; runner.globals('good'); global.bad = 1; - runner.on('fail', function() { + runner.on('fail', function () { delete global.bad; done(); doneCalled = true; @@ -117,7 +118,7 @@ describe('Runner', function() { } }); - it('should not fail when a new common global is introduced', function() { + it('should not fail when a new common global is introduced', function () { // verify that the prop isn't enumerable delete global.XMLHttpRequest; global.propertyIsEnumerable('XMLHttpRequest').should.not.be.ok(); @@ -128,7 +129,7 @@ describe('Runner', function() { var newRunner = new Runner(suite); // make the prop enumerable again. - global.XMLHttpRequest = function() {}; + global.XMLHttpRequest = function () {}; global.propertyIsEnumerable('XMLHttpRequest').should.be.ok(); // verify the test hasn't failed. @@ -139,12 +140,12 @@ describe('Runner', function() { delete global.XMLHttpRequest; }); - it('should pluralize the error message when several are introduced', function(done) { + it('should pluralize the error message when several are introduced', function (done) { var test = new Test('im a test', noop); runner.checkGlobals(); global.foo = 'bar'; global.bar = 'baz'; - runner.on('fail', function(_test, err) { + runner.on('fail', function (_test, err) { _test.should.equal(test); err.message.should.equal('global leaks detected: foo, bar'); delete global.foo; @@ -154,7 +155,7 @@ describe('Runner', function() { runner.checkGlobals(test); }); - it('should respect per test whitelisted globals', function() { + it('should respect per test whitelisted globals', function () { var test = new Test('im a test about lions', noop); test.globals(['foo']); @@ -170,7 +171,7 @@ describe('Runner', function() { delete global.foo; }); - it('should respect per test whitelisted globals but still detect other leaks', function(done) { + it('should respect per test whitelisted globals but still detect other leaks', function (done) { var test = new Test('im a test about lions', noop); test.globals(['foo']); @@ -178,7 +179,7 @@ describe('Runner', function() { global.foo = 'bar'; global.bar = 'baz'; - runner.on('fail', function(test, err) { + runner.on('fail', function (test, err) { test.title.should.equal('im a test about lions'); err.message.should.equal('global leak detected: bar'); delete global.foo; @@ -187,32 +188,32 @@ describe('Runner', function() { runner.checkGlobals(test); }); - it('should emit "fail" when a global beginning with d is introduced', function(done) { + it('should emit "fail" when a global beginning with d is introduced', function (done) { global.derp = 'bar'; - runner.on('fail', function() { + runner.on('fail', function () { delete global.derp; done(); }); - runner.checkGlobals(new Test('herp', function() {})); + runner.checkGlobals(new Test('herp', function () {})); }); }); - describe('.hook(name, fn)', function() { - it('should execute hooks after failed test if suite bail is true', function(done) { + describe('.hook(name, fn)', function () { + it('should execute hooks after failed test if suite bail is true', function (done) { runner.fail(new Test('failed test', noop)); suite.bail(true); - suite.afterEach(function() { - suite.afterAll(function() { + suite.afterEach(function () { + suite.afterAll(function () { done(); }); }); - runner.hook('afterEach', function() {}); - runner.hook('afterAll', function() {}); + runner.hook('afterEach', function () {}); + runner.hook('afterAll', function () {}); }); }); - describe('.fail(test, err)', function() { - it('should increment .failures', function() { + describe('.fail(test, err)', function () { + it('should increment .failures', function () { runner.failures.should.equal(0); runner.fail(new Test('one', noop), {}); runner.failures.should.equal(1); @@ -220,16 +221,16 @@ describe('Runner', function() { runner.failures.should.equal(2); }); - it('should set test.state to "failed"', function() { + it('should set test.state to "failed"', function () { var test = new Test('some test', noop); runner.fail(test, 'some error'); test.state.should.equal('failed'); }); - it('should emit "fail"', function(done) { + it('should emit "fail"', function (done) { var test = new Test('some other test', noop); var err = {}; - runner.on('fail', function(test, err) { + runner.on('fail', function (test, err) { test.should.equal(test); err.should.equal(err); done(); @@ -237,62 +238,77 @@ describe('Runner', function() { runner.fail(test, err); }); - it('should emit a helpful message when failed with a string', function(done) { + it('should emit a helpful message when failed with a string', function (done) { var test = new Test('helpful test', noop); var err = 'string'; - runner.on('fail', function(test, err) { + runner.on('fail', function (test, err) { err.message.should.equal('the string "string" was thrown, throw an Error :)'); done(); }); runner.fail(test, err); }); - it('should emit a the error when failed with an Error instance', function(done) { + it('should emit a the error when failed with an Error instance', function (done) { var test = new Test('a test', noop); var err = new Error('an error message'); - runner.on('fail', function(test, err) { + runner.on('fail', function (test, err) { err.message.should.equal('an error message'); done(); }); runner.fail(test, err); }); - it('should emit the error when failed with an Error-like object', function(done) { + it('should emit the error when failed with an Error-like object', function (done) { var test = new Test('a test', noop); var err = { message: 'an error message' }; - runner.on('fail', function(test, err) { + runner.on('fail', function (test, err) { err.message.should.equal('an error message'); done(); }); runner.fail(test, err); }); - it('should emit a helpful message when failed with an Object', function(done) { + it('should emit a helpful message when failed with an Object', function (done) { var test = new Test('a test', noop); var err = { x: 1 }; - runner.on('fail', function(test, err) { + runner.on('fail', function (test, err) { err.message.should.equal('the object {\n "x": 1\n} was thrown, throw an Error :)'); done(); }); runner.fail(test, err); }); - it('should emit a helpful message when failed with an Array', function(done) { + it('should emit a helpful message when failed with an Array', function (done) { var test = new Test('a test', noop); var err = [ 1, 2 ]; - runner.on('fail', function(test, err) { + runner.on('fail', function (test, err) { err.message.should.equal('the array [\n 1\n 2\n] was thrown, throw an Error :)'); done(); }); runner.fail(test, err); }); + + it('should recover if the error stack is not writable', function (done) { + var err = new Error('not evil'); + Object.defineProperty(err, 'stack', { + value: err.stack + }); + var test = new Test('a test', noop); + + runner.on('fail', function (test, err) { + err.message.should.equal('not evil'); + done(); + }); + + runner.fail(test, err); + }); }); - describe('.failHook(hook, err)', function() { - it('should increment .failures', function() { + describe('.failHook(hook, err)', function () { + it('should increment .failures', function () { runner.failures.should.equal(0); runner.failHook(new Test('fail hook 1', noop), {}); runner.failures.should.equal(1); @@ -300,7 +316,7 @@ describe('Runner', function() { runner.failures.should.equal(2); }); - it('should augment hook title with current test title', function() { + it('should augment hook title with current test title', function () { var hook = new Hook('"before each" hook'); hook.ctx = { currentTest: new Test('should behave', noop) }; @@ -312,10 +328,10 @@ describe('Runner', function() { hook.title.should.equal('"before each" hook for "should obey"'); }); - it('should emit "fail"', function(done) { + it('should emit "fail"', function (done) { var hook = new Hook(); var err = {}; - runner.on('fail', function(hook, err) { + runner.on('fail', function (hook, err) { hook.should.equal(hook); err.should.equal(err); done(); @@ -323,7 +339,7 @@ describe('Runner', function() { runner.failHook(hook, err); }); - it('should emit "end" if suite bail is true', function(done) { + it('should emit "end" if suite bail is true', function (done) { var hook = new Hook(); var err = {}; suite.bail(true); @@ -331,11 +347,11 @@ describe('Runner', function() { runner.failHook(hook, err); }); - it('should not emit "end" if suite bail is not true', function(done) { + it('should not emit "end" if suite bail is not true', function (done) { var hook = new Hook(); var err = {}; suite.bail(false); - runner.on('end', function() { + runner.on('end', function () { throw new Error('"end" was emit, but the bail is false'); }); runner.failHook(hook, err); @@ -343,14 +359,14 @@ describe('Runner', function() { }); }); - describe('allowUncaught', function() { - it('should allow unhandled errors to propagate through', function(done) { + describe('allowUncaught', function () { + it('should allow unhandled errors to propagate through', function (done) { var newRunner = new Runner(suite); newRunner.allowUncaught = true; - newRunner.test = new Test('failing test', function() { + newRunner.test = new Test('failing test', function () { throw new Error('allow unhandled errors'); }); - function fail() { + function fail () { newRunner.runTest(); } fail.should.throw('allow unhandled errors'); @@ -358,7 +374,7 @@ describe('Runner', function() { }); }); - describe('stackTrace', function() { + describe('stackTrace', function () { var stack = [ 'AssertionError: foo bar', 'at EventEmitter.<anonymous> (/usr/local/dev/test.js:16:12)', @@ -373,20 +389,20 @@ describe('Runner', function() { 'at processImmediate [as _immediateCallback] (timers.js:321:17)' ]; - describe('shortStackTrace', function() { - beforeEach(function() { + describe('shortStackTrace', function () { + beforeEach(function () { if (path.sep !== '/') { this.skip(); } }); - it('should prettify the stack-trace', function(done) { + it('should prettify the stack-trace', function (done) { var hook = new Hook(); var err = new Error(); // Fake stack-trace err.stack = stack.join('\n'); - runner.on('fail', function(hook, err) { + runner.on('fail', function (hook, err) { err.stack.should.equal(stack.slice(0, 3).join('\n')); done(); }); @@ -394,14 +410,14 @@ describe('Runner', function() { }); }); - describe('longStackTrace', function() { - beforeEach(function() { + describe('longStackTrace', function () { + beforeEach(function () { if (path.sep !== '/') { this.skip(); } }); - it('should display the full stack-trace', function(done) { + it('should display the full stack-trace', function (done) { var hook = new Hook(); var err = new Error(); // Fake stack-trace @@ -409,7 +425,7 @@ describe('Runner', function() { // Add --stack-trace option runner.fullStackTrace = true; - runner.on('fail', function(hook, err) { + runner.on('fail', function (hook, err) { err.stack.should.equal(stack.join('\n')); done(); }); diff --git a/tests/lib/mocha-3.1.2/test/sanity/sanity.spec.js b/tests/lib/mocha-3.1.2/test/sanity/sanity.spec.js new file mode 100644 index 0000000000..b918f1c4f9 --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/sanity/sanity.spec.js @@ -0,0 +1,9 @@ +'use strict'; + +var assert = require('assert'); + +describe('a production installation of Mocha', function () { + it('should be able to execute a test', function () { + assert.ok(true); + }); +}); diff --git a/tests/lib/mocha-3.1.2/test/setup.js b/tests/lib/mocha-3.1.2/test/setup.js new file mode 100644 index 0000000000..0ffe34c7e5 --- /dev/null +++ b/tests/lib/mocha-3.1.2/test/setup.js @@ -0,0 +1,4 @@ +'use strict'; + +global.expect = require('expect.js'); +global.assert = require('assert'); diff --git a/tests/lib/mocha-3.1.0/test/suite.spec.js b/tests/lib/mocha-3.1.2/test/suite.spec.js index 54a1acd667..4cb62dd290 100644 --- a/tests/lib/mocha-3.1.0/test/suite.spec.js +++ b/tests/lib/mocha-3.1.2/test/suite.spec.js @@ -1,11 +1,12 @@ -var mocha = require('../') - , Context = mocha.Context - , Suite = mocha.Suite - , Test = mocha.Test; - -describe('Suite', function(){ - describe('.clone()', function(){ - beforeEach(function(){ +'use strict'; + +var mocha = require('../'); +var Suite = mocha.Suite; +var Test = mocha.Test; + +describe('Suite', function () { + describe('.clone()', function () { + beforeEach(function () { this.suite = new Suite('To be cloned'); this.suite._timeout = 3043; this.suite._slow = 101; @@ -18,120 +19,120 @@ describe('Suite', function(){ this.suite._afterAll.push(5); }); - it('should copy the title', function(){ + it('should copy the title', function () { this.suite.clone().title.should.equal('To be cloned'); }); - it('should copy the timeout value', function(){ + it('should copy the timeout value', function () { this.suite.clone().timeout().should.equal(3043); }); - it('should copy the slow value', function(){ + it('should copy the slow value', function () { this.suite.clone().slow().should.equal(101); }); - it('should copy the bail value', function(){ + it('should copy the bail value', function () { this.suite.clone().bail().should.be.true(); }); - it('should not copy the values from the suites array', function(){ + it('should not copy the values from the suites array', function () { this.suite.clone().suites.should.be.empty(); }); - it('should not copy the values from the tests array', function(){ + it('should not copy the values from the tests array', function () { this.suite.clone().tests.should.be.empty(); }); - it('should not copy the values from the _beforeEach array', function(){ + it('should not copy the values from the _beforeEach array', function () { this.suite.clone()._beforeEach.should.be.empty(); }); - it('should not copy the values from the _beforeAll array', function(){ + it('should not copy the values from the _beforeAll array', function () { this.suite.clone()._beforeAll.should.be.empty(); }); - it('should not copy the values from the _afterEach array', function(){ + it('should not copy the values from the _afterEach array', function () { this.suite.clone()._afterEach.should.be.empty(); }); - it('should not copy the values from the _afterAll array', function(){ + it('should not copy the values from the _afterAll array', function () { this.suite.clone()._afterAll.should.be.empty(); }); }); - describe('.timeout()', function(){ - beforeEach(function(){ + describe('.timeout()', function () { + beforeEach(function () { this.suite = new Suite('A Suite'); }); - describe('when no argument is passed', function(){ - it('should return the timeout value', function(){ + describe('when no argument is passed', function () { + it('should return the timeout value', function () { this.suite.timeout().should.equal(2000); }); }); - describe('when argument is passed', function(){ - it('should return the Suite object', function(){ + describe('when argument is passed', function () { + it('should return the Suite object', function () { var newSuite = this.suite.timeout(5000); newSuite.timeout().should.equal(5000); }); }); }); - describe('.slow()', function(){ - beforeEach(function(){ + describe('.slow()', function () { + beforeEach(function () { this.suite = new Suite('A Suite'); }); - describe('when given a string', function(){ - it('should parse it', function(){ + describe('when given a string', function () { + it('should parse it', function () { this.suite.slow('5 seconds'); this.suite.slow().should.equal(5000); - }) - }) + }); + }); - describe('when no argument is passed', function(){ - it('should return the slow value', function(){ + describe('when no argument is passed', function () { + it('should return the slow value', function () { this.suite.slow().should.equal(75); }); }); - describe('when argument is passed', function(){ - it('should return the Suite object', function(){ + describe('when argument is passed', function () { + it('should return the Suite object', function () { var newSuite = this.suite.slow(5000); newSuite.slow().should.equal(5000); }); }); }); - describe('.bail()', function(){ - beforeEach(function(){ + describe('.bail()', function () { + beforeEach(function () { this.suite = new Suite('A Suite'); - this.suite._bail = true + this.suite._bail = true; }); - describe('when no argument is passed', function(){ - it('should return the bail value', function(){ + describe('when no argument is passed', function () { + it('should return the bail value', function () { this.suite.bail().should.be.true(); }); }); - describe('when argument is passed', function(){ - it('should return the Suite object', function(){ + describe('when argument is passed', function () { + it('should return the Suite object', function () { var newSuite = this.suite.bail(false); newSuite.bail().should.be.false(); }); }); }); - describe('.beforeAll()', function(){ - beforeEach(function(){ + describe('.beforeAll()', function () { + beforeEach(function () { this.suite = new Suite('A Suite'); }); - describe('wraps the passed in function in a Hook', function(){ - it('adds it to _beforeAll', function(){ - var fn = function(){}; + describe('wraps the passed in function in a Hook', function () { + it('adds it to _beforeAll', function () { + var fn = function () {}; this.suite.beforeAll(fn); this.suite._beforeAll.should.have.length(1); @@ -140,8 +141,8 @@ describe('Suite', function(){ beforeAllItem.fn.should.equal(fn); }); - it('appends title to hook', function(){ - var fn = function(){}; + it('appends title to hook', function () { + var fn = function () {}; this.suite.beforeAll('test', fn); this.suite._beforeAll.should.have.length(1); @@ -149,7 +150,7 @@ describe('Suite', function(){ beforeAllItem.title.should.equal('"before all" hook: test'); beforeAllItem.fn.should.equal(fn); - function namedFn(){} + function namedFn () {} this.suite.beforeAll(namedFn); this.suite._beforeAll.should.have.length(2); beforeAllItem = this.suite._beforeAll[1]; @@ -159,14 +160,14 @@ describe('Suite', function(){ }); }); - describe('.afterAll()', function(){ - beforeEach(function(){ + describe('.afterAll()', function () { + beforeEach(function () { this.suite = new Suite('A Suite'); }); - describe('wraps the passed in function in a Hook', function(){ - it('adds it to _afterAll', function(){ - var fn = function(){}; + describe('wraps the passed in function in a Hook', function () { + it('adds it to _afterAll', function () { + var fn = function () {}; this.suite.afterAll(fn); this.suite._afterAll.should.have.length(1); @@ -174,8 +175,8 @@ describe('Suite', function(){ afterAllItem.title.should.match(/^"after all" hook/); afterAllItem.fn.should.equal(fn); }); - it('appends title to hook', function(){ - var fn = function(){}; + it('appends title to hook', function () { + var fn = function () {}; this.suite.afterAll('test', fn); this.suite._afterAll.should.have.length(1); @@ -183,7 +184,7 @@ describe('Suite', function(){ beforeAllItem.title.should.equal('"after all" hook: test'); beforeAllItem.fn.should.equal(fn); - function namedFn(){} + function namedFn () {} this.suite.afterAll(namedFn); this.suite._afterAll.should.have.length(2); beforeAllItem = this.suite._afterAll[1]; @@ -193,14 +194,14 @@ describe('Suite', function(){ }); }); - describe('.beforeEach()', function(){ - beforeEach(function(){ + describe('.beforeEach()', function () { + beforeEach(function () { this.suite = new Suite('A Suite'); }); - describe('wraps the passed in function in a Hook', function(){ - it('adds it to _beforeEach', function(){ - var fn = function(){}; + describe('wraps the passed in function in a Hook', function () { + it('adds it to _beforeEach', function () { + var fn = function () {}; this.suite.beforeEach(fn); this.suite._beforeEach.should.have.length(1); @@ -209,8 +210,8 @@ describe('Suite', function(){ beforeEachItem.fn.should.equal(fn); }); - it('appends title to hook', function(){ - var fn = function(){}; + it('appends title to hook', function () { + var fn = function () {}; this.suite.beforeEach('test', fn); this.suite._beforeEach.should.have.length(1); @@ -218,7 +219,7 @@ describe('Suite', function(){ beforeAllItem.title.should.equal('"before each" hook: test'); beforeAllItem.fn.should.equal(fn); - function namedFn(){} + function namedFn () {} this.suite.beforeEach(namedFn); this.suite._beforeEach.should.have.length(2); beforeAllItem = this.suite._beforeEach[1]; @@ -228,14 +229,14 @@ describe('Suite', function(){ }); }); - describe('.afterEach()', function(){ - beforeEach(function(){ + describe('.afterEach()', function () { + beforeEach(function () { this.suite = new Suite('A Suite'); }); - describe('wraps the passed in function in a Hook', function(){ - it('adds it to _afterEach', function(){ - var fn = function(){}; + describe('wraps the passed in function in a Hook', function () { + it('adds it to _afterEach', function () { + var fn = function () {}; this.suite.afterEach(fn); this.suite._afterEach.should.have.length(1); @@ -244,8 +245,8 @@ describe('Suite', function(){ afterEachItem.fn.should.equal(fn); }); - it('appends title to hook', function(){ - var fn = function(){}; + it('appends title to hook', function () { + var fn = function () {}; this.suite.afterEach('test', fn); this.suite._afterEach.should.have.length(1); @@ -253,7 +254,7 @@ describe('Suite', function(){ beforeAllItem.title.should.equal('"after each" hook: test'); beforeAllItem.fn.should.equal(fn); - function namedFn(){} + function namedFn () {} this.suite.afterEach(namedFn); this.suite._afterEach.should.have.length(2); beforeAllItem = this.suite._afterEach[1]; @@ -263,8 +264,8 @@ describe('Suite', function(){ }); }); - describe('.addSuite()', function(){ - beforeEach(function(){ + describe('.addSuite()', function () { + beforeEach(function () { this.first = new Suite('First suite'); this.first.timeout(4002); this.first.slow(200); @@ -272,26 +273,26 @@ describe('Suite', function(){ this.first.addSuite(this.second); }); - it('sets the parent on the added Suite', function(){ + it('sets the parent on the added Suite', function () { this.second.parent.should.equal(this.first); }); - it('copies the timeout value', function(){ + it('copies the timeout value', function () { this.second.timeout().should.equal(4002); }); - it('copies the slow value', function(){ + it('copies the slow value', function () { this.second.slow().should.equal(200); }); - it('adds the suite to the suites collection', function(){ + it('adds the suite to the suites collection', function () { this.first.suites.should.have.length(1); this.first.suites[0].should.equal(this.second); }); - it('treats suite as pending if its parent is pending', function(){ - this.first.pending = true - this.second.isPending.should.be.true + it('treats suite as pending if its parent is pending', function () { + this.first.pending = true; + this.second.isPending.should.be.true; }); }); @@ -317,19 +318,19 @@ describe('Suite', function(){ // }); // }); - describe('.fullTitle()', function(){ - beforeEach(function(){ + describe('.fullTitle()', function () { + beforeEach(function () { this.suite = new Suite('A Suite'); }); - describe('when there is no parent', function(){ - it('returns the suite title', function(){ + describe('when there is no parent', function () { + it('returns the suite title', function () { this.suite.fullTitle().should.equal('A Suite'); }); }); - describe('when there is a parent', function(){ - it('returns the combination of parent\'s and suite\'s title', function(){ + describe('when there is a parent', function () { + it('returns the combination of parent\'s and suite\'s title', function () { var parentSuite = new Suite('I am a parent'); parentSuite.addSuite(this.suite); this.suite.fullTitle().should.equal('I am a parent A Suite'); @@ -337,19 +338,19 @@ describe('Suite', function(){ }); }); - describe('.total()', function(){ - beforeEach(function(){ + describe('.total()', function () { + beforeEach(function () { this.suite = new Suite('A Suite'); }); - describe('when there are no nested suites or tests', function(){ - it('should return 0', function(){ + describe('when there are no nested suites or tests', function () { + it('should return 0', function () { this.suite.total().should.equal(0); }); }); - describe('when there are several tests in the suite', function(){ - it('should return the number', function(){ + describe('when there are several tests in the suite', function () { + it('should return the number', function () { this.suite.addTest(new Test('a child test')); this.suite.addTest(new Test('another child test')); this.suite.total().should.equal(2); @@ -357,83 +358,83 @@ describe('Suite', function(){ }); }); - describe('.eachTest(fn)', function(){ - beforeEach(function(){ + describe('.eachTest(fn)', function () { + beforeEach(function () { this.suite = new Suite('A Suite'); }); - describe('when there are no nested suites or tests', function(){ - it('should return 0', function(){ + describe('when there are no nested suites or tests', function () { + it('should return 0', function () { var n = 0; - function fn(){ n++; } + function fn () { n++; } this.suite.eachTest(fn); n.should.equal(0); }); }); - describe('when there are several tests in the suite', function(){ - it('should return the number', function(){ + describe('when there are several tests in the suite', function () { + it('should return the number', function () { this.suite.addTest(new Test('a child test')); this.suite.addTest(new Test('another child test')); var n = 0; - function fn(){ n++; } + function fn () { n++; } this.suite.eachTest(fn); n.should.equal(2); }); }); - describe('when there are several levels of nested suites', function(){ - it('should return the number', function(){ + describe('when there are several levels of nested suites', function () { + it('should return the number', function () { this.suite.addTest(new Test('a child test')); var suite = new Suite('a child suite'); suite.addTest(new Test('a test in a child suite')); this.suite.addSuite(suite); var n = 0; - function fn(){ n++; } + function fn () { n++; } this.suite.eachTest(fn); n.should.equal(2); }); }); - }); - describe('initialization', function() { - it('should throw an error if the title isn\'t a string', function() { - (function() { + describe('initialization', function () { + /* eslint no-new: off */ + it('should throw an error if the title isn\'t a string', function () { + (function () { new Suite(undefined, 'root'); }).should.throw(); - (function() { - new Suite(function(){}, 'root'); + (function () { + new Suite(function () {}, 'root'); }).should.throw(); }); - it('should not throw if the title is a string', function() { - (function() { + it('should not throw if the title is a string', function () { + (function () { new Suite('Bdd suite', 'root'); }).should.not.throw(); }); }); }); -describe('Test', function() { - describe('initialization', function() { - it('should throw an error if the title isn\'t a string', function() { - (function() { - new Test(function(){}); +describe('Test', function () { + describe('initialization', function () { + it('should throw an error if the title isn\'t a string', function () { + (function () { + new Test(function () {}); }).should.throw(); - (function() { - new Test(undefined, function(){}); + (function () { + new Test(undefined, function () {}); }).should.throw(); }); - it('should not throw if the title is a string', function() { - (function() { - new Test('test-case', function(){}); + it('should not throw if the title is a string', function () { + (function () { + new Test('test-case', function () {}); }).should.not.throw(); }); }); -});
\ No newline at end of file +}); diff --git a/tests/lib/mocha-3.1.0/test/test.spec.js b/tests/lib/mocha-3.1.2/test/test.spec.js index 5dea7919db..73c09b3b06 100644 --- a/tests/lib/mocha-3.1.0/test/test.spec.js +++ b/tests/lib/mocha-3.1.2/test/test.spec.js @@ -1,11 +1,12 @@ -var mocha = require('../') - , should = require('should') - , Context = mocha.Context - , Test = mocha.Test; +'use strict'; -describe('Test', function(){ - describe('.clone()', function(){ - beforeEach(function(){ +var mocha = require('../'); +var should = require('should'); +var Test = mocha.Test; + +describe('Test', function () { + describe('.clone()', function () { + beforeEach(function () { this._test = new Test('To be cloned', function () {}); this._test._timeout = 3043; this._test._slow = 101; @@ -17,59 +18,59 @@ describe('Test', function(){ this._test.file = 'bar'; }); - it('should copy the title', function(){ + it('should copy the title', function () { this._test.clone().title.should.equal('To be cloned'); }); - it('should copy the timeout value', function(){ + it('should copy the timeout value', function () { this._test.clone().timeout().should.equal(3043); }); - it('should copy the slow value', function(){ + it('should copy the slow value', function () { this._test.clone().slow().should.equal(101); }); - it('should copy the enableTimeouts value', function(){ + it('should copy the enableTimeouts value', function () { this._test.clone().enableTimeouts().should.be.true(); }); - it('should copy the retries value', function(){ + it('should copy the retries value', function () { this._test.clone().retries().should.equal(3); }); - it('should copy the currentRetry value', function(){ + it('should copy the currentRetry value', function () { this._test.clone().currentRetry().should.equal(1); }); - it('should copy the globals value', function(){ + it('should copy the globals value', function () { this._test.clone().globals().should.not.be.empty(); }); - it('should copy the parent value', function(){ + it('should copy the parent value', function () { this._test.clone().parent.should.equal('foo'); }); - it('should copy the file value', function(){ + it('should copy the file value', function () { this._test.clone().file.should.equal('bar'); }); }); - describe('.isPending()', function(){ - beforeEach(function(){ + describe('.isPending()', function () { + beforeEach(function () { this._test = new Test('Is it skipped', function () {}); }); - it('should not be pending by default', function(){ + it('should not be pending by default', function () { should(this._test.isPending()).not.be.ok(); }); - it('should be pending when marked as such', function(){ + it('should be pending when marked as such', function () { this._test.pending = true; should(this._test.isPending()).be.ok(); }); - it('should be pending when its parent is pending', function(){ - this._test.parent = { isPending: function(){ return true } }; + it('should be pending when its parent is pending', function () { + this._test.parent = { isPending: function () { return true; } }; should(this._test.isPending()).be.ok(); }); }); diff --git a/tests/lib/mocha-3.1.0/test/utils.spec.js b/tests/lib/mocha-3.1.2/test/utils.spec.js index 4683809ae6..ccfd861a78 100644 --- a/tests/lib/mocha-3.1.0/test/utils.spec.js +++ b/tests/lib/mocha-3.1.2/test/utils.spec.js @@ -1,86 +1,88 @@ +'use strict'; + var mocha = require('..'); var utils = mocha.utils; var path = require('path'); var JSON = require('json3'); -describe('utils', function() { - describe('.clean()', function() { +describe('utils', function () { + describe('.clean()', function () { var clean = utils.clean; - it('should remove the wrapping function declaration', function() { + it('should remove the wrapping function declaration', function () { clean('function (one, two, three) {\n//code\n}').should.equal('//code'); }); - it('should handle newlines in the function declaration', function() { + it('should handle newlines in the function declaration', function () { clean('function (one, two, three)\n {\n//code\n}').should.equal('//code'); }); - it('should remove space character indentation from the function body', function() { + it('should remove space character indentation from the function body', function () { clean(' //line1\n //line2').should.equal('//line1\n //line2'); }); - it('should remove tab character indentation from the function body', function() { + it('should remove tab character indentation from the function body', function () { clean('\t//line1\n\t\t//line2').should.equal('//line1\n\t//line2'); }); - it('should handle functions with tabs in their declarations', function() { + it('should handle functions with tabs in their declarations', function () { clean('function\t(\t)\t{\n//code\n}').should.equal('//code'); }); - it('should handle named functions without space after name', function() { + it('should handle named functions without space after name', function () { clean('function withName() {\n//code\n}').should.equal('//code'); }); - it('should handle named functions with space after name', function() { + it('should handle named functions with space after name', function () { clean('function withName () {\n//code\n}').should.equal('//code'); }); - it('should handle functions with no space between the end and the closing brace', function() { + it('should handle functions with no space between the end and the closing brace', function () { clean('function() {/*code*/}').should.equal('/*code*/'); }); - it('should handle functions with parentheses in the same line', function() { + it('should handle functions with parentheses in the same line', function () { clean('function() { if (true) { /* code */ } }').should.equal('if (true) { /* code */ }'); }); - it('should handle empty functions', function() { + it('should handle empty functions', function () { clean('function() {}').should.equal(''); }); }); - describe('.isBuffer()', function() { + describe('.isBuffer()', function () { var isBuffer = utils.isBuffer; - it('should test if object is a Buffer', function() { + it('should test if object is a Buffer', function () { isBuffer(new Buffer([0x01])).should.equal(true); isBuffer({}).should.equal(false); - }) + }); }); - describe('.map()', function() { + describe('.map()', function () { var map = utils.map; - it('should behave same as Array.prototype.map', function() { + it('should behave same as Array.prototype.map', function () { var arr = [1, 2, 3]; map(arr, JSON.stringify).should.eql(arr.map(JSON.stringify)); }); - it('should call the callback with 3 arguments[currentValue, index, array]', function() { + it('should call the callback with 3 arguments[currentValue, index, array]', function () { var index = 0; - map([1, 2, 3], function(e, i, arr) { + map([1, 2, 3], function (e, i, arr) { e.should.equal(arr[index]); i.should.equal(index++); - }) + }); }); - it('should apply with the given scope', function() { + it('should apply with the given scope', function () { var scope = {}; - map(['a', 'b', 'c'], function() { + map(['a', 'b', 'c'], function () { this.should.equal(scope); }, scope); }); }); - describe('.parseQuery()', function() { + describe('.parseQuery()', function () { var parseQuery = utils.parseQuery; - it('should get queryString and return key-value object', function() { + it('should get queryString and return key-value object', function () { parseQuery('?foo=1&bar=2&baz=3').should.eql({ foo: '1', bar: '2', @@ -92,11 +94,11 @@ describe('utils', function() { r2: 'm{2}', r3: '^co.*' }); - }) + }); }); - describe('.stackTraceFilter()', function() { - describe('on node', function() { + describe('.stackTraceFilter()', function () { + describe('on node', function () { var filter = utils.stackTraceFilter(); describe('on POSIX OS', function () { @@ -187,7 +189,7 @@ describe('utils', function() { }); }); - describe('on Windows', function() { + describe('on Windows', function () { before(function () { if (path.sep === '/') { this.skip(); @@ -215,44 +217,46 @@ describe('utils', function() { }); }); - describe('on browser', function() { + describe('on browser', function () { var filter; - before(function() { + before(function () { global.document = true; global.location = { href: 'localhost:3000/foo/bar/index.html' }; filter = utils.stackTraceFilter(); }); - it('does not strip out other bower_components', function() { - var stack = ['Error: failed' - , 'at assert (index.html:11:26)' - , 'at Context.<anonymous> (test.js:17:18)' - , 'at bower_components/should/should.js:4827:7' - , 'at next (bower_components/should/should.js:4766:23)' - , 'at components/should/5.0.0/should.js:4827:7' - , 'at next (components/should/5.0.0/should.js:4766:23)' - , 'at Runner.require.register.Runner.runTest (node_modules/mocha.js:4892:10)' - , 'at localhost:3000/foo/bar/node_modules/mocha.js:4970:12' - , 'at next (node_modules/mocha.js:4817:14)']; - filter(stack.join('\n')).should.equal(stack.slice(0,7).join('\n')); + it('does not strip out other bower_components', function () { + var stack = [ + 'Error: failed', + 'at assert (index.html:11:26)', + 'at Context.<anonymous> (test.js:17:18)', + 'at bower_components/should/should.js:4827:7', + 'at next (bower_components/should/should.js:4766:23)', + 'at components/should/5.0.0/should.js:4827:7', + 'at next (components/should/5.0.0/should.js:4766:23)', + 'at Runner.require.register.Runner.runTest (node_modules/mocha.js:4892:10)', + 'at localhost:3000/foo/bar/node_modules/mocha.js:4970:12', + 'at next (node_modules/mocha.js:4817:14)' + ]; + filter(stack.join('\n')).should.equal(stack.slice(0, 7).join('\n')); }); - after(function() { + after(function () { delete global.document; delete global.location; }); }); }); - describe('.isPromise', function() { - it('should return true if the value is Promise-ish', function() { - utils.isPromise({then: function() {}}).should.be.true; + describe('.isPromise', function () { + it('should return true if the value is Promise-ish', function () { + utils.isPromise({then: function () {}}).should.be.true; }); - it('should return false if the value is not an object', function() { + it('should return false if the value is not an object', function () { utils.isPromise(1).should.be.false; }); - it('should return false if the value is an object w/o a "then" function', function() { + it('should return false if the value is an object w/o a "then" function', function () { utils.isPromise({}).should.be.false; }); }); |