UNPKG

must

Version:

Testing and assertion library with friendly BDD syntax — awesome.must.be.true(). Many expressive matchers and is test runner and framework agnostic. Follows RFC 2119 with its use of MUST. Good and well tested stuff.

189 lines (156 loc) 5.86 kB
var assert = require("assert") var stringify = require("../..").stringify var describeSymbol = typeof Symbol != "undefined" ? describe : xdescribe var itSymbol = typeof Symbol != "undefined" ? it : xit var INDENT = null describe("Must.stringify", function() { it("must return undefined", function() { assert.strictEqual(stringify(undefined), "undefined") }) it("must return null", function() { assert.strictEqual(stringify(null), "null") }) describe("given Number", function() { it("must stringify 42 as 42", function() { assert.strictEqual(stringify(42), "42") }) it("must stringify Infinity as Infinity", function() { assert.strictEqual(stringify(Infinity), "Infinity") }) it("must stringify -Infinity as -Infinity", function() { assert.strictEqual(stringify(-Infinity), "-Infinity") }) it("must stringify NaN as NaN", function() { assert.strictEqual(stringify(NaN), "NaN") }) }) describe("given String", function() { it("must stringify quoted", function() { assert.strictEqual(stringify("Hello, world!"), "\"Hello, world!\"") }) }) describeSymbol("given Symbol", function() { it("must stringify a named symbol", function() { var symbol = Symbol("iterator") assert.strictEqual(stringify(symbol), "Symbol(iterator)") }) it("must stringify an unnamed symbol", function() { var symbol = Symbol() assert.strictEqual(stringify(symbol), "Symbol()") }) }) describe("given Date", function() { it("must stringify ISO string representation", function() { var date = new Date(Date.UTC(1987, 5, 18, 2)) assert.strictEqual(stringify(date), "1987-06-18T02:00:00.000Z") }) }) describe("given RegExp", function() { it("must stringify source with flags", function() { var regexp = /abc[de]./i assert.strictEqual(stringify(regexp), "/abc[de]./i") }) }) describe("given Function", function() { it("must stringify source", function() { function awesome() { return 42 } assert.strictEqual(stringify(awesome), "function awesome() { return 42 }") }) }) describe("given Array", function() { it("must stringify recursively", function() { var array = [{cool: 42}] assert.strictEqual(stringify(array), jsonify(array)) }) it("must stringify circular objects", function() { var array = [{name: "John"}, {name: "Mark"}] array[0].self = array[0] assert.strictEqual(stringify(array), jsonify([ {name: "John", self: "[Circular ~.0]"}, {name: "Mark"} ])) }) it("must stringify with toJSON", function() { var array = [{toJSON: function() { return 42 }}] assert.strictEqual(stringify(array), jsonify([42])) }) }) describe("given Object", function() { it("must stringify recursively", function() { var obj = {a: {cool: 42}} assert.strictEqual(stringify(obj), jsonify(obj)) }) it("must stringify inherited properties", function() { var obj = Object.create({a: 42}) assert.strictEqual(stringify(obj), jsonify({a: 42})) }) it("must stringify circular objects", function() { var obj = {name: "John", likes: {sex: true}} obj.self = obj assert.strictEqual(stringify(obj), jsonify({ name: "John", likes: {sex: true}, self: "[Circular ~]" })) }) it("must stringify nested circular objects", function() { var obj = {name: "John", likes: {}} obj.likes.likes = obj.likes var str = jsonify({name: "John", likes: {likes: "[Circular ~.likes]"}}) assert.strictEqual(stringify(obj), str) }) it("must stringify circular arrays", function() { var obj = [1, 2, 3] obj.push(obj) obj.push(5) assert.strictEqual(stringify(obj), jsonify([1, 2, 3, "[Circular ~]", 5])) }) it("must stringify circular inherited objects", function() { var obj = Object.create({name: "John"}) obj.self = obj var str = jsonify({self: "[Circular ~]", name: "John"}) assert.strictEqual(stringify(obj), str) }) it("must stringify undefined values", function() { var obj = {name: "John", age: undefined} var str = jsonify({name: "John", age: "[Undefined]"}) assert.strictEqual(stringify(obj), str) }) it("must stringify NaN", function() { var obj = {age: NaN} var str = jsonify({age: "[NaN]"}) assert.strictEqual(stringify(obj), str) }) it("must stringify with toJSON", function() { var obj = {age: {toJSON: function() { return 42 }}} assert.strictEqual(stringify(obj), jsonify({age: 42})) }) itSymbol("must stringify nested Symbol", function() { var obj = {name: "John", type: Symbol("person")} var str = jsonify({name: "John", type: "Symbol(person)"}) assert.strictEqual(stringify(obj), str) }) it("must stringify nested RegExp", function() { var obj = {name: "John", match: /tinder/i} var str = jsonify({name: "John", match: "/tinder/i"}) assert.strictEqual(stringify(obj), str) }) it("must not stringify nested Function", function() { var obj = {name: "John", greet: function() {}} assert.strictEqual(stringify(obj), jsonify({name: "John"})) }) }) describe("given Error", function() { it("must stringify the message", function() { var err = new Error("Problem") assert.strictEqual(stringify(err), jsonify({message: "Problem"})) }) it("must stringify other enumerable properties", function() { var err = new Error("Not Found") err.code = 404 var str = jsonify({code: 404, message: "Not Found"}) assert.strictEqual(stringify(err), str) }) }) }) function jsonify(obj) { return JSON.stringify(obj, null, INDENT) }