123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326 |
- var assert = require('assert');
- var humps = require('../humps');
- describe('humps', function() {
- 'use strict';
- var actual;
- // =========
- // = Setup =
- // =========
- beforeEach(function() {
- this.simple_obj = {
- attr_one: 'foo',
- attr_two: 'bar'
- };
- this.simpleCamelObj = {
- attrOne: 'foo',
- attrTwo: 'bar'
- };
- this.simplePascalObj = {
- AttrOne: 'foo',
- AttrTwo: 'bar'
- };
- this.complex_obj = {
- attr_one: 'foo',
- attr_two: {
- nested_attr1: 'bar'
- },
- attr_three: {
- nested_attr2: {
- nested_attr3: [{
- nested_in_array1: 'baz'
- }, {
- nested_in_array2: 'hello'
- }, {
- nested_in_array3: ['world', 'boo']
- }]
- }
- }
- };
- this.complexCamelObj = {
- attrOne: 'foo',
- attrTwo: {
- nestedAttr1: 'bar'
- },
- attrThree: {
- nestedAttr2: {
- nestedAttr3: [{
- nestedInArray1: 'baz'
- }, {
- nestedInArray2: 'hello'
- }, {
- nestedInArray3: ['world', 'boo']
- }]
- }
- }
- };
- this.complexPascalObj = {
- AttrOne: 'foo',
- AttrTwo: {
- NestedAttr1: 'bar'
- },
- AttrThree: {
- NestedAttr2: {
- NestedAttr3: [{
- NestedInArray1: 'baz'
- }, {
- NestedInArray2: 'hello'
- }, {
- NestedInArray3: ['world', 'boo']
- }]
- }
- }
- };
- this.complexIgnoringNumbersObj = {
- attr_one: 'foo',
- attr_two: {
- nested_attr1: 'bar'
- },
- attr_three: {
- nested_attr2: {
- nested_attr3: [{
- nested_in_array1: 'baz'
- }, {
- nested_in_array2: 'hello'
- }, {
- nested_in_array3: ['world', 'boo']
- }]
- }
- }
- };
- this.complexCustomObj = {
- 'attr-one': 'foo',
- 'attr-two': {
- 'nested-attr1': 'bar'
- },
- 'attr-three': {
- 'nested-attr2': {
- 'nested-attr3': [{
- 'nested-in-array1': 'baz'
- }, {
- 'nested-in-array2': 'hello'
- }, {
- 'nested-in-array3': ['world', 'boo']
- }]
- }
- }
- };
- });
- // =========
- // = Specs =
- // =========
- describe('.camelizeKeys', function() {
- it('converts simple object keys to camelcase', function() {
- assert.deepEqual(humps.camelizeKeys(this.simple_obj), this.simpleCamelObj);
- });
- it('converts complex object keys to camelcase', function() {
- assert.deepEqual(humps.camelizeKeys(this.complex_obj), this.complexCamelObj);
- });
- it('does not attempt to process dates', function() {
- 'work in progress';
- var date = new Date();
- var _object = {
- a_date: date
- };
- var convertedObject = {
- aDate: date
- };
- assert.deepEqual(humps.camelizeKeys(_object), convertedObject);
- });
- it('converts keys within arrays of objects', function() {
- var array = [{first_name: 'Sam'}, {first_name: 'Jenna'}],
- convertedArray = [{firstName: 'Sam'}, {firstName: 'Jenna'}],
- result = humps.camelizeKeys(array);
- assert.deepEqual(result, convertedArray);
- // Ensure it’s an array, and not an object with numeric keys
- assert.deepEqual(toString.call(result), '[object Array]');
- });
- describe("when the value is a function", function() {
- it('converts the key and assigns the function', function() {
- function myFunction() {
- }
- var _object = {
- a_function: myFunction
- };
- var result = humps.camelizeKeys(_object);
- // deepEqual treats functions as the same as an empty object
- assert.strictEqual(result.aFunction, myFunction);
- });
- });
- it('uses a custom convertion callback', function() {
- actual = humps.camelizeKeys(this.simple_obj, function(key, convert) {
- return key === 'attr_one' ? key : convert(key);
- });
- assert.deepEqual(actual, { attr_one: 'foo', attrTwo: 'bar' });
- });
- });
- describe('.decamelizeKeys', function() {
- it('converts simple objects with camelcased keys to underscored', function() {
- assert.deepEqual(humps.decamelizeKeys(this.simpleCamelObj), this.simple_obj);
- });
- it('converts complex objects with camelcased keys to underscored', function() {
- assert.deepEqual(humps.decamelizeKeys(this.complexCamelObj), this.complex_obj);
- });
- it('decamelizes keys with a custom separator', function() {
- actual = humps.decamelizeKeys(this.complexCamelObj, { separator: '-' });
- assert.deepEqual(actual, this.complexCustomObj);
- });
- it('uses a custom split regexp', function() {
- actual = humps.decamelizeKeys({ attr1: 'foo' }, { split: /(?=[A-Z0-9])/ });
- assert.deepEqual(actual, { attr_1: 'foo' });
- });
- it('uses a custom convertion callback', function() {
- actual = humps.decamelizeKeys(this.simpleCamelObj, function(key, convert, options) {
- return key === 'attrOne' ? key : convert(key, options);
- });
- assert.deepEqual(actual, { attrOne: 'foo', attr_two: 'bar' });
- });
- describe("when the value is a function", function() {
- it('converts the key and assigns the function', function() {
- function myFunction() {
- }
- var _object = {
- aFunction: myFunction
- };
- var result = humps.decamelizeKeys(_object);
- // deepEqual treats functions as the same as an empty object
- assert.strictEqual(result.a_function, myFunction);
- });
- });
- it('uses a custom convertion callback as an option', function() {
- actual = humps.decamelizeKeys(this.simpleCamelObj, {
- process: function(key, convert, options) {
- return key === 'attrOne' ? key : convert(key, options);
- }
- });
- assert.deepEqual(actual, { attrOne: 'foo', attr_two: 'bar' });
- });
- });
- describe('.pascalizeKeys', function() {
- it('converts simple object keys to PascalCase', function() {
- assert.deepEqual(humps.pascalizeKeys(this.simple_obj), this.simplePascalObj);
- });
- it('converts complex object keys to PascalCase', function() {
- assert.deepEqual(humps.pascalizeKeys(this.complex_obj), this.complexPascalObj);
- });
- it('does not attempt to process dates', function() {
- 'work in progress';
- var date = new Date();
- var _object = {
- a_date: date
- };
- var convertedObject = {
- ADate: date
- };
- assert.deepEqual(humps.pascalizeKeys(_object), convertedObject);
- });
- it('uses a custom convertion callback', function() {
- actual = humps.pascalizeKeys(this.simple_obj, function(key, convert) {
- return key === 'attr_one' ? key : convert(key);
- });
- assert.deepEqual(actual, { attr_one: 'foo', AttrTwo: 'bar' });
- });
- });
- describe('.depascalizeKeys', function() {
- it('converts simple object with PascalCase keys to underscored', function() {
- assert.deepEqual(humps.depascalizeKeys(this.simplePascalObj), this.simple_obj);
- });
- it('converts complex object with PascalCase keys to underscored', function() {
- assert.deepEqual(humps.depascalizeKeys(this.complexPascalObj), this.complex_obj);
- });
- it('depascalizes keys with a custom separator', function() {
- actual = humps.depascalizeKeys(this.complexPascalObj, { separator: '-' });
- assert.deepEqual(actual, this.complexCustomObj);
- });
- });
- describe('.camelize', function() {
- it('converts underscored strings to camelcase', function() {
- assert.equal(humps.camelize('hello_world'), 'helloWorld');
- });
- it('converts hyphenated strings to camelcase', function() {
- assert.equal(humps.camelize('hello-world'), 'helloWorld');
- assert.equal(humps.camelize('hello-world-1'), 'helloWorld1');
- });
- it('converts space-separated strings to camelcase', function() {
- assert.equal(humps.camelize('hello world'), 'helloWorld');
- });
- it('converts PascalCased strings to camelcase', function() {
- assert.equal(humps.camelize('HelloWorld'), 'helloWorld');
- });
- it('keeps numbers unchanged', function() {
- assert.equal(humps.camelize('-1'), '-1');
- assert.equal(humps.camelize('1'), '1');
- });
- });
- describe('.decamelize', function() {
- it('converts camelcased strings to underscored', function() {
- assert.equal(humps.decamelize('helloWorld'), 'hello_world');
- });
- it('decamelizes strings with custom separator', function() {
- actual = humps.decamelize('helloWorld', { separator: '-' });
- assert.equal(actual, 'hello-world');
- });
- it('does not separate on digits', function() {
- assert.equal(humps.decamelize('helloWorld1'), 'hello_world1');
- });
- it('uses a custom split regexp', function() {
- assert.equal(humps.decamelize('helloWorld1', { split: /(?=[A-Z0-9])/ }),
- 'hello_world_1');
- });
- });
- describe('.pascalize', function() {
- it('converts underscored strings to PascalCase', function() {
- assert.equal(humps.pascalize('hello_world'), 'HelloWorld');
- });
- it('converts hyphenated strings to PascalCase', function() {
- assert.equal(humps.pascalize('hello-world'), 'HelloWorld');
- });
- it('converts space-separated strings to PascalCase', function() {
- assert.equal(humps.pascalize('hello world'), 'HelloWorld');
- });
- });
- });
|