169ef75066
* Remove deprecated helpers * Use more idiomatic assertions * Fix release script
134 lines
3.5 KiB
JavaScript
134 lines
3.5 KiB
JavaScript
var global = globalThis;
|
|
|
|
global.expectTemplate = function (templateAsString) {
|
|
return new HandlebarsTestBench(templateAsString);
|
|
};
|
|
|
|
function HandlebarsTestBench(templateAsString) {
|
|
this.templateAsString = templateAsString;
|
|
this.helpers = {};
|
|
this.partials = {};
|
|
this.decorators = {};
|
|
this.input = {};
|
|
this.message =
|
|
'Template' + templateAsString + ' does not evaluate to expected output';
|
|
this.compileOptions = {};
|
|
this.runtimeOptions = {};
|
|
}
|
|
|
|
HandlebarsTestBench.prototype.withInput = function (input) {
|
|
this.input = input;
|
|
return this;
|
|
};
|
|
|
|
HandlebarsTestBench.prototype.withHelper = function (name, helperFunction) {
|
|
this.helpers[name] = helperFunction;
|
|
return this;
|
|
};
|
|
|
|
HandlebarsTestBench.prototype.withHelpers = function (helperFunctions) {
|
|
var self = this;
|
|
Object.keys(helperFunctions).forEach(function (name) {
|
|
self.withHelper(name, helperFunctions[name]);
|
|
});
|
|
return this;
|
|
};
|
|
|
|
HandlebarsTestBench.prototype.withPartial = function (name, partialAsString) {
|
|
this.partials[name] = partialAsString;
|
|
return this;
|
|
};
|
|
|
|
HandlebarsTestBench.prototype.withPartials = function (partials) {
|
|
var self = this;
|
|
Object.keys(partials).forEach(function (name) {
|
|
self.withPartial(name, partials[name]);
|
|
});
|
|
return this;
|
|
};
|
|
|
|
HandlebarsTestBench.prototype.withDecorator = function (
|
|
name,
|
|
decoratorFunction
|
|
) {
|
|
this.decorators[name] = decoratorFunction;
|
|
return this;
|
|
};
|
|
|
|
HandlebarsTestBench.prototype.withDecorators = function (decorators) {
|
|
var self = this;
|
|
Object.keys(decorators).forEach(function (name) {
|
|
self.withDecorator(name, decorators[name]);
|
|
});
|
|
return this;
|
|
};
|
|
|
|
HandlebarsTestBench.prototype.withCompileOptions = function (compileOptions) {
|
|
this.compileOptions = compileOptions;
|
|
return this;
|
|
};
|
|
|
|
HandlebarsTestBench.prototype.withRuntimeOptions = function (runtimeOptions) {
|
|
this.runtimeOptions = runtimeOptions;
|
|
return this;
|
|
};
|
|
|
|
HandlebarsTestBench.prototype.withMessage = function (message) {
|
|
this.message = message;
|
|
return this;
|
|
};
|
|
|
|
HandlebarsTestBench.prototype.toCompileTo = function (expectedOutputAsString) {
|
|
expect(this._compileAndExecute()).toBe(expectedOutputAsString);
|
|
};
|
|
|
|
HandlebarsTestBench.prototype.toThrow = function (errorLike, errMsgMatcher) {
|
|
var self = this;
|
|
var caught;
|
|
try {
|
|
self._compileAndExecute();
|
|
} catch (e) {
|
|
caught = e;
|
|
}
|
|
|
|
expect(caught).toBeDefined();
|
|
|
|
if (typeof errorLike === 'function') {
|
|
expect(caught).toBeInstanceOf(errorLike);
|
|
if (errMsgMatcher) {
|
|
expect(caught.message).toMatch(errMsgMatcher);
|
|
}
|
|
} else if (errorLike) {
|
|
// errorLike is a string or regex message matcher (single-argument form)
|
|
expect(caught.message).toMatch(errorLike);
|
|
}
|
|
};
|
|
|
|
HandlebarsTestBench.prototype._compileAndExecute = function () {
|
|
var compile =
|
|
Object.keys(this.partials).length > 0
|
|
? CompilerContext.compileWithPartial
|
|
: CompilerContext.compile;
|
|
|
|
var combinedRuntimeOptions = this._combineRuntimeOptions();
|
|
|
|
var template = compile(this.templateAsString, this.compileOptions);
|
|
return template(this.input, combinedRuntimeOptions);
|
|
};
|
|
|
|
HandlebarsTestBench.prototype._combineRuntimeOptions = function () {
|
|
var self = this;
|
|
var combinedRuntimeOptions = {};
|
|
Object.keys(this.runtimeOptions).forEach(function (key) {
|
|
combinedRuntimeOptions[key] = self.runtimeOptions[key];
|
|
});
|
|
combinedRuntimeOptions.helpers = this.helpers;
|
|
combinedRuntimeOptions.partials = this.partials;
|
|
combinedRuntimeOptions.decorators = this.decorators;
|
|
return combinedRuntimeOptions;
|
|
};
|
|
|
|
beforeEach(function () {
|
|
global.handlebarsEnv = Handlebars.create();
|
|
});
|