mirror of
https://github.com/atom/atom.git
synced 2026-01-23 13:58:08 -05:00
91 lines
3.3 KiB
CoffeeScript
91 lines
3.3 KiB
CoffeeScript
CSON = require 'cson'
|
|
|
|
describe "CSON", ->
|
|
describe "@stringify(object)", ->
|
|
describe "when the object is undefined", ->
|
|
it "throws an exception", ->
|
|
expect(-> CSON.stringify()).toThrow()
|
|
|
|
describe "when the object is a function", ->
|
|
it "throws an exception", ->
|
|
expect(-> CSON.stringify(-> 'function')).toThrow()
|
|
|
|
describe "when the object contains a function", ->
|
|
it "throws an exception", ->
|
|
expect(-> CSON.stringify(a: -> 'function')).toThrow()
|
|
|
|
describe "when formatting an undefined key", ->
|
|
it "does not include the key in the formatted CSON", ->
|
|
expect(CSON.stringify(b: 1, c: undefined)).toBe "'b': 1"
|
|
|
|
describe "when formatting a string", ->
|
|
it "returns formatted CSON", ->
|
|
expect(CSON.stringify(a: 'b')).toBe "'a': 'b'"
|
|
|
|
it "escapes single quotes", ->
|
|
expect(CSON.stringify(a: "'b'")).toBe "'a': '\\\'b\\\''"
|
|
|
|
it "doesn't escape double quotes", ->
|
|
expect(CSON.stringify(a: '"b"')).toBe "'a': '\"b\"'"
|
|
|
|
it "escapes newlines", ->
|
|
expect(CSON.stringify("a\nb")).toBe "'a\\nb'"
|
|
|
|
describe "when formatting a boolean", ->
|
|
it "returns formatted CSON", ->
|
|
expect(CSON.stringify(true)).toBe 'true'
|
|
expect(CSON.stringify(false)).toBe 'false'
|
|
expect(CSON.stringify(a: true)).toBe "'a': true"
|
|
expect(CSON.stringify(a: false)).toBe "'a': false"
|
|
|
|
describe "when formatting a number", ->
|
|
it "returns formatted CSON", ->
|
|
expect(CSON.stringify(54321.012345)).toBe '54321.012345'
|
|
expect(CSON.stringify(a: 14)).toBe "'a': 14"
|
|
expect(CSON.stringify(a: 1.23)).toBe "'a': 1.23"
|
|
|
|
describe "when formatting null", ->
|
|
it "returns formatted CSON", ->
|
|
expect(CSON.stringify(null)).toBe 'null'
|
|
expect(CSON.stringify(a: null)).toBe "'a': null"
|
|
|
|
describe "when formatting an array", ->
|
|
describe "when the array is empty", ->
|
|
it "puts the array on a single line", ->
|
|
expect(CSON.stringify([])).toBe "[]"
|
|
|
|
it "returns formatted CSON", ->
|
|
expect(CSON.stringify(a: ['b'])).toBe "'a': [\n 'b'\n]"
|
|
expect(CSON.stringify(a: ['b', 4])).toBe "'a': [\n 'b'\n 4\n]"
|
|
|
|
describe "when the array has an undefined value", ->
|
|
it "formats the undefined value as null", ->
|
|
expect(CSON.stringify(['a', undefined, 'b'])).toBe "[\n 'a'\n null\n 'b'\n]"
|
|
|
|
describe "when the array contains an object", ->
|
|
it "wraps the object in {}", ->
|
|
expect(CSON.stringify([{a:'b', a1: 'b1'}, {c: 'd'}])).toBe "[\n {\n 'a': 'b'\n 'a1': 'b1'\n }\n {\n 'c': 'd'\n }\n]"
|
|
|
|
describe "when formatting an object", ->
|
|
describe "when the object is empty", ->
|
|
it "returns {}", ->
|
|
expect(CSON.stringify({})).toBe "{}"
|
|
|
|
it "returns formatted CSON", ->
|
|
expect(CSON.stringify(a: {b: 'c'})).toBe "'a':\n 'b': 'c'"
|
|
|
|
describe "when converting back to an object", ->
|
|
it "produces the original object", ->
|
|
object =
|
|
showInvisibles: true
|
|
fontSize: 20
|
|
core:
|
|
themes: ['a', 'b']
|
|
whitespace:
|
|
ensureSingleTrailingNewline: true
|
|
|
|
cson = CSON.stringify(object)
|
|
CoffeeScript = require 'coffee-script'
|
|
evaledObject = CoffeeScript.eval(cson, bare: true)
|
|
expect(evaledObject).toEqual object
|