Socket
Socket
Sign inDemoInstall

bdd-lazy-var

Package Overview
Dependencies
0
Maintainers
1
Versions
47
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.0.2 to 0.0.3

lib/symbol.js

105

bdd-lazy-var.js

@@ -11,7 +11,6 @@ (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){

var currentlyDefinedSuite = rootSuite;
var currentlyRetrievedVarName;
var currentlyRunningSuite = null;
var currentTestContext;
Mocha.interfaces.bdd(rootSuite);
rootSuite.on('pre-require', function(context, file, mocha) {
rootSuite.on('pre-require', function(context) {
context.subject = function(definition) {

@@ -21,25 +20,25 @@ return arguments.length === 1 ? context.def('subject', definition) : context.get('subject');

context.get = function(name) {
var originalSuite = currentlyRunningSuite;
context.get = function(varName) {
var originalSuite = currentTestContext;
if (name === currentlyRetrievedVarName) {
currentlyRunningSuite = Object.getPrototypeOf(originalSuite);
if (varName === currentTestContext._definesVariable) {
currentTestContext = getParentContextFor(varName, currentTestContext);
}
try {
currentlyRetrievedVarName = name;
currentTestContext._definesVariable = varName;
// console.log('get "%s" for "%s"', name, currentlyRunningSuite.title);
return lazyVar.getOrCreate(currentlyRunningSuite, name);
return lazyVar.getOrCreate(currentTestContext, varName);
} finally {
currentlyRetrievedVarName = null;
currentlyRunningSuite = originalSuite;
// console.log('restore to "%s"', currentlyRunningSuite.title);
delete currentTestContext._definesVariable;
currentTestContext = originalSuite;
}
};
context.def = function(name, definition) {
return lazyVar.register(currentlyDefinedSuite.ctx, name, definition);
context.def = function(varName, definition) {
if (lazyVar.isDefined(currentlyDefinedSuite.ctx, varName)) {
registerParentContextFor(varName, currentlyDefinedSuite);
}
return lazyVar.register(currentlyDefinedSuite.ctx, varName, definition);
};

@@ -52,2 +51,6 @@

context.before(function() {
this.title = title;
});
context.before(registerSuite);

@@ -66,5 +69,17 @@ context.beforeEach(registerSuite);

function registerSuite() {
currentlyRunningSuite = this;
currentTestContext = this;
}
function registerParentContextFor(varName, suite) {
if (!suite.ctx.hasOwnProperty('_parentContextForLazyVars')) {
suite.ctx._parentContextForLazyVars = {};
}
suite.ctx._parentContextForLazyVars[varName] = suite.parent.ctx;
}
function getParentContextFor(varName, testContext) {
return testContext._parentContextForLazyVars ? testContext._parentContextForLazyVars[varName] : null;
}
context.context = context.describe;

@@ -79,12 +94,30 @@ context.context.skip = context.describe.skip = describe.skip;

var varsToClean = [];
var prop = require('./symbol').for;
var createdVarsPropName = prop('__createdVars');
function propNameFor(varName) {
var name = '_lazy_' + varName + '_definition';
function definitionNameFor(varName) {
return prop('__' + varName + 'LazyDefinition');
}
return typeof Symbol !== 'undefined' ? Symbol.for(name) : name;
function getDefinition(context, definitionName) {
return context[definitionName];
}
function markVarAsCreated(context, definitionName) {
if (!context.hasOwnProperty(createdVarsPropName)) {
context[createdVarsPropName] = {};
}
context[createdVarsPropName][definitionName] = getDefinition(context, definitionName);
}
function isCreated(context, definitionName) {
var calledDefinitions = context[createdVarsPropName] || {};
return calledDefinitions[definitionName] === getDefinition(context, definitionName);
}
var lazyVar = {
register: function(context, name, definition) {
var propName = propNameFor(name);
var propName = definitionNameFor(name);

@@ -98,11 +131,17 @@ if (context.hasOwnProperty(propName)) {

isDefined: function(context, name) {
return context && definitionNameFor(name) in context;
},
getOrCreate: function(context, name) {
if (!(propNameFor(name) in context)) {
throw new Error('"' + name + '" is not defined.');
if (!lazyVar.isDefined(context, name)) {
throw new Error('Lazy variable "' + name + '" is not defined.');
}
var definition = lazyVar.getDefinition(context, name);
var definitionName = definitionNameFor(name);
var definition = getDefinition(context, definitionName);
if (!context.hasOwnProperty(name)) {
if (!(name in context) || !isCreated(context, definitionName)) {
context[name] = typeof definition === 'function' ? definition() : definition;
markVarAsCreated(context, definitionName);
varsToClean.push({ context: context, name: name });

@@ -114,6 +153,2 @@ }

getDefinition: function(context, name) {
return context[propNameFor(name)];
},
cleanUp: function() {

@@ -127,2 +162,3 @@ varsToClean.forEach(lazyVar.destroy);

delete variable.context[variable.name];
delete variable.context[createdVarsPropName];
}

@@ -134,2 +170,11 @@ }

},{"./symbol":4}],4:[function(require,module,exports){
var indentity = function(value) {
return value;
};
module.exports = {
for: typeof Symbol === 'undefined' ? indentity : Symbol.for
};
},{}]},{},[1]);

@@ -6,7 +6,6 @@ var Mocha = require('mocha');

var currentlyDefinedSuite = rootSuite;
var currentlyRetrievedVarName;
var currentlyRunningSuite = null;
var currentTestContext;
Mocha.interfaces.bdd(rootSuite);
rootSuite.on('pre-require', function(context, file, mocha) {
rootSuite.on('pre-require', function(context) {
context.subject = function(definition) {

@@ -16,25 +15,25 @@ return arguments.length === 1 ? context.def('subject', definition) : context.get('subject');

context.get = function(name) {
var originalSuite = currentlyRunningSuite;
context.get = function(varName) {
var originalSuite = currentTestContext;
if (name === currentlyRetrievedVarName) {
currentlyRunningSuite = Object.getPrototypeOf(originalSuite);
if (varName === currentTestContext._definesVariable) {
currentTestContext = getParentContextFor(varName, currentTestContext);
}
try {
currentlyRetrievedVarName = name;
currentTestContext._definesVariable = varName;
// console.log('get "%s" for "%s"', name, currentlyRunningSuite.title);
return lazyVar.getOrCreate(currentlyRunningSuite, name);
return lazyVar.getOrCreate(currentTestContext, varName);
} finally {
currentlyRetrievedVarName = null;
currentlyRunningSuite = originalSuite;
// console.log('restore to "%s"', currentlyRunningSuite.title);
delete currentTestContext._definesVariable;
currentTestContext = originalSuite;
}
};
context.def = function(name, definition) {
return lazyVar.register(currentlyDefinedSuite.ctx, name, definition);
context.def = function(varName, definition) {
if (lazyVar.isDefined(currentlyDefinedSuite.ctx, varName)) {
registerParentContextFor(varName, currentlyDefinedSuite);
}
return lazyVar.register(currentlyDefinedSuite.ctx, varName, definition);
};

@@ -47,2 +46,6 @@

context.before(function() {
this.title = title;
});
context.before(registerSuite);

@@ -61,5 +64,17 @@ context.beforeEach(registerSuite);

function registerSuite() {
currentlyRunningSuite = this;
currentTestContext = this;
}
function registerParentContextFor(varName, suite) {
if (!suite.ctx.hasOwnProperty('_parentContextForLazyVars')) {
suite.ctx._parentContextForLazyVars = {};
}
suite.ctx._parentContextForLazyVars[varName] = suite.parent.ctx;
}
function getParentContextFor(varName, testContext) {
return testContext._parentContextForLazyVars ? testContext._parentContextForLazyVars[varName] : null;
}
context.context = context.describe;

@@ -66,0 +81,0 @@ context.context.skip = context.describe.skip = describe.skip;

var varsToClean = [];
var prop = require('./symbol').for;
var createdVarsPropName = prop('__createdVars');
function propNameFor(varName) {
var name = '_lazy_' + varName + '_definition';
function definitionNameFor(varName) {
return prop('__' + varName + 'LazyDefinition');
}
return typeof Symbol !== 'undefined' ? Symbol.for(name) : name;
function getDefinition(context, definitionName) {
return context[definitionName];
}
function markVarAsCreated(context, definitionName) {
if (!context.hasOwnProperty(createdVarsPropName)) {
context[createdVarsPropName] = {};
}
context[createdVarsPropName][definitionName] = getDefinition(context, definitionName);
}
function isCreated(context, definitionName) {
var calledDefinitions = context[createdVarsPropName] || {};
return calledDefinitions[definitionName] === getDefinition(context, definitionName);
}
var lazyVar = {
register: function(context, name, definition) {
var propName = propNameFor(name);
var propName = definitionNameFor(name);

@@ -20,11 +38,17 @@ if (context.hasOwnProperty(propName)) {

isDefined: function(context, name) {
return context && definitionNameFor(name) in context;
},
getOrCreate: function(context, name) {
if (!(propNameFor(name) in context)) {
throw new Error('"' + name + '" is not defined.');
if (!lazyVar.isDefined(context, name)) {
throw new Error('Lazy variable "' + name + '" is not defined.');
}
var definition = lazyVar.getDefinition(context, name);
var definitionName = definitionNameFor(name);
var definition = getDefinition(context, definitionName);
if (!context.hasOwnProperty(name)) {
if (!(name in context) || !isCreated(context, definitionName)) {
context[name] = typeof definition === 'function' ? definition() : definition;
markVarAsCreated(context, definitionName);
varsToClean.push({ context: context, name: name });

@@ -36,6 +60,2 @@ }

getDefinition: function(context, name) {
return context[propNameFor(name)];
},
cleanUp: function() {

@@ -49,2 +69,3 @@ varsToClean.forEach(lazyVar.destroy);

delete variable.context[variable.name];
delete variable.context[createdVarsPropName];
}

@@ -51,0 +72,0 @@ }

{
"name": "bdd-lazy-var",
"version": "0.0.2",
"version": "0.0.3",
"author": "Sergii Stotskyi",

@@ -5,0 +5,0 @@ "description": "Provides \"ui\" for mocha.js which allows to define lazy variables and subjects",

@@ -145,2 +145,28 @@ describe('Lazy variables interface', function() {

});
describe('when fallbacks to parent variable definition through suites tree', function() {
def('var', 'John');
describe('nested suite without variable definition', function() {
it('fallbacks to parent variable definition', function() {
expect(get('var')).to.equal('John');
});
describe('nested suite with variable definition', function() {
def('var', function() {
return get('var') + ' Doe';
});
it('uses correct parent variable definition', function() {
expect(get('var')).to.equal('John Doe');
});
describe('one more nested suite without variable definition', function() {
it('uses correct parent variable definition', function() {
expect(get('var')).to.equal('John Doe');
});
});
});
});
});
});
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc