178 lines
4.3 KiB
JavaScript
178 lines
4.3 KiB
JavaScript
/* jshint node:true */
|
|
/* jshint esversion: 6 */
|
|
/* jshint -W030 */
|
|
|
|
var chai = require('chai');
|
|
var {assert, expect} = require('chai');
|
|
var jsonexport = require('../lib/index');
|
|
var os = require('os');
|
|
|
|
|
|
const isRemoteTest = process.env.APPVEYOR || process.env.TRAVIS;
|
|
if( isRemoteTest ){
|
|
console.log('\x1b[34mRemote testing server detected on '+os.type()+' '+os.platform()+' '+os.release()+'\x1b[0m');
|
|
}
|
|
|
|
describe('Object', () => {
|
|
it('simple', async () => {
|
|
const csv = await jsonexport({
|
|
lang: 'Node.js',
|
|
module: 'jsonexport'
|
|
}, {})
|
|
assert.equal(csv, `lang,Node.js${os.EOL}module,jsonexport`);
|
|
});
|
|
|
|
it('complex', async () => {
|
|
const csv = await jsonexport({
|
|
cars: 12,
|
|
roads: 5,
|
|
traffic: 'slow',
|
|
speed: {
|
|
max: 123,
|
|
avg: 20,
|
|
min: 5
|
|
},
|
|
size: [10, 20],
|
|
escaped: 'I am a "quoted" field'
|
|
}, {})
|
|
assert.equal(csv, `cars,12${os.EOL}roads,5${os.EOL}traffic,slow${os.EOL}speed.max,123${os.EOL}speed.avg,20${os.EOL}speed.min,5${os.EOL}size,10;20${os.EOL}escaped,"I am a ""quoted"" field"`);
|
|
});
|
|
|
|
it('Github #41 p1',async ()=>{
|
|
var contacts = [{
|
|
name: 'Bob',
|
|
lastname: 'Smith',
|
|
status: null,
|
|
test: true
|
|
},{
|
|
name: 'James',
|
|
lastname: 'David',
|
|
status: 'fired',
|
|
test: true
|
|
}];
|
|
|
|
const csv = await jsonexport(contacts)
|
|
assert.equal(csv, `name,lastname,status,test${os.EOL}Bob,Smith,,true${os.EOL}James,David,fired,true`);
|
|
});
|
|
|
|
it('Github #41 p2',async ()=>{
|
|
var contacts = {
|
|
'a' : 'another field',
|
|
'b' : '',
|
|
'c' : 'other field'
|
|
};
|
|
|
|
const csv = await jsonexport(contacts)
|
|
assert.equal(csv, `a,another field${os.EOL}b,${os.EOL}c,other field`);
|
|
});
|
|
|
|
it('Buffer to String - Github #48',async ()=>{
|
|
var contacts = {
|
|
'0' : true,
|
|
'1' : [11,22,33],
|
|
'2' : ()=>'bad ace',
|
|
'a' : Buffer.from('a2b', 'utf8'),
|
|
'b' : 'x',
|
|
'c' : 99,
|
|
'd' : {
|
|
x:Buffer.from('other field', 'utf8')
|
|
}
|
|
};
|
|
|
|
var options={
|
|
typeHandlers:{
|
|
Array:function(value,index,parent){
|
|
return 'replaced-array';
|
|
},
|
|
Boolean:function(value,index,parent){
|
|
return 'replaced-boolean';
|
|
},
|
|
Function:function(value,index,parent){
|
|
return value();
|
|
},
|
|
Number:function(value,index,parent){
|
|
return 'replaced-number';
|
|
},
|
|
String:function(value,index,parent){
|
|
return 'replaced-string';
|
|
},
|
|
Buffer:function(value,index,parent){
|
|
if(parent===contacts){
|
|
return 'parentless-'+index;
|
|
}
|
|
|
|
return value.toString();
|
|
}
|
|
}
|
|
};
|
|
|
|
const csv = await jsonexport(contacts, options)
|
|
assert.equal(csv, `0,replaced-boolean${os.EOL}1,replaced-array${os.EOL}2,bad ace${os.EOL}a,parentless-a${os.EOL}b,replaced-string${os.EOL}c,replaced-number${os.EOL}d.x,other field`);
|
|
});
|
|
|
|
it('Zero, undefined, & null', async () => {
|
|
const csv = await jsonexport([
|
|
{
|
|
"a": 0,
|
|
"b": undefined,
|
|
"c": null,
|
|
"d": 1,
|
|
"e": "this"
|
|
}
|
|
], {})
|
|
|
|
assert.equal(csv, `a,b,c,d,e\n0,,,1,this`)
|
|
});
|
|
|
|
it('Date', async () => {
|
|
const csv = await jsonexport([
|
|
{
|
|
"a": 0,
|
|
"b": undefined,
|
|
"c": null,
|
|
"d": 1,
|
|
"e": "this",
|
|
"f": new Date('10/20/2020'),
|
|
}
|
|
], {})
|
|
|
|
assert.equal(csv, `a,b,c,d,e,f\n0,,,1,this,${(new Date('10/20/2020')).toLocaleDateString()}`)
|
|
});
|
|
|
|
it('Date with typeHandlers.Date', async () => {
|
|
const csv = await jsonexport([
|
|
{
|
|
"a": 0,
|
|
"b": undefined,
|
|
"c": null,
|
|
"d": 1,
|
|
"e": "this",
|
|
"f": new Date('10/20/2020'),
|
|
}
|
|
], {
|
|
typeHandlers: {
|
|
//Using "replace-date" because of problem of locale
|
|
Date: (value, index, parent) => "replaced-date",
|
|
}
|
|
})
|
|
|
|
assert.equal(csv, `a,b,c,d,e,f\n0,,,1,this,replaced-date`)
|
|
});
|
|
|
|
it('Date with handleDate', async () => {
|
|
const csv = await jsonexport([
|
|
{
|
|
"a": 0,
|
|
"b": undefined,
|
|
"c": null,
|
|
"d": 1,
|
|
"e": "this",
|
|
"f": new Date('10/20/2020'),
|
|
}
|
|
], {
|
|
handleDate: (element, item) => "replaced-date",
|
|
})
|
|
|
|
assert.equal(csv, `a,b,c,d,e,f\n0,,,1,this,replaced-date`)
|
|
});
|
|
}); |