Runable, not runnable
This commit is contained in:
@@ -0,0 +1,153 @@
|
||||
getJasmineRequireObj().RunableResources = function(j$) {
|
||||
class RunableResources {
|
||||
constructor(getCurrentRunableId) {
|
||||
this.byRunableId_ = {};
|
||||
this.getCurrentRunableId_ = getCurrentRunableId;
|
||||
|
||||
this.spyFactory = new j$.SpyFactory(
|
||||
() => {
|
||||
if (this.getCurrentRunableId_()) {
|
||||
return this.customSpyStrategies();
|
||||
} else {
|
||||
return {};
|
||||
}
|
||||
},
|
||||
() => this.defaultSpyStrategy(),
|
||||
() => this.makeMatchersUtil()
|
||||
);
|
||||
|
||||
this.spyRegistry = new j$.SpyRegistry({
|
||||
currentSpies: () => this.spies(),
|
||||
createSpy: (name, originalFn) =>
|
||||
this.spyFactory.createSpy(name, originalFn)
|
||||
});
|
||||
}
|
||||
|
||||
initForRunable(runableId, parentId) {
|
||||
const newRes = (this.byRunableId_[runableId] = {
|
||||
customEqualityTesters: [],
|
||||
customMatchers: {},
|
||||
customAsyncMatchers: {},
|
||||
customSpyStrategies: {},
|
||||
customObjectFormatters: [],
|
||||
defaultSpyStrategy: undefined,
|
||||
spies: []
|
||||
});
|
||||
|
||||
const parentRes = this.byRunableId_[parentId];
|
||||
|
||||
if (parentRes) {
|
||||
newRes.defaultSpyStrategy = parentRes.defaultSpyStrategy;
|
||||
const toClone = [
|
||||
'customEqualityTesters',
|
||||
'customMatchers',
|
||||
'customAsyncMatchers',
|
||||
'customObjectFormatters',
|
||||
'customSpyStrategies'
|
||||
];
|
||||
|
||||
for (const k of toClone) {
|
||||
newRes[k] = j$.util.clone(parentRes[k]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
clearForRunable(runableId) {
|
||||
this.spyRegistry.clearSpies();
|
||||
delete this.byRunableId_[runableId];
|
||||
}
|
||||
|
||||
spies() {
|
||||
return this.forCurrentRunable_(
|
||||
'Spies must be created in a before function or a spec'
|
||||
).spies;
|
||||
}
|
||||
|
||||
defaultSpyStrategy() {
|
||||
if (!this.getCurrentRunableId_()) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
return this.byRunableId_[this.getCurrentRunableId_()].defaultSpyStrategy;
|
||||
}
|
||||
|
||||
setDefaultSpyStrategy(fn) {
|
||||
this.forCurrentRunable_(
|
||||
'Default spy strategy must be set in a before function or a spec'
|
||||
).defaultSpyStrategy = fn;
|
||||
}
|
||||
|
||||
customSpyStrategies() {
|
||||
return this.forCurrentRunable_(
|
||||
'Custom spy strategies must be added in a before function or a spec'
|
||||
).customSpyStrategies;
|
||||
}
|
||||
|
||||
customEqualityTesters() {
|
||||
return this.forCurrentRunable_(
|
||||
'Custom Equalities must be added in a before function or a spec'
|
||||
).customEqualityTesters;
|
||||
}
|
||||
|
||||
customMatchers() {
|
||||
return this.forCurrentRunable_(
|
||||
'Matchers must be added in a before function or a spec'
|
||||
).customMatchers;
|
||||
}
|
||||
|
||||
addCustomMatchers(matchersToAdd) {
|
||||
const matchers = this.customMatchers();
|
||||
|
||||
for (const name in matchersToAdd) {
|
||||
matchers[name] = matchersToAdd[name];
|
||||
}
|
||||
}
|
||||
|
||||
customAsyncMatchers() {
|
||||
return this.forCurrentRunable_(
|
||||
'Async Matchers must be added in a before function or a spec'
|
||||
).customAsyncMatchers;
|
||||
}
|
||||
|
||||
addCustomAsyncMatchers(matchersToAdd) {
|
||||
const matchers = this.customAsyncMatchers();
|
||||
|
||||
for (const name in matchersToAdd) {
|
||||
matchers[name] = matchersToAdd[name];
|
||||
}
|
||||
}
|
||||
|
||||
customObjectFormatters() {
|
||||
return this.forCurrentRunable_(
|
||||
'Custom object formatters must be added in a before function or a spec'
|
||||
).customObjectFormatters;
|
||||
}
|
||||
|
||||
makePrettyPrinter() {
|
||||
return j$.makePrettyPrinter(this.customObjectFormatters());
|
||||
}
|
||||
|
||||
makeMatchersUtil() {
|
||||
if (this.getCurrentRunableId_()) {
|
||||
return new j$.MatchersUtil({
|
||||
customTesters: this.customEqualityTesters(),
|
||||
pp: this.makePrettyPrinter()
|
||||
});
|
||||
} else {
|
||||
return new j$.MatchersUtil({ pp: j$.basicPrettyPrinter_ });
|
||||
}
|
||||
}
|
||||
|
||||
forCurrentRunable_(errorMsg) {
|
||||
const resources = this.byRunableId_[this.getCurrentRunableId_()];
|
||||
|
||||
if (!resources && errorMsg) {
|
||||
throw new Error(errorMsg);
|
||||
}
|
||||
|
||||
return resources;
|
||||
}
|
||||
}
|
||||
|
||||
return RunableResources;
|
||||
};
|
||||
Reference in New Issue
Block a user