/* eslint-env mocha */ /** * Automated mocha and chai tests for the module {@link module:string string.js}. * * @module test/string * * @author Henry Brown */ "use strict"; var assert = require("chai").assert; let strFuncController = require("../index.js").string; describe("string.js", function() { describe("enable*()", function() { describe("Test that by default, none of the string functions are enabled", function() { it("should not have enabled String.padLeft", function() { assert.isUndefined("".padLeft); }); it("should not have enabled String.padRight", function() { assert.isUndefined("".padRight); }); it("should not have enabled String.prepend", function() { assert.isUndefined("".prepend); }); it("should not have enabled String.indent", function() { assert.isUndefined("".indent); }); }); }); describe("enablePadLeft()", function() { it("should enable String.padLeft", function() { strFuncController.enablePadLeft(); assert.isDefined("".padLeft); }); it("shouldn't throw an error if you enable it again", function() { assert.doesNotThrow(function() { strFuncController.enablePadLeft(); }); }); }); describe("enablePadRight()", function() { it("should enable String.padRight", function() { strFuncController.enablePadRight(); assert.isDefined("".padRight); }); it("shouldn't throw an error if you enable it again", function() { assert.doesNotThrow(function() { strFuncController.enablePadRight(); }); }); }); describe("enablePrepend()", function() { it("should enable String.prepend", function() { strFuncController.enablePrepend(); assert.isDefined("".prepend); }); it("shouldn't throw an error if you enable it again", function() { assert.doesNotThrow(function() { strFuncController.enablePrepend(); }); }); }); describe("enableIndent()", function() { it("should enable String.indent", function() { strFuncController.enableIndent(); assert.isDefined("".indent); }); it("shouldn't throw an error if you enable it again", function() { assert.doesNotThrow(function() { strFuncController.enableIndent(); }); }); }); describe("Test for existing function clobbering", function() { it("should not clobber an existing padLeft function", function() { assert.isTrue(strFuncController.enabledPadLeft); }); it("should not clobber an existing padRight function", function() { assert.isTrue(strFuncController.enabledPadRight); }); it("should not clobber an existing prepend function", function() { assert.isTrue(strFuncController.enabledPrepend); }); it("should not clobber an existing indent function", function() { assert.isTrue(strFuncController.enabledIndent); }); }); describe("padLeft()", function() { it("should pad single characters", function() { assert.equal("5".padLeft("0", 5), "00005"); }); it("should pad strings provided such that it will not exceed the padLength", function() { assert.equal("bla".padLeft("alb", 6), "albbla"); }); it("should pad fewer than padLength if the string to pad is too long", function() { assert.equal("bla".padLeft("alb", 7), "albbla"); }); it("shouldn't change a string that already has a length >= padLength", function() { let startStr = "this is an example string"; assert.equal(startStr, startStr.padLeft("0", 5)); assert.equal(startStr, startStr.padLeft("0", startStr.length)); }); it("throws an error if you try to padLeft a negative amount", function() { assert.throws(function() { return " ".padLeft(" ", -1); }); }); }); describe("padRight()", function() { it("should pad single characters", function() { assert.equal("N".padRight("o", 5), "Noooo"); }); it("should pad strings provided but not exceed padLength", function() { assert.equal(" ".padRight("sos ", 17), " sos sos sos sos "); }); it("should pad fewer than padLength if the string to pad is too long", function() { assert.equal("alb".padRight("bla", 7), "albbla"); }); it("shouldn't change a string that already has a length >= padLength", function() { let startStr = "this is an example string"; assert.equal(startStr, startStr.padRight("0", 5)); assert.equal(startStr, startStr.padRight("0", startStr.length)); }); it("throws an error if you try to padRight a negative amount", function() { assert.throws(function() { return " ".padRight(" ", -1); }); }); }); describe("prepend()", function() { it("should put the prefix string before the existing string content", function() { assert.equal("bla".prepend("alb"), "albbla"); }); }); describe("indent()", function() { it("should indent the first line as well as any additional lines", function() { assert.equal("bla".indent(4), " bla"); }); it("should indent all passed content at each newline by the indentSize", function() { assert.equal("bla\nbla".indent(4), " bla\n bla"); }); it("throws an error if you try to indent a negative size", function() { assert.throws(function() { return "".indent(-1); }); }); }); });