| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- "use strict";
- var assert = require("assert"),
- ToUpperExpression = require("../../../../lib/pipeline/expressions/ToUpperExpression"),
- VariablesParseState = require("../../../../lib/pipeline/expressions/VariablesParseState"),
- VariablesIdGenerator = require("../../../../lib/pipeline/expressions/VariablesIdGenerator"),
- Expression = require("../../../../lib/pipeline/expressions/Expression"),
- utils = require("./utils"),
- constify = utils.constify,
- expressionToJson = utils.expressionToJson;
- // Mocha one-liner to make these tests self-hosted
- if(!module.parent)return(require.cache[__filename]=null,(new(require("mocha"))({ui:"exports",reporter:"spec",grep:process.env.TEST_GREP})).addFile(__filename).run(process.exit));
- var TestBase = function TestBase(overrides) {
- //NOTE: DEVIATION FROM MONGO: using this base class to make things easier to initialize
- for (var key in overrides)
- this[key] = overrides[key];
- },
- ExpectedResultBase = (function() {
- var klass = function ExpectedResultBase() {
- base.apply(this, arguments);
- }, base = TestBase, proto = klass.prototype = Object.create(base.prototype);
- proto.run = function(){
- var specElement = this.spec(),
- idGenerator = new VariablesIdGenerator(),
- vps = new VariablesParseState(idGenerator),
- expr = Expression.parseOperand(specElement, vps);
- assert.deepEqual(constify(specElement), expressionToJson(expr));
- assert.strictEqual(this.expectedResult, expr.evaluate({}));
- };
- proto.spec = function() {
- return {$toUpper:[this.str]};
- };
- return klass;
- })();
- exports.ToUpperExpression = {
- "constructor()": {
- "should construct instance": function() {
- assert(new ToUpperExpression() instanceof ToUpperExpression);
- assert(new ToUpperExpression() instanceof Expression);
- },
- "should error if given args": function() {
- assert.throws(function() {
- new ToUpperExpression("bad stuff");
- });
- },
- },
- "#getOpName()": {
- "should return the correct op name; $toUpper": function() {
- assert.equal(new ToUpperExpression().getOpName(), "$toUpper");
- }
- },
- "#evaluate()": {
- "should return the uppercase version of the string if there is a null character at the beginning of the string": function NullBegin() {
- /** String beginning with a null character. */
- new ExpectedResultBase({
- str: "\0aB",
- expectedResult: "\0AB",
- }).run();
- },
- "should return the uppercase version of the string if there is a null character in the middle of the string": function NullMiddle() {
- /** String containing a null character. */
- new ExpectedResultBase({
- str: "a\0B",
- expectedResult: "A\0B",
- }).run();
- },
- "should return the uppercase version of the string if there is a null character at the end of the string": function NullEnd() {
- /** String ending with a null character. */
- new ExpectedResultBase({
- str: "aB\0",
- expectedResult: "AB\0",
- }).run();
- },
- },
- };
- if (!module.parent)(new (require("mocha"))()).ui("exports").reporter("spec").addFile(__filename).run(process.exit);
|