vest 4.3.3 → 4.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- import{createContext as t}from"context";export{enforce}from"n4s";var n,e=(n=0,function(){return"".concat(n++)});function r(t){return String(t)===t}function u(t){return function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];return!t.apply(void 0,n)}}var i=Object.assign;function o(t){var n=Number(t);return!(isNaN(parseFloat(String(t)))||isNaN(Number(t))||!isFinite(n))}function s(t,n){return o(t)&&o(n)&&Number(t)===Number(n)}function a(t,n){return o(t)&&o(n)&&Number(t)>Number(n)}function c(t){function n(e,u){var i=n.get(e);return i?i[1]:(u=u(),r.unshift([e.concat(),u]),a(r.length,t)&&(r.length=t),u)}function e(t){return r.findIndex((function(n){var e=n[0];return s(t.length,e.length)&&t.every((function(t,n){return t===e[n]}))}))}void 0===t&&(t=1);var r=[];return n.invalidate=function(t){-1<(t=e(t))&&r.splice(t,1)},n.get=function(t){return r[e(t)]||null},n}var f=u((function(t){return null===t}));function l(t){return"function"==typeof t}function p(t){for(var n=[],e=1;e<arguments.length;e++)n[e-1]=arguments[e];return l(t)?t.apply(void 0,n):t}function d(t,n){var e;return null!==(e=p(t))&&void 0!==e?e:n}function v(t){return(t=[].concat(t))[t.length-1]}function h(t,n){for(var e=[],r=0;r<t.length;r++){var u=t[r];Array.isArray(u)?e.push(h(u,n)):(u=n(u),f(u)&&e.push(u))}return e}function E(t){return[].concat(t).reduce((function(t,n){return Array.isArray(n)?t.concat(E(n)):[].concat(t).concat(n)}),[])}function g(t,n){var e=0;for(n=n.slice(0,-1);e<n.length;e++){var r=n[e];t[r]=d(t[r],[]),t=t[r]}return t}function N(){function t(){n=[0]}var n=[];return t(),{addLevel:function(){n.push(0)},cursorAt:function(){return v(n)},getCursor:function(){return[].concat(n)},next:function(){return n[n.length-1]++,v(n)},removeLevel:function(){n.pop()},reset:t}}var m,y=m||(m={});y[y.DEFAULT=0]="DEFAULT",y[y.SUITE=1]="SUITE",y[y.EACH=2]="EACH",y[y.SKIP_WHEN=3]="SKIP_WHEN",y[y.OMIT_WHEN=4]="OMIT_WHEN",y[y.GROUP=5]="GROUP";var R,b=R||(R={});b[b.ALL=0]="ALL",b[b.EAGER=1]="EAGER";var C=t((function(t,n){return n?null:i({},{exclusion:{tests:{},groups:{}},inclusion:{},isolate:{type:m.DEFAULT,keys:{current:{},prev:{}}},mode:[R.ALL],testCursor:N()},t)}));function S(){return C.useX().stateRef}function O(t){return S().optionalFields()[0][t]}function T(t,n){(0,S().optionalFields()[1])((function(e){var r;return i(e,((r={})[t]=p(n,e[t]),r))}))}function A(t){var n;return null===(n=O(t))||void 0===n?void 0:n[0]}function _(){I((function(t){return t}))}function I(t){(0,S().testObjects()[1])((function(n){return{prev:n.prev,current:[].concat(t(n.current))}}))}function k(){return F().filter((function(t){return t.isPending()}))}var L=c();function F(){var t=S().testObjects()[0].current;return L([t],(function(){return E(t)}))}var U,W=U||(U={});W.Error="error",W.Warning="warning";var P=function(){function t(t,n,r){var u=void 0===r?{}:r;r=u.message;var i=u.groupName;u=u.key,this.key=null,this.id=e(),this.severity=U.Error,this.status=G,this.fieldName=t,this.testFn=n,i&&(this.groupName=i),r&&(this.message=r),u&&(this.key=u)}return t.prototype.run=function(){try{var t=this.testFn()}catch(n){t=n,void 0===this.message&&r(t)&&(this.message=n),t=!1}return!1===t&&this.fail(),t},t.prototype.setStatus=function(t){this.isFinalStatus()&&t!==K||(this.status=t)},t.prototype.warns=function(){return this.severity===U.Warning},t.prototype.setPending=function(){this.setStatus(j)},t.prototype.fail=function(){this.setStatus(this.warns()?D:w)},t.prototype.done=function(){this.isFinalStatus()||this.setStatus(x)},t.prototype.warn=function(){this.severity=U.Warning},t.prototype.isFinalStatus=function(){return this.hasFailures()||this.isCanceled()||this.isPassing()},t.prototype.skip=function(t){this.isPending()&&!t||this.setStatus(X)},t.prototype.cancel=function(){this.setStatus(H),_()},t.prototype.reset=function(){this.status=G,_()},t.prototype.omit=function(){this.setStatus(K)},t.prototype.valueOf=function(){return!this.isFailing()},t.prototype.hasFailures=function(){return this.isFailing()||this.isWarning()},t.prototype.isNonActionable=function(){return this.isSkipped()||this.isOmitted()||this.isCanceled()},t.prototype.isPending=function(){return this.statusEquals(j)},t.prototype.isTested=function(){return this.hasFailures()||this.isPassing()},t.prototype.isOmitted=function(){return this.statusEquals(K)},t.prototype.isUntested=function(){return this.statusEquals(G)},t.prototype.isFailing=function(){return this.statusEquals(w)},t.prototype.isCanceled=function(){return this.statusEquals(H)},t.prototype.isSkipped=function(){return this.statusEquals(X)},t.prototype.isPassing=function(){return this.statusEquals(x)},t.prototype.isWarning=function(){return this.statusEquals(D)},t.prototype.statusEquals=function(t){return this.status===t},t}(),G="UNTESTED",X="SKIPPED",w="FAILED",D="WARNING",x="PASSING",j="PENDING",H="CANCELED",K="OMITTED";function M(t,n){if(!t)throw n instanceof String?n.valueOf():Error(n?p(n):n)}function q(t){function n(t,n,u){return r.references.push(),e(t,p(n,u)),function(){return[r.references[t],function(n){return e(t,p(n,r.references[t]))}]}}function e(n,e){var i=r.references[n];r.references[n]=e,l(n=u[n][1])&&n(e,i),l(t)&&t()}var r={references:[]},u=[];return{registerStateKey:function(t,e){var r=u.length;return u.push([t,e]),n(r,t)},reset:function(){var t=r.references;r.references=[],u.forEach((function(e,r){return n(r,e[0],t[r])}))}}}function B(t,n){var e=n.suiteId;return n=n.suiteName,{optionalFields:t.registerStateKey((function(){return{}})),suiteId:t.registerStateKey(e),suiteName:t.registerStateKey(n),testCallbacks:t.registerStateKey((function(){return{fieldCallbacks:{},doneCallbacks:[]}})),testObjects:t.registerStateKey((function(t){return{prev:t?t.current:[],current:[]}}))}}function V(t){return null==t}function Y(t){setTimeout((function(){throw Error(t)}),0)}function J(){return C.useX().testCursor.getCursor()}function z(){return C.useX().testCursor.next()}function Q(t,n){t=void 0===(t=t.type)?m.DEFAULT:t,M(l(n));var e={current:{},prev:{}},r=J();return C.run({isolate:{type:t,keys:e}},(function(){C.useX().testCursor.addLevel(),e.prev=function(){var t=S().testObjects()[0].prev;return[].concat(g(t,J())).reduce((function(t,n){return n instanceof P&&!V(n.key)?(t[n.key]=n,t):t}),{})}(),I((function(t){return g(t,r)[v(r)]=[],t}));var t=n();return C.useX().testCursor.removeLevel(),z(),t}))}var Z,$=Z||(Z={});$.WARNINGS="warnings",$.ERRORS="errors";var tt,nt=tt||(tt={});function et(t){return!t||("number"==typeof t?0===t:Object.prototype.hasOwnProperty.call(t,"length")?s(t.length,0):"object"==typeof t&&s((t=Object.keys(t)).length,0))}nt.ERROR_COUNT="errorCount",nt.WARN_COUNT="warnCount";var rt=u(et);function ut(t,n){return!(!n||t.fieldName!==n)}function it(t,n){return F().some((function(e){return e.hasFailures()?n&&!ut(e,n)?e=!1:(e=e.warns(),e=t===Z.WARNINGS==!!e):e=!1,e}))}function ot(t){if(t)var n,e=!0===(null===(n=O(t))||void 0===n?void 0:n[1]);else e=!1;return!!e||!it(Z.ERRORS,t)&&(!et(e=F())&&!function(t){return rt(k().filter((function(n){return!(t&&!ut(n,t))&&!0!==A(n.fieldName)})))}(t)&&function(t){return F().every((function(n){return!(!t||ut(n,t))||(!0===A(n.fieldName)||n.isTested()||n.isOmitted())}))}(t))}function st(){var t=C.useX().summary;return M(t),t}function at(t,n){function e(t){o[t===Z.ERRORS?tt.ERROR_COUNT:tt.WARN_COUNT]++,u&&(o[t]=(o[t]||[]).concat(u))}var r=n.fieldName,u=n.message;t[r]=t[r]||i({errorCount:0,warnCount:0,testCount:0},{errors:[],warnings:[]});var o=t[r];return n.isNonActionable()||(t[r].testCount++,n.isFailing()?e(Z.ERRORS):n.isWarning()&&e(Z.WARNINGS)),o}function ct(t,n,e){var r;return(null===(r=null==t?void 0:t[e])||void 0===r?void 0:r[n])||[]}function ft(t,n){var e,r={};for(e in t)r[e]=t[e][n]||[];return r}function lt(t){return dt(Z.ERRORS,t)}function pt(t){return dt(Z.WARNINGS,t)}function dt(t,n){var e=st().tests;return n?ct(e,t,n):ft(e,t)}function vt(t,n){return Et(t,Z.ERRORS,n)}function ht(t,n){return Et(t,Z.WARNINGS,n)}function Et(t,n,e){return t=st().groups[t],e?ct(t,n,e):ft(t,n)}function gt(t){return mt(tt.ERROR_COUNT,t)}function Nt(t){return mt(tt.WARN_COUNT,t)}function mt(t,n){var e,r=st();return a(n?null===(e=r.tests[n])||void 0===e?void 0:e[t]:r[t],0)}function yt(t,n){return bt(Z.ERRORS,t,n)}function Rt(t,n){return bt(Z.WARNINGS,t,n)}function bt(t,n,e){var r,u,i=st();if(t=t===Z.ERRORS?tt.ERROR_COUNT:tt.WARN_COUNT,!(n=i.groups[n]))return!1;if(e)return a(null===(r=n[e])||void 0===r?void 0:r[t],0);for(var o in n)if(a(null===(u=n[o])||void 0===u?void 0:u[t],0))return!0;return!1}function Ct(t){var n,e=st();return t?!(null===(n=e.tests[t])||void 0===n||!n.valid):e.valid}var St=c(1);function Ot(){var t=F(),n={stateRef:S()};return St([t],C.bind(n,(function(){var t=function(){var t=F(),n=i({errorCount:0,warnCount:0,testCount:0},{groups:{},tests:{},valid:!1});return t.reduce((function(t,n){var e=t.tests;e[n.fieldName]=at(e,n),e[n.fieldName].valid=!1!==e[n.fieldName].valid&&ot(n.fieldName),e=t.groups;var r=n.groupName;return r&&(e[r]=e[r]||{},e[r][n.fieldName]=at(e[r],n)),t}),n),n.valid=ot(),function(t){for(var n in t.tests)t.errorCount+=t.tests[n].errorCount,t.warnCount+=t.tests[n].warnCount,t.testCount+=t.tests[n].testCount;return t}(n)}(),n=S().suiteName()[0],e={summary:t};return i(t,{getErrors:C.bind(e,lt),getErrorsByGroup:C.bind(e,vt),getWarnings:C.bind(e,pt),getWarningsByGroup:C.bind(e,ht),hasErrors:C.bind(e,gt),hasErrorsByGroup:C.bind(e,yt),hasWarnings:C.bind(e,Nt),hasWarningsByGroup:C.bind(e,Rt),isValid:C.bind(e,Ct),suiteName:n})})))}function Tt(t){var n=k();return!et(n)&&(t?n.some((function(n){return ut(n,t)})):rt(n))}var At=c(20);function _t(){var t=F(),n={stateRef:S()};return At([t],C.bind(n,(function(){return i({},Ot(),{done:C.bind(n,Lt)})})))}function It(t,n,e){return!(l(t)&&(!n||e.tests[n]&&!et(e.tests[n].testCount)))}function kt(t){return!(Tt()&&(!t||Tt(t)))}function Lt(){function t(){return r(Ot())}for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];var r=(n=n.reverse())[0];return n=n[1],e=_t(),It(r,n,e)?e:kt(n)?(t(),e):(Ft(t,n),e)}function Ft(t,n){(0,S().testCallbacks()[1])((function(e){return n?e.fieldCallbacks[n]=(e.fieldCallbacks[n]||[]).concat(t):e.doneCallbacks.push(t),e}))}function Ut(t){return t.forEach((function(t){return t()}))}function Wt(){var t=function(){var t={};return{emit:function(n,e){(t[n]||[]).forEach((function(t){t(e)}))},on:function(n,e){return t[n]=(t[n]||[]).concat(e),{off:function(){t[n]=(t[n]||[]).filter((function(t){return t!==e}))}}}}}();return t.on(Gt.TEST_COMPLETED,(function(n){if(!n.isCanceled()){n.done(),n=n.fieldName;var e=S().testCallbacks()[0].fieldCallbacks;n&&!Tt(n)&&Array.isArray(e[n])&&Ut(e[n]),Tt()||t.emit(Gt.ALL_RUNNING_TESTS_FINISHED)}})),t.on(Gt.SUITE_CALLBACK_DONE_RUNNING,(function(){!function(){function t(t){n[t.fieldName]&&(t.omit(),T(t.fieldName,(function(t){return[t[0],!0]})))}if(!et(S().optionalFields()[0])){var n={};I((function(e){return h(e,(function(e){if(Object.prototype.hasOwnProperty.call(n,e.fieldName))t(e);else{var r=A(e.fieldName);l(r)&&(n[e.fieldName]=r(),t(e))}return e}))}))}}()})),t.on(Gt.ALL_RUNNING_TESTS_FINISHED,(function(){Ut(S().testCallbacks()[0].doneCallbacks)})),t.on(Gt.REMOVE_FIELD,(function(t){F().forEach((function(n){ut(n,t)&&(n.cancel(),function(t){I((function(n){return h(n,(function(n){return t!==n?n:null}))}))}(n))}))})),t.on(Gt.RESET_FIELD,(function(t){F().forEach((function(n){ut(n,t)&&n.reset()}))})),t}function Pt(){var t=C.useX();return M(t.bus),t.bus}var Gt,Xt=Gt||(Gt={});function wt(t){return xt(0,"tests",t)}function Dt(t){return xt(1,"tests",t)}function xt(t,n,e){var u=C.useX("hook called outside of a running suite.");e&&[].concat(e).forEach((function(e){r(e)&&(u.exclusion[n][e]=0===t)}))}function jt(t){for(var n in t)if(!0===t[n])return!0;return!1}function Ht(){var t,n=C.useX().exclusion;for(t in n.groups)if(n.groups[t])return!0;return!1}function Kt(t){return"Wrong arguments passed to group. Group ".concat(t,".")}function Mt(t,n,e){if(e||2===arguments.length)for(var r,u=0,i=n.length;u<i;u++)!r&&u in n||(r||(r=Array.prototype.slice.call(n,0,u)),r[u]=n[u]);return t.concat(r||Array.prototype.slice.call(n))}function qt(t){var n=t.asyncTest,e=t.message;if(n&&l(n.then)){var u=Pt().emit,i=S(),o=C.bind({stateRef:i},(function(){_(),u(Gt.TEST_COMPLETED,t)}));i=C.bind({stateRef:i},(function(n){t.isCanceled()||(t.message=r(n)?n:e,t.fail(),o())}));try{n.then(o,i)}catch(t){i()}}}function Bt(t){var n=S().testObjects()[0].prev;if(et(n))return Vt(t),t;var e=J();if(n=g(n,e)[v(e)],!V(t.key)){n=t.key,(e=C.useX().isolate.keys.prev[n])&&(t=e),e=t;var r=C.useX().isolate.keys.current;return V(r[n])?r[n]=e:Y('Encountered the same test key "'.concat(n,"\" twice. This may lead to tests overriding each other's results, or to tests being unexpectedly omitted.")),Vt(t),t}return!rt(e=n)||e.fieldName===t.fieldName&&e.groupName===t.groupName||(C.useX().isolate.type===m.EACH||Y("Vest Critical Error: Tests called in different order than previous run.\n expected: ".concat(n.fieldName,"\n received: ").concat(t.fieldName,'\n This can happen on one of two reasons:\n 1. You\'re using if/else statements to conditionally select tests. Instead, use "skipWhen".\n 2. You are iterating over a list of tests, and their order changed. Use "each" and a custom key prop so that Vest retains their state.')),function(){var t=S().testObjects(),n=t[1],e=t[0].prev;t=g(e,J());var r=C.useX().testCursor.cursorAt();t.splice(r),n((function(t){return{prev:e,current:t.current}}))}(),n=null),Vt(t=d(n,t)),t}function Vt(t){var n=J();I((function(e){return g(e,n)[v(n)]=t,e}))}function Yt(t){var n=R.EAGER;if(n=!(C.useX().mode[0]!==n||!it(Z.ERRORS,t.fieldName)))return t.skip(),Bt(t),z(),t;if(n=Bt(t),C.useX().omitted)return n.omit(),z(),n;if(function(t){var n=t.fieldName;if(t=t.groupName,C.useX().skipped)return!0;var e=C.useX(),r=e.exclusion;e=e.inclusion;var u=r.tests,i=u[n];if(!1===i)return!0;if(i=!0===i,t){var o=C.useX().exclusion.groups;if(o=Object.prototype.hasOwnProperty.call(o,t)?!1===o[t]:Ht())return!0;if(!0===r.groups[t])return!(i||!jt(u)&&!1!==u[n])}return!!(t=!!Ht()&&!t)||!i&&!!jt(u)&&!p(e[n])}(t))return n.skip(!!C.useX().skipped),z(),n;if(t!==n&&n.fieldName===t.fieldName&&n.groupName===t.groupName&&n.isPending()&&n.cancel(),Vt(t),z(),t.isUntested()){n=Pt();var e=function(t){return C.run({currentTest:t},(function(){return t.run()}))}(t);try{e&&l(e.then)?(t.asyncTest=e,t.setPending(),qt(t)):n.emit(Gt.TEST_COMPLETED,t)}catch(n){throw Error("Unexpected error encountered during test registration.\n Test Object: ".concat(JSON.stringify(t),".\n Error: ").concat(n,"."))}}else(n=t.asyncTest)&&l(n.then)&&(t.setPending(),qt(t));return t}function Jt(t){for(var n=[],e=1;e<arguments.length;e++)n[e-1]=arguments[e];var u=l(n[1])?n:Mt([void 0],n,!0);n=u[0],e=u[1],u=u[2],M(r(t),Qt("fieldName","string")),M(l(e),Qt("Test callback","function"));var i=C.useX();return Yt(n=new P(t,e,{message:n,groupName:i.groupName,key:u}))}Xt.TEST_COMPLETED="test_completed",Xt.ALL_RUNNING_TESTS_FINISHED="all_running_tests_finished",Xt.REMOVE_FIELD="remove_field",Xt.RESET_FIELD="reset_field",Xt.SUITE_CALLBACK_DONE_RUNNING="suite_callback_done_running",wt.group=function(t){return xt(0,"groups",t)},Dt.group=function(t){return xt(1,"groups",t)};var zt=i(Jt,{memo:function(t){var n=c(10);return function(e){for(var r=[],u=1;u<arguments.length;u++)r[u-1]=arguments[u];u=C.useX().testCursor.cursorAt();var i=(r=r.reverse())[0],o=r[1],s=r[2];return u=[S().suiteId()[0],e,u].concat(i),null===(r=n.get(u))?n(u,(function(){return t(e,s,o)})):r[1].isCanceled()?(n.invalidate(u),n(u,(function(){return t(e,s,o)}))):Yt(r[1])}}(Jt)});function Qt(t,n){return"Incompatible params passed to test function. ".concat(t," must be a ").concat(n)}var Zt="4.3.3";function $t(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];var r=(t=t.reverse())[0];t=t[1],M(l(r),"vest.create: Expected callback to be a function.");var u=Wt(),o=q();return t={stateRef:B(o,{suiteId:e(),suiteName:t}),bus:u},i(C.bind(t,(function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return o.reset(),Q({type:m.SUITE},(function(){r.apply(void 0,t)})),u.emit(Gt.SUITE_CALLBACK_DONE_RUNNING),_t()})),{get:C.bind(t,Ot),remove:C.bind(t,(function(t){u.emit(Gt.REMOVE_FIELD,t)})),reset:o.reset,resetField:C.bind(t,(function(t){u.emit(Gt.RESET_FIELD,t)}))})}function tn(t,n){M(l(n),"each callback must be a function"),Q({type:m.EACH},(function(){t.forEach((function(t,e){n(t,e)}))}))}function nn(){var t=R.EAGER;C.useX().mode[0]=t}function en(t,n){M(r(t),Kt("name must be a string")),M(l(n),Kt("callback must be a function")),Q({type:m.GROUP},(function(){C.run({groupName:t},n)}))}function rn(t){var n=C.useX(),e=n.inclusion;return n=n.exclusion,M(r(t)),e[t]=d(n.tests[t],!0),{when:function(n){var e=C.useX(),u=e.exclusion;e.inclusion[t]=function(){return Object.prototype.hasOwnProperty.call(u.tests,t)?d(u.tests[t],!0):r(n)?!!u.tests[n]:p(n,p(Ot))}}}}function un(t,n){Q({type:m.OMIT_WHEN},(function(){C.run({omitted:!!C.useX().omitted||p(t,p(Ot))},(function(){return n()}))}))}function on(t){if(Array.isArray(t)||r(t))[].concat(t).forEach((function(t){T(t,[!0,!1])}));else for(var n in t)T(n,[t[n],!1])}function sn(t,n){Q({type:m.SKIP_WHEN},(function(){C.run({skipped:!!C.useX().skipped||p(t,p(Ot))},(function(){return n()}))}))}function an(){var t=C.useX("warn hook called outside of a running suite.");M(t.currentTest,"warn called outside of a test."),t.currentTest.warn()}export{Zt as VERSION,C as context,$t as create,tn as each,nn as eager,en as group,rn as include,un as omitWhen,wt as only,on as optional,Dt as skip,sn as skipWhen,zt as test,an as warn};
1
+ import{createContext as t}from"context";export{enforce}from"n4s";var n,e=(n=0,function(){return"".concat(n++)});function r(t){return String(t)===t}function u(t){return function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];return!t.apply(void 0,n)}}var i=Object.assign;function o(t){var n=Number(t);return!(isNaN(parseFloat(String(t)))||isNaN(Number(t))||!isFinite(n))}function s(t,n){return o(t)&&o(n)&&Number(t)===Number(n)}function a(t,n){return o(t)&&o(n)&&Number(t)>Number(n)}function c(t){function n(e,u){var i=n.get(e);return i?i[1]:(u=u(),r.unshift([e.concat(),u]),a(r.length,t)&&(r.length=t),u)}function e(t){return r.findIndex((function(n){var e=n[0];return s(t.length,e.length)&&t.every((function(t,n){return t===e[n]}))}))}void 0===t&&(t=1);var r=[];return n.invalidate=function(t){-1<(t=e(t))&&r.splice(t,1)},n.get=function(t){return r[e(t)]||null},n}var f=u((function(t){return null===t}));function l(t){return"function"==typeof t}function p(t){for(var n=[],e=1;e<arguments.length;e++)n[e-1]=arguments[e];return l(t)?t.apply(void 0,n):t}function d(t,n){var e;return null!==(e=p(t))&&void 0!==e?e:n}function v(t){return(t=[].concat(t))[t.length-1]}function h(t,n){for(var e=[],r=0;r<t.length;r++){var u=t[r];Array.isArray(u)?e.push(h(u,n)):(u=n(u),f(u)&&e.push(u))}return e}function E(t){return[].concat(t).reduce((function(t,n){return Array.isArray(n)?t.concat(E(n)):[].concat(t).concat(n)}),[])}function g(t,n){var e=0;for(n=n.slice(0,-1);e<n.length;e++){var r=n[e];t[r]=d(t[r],[]),t=t[r]}return t}var N,m=N||(N={});m[m.DEFAULT=0]="DEFAULT",m[m.SUITE=1]="SUITE",m[m.EACH=2]="EACH",m[m.SKIP_WHEN=3]="SKIP_WHEN",m[m.OMIT_WHEN=4]="OMIT_WHEN",m[m.GROUP=5]="GROUP";var y,R=y||(y={});function b(t,n){if(!t)throw n instanceof String?n.valueOf():Error(n?p(n):n)}function S(){var t=0;return{current:function(){return t},next:function(){t++}}}function O(t){return null==t}function T(t){setTimeout((function(){throw Error(t)}),0)}function C(t,n){t=void 0===(t=t.type)?N.DEFAULT:t,b(l(n));var e=I(t,A());return t=_.run({isolate:e},(function(){return e.keys.prev=function(){var t=k().testObjects()[0].prev;return[].concat(g(t,A())).reduce((function(t,n){return n instanceof j&&!O(n.key)?(t[n.key]=n,t):t}),{})}(),P((function(t){var n=e.path;return g(t,n)[v(n)]=[],t})),n()})),_.useX().isolate.cursor.next(),t}function A(){var t=_.useX().isolate;return t.path.concat(t.cursor.current())}function I(t,n){return void 0===n&&(n=[]),{cursor:S(),keys:{current:{},prev:{}},path:n,type:t}}R[R.ALL=0]="ALL",R[R.EAGER=1]="EAGER";var _=t((function(t,n){return n?null:i({},{exclusion:{tests:{},groups:{}},inclusion:{},isolate:I(N.DEFAULT),mode:[y.ALL]},t)}));function k(){return _.useX().stateRef}function F(t){return k().optionalFields()[0][t]}function L(t,n){(0,k().optionalFields()[1])((function(e){var r;return i(e,((r={})[t]=p(n,e[t]),r))}))}function U(t){var n;return null===(n=F(t))||void 0===n?void 0:n[0]}function G(){P((function(t){return t}))}function P(t){(0,k().testObjects()[1])((function(n){return{prev:n.prev,current:[].concat(t(n.current))}}))}function W(){return D().filter((function(t){return t.isPending()}))}var w=c();function D(){var t=k().testObjects()[0].current;return w([t],(function(){return E(t)}))}var X,x=X||(X={});x.Error="error",x.Warning="warning";var j=function(){function t(t,n,r){var u=void 0===r?{}:r;r=u.message;var i=u.groupName;u=u.key,this.key=null,this.id=e(),this.severity=X.Error,this.status=H,this.fieldName=t,this.testFn=n,i&&(this.groupName=i),r&&(this.message=r),u&&(this.key=u)}return t.prototype.run=function(){try{var t=this.testFn()}catch(n){t=n,void 0===this.message&&r(t)&&(this.message=n),t=!1}return!1===t&&this.fail(),t},t.prototype.setStatus=function(t){this.isFinalStatus()&&t!==J||(this.status=t)},t.prototype.warns=function(){return this.severity===X.Warning},t.prototype.setPending=function(){this.setStatus(V)},t.prototype.fail=function(){this.setStatus(this.warns()?q:M)},t.prototype.done=function(){this.isFinalStatus()||this.setStatus(B)},t.prototype.warn=function(){this.severity=X.Warning},t.prototype.isFinalStatus=function(){return this.hasFailures()||this.isCanceled()||this.isPassing()},t.prototype.skip=function(t){this.isPending()&&!t||this.setStatus(K)},t.prototype.cancel=function(){this.setStatus(Y),G()},t.prototype.reset=function(){this.status=H,G()},t.prototype.omit=function(){this.setStatus(J)},t.prototype.valueOf=function(){return!this.isFailing()},t.prototype.hasFailures=function(){return this.isFailing()||this.isWarning()},t.prototype.isNonActionable=function(){return this.isSkipped()||this.isOmitted()||this.isCanceled()},t.prototype.isPending=function(){return this.statusEquals(V)},t.prototype.isTested=function(){return this.hasFailures()||this.isPassing()},t.prototype.isOmitted=function(){return this.statusEquals(J)},t.prototype.isUntested=function(){return this.statusEquals(H)},t.prototype.isFailing=function(){return this.statusEquals(M)},t.prototype.isCanceled=function(){return this.statusEquals(Y)},t.prototype.isSkipped=function(){return this.statusEquals(K)},t.prototype.isPassing=function(){return this.statusEquals(B)},t.prototype.isWarning=function(){return this.statusEquals(q)},t.prototype.statusEquals=function(t){return this.status===t},t}(),H="UNTESTED",K="SKIPPED",M="FAILED",q="WARNING",B="PASSING",V="PENDING",Y="CANCELED",J="OMITTED";function z(t){function n(t,n,u){return r.references.push(),e(t,p(n,u)),function(){return[r.references[t],function(n){return e(t,p(n,r.references[t]))}]}}function e(n,e){var i=r.references[n];r.references[n]=e,l(n=u[n][1])&&n(e,i),l(t)&&t()}var r={references:[]},u=[];return{registerStateKey:function(t,e){var r=u.length;return u.push([t,e]),n(r,t)},reset:function(){var t=r.references;r.references=[],u.forEach((function(e,r){return n(r,e[0],t[r])}))}}}function Q(t,n){var e=n.suiteId;return n=n.suiteName,{optionalFields:t.registerStateKey((function(){return{}})),suiteId:t.registerStateKey(e),suiteName:t.registerStateKey(n),testCallbacks:t.registerStateKey((function(){return{fieldCallbacks:{},doneCallbacks:[]}})),testObjects:t.registerStateKey((function(t){return{prev:t?t.current:[],current:[]}}))}}var Z,$=Z||(Z={});$.WARNINGS="warnings",$.ERRORS="errors";var tt,nt=tt||(tt={});function et(t){return t===Z.ERRORS?tt.ERROR_COUNT:tt.WARN_COUNT}function rt(t){return!t||("number"==typeof t?0===t:Object.prototype.hasOwnProperty.call(t,"length")?s(t.length,0):"object"==typeof t&&s((t=Object.keys(t)).length,0))}nt.ERROR_COUNT="errorCount",nt.WARN_COUNT="warnCount";var ut=u(rt);function it(t,n){return!(!n||t.fieldName!==n)}var ot=u((function(t,n){return t.groupName===n}));function st(t,n){return D().some((function(e){return at(e,t,n)}))}function at(t,n,e){return(e=!t.hasFailures()||e&&!it(t,e))||(t=t.warns(),e=n===Z.WARNINGS!=!!t),!e}function ct(t){return!!ft(t)||!st(Z.ERRORS,t)&&(!rt(D())&&!function(t){return ut(W().filter((function(n){return lt(n,t)})))}(t)&&function(t){return D().every((function(n){return!(!t||it(n,t))||pt(n,t)}))}(t))}function ft(t){return!!t&&!0===(null===(n=F(t))||void 0===n?void 0:n[1]);var n}function lt(t,n){return!(n&&!it(t,n))&&!0!==U(t.fieldName)}function pt(t,n){return!(!n||it(t,n))||(!0===U(t.fieldName)||t.isTested()||t.isOmitted())}function dt(){var t=_.useX().summary;return b(t),t}function vt(){var t=D(),n=i({errorCount:0,warnCount:0,testCount:0},{groups:{},tests:{},valid:!1});return t.reduce((function(t,n){var e=t.tests;e[n.fieldName]=ht(e,n),e[n.fieldName].valid=!1!==e[n.fieldName].valid&&ct(n.fieldName);var r=t.groups,u=n.groupName;return u&&(r[u]=r[u]||{},r[u][n.fieldName]=ht(r[u],n),e=r[u][n.fieldName],!1===r[u][n.fieldName].valid?n=!1:n=!!ft(n=n.fieldName)||!function(t,n,e){return D().some((function(r){return!ot(r,n)&&at(r,t,e)}))}(Z.ERRORS,u,n)&&!function(t,n){return ut(W().filter((function(e){return!ot(e,t)&&lt(e,n)})))}(u,n)&&function(t,n){return D().every((function(e){return!!ot(e,t)||pt(e,n)}))}(u,n),e.valid=n),t}),n),n.valid=ct(),function(t){for(var n in t.tests)t.errorCount+=t.tests[n].errorCount,t.warnCount+=t.tests[n].warnCount,t.testCount+=t.tests[n].testCount;return t}(n)}function ht(t,n){function e(t){var n=et(t);o[n]++,u&&(o[t]=(o[t]||[]).concat(u))}var r=n.fieldName,u=n.message;t[r]=t[r]||i({errorCount:0,warnCount:0,testCount:0},{errors:[],warnings:[]});var o=t[r];return n.isNonActionable()||(t[r].testCount++,n.isFailing()?e(Z.ERRORS):n.isWarning()&&e(Z.WARNINGS)),o}function Et(t,n,e){var r;return(null===(r=null==t?void 0:t[e])||void 0===r?void 0:r[n])||[]}function gt(t,n){var e,r={},u=et(n);for(e in t)a(t[e][u],0)&&(r[e]=t[e][n]||[]);return r}function Nt(t){return yt(Z.ERRORS,t)}function mt(t){return yt(Z.WARNINGS,t)}function yt(t,n){var e=dt().tests;return n?Et(e,t,n):gt(e,t)}function Rt(t,n){return St(t,Z.ERRORS,n)}function bt(t,n){return St(t,Z.WARNINGS,n)}function St(t,n,e){return t=dt().groups[t],e?Et(t,n,e):gt(t,n)}function Ot(t){return Ct(tt.ERROR_COUNT,t)}function Tt(t){return Ct(tt.WARN_COUNT,t)}function Ct(t,n){var e,r=dt();return a(n?null===(e=r.tests[n])||void 0===e?void 0:e[t]:r[t],0)}function At(t,n){return _t(Z.ERRORS,t,n)}function It(t,n){return _t(Z.WARNINGS,t,n)}function _t(t,n,e){var r,u,i=dt();if(t=et(t),!(n=i.groups[n]))return!1;if(e)return a(null===(r=n[e])||void 0===r?void 0:r[t],0);for(var o in n)if(a(null===(u=n[o])||void 0===u?void 0:u[t],0))return!0;return!1}function kt(t){var n=dt();return t?!!Lt(n.tests,t):n.valid}function Ft(t,n){if(!(t=dt().groups[t]))return!1;if(n)return Lt(t,n);for(var e in t)if(!Lt(t,e))return!1;return!0}function Lt(t,n){var e;return!(null===(e=t[n])||void 0===e||!e.valid)}var Ut=c(1);function Gt(){var t=D(),n={stateRef:k()};return Ut([t],_.bind(n,(function(){var t=vt(),n=k().suiteName()[0],e={summary:t};return i(t,{getErrors:_.bind(e,Nt),getErrorsByGroup:_.bind(e,Rt),getWarnings:_.bind(e,mt),getWarningsByGroup:_.bind(e,bt),hasErrors:_.bind(e,Ot),hasErrorsByGroup:_.bind(e,At),hasWarnings:_.bind(e,Tt),hasWarningsByGroup:_.bind(e,It),isValid:_.bind(e,kt),isValidByGroup:_.bind(e,Ft),suiteName:n})})))}function Pt(t){var n=W();return!rt(n)&&(t?n.some((function(n){return it(n,t)})):ut(n))}var Wt=c(20);function wt(){var t=D(),n={stateRef:k()};return Wt([t],_.bind(n,(function(){return i({},Gt(),{done:_.bind(n,xt)})})))}function Dt(t,n,e){return!(l(t)&&(!n||e.tests[n]&&!rt(e.tests[n].testCount)))}function Xt(t){return!(Pt()&&(!t||Pt(t)))}function xt(){function t(){return r(Gt())}for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];var r=(n=n.reverse())[0];return n=n[1],e=wt(),Dt(r,n,e)?e:Xt(n)?(t(),e):(jt(t,n),e)}function jt(t,n){(0,k().testCallbacks()[1])((function(e){return n?e.fieldCallbacks[n]=(e.fieldCallbacks[n]||[]).concat(t):e.doneCallbacks.push(t),e}))}function Ht(t){return t.forEach((function(t){return t()}))}function Kt(){var t=function(){var t={};return{emit:function(n,e){(t[n]||[]).forEach((function(t){t(e)}))},on:function(n,e){return t[n]=(t[n]||[]).concat(e),{off:function(){t[n]=(t[n]||[]).filter((function(t){return t!==e}))}}}}}();return t.on(qt.TEST_COMPLETED,(function(n){if(!n.isCanceled()){n.done(),n=n.fieldName;var e=k().testCallbacks()[0].fieldCallbacks;n&&!Pt(n)&&Array.isArray(e[n])&&Ht(e[n]),Pt()||t.emit(qt.ALL_RUNNING_TESTS_FINISHED)}})),t.on(qt.SUITE_CALLBACK_DONE_RUNNING,(function(){!function(){function t(t){n[t.fieldName]&&(t.omit(),L(t.fieldName,(function(t){return[t[0],!0]})))}if(!rt(k().optionalFields()[0])){var n={};P((function(e){return h(e,(function(e){if(Object.prototype.hasOwnProperty.call(n,e.fieldName))t(e);else{var r=U(e.fieldName);l(r)&&(n[e.fieldName]=r(),t(e))}return e}))}))}}()})),t.on(qt.ALL_RUNNING_TESTS_FINISHED,(function(){Ht(k().testCallbacks()[0].doneCallbacks)})),t.on(qt.REMOVE_FIELD,(function(t){D().forEach((function(n){it(n,t)&&(n.cancel(),function(t){P((function(n){return h(n,(function(n){return t!==n?n:null}))}))}(n))}))})),t.on(qt.RESET_FIELD,(function(t){D().forEach((function(n){it(n,t)&&n.reset()}))})),t}function Mt(){var t=_.useX();return b(t.bus),t.bus}var qt,Bt=qt||(qt={});function Vt(t){return Jt(0,"tests",t)}function Yt(t){return Jt(1,"tests",t)}function Jt(t,n,e){var u=_.useX("hook called outside of a running suite.");e&&[].concat(e).forEach((function(e){r(e)&&(u.exclusion[n][e]=0===t)}))}function zt(t){for(var n in t)if(!0===t[n])return!0;return!1}function Qt(){var t,n=_.useX().exclusion;for(t in n.groups)if(n.groups[t])return!0;return!1}function Zt(t){return"Wrong arguments passed to group. Group ".concat(t,".")}function $t(t,n,e){if(e||2===arguments.length)for(var r,u=0,i=n.length;u<i;u++)!r&&u in n||(r||(r=Array.prototype.slice.call(n,0,u)),r[u]=n[u]);return t.concat(r||Array.prototype.slice.call(n))}function tn(t){var n=t.asyncTest,e=t.message;if(n&&l(n.then)){var u=Mt().emit,i=k(),o=_.bind({stateRef:i},(function(){G(),u(qt.TEST_COMPLETED,t)}));i=_.bind({stateRef:i},(function(n){t.isCanceled()||(t.message=r(n)?n:e,t.fail(),o())}));try{n.then(o,i)}catch(t){i()}}}function nn(t){var n=k().testObjects()[0].prev;if(rt(n))return en(t),t;var e=A();if(n=g(n,e)[v(e)],!O(t.key)){n=t.key,(e=_.useX().isolate.keys.prev[n])&&(t=e),e=t;var r=_.useX().isolate.keys.current;return O(r[n])?r[n]=e:T('Encountered the same test key "'.concat(n,"\" twice. This may lead to tests overriding each other's results, or to tests being unexpectedly omitted.")),en(t),t}return!ut(e=n)||e.fieldName===t.fieldName&&e.groupName===t.groupName||(_.useX().isolate.type===N.EACH||T("Vest Critical Error: Tests called in different order than previous run.\n expected: ".concat(n.fieldName,"\n received: ").concat(t.fieldName,'\n This can happen on one of two reasons:\n 1. You\'re using if/else statements to conditionally select tests. Instead, use "skipWhen".\n 2. You are iterating over a list of tests, and their order changed. Use "each" and a custom key prop so that Vest retains their state.')),function(){var t=k().testObjects(),n=t[1],e=t[0].prev;t=g(e,A());var r=_.useX().isolate.cursor.current();t.splice(r),n((function(t){return{prev:e,current:t.current}}))}(),n=null),en(t=d(n,t)),t}function en(t){var n=A();P((function(e){return g(e,n)[v(n)]=t,e}))}function rn(t){var n=_.useX().isolate.cursor,e=y.EAGER;if(e=!(_.useX().mode[0]!==e||!st(Z.ERRORS,t.fieldName)))return t.skip(),nn(t),n.next(),t;if(e=nn(t),_.useX().omitted)return e.omit(),n.next(),e;if(function(t){var n=t.fieldName;if(t=t.groupName,_.useX().skipped)return!0;var e=_.useX(),r=e.exclusion;e=e.inclusion;var u=r.tests,i=u[n];if(!1===i)return!0;if(i=!0===i,t){var o=_.useX().exclusion.groups;if(o=Object.prototype.hasOwnProperty.call(o,t)?!1===o[t]:Qt())return!0;if(!0===r.groups[t])return!(i||!zt(u)&&!1!==u[n])}return!!(t=!!Qt()&&!t)||!i&&!!zt(u)&&!p(e[n])}(t))return e.skip(!!_.useX().skipped),n.next(),e;if(t!==e&&e.fieldName===t.fieldName&&e.groupName===t.groupName&&e.isPending()&&e.cancel(),en(t),t.isUntested()){e=Mt();var r=function(t){return _.run({currentTest:t},(function(){return t.run()}))}(t);try{r&&l(r.then)?(t.asyncTest=r,t.setPending(),tn(t)):e.emit(qt.TEST_COMPLETED,t)}catch(n){throw Error("Unexpected error encountered during test registration.\n Test Object: ".concat(JSON.stringify(t),".\n Error: ").concat(n,"."))}}else(e=t.asyncTest)&&l(e.then)&&(t.setPending(),tn(t));return n.next(),t}function un(t){for(var n=[],e=1;e<arguments.length;e++)n[e-1]=arguments[e];var u=l(n[1])?n:$t([void 0],n,!0);n=u[0],e=u[1],u=u[2],b(r(t),sn("fieldName","string")),b(l(e),sn("Test callback","function"));var i=_.useX();return rn(n=new j(t,e,{message:n,groupName:i.groupName,key:u}))}Bt.TEST_COMPLETED="test_completed",Bt.ALL_RUNNING_TESTS_FINISHED="all_running_tests_finished",Bt.REMOVE_FIELD="remove_field",Bt.RESET_FIELD="reset_field",Bt.SUITE_CALLBACK_DONE_RUNNING="suite_callback_done_running",Vt.group=function(t){return Jt(0,"groups",t)},Yt.group=function(t){return Jt(1,"groups",t)};var on=i(un,{memo:function(t){var n=c(10);return function(e){for(var r=[],u=1;u<arguments.length;u++)r[u-1]=arguments[u];u=_.useX().isolate.cursor.current();var i=(r=r.reverse())[0],o=r[1],s=r[2];return u=[k().suiteId()[0],e,u].concat(i),null===(r=n.get(u))?n(u,(function(){return t(e,s,o)})):r[1].isCanceled()?(n.invalidate(u),n(u,(function(){return t(e,s,o)}))):rn(r[1])}}(un)});function sn(t,n){return"Incompatible params passed to test function. ".concat(t," must be a ").concat(n)}var an="4.4.0";function cn(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];var r=(t=t.reverse())[0];t=t[1],b(l(r),"vest.create: Expected callback to be a function.");var u=Kt(),o=z();return t={stateRef:Q(o,{suiteId:e(),suiteName:t}),bus:u},i(_.bind(t,(function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return o.reset(),C({type:N.SUITE},(function(){r.apply(void 0,t)})),u.emit(qt.SUITE_CALLBACK_DONE_RUNNING),wt()})),{get:_.bind(t,Gt),remove:_.bind(t,(function(t){u.emit(qt.REMOVE_FIELD,t)})),reset:o.reset,resetField:_.bind(t,(function(t){u.emit(qt.RESET_FIELD,t)}))})}function fn(t,n){b(l(n),"each callback must be a function"),C({type:N.EACH},(function(){t.forEach((function(t,e){n(t,e)}))}))}function ln(){var t=y.EAGER;_.useX().mode[0]=t}function pn(t,n){b(r(t),Zt("name must be a string")),b(l(n),Zt("callback must be a function")),C({type:N.GROUP},(function(){_.run({groupName:t},n)}))}function dn(t){var n=_.useX(),e=n.inclusion;return n=n.exclusion,b(r(t)),e[t]=d(n.tests[t],!0),{when:function(n){var e=_.useX(),u=e.exclusion;e.inclusion[t]=function(){return Object.prototype.hasOwnProperty.call(u.tests,t)?d(u.tests[t],!0):r(n)?!!u.tests[n]:p(n,p(Gt))}}}}function vn(t,n){C({type:N.OMIT_WHEN},(function(){_.run({omitted:!!_.useX().omitted||p(t,p(Gt))},(function(){return n()}))}))}function hn(t){if(Array.isArray(t)||r(t))[].concat(t).forEach((function(t){L(t,[!0,!1])}));else for(var n in t)L(n,[t[n],!1])}function En(t,n){C({type:N.SKIP_WHEN},(function(){_.run({skipped:!!_.useX().skipped||p(t,p(Gt))},(function(){return n()}))}))}function gn(){var t=_.useX("warn hook called outside of a running suite.");b(t.currentTest,"warn called outside of a test."),t.currentTest.warn()}export{an as VERSION,_ as context,cn as create,fn as each,ln as eager,pn as group,dn as include,vn as omitWhen,Vt as only,hn as optional,Yt as skip,En as skipWhen,on as test,gn as warn};
@@ -453,7 +453,7 @@
453
453
  return null;
454
454
  }
455
455
 
456
- /*! *****************************************************************************
456
+ /******************************************************************************
457
457
  Copyright (c) Microsoft Corporation.
458
458
 
459
459
  Permission to use, copy, modify, and/or distribute this software for any
@@ -507,7 +507,7 @@
507
507
  return null;
508
508
  }
509
509
 
510
- /*! *****************************************************************************
510
+ /******************************************************************************
511
511
  Copyright (c) Microsoft Corporation.
512
512
 
513
513
  Permission to use, copy, modify, and/or distribute this software for any
@@ -453,7 +453,7 @@
453
453
  return null;
454
454
  }
455
455
 
456
- /*! *****************************************************************************
456
+ /******************************************************************************
457
457
  Copyright (c) Microsoft Corporation.
458
458
 
459
459
  Permission to use, copy, modify, and/or distribute this software for any
@@ -438,7 +438,7 @@
438
438
  return null;
439
439
  }
440
440
 
441
- /*! *****************************************************************************
441
+ /******************************************************************************
442
442
  Copyright (c) Microsoft Corporation.
443
443
 
444
444
  Permission to use, copy, modify, and/or distribute this software for any
@@ -775,40 +775,6 @@
775
775
  return current;
776
776
  }
777
777
 
778
- function createCursor() {
779
- var storage = {
780
- cursor: []
781
- };
782
- function addLevel() {
783
- storage.cursor.push(0);
784
- }
785
- function removeLevel() {
786
- storage.cursor.pop();
787
- }
788
- function cursorAt() {
789
- return last(storage.cursor);
790
- }
791
- function getCursor() {
792
- return asArray(storage.cursor);
793
- }
794
- function next() {
795
- storage.cursor[storage.cursor.length - 1]++;
796
- return last(storage.cursor);
797
- }
798
- function reset() {
799
- storage.cursor = [0];
800
- }
801
- reset();
802
- return {
803
- addLevel: addLevel,
804
- cursorAt: cursorAt,
805
- getCursor: getCursor,
806
- next: next,
807
- removeLevel: removeLevel,
808
- reset: reset
809
- };
810
- }
811
-
812
778
  var IsolateTypes;
813
779
  (function (IsolateTypes) {
814
780
  IsolateTypes[IsolateTypes["DEFAULT"] = 0] = "DEFAULT";
@@ -825,6 +791,115 @@
825
791
  Modes[Modes["EAGER"] = 1] = "EAGER";
826
792
  })(Modes || (Modes = {}));
827
793
 
794
+ function createIsolateCursor() {
795
+ var cursor = {
796
+ value: 0
797
+ };
798
+ return {
799
+ current: current,
800
+ next: next
801
+ };
802
+ /**
803
+ * @returns {number} The current value of the cursor
804
+ */
805
+ function current() {
806
+ return cursor.value;
807
+ }
808
+ /**
809
+ * Moves the isolate cursor forward by 1
810
+ */
811
+ function next() {
812
+ cursor.value++;
813
+ }
814
+ }
815
+
816
+ function deferThrow(message) {
817
+ setTimeout(function () {
818
+ throw new Error(message);
819
+ }, 0);
820
+ }
821
+
822
+ function usePrevKeys() {
823
+ var prev = useTestObjects()[0].prev;
824
+ return asArray(getCurrent(prev, useCurrentPath())).reduce(function (prevKeys, testObject) {
825
+ if (!(testObject instanceof VestTest)) {
826
+ return prevKeys;
827
+ }
828
+ if (isNullish(testObject.key)) {
829
+ return prevKeys;
830
+ }
831
+ prevKeys[testObject.key] = testObject;
832
+ return prevKeys;
833
+ }, {});
834
+ }
835
+ function usePrevTestByKey(key) {
836
+ var prev = context.useX().isolate.keys.prev;
837
+ return prev[key];
838
+ }
839
+ function useRetainTestKey(key, testObject) {
840
+ var context$1 = context.useX();
841
+ var current = context$1.isolate.keys.current;
842
+ if (isNullish(current[key])) {
843
+ current[key] = testObject;
844
+ }
845
+ else {
846
+ deferThrow("Encountered the same test key \"".concat(key, "\" twice. This may lead to tests overriding each other's results, or to tests being unexpectedly omitted."));
847
+ }
848
+ }
849
+
850
+ function isolate(_a, callback) {
851
+ var _b = _a.type, type = _b === void 0 ? IsolateTypes.DEFAULT : _b;
852
+ invariant(isFunction(callback));
853
+ // Generate a new Isolate layer, with its own cursor
854
+ var isolate = generateIsolate(type, useCurrentPath());
855
+ var output = context.run({ isolate: isolate }, function () {
856
+ isolate.keys.prev = usePrevKeys();
857
+ useSetTests(function (tests) { return setValueAtPath(tests, isolate.path, []); });
858
+ var res = callback();
859
+ return res;
860
+ });
861
+ // Move the parent cursor forward once we're done
862
+ useCursor().next();
863
+ return output;
864
+ }
865
+ /**
866
+ * @returns {Isolate} The current isolate layer
867
+ */
868
+ function useIsolate() {
869
+ return context.useX().isolate;
870
+ }
871
+ /**
872
+ * @returns {boolean} Whether or not the current isolate allows tests to be reordered
873
+ */
874
+ function shouldAllowReorder() {
875
+ return context.useX().isolate.type === IsolateTypes.EACH;
876
+ }
877
+ /**
878
+ * @returns {number[]} The current cursor path of the isolate tree
879
+ */
880
+ function useCurrentPath() {
881
+ var isolate = useIsolate();
882
+ return isolate.path.concat(isolate.cursor.current());
883
+ }
884
+ /**
885
+ * @returns {IsolateCursor} The cursor object for the current isolate
886
+ */
887
+ function useCursor() {
888
+ return useIsolate().cursor;
889
+ }
890
+ function generateIsolate(type, path) {
891
+ if (path === void 0) { path = []; }
892
+ return {
893
+ cursor: createIsolateCursor(),
894
+ keys: {
895
+ current: {},
896
+ prev: {}
897
+ },
898
+ path: path,
899
+ type: type
900
+ };
901
+ }
902
+
828
903
  var context = createContext(function (ctxRef, parentContext) {
829
904
  return parentContext
830
905
  ? null
@@ -834,15 +909,8 @@
834
909
  groups: {}
835
910
  },
836
911
  inclusion: {},
837
- isolate: {
838
- type: IsolateTypes.DEFAULT,
839
- keys: {
840
- current: {},
841
- prev: {}
842
- }
843
- },
844
- mode: [Modes.ALL],
845
- testCursor: createCursor()
912
+ isolate: generateIsolate(IsolateTypes.DEFAULT),
913
+ mode: [Modes.ALL]
846
914
  }, ctxRef);
847
915
  });
848
916
 
@@ -1144,83 +1212,6 @@
1144
1212
  };
1145
1213
  }
1146
1214
 
1147
- function deferThrow(message) {
1148
- setTimeout(function () {
1149
- throw new Error(message);
1150
- }, 0);
1151
- }
1152
-
1153
- function usePath() {
1154
- var context$1 = context.useX();
1155
- return context$1.testCursor.getCursor();
1156
- }
1157
- function useCursorAt() {
1158
- var context$1 = context.useX();
1159
- return context$1.testCursor.cursorAt();
1160
- }
1161
- function moveForward() {
1162
- var context$1 = context.useX();
1163
- return context$1.testCursor.next();
1164
- }
1165
- function addLevel() {
1166
- var context$1 = context.useX();
1167
- context$1.testCursor.addLevel();
1168
- }
1169
- function removeLevel() {
1170
- var context$1 = context.useX();
1171
- context$1.testCursor.removeLevel();
1172
- }
1173
-
1174
- function usePrevKeys() {
1175
- var prev = useTestObjects()[0].prev;
1176
- return asArray(getCurrent(prev, usePath())).reduce(function (prevKeys, testObject) {
1177
- if (!(testObject instanceof VestTest)) {
1178
- return prevKeys;
1179
- }
1180
- if (isNullish(testObject.key)) {
1181
- return prevKeys;
1182
- }
1183
- prevKeys[testObject.key] = testObject;
1184
- return prevKeys;
1185
- }, {});
1186
- }
1187
- function usePrevTestByKey(key) {
1188
- var prev = context.useX().isolate.keys.prev;
1189
- return prev[key];
1190
- }
1191
- function useRetainTestKey(key, testObject) {
1192
- var context$1 = context.useX();
1193
- var current = context$1.isolate.keys.current;
1194
- if (isNullish(current[key])) {
1195
- current[key] = testObject;
1196
- }
1197
- else {
1198
- deferThrow("Encountered the same test key \"".concat(key, "\" twice. This may lead to tests overriding each other's results, or to tests being unexpectedly omitted."));
1199
- }
1200
- }
1201
-
1202
- function isolate(_a, callback) {
1203
- var _b = _a.type, type = _b === void 0 ? IsolateTypes.DEFAULT : _b;
1204
- invariant(isFunction(callback));
1205
- var keys = {
1206
- current: {},
1207
- prev: {}
1208
- };
1209
- var path = usePath();
1210
- return context.run({ isolate: { type: type, keys: keys } }, function () {
1211
- addLevel();
1212
- keys.prev = usePrevKeys();
1213
- useSetTests(function (tests) { return setValueAtPath(tests, path, []); });
1214
- var res = callback();
1215
- removeLevel();
1216
- moveForward();
1217
- return res;
1218
- });
1219
- }
1220
- function shouldAllowReorder() {
1221
- return context.useX().isolate.type === IsolateTypes.EACH;
1222
- }
1223
-
1224
1215
  var Severity;
1225
1216
  (function (Severity) {
1226
1217
  Severity["WARNINGS"] = "warnings";
@@ -1244,6 +1235,11 @@
1244
1235
  return !!(fieldName && testObject.fieldName === fieldName);
1245
1236
  }
1246
1237
 
1238
+ var nonMatchingGroupName = bindNot(matchingGroupName);
1239
+ function matchingGroupName(testObject, groupName) {
1240
+ return testObject.groupName === groupName;
1241
+ }
1242
+
1247
1243
  function either(a, b) {
1248
1244
  return !!a !== !!b;
1249
1245
  }
@@ -1268,6 +1264,15 @@
1268
1264
  return hasFailuresByTestObject(testObject, severityKey, fieldName);
1269
1265
  });
1270
1266
  }
1267
+ function hasGroupFailuresByTestObjects(severityKey, groupName, fieldName) {
1268
+ var testObjects = useTestsFlat();
1269
+ return testObjects.some(function (testObject) {
1270
+ if (nonMatchingGroupName(testObject, groupName)) {
1271
+ return false;
1272
+ }
1273
+ return hasFailuresByTestObject(testObject, severityKey, fieldName);
1274
+ });
1275
+ }
1271
1276
  /**
1272
1277
  * Determines whether a certain test profile has failures.
1273
1278
  */
@@ -1285,7 +1290,7 @@
1285
1290
  }
1286
1291
 
1287
1292
  // eslint-disable-next-line max-statements, complexity
1288
- function shouldAddValidProp(fieldName) {
1293
+ function shouldAddValidProperty(fieldName) {
1289
1294
  if (fieldIsOmitted(fieldName)) {
1290
1295
  return true;
1291
1296
  }
@@ -1296,36 +1301,78 @@
1296
1301
  if (isEmpty(testObjects)) {
1297
1302
  return false;
1298
1303
  }
1304
+ // Does the given field have any pending tests that are not optional?
1299
1305
  if (hasNonOptionalIncomplete(fieldName)) {
1300
1306
  return false;
1301
1307
  }
1302
1308
  return noMissingTests(fieldName);
1303
1309
  }
1310
+ function shouldAddValidPropertyInGroup(groupName, fieldName) {
1311
+ if (fieldIsOmitted(fieldName)) {
1312
+ return true;
1313
+ }
1314
+ if (hasGroupFailuresByTestObjects(Severity.ERRORS, groupName, fieldName)) {
1315
+ return false;
1316
+ }
1317
+ // Do the given group/field have any pending tests that are not optional?
1318
+ if (hasNonOptionalIncompleteByGroup(groupName, fieldName)) {
1319
+ return false;
1320
+ }
1321
+ return noMissingTestsByGroup(groupName, fieldName);
1322
+ }
1304
1323
  function fieldIsOmitted(fieldName) {
1305
1324
  if (!fieldName) {
1306
1325
  return false;
1307
1326
  }
1308
1327
  return useOptionalFieldApplied(fieldName) === true;
1309
1328
  }
1329
+ // Does the given field have any pending tests that are not optional?
1310
1330
  function hasNonOptionalIncomplete(fieldName) {
1311
1331
  return isNotEmpty(useAllIncomplete().filter(function (testObject) {
1312
- if (nonMatchingFieldName(testObject, fieldName)) {
1332
+ return isOptionalFieldIncomplete(testObject, fieldName);
1333
+ }));
1334
+ }
1335
+ // Do the given group/field have any pending tests that are not optional?
1336
+ function hasNonOptionalIncompleteByGroup(groupName, fieldName) {
1337
+ return isNotEmpty(useAllIncomplete().filter(function (testObject) {
1338
+ if (nonMatchingGroupName(testObject, groupName)) {
1313
1339
  return false;
1314
1340
  }
1315
- return useOptionalFieldConfig(testObject.fieldName) !== true;
1341
+ return isOptionalFieldIncomplete(testObject, fieldName);
1316
1342
  }));
1317
1343
  }
1344
+ function isOptionalFieldIncomplete(testObject, fieldName) {
1345
+ if (nonMatchingFieldName(testObject, fieldName)) {
1346
+ return false;
1347
+ }
1348
+ return useOptionalFieldConfig(testObject.fieldName) !== true;
1349
+ }
1318
1350
  function noMissingTests(fieldName) {
1319
1351
  var testObjects = useTestsFlat();
1320
1352
  return testObjects.every(function (testObject) {
1321
1353
  if (nonMatchingFieldName(testObject, fieldName)) {
1322
1354
  return true;
1323
1355
  }
1324
- return (useOptionalFieldConfig(testObject.fieldName) === true ||
1325
- testObject.isTested() ||
1326
- testObject.isOmitted());
1356
+ return missingTestsLogic(testObject, fieldName);
1327
1357
  });
1328
1358
  }
1359
+ function noMissingTestsByGroup(groupName, fieldName) {
1360
+ var testObjects = useTestsFlat();
1361
+ return testObjects.every(function (testObject) {
1362
+ if (nonMatchingGroupName(testObject, groupName)) {
1363
+ return true;
1364
+ }
1365
+ return missingTestsLogic(testObject, fieldName);
1366
+ });
1367
+ }
1368
+ function missingTestsLogic(testObject, fieldName) {
1369
+ if (nonMatchingFieldName(testObject, fieldName)) {
1370
+ return true;
1371
+ }
1372
+ return (useOptionalFieldConfig(testObject.fieldName) === true ||
1373
+ testObject.isTested() ||
1374
+ testObject.isOmitted());
1375
+ }
1329
1376
 
1330
1377
  function useSummary() {
1331
1378
  var summary = context.useX().summary;
@@ -1347,7 +1394,7 @@
1347
1394
  appendToGroup(summary.groups, testObject);
1348
1395
  return summary;
1349
1396
  }, summary);
1350
- summary.valid = shouldAddValidProp();
1397
+ summary.valid = shouldAddValidProperty();
1351
1398
  return countFailures(summary);
1352
1399
  }
1353
1400
  function appendToTest(tests, testObject) {
@@ -1356,7 +1403,7 @@
1356
1403
  tests[testObject.fieldName].valid =
1357
1404
  tests[testObject.fieldName].valid === false
1358
1405
  ? false
1359
- : shouldAddValidProp(testObject.fieldName);
1406
+ : shouldAddValidProperty(testObject.fieldName);
1360
1407
  }
1361
1408
  /**
1362
1409
  * Appends to a group object if within a group
@@ -1368,6 +1415,10 @@
1368
1415
  }
1369
1416
  groups[groupName] = groups[groupName] || {};
1370
1417
  groups[groupName][testObject.fieldName] = appendTestObject(groups[groupName], testObject);
1418
+ groups[groupName][testObject.fieldName].valid =
1419
+ groups[groupName][testObject.fieldName].valid === false
1420
+ ? false
1421
+ : shouldAddValidPropertyInGroup(groupName, testObject.fieldName);
1371
1422
  }
1372
1423
  /**
1373
1424
  * Counts the failed tests and adds global counters
@@ -1428,10 +1479,13 @@
1428
1479
  }
1429
1480
  function collectAll(testGroup, severityKey) {
1430
1481
  var output = {};
1482
+ var countKey = countKeyBySeverity(severityKey);
1431
1483
  for (var field in testGroup) {
1432
- // We will probably never get to the fallback array
1433
- // leaving it just in case the implementation changes
1434
- output[field] = testGroup[field][severityKey] || [];
1484
+ if (isPositive(testGroup[field][countKey])) {
1485
+ // We will probably never get to the fallback array
1486
+ // leaving it just in case the implementation changes
1487
+ output[field] = testGroup[field][severityKey] || [];
1488
+ }
1435
1489
  }
1436
1490
  return output;
1437
1491
  }
@@ -1503,9 +1557,30 @@
1503
1557
  }
1504
1558
 
1505
1559
  function isValid(fieldName) {
1506
- var _a;
1507
1560
  var summary = useSummary();
1508
- return fieldName ? Boolean((_a = summary.tests[fieldName]) === null || _a === void 0 ? void 0 : _a.valid) : summary.valid;
1561
+ return fieldName
1562
+ ? Boolean(isFieldValid(summary.tests, fieldName))
1563
+ : summary.valid;
1564
+ }
1565
+ function isValidByGroup(groupName, fieldName) {
1566
+ var summary = useSummary();
1567
+ var group = summary.groups[groupName];
1568
+ if (!group) {
1569
+ return false;
1570
+ }
1571
+ if (fieldName) {
1572
+ return isFieldValid(group, fieldName);
1573
+ }
1574
+ for (var fieldName_1 in group) {
1575
+ if (!isFieldValid(group, fieldName_1)) {
1576
+ return false;
1577
+ }
1578
+ }
1579
+ return true;
1580
+ }
1581
+ function isFieldValid(testContainer, fieldName) {
1582
+ var _a;
1583
+ return !!((_a = testContainer[fieldName]) === null || _a === void 0 ? void 0 : _a.valid);
1509
1584
  }
1510
1585
 
1511
1586
  var cache$1 = createCache(1);
@@ -1526,6 +1601,7 @@
1526
1601
  hasWarnings: context.bind(ref, hasWarnings),
1527
1602
  hasWarningsByGroup: context.bind(ref, hasWarningsByGroup),
1528
1603
  isValid: context.bind(ref, isValid),
1604
+ isValidByGroup: context.bind(ref, isValidByGroup),
1529
1605
  suiteName: suiteName
1530
1606
  });
1531
1607
  }));
@@ -2243,8 +2319,8 @@
2243
2319
  function removeAllNextTestsInIsolate() {
2244
2320
  var _a = useTestObjects(), testObjects = _a[0], setTestObjects = _a[1];
2245
2321
  var prevTests = testObjects.prev;
2246
- var current = getCurrent(prevTests, usePath());
2247
- var cursorAt = useCursorAt();
2322
+ var current = getCurrent(prevTests, useCurrentPath());
2323
+ var cursorAt = useCursor().current();
2248
2324
  current.splice(cursorAt);
2249
2325
  // We actually don't mind mutating the state directly (as can be seen above). There is no harm in it
2250
2326
  // since we're only touching the "prev" state. The reason we still use the setter function is
@@ -2258,13 +2334,13 @@
2258
2334
  });
2259
2335
  }
2260
2336
  function useSetTestAtCursor(testObject) {
2261
- var cursorPath = usePath();
2337
+ var cursorPath = useCurrentPath();
2262
2338
  useSetTests(function (tests) {
2263
2339
  return setValueAtPath(tests, cursorPath, testObject);
2264
2340
  });
2265
2341
  }
2266
2342
  function useGetTestAtCursor(tests) {
2267
- var cursorPath = usePath();
2343
+ var cursorPath = useCurrentPath();
2268
2344
  return valueAtPath(tests, cursorPath);
2269
2345
  }
2270
2346
  function testReorderDetected(prevTest, newTest) {
@@ -2288,16 +2364,17 @@
2288
2364
 
2289
2365
  // eslint-disable-next-line max-statements
2290
2366
  function registerPrevRunTest(testObject) {
2367
+ var cursor = useCursor();
2291
2368
  if (shouldSkipBasedOnMode(testObject)) {
2292
2369
  testObject.skip();
2293
2370
  useTestAtCursor(testObject);
2294
- moveForward();
2371
+ cursor.next();
2295
2372
  return testObject;
2296
2373
  }
2297
2374
  var prevRunTest = useTestAtCursor(testObject);
2298
2375
  if (isOmitted()) {
2299
2376
  prevRunTest.omit();
2300
- moveForward();
2377
+ cursor.next();
2301
2378
  return prevRunTest;
2302
2379
  }
2303
2380
  if (isExcluded(testObject)) {
@@ -2306,13 +2383,13 @@
2306
2383
  // This mostly means that we're probably giving
2307
2384
  // up on this async test intentionally.
2308
2385
  prevRunTest.skip(isExcludedIndividually());
2309
- moveForward();
2386
+ cursor.next();
2310
2387
  return prevRunTest;
2311
2388
  }
2312
2389
  cancelOverriddenPendingTest(prevRunTest, testObject);
2313
2390
  useSetTestAtCursor(testObject);
2314
- moveForward();
2315
2391
  registerTestObjectByTier(testObject);
2392
+ cursor.next();
2316
2393
  return testObject;
2317
2394
  }
2318
2395
  function registerTestObjectByTier(testObject) {
@@ -2335,7 +2412,7 @@
2335
2412
  for (var _i = 1; _i < arguments.length; _i++) {
2336
2413
  args[_i - 1] = arguments[_i];
2337
2414
  }
2338
- var cursorAt = useCursorAt();
2415
+ var cursorAt = useCursor().current();
2339
2416
  var _a = args.reverse(), deps = _a[0], testFn = _a[1], msg = _a[2];
2340
2417
  // Implicit dependency for more specificity
2341
2418
  var dependencies = [useSuiteId(), fieldName, cursorAt].concat(deps);
@@ -2397,7 +2474,7 @@
2397
2474
  ctx.currentTest.warn();
2398
2475
  }
2399
2476
 
2400
- var VERSION = "4.3.3";
2477
+ var VERSION = "4.4.0";
2401
2478
 
2402
2479
  exports.VERSION = VERSION;
2403
2480
  exports.context = context;