datahub/test/backend.csv.test.js
Rufus Pollock 5d24fd474d [csv,bugfix][s]: fix to csv backend to correct issue with header row appearing in data in case where fields passed explicitly.
* The bug was triggered by change in 4d128af797546e5174537d8ed530a243e444eeab to use model fields if explicitly provided
  * model.test.js illustrated issue (that new test was failing prior to changes to csv backend in this commit)
* Issue was that CSV backend did not pass back fields option. Previously, if no fields provided from backend we extracted fields from first row of the returned records. With change in 4d128af797546e5174537d8ed530a243e444eeab to use model fields if provided we had an issue as we no longer removed first row for fields.
* Fixed by having CSV backend explicitly extract fields and pass them back
2013-06-15 12:12:15 +01:00

113 lines
2.7 KiB
JavaScript

(function ($) {
module("Backend Local CSV");
test("parseCSV", function() {
var csv = '"Jones, Jay",10\n' +
'"Xyz ""ABC"" O\'Brien",11:35\n' +
'"Other, AN",12:35\n';
var array = recline.Backend.CSV.parseCSV(csv);
var exp = [
['Jones, Jay', 10],
['Xyz "ABC" O\'Brien', '11:35' ],
['Other, AN', '12:35' ]
];
deepEqual(exp, array);
var csv = '"Jones, Jay", 10\n' +
'"Xyz ""ABC"" O\'Brien", 11:35\n' +
'"Other, AN", 12:35\n';
var array = recline.Backend.CSV.parseCSV(csv, {trim : true});
deepEqual(exp, array);
var csv = 'Name, Value\n' +
'"Jones, Jay", 10\n' +
'"Xyz ""ABC"" O\'Brien", 11:35\n' +
'"Other, AN", 12:35\n';
var dataset = new recline.Model.Dataset({
data: csv,
backend: 'csv'
});
dataset.fetch();
equal(dataset.records.length, 3);
var row = dataset.records.models[0].toJSON();
deepEqual(row, {Name: 'Jones, Jay', Value: 10});
});
test("parseCSV - semicolon", function() {
var csv = '"Jones; Jay";10\n' +
'"Xyz ""ABC"" O\'Brien";11:35\n' +
'"Other; AN";12:35\n';
var array = recline.Backend.CSV.parseCSV(csv, {delimiter : ';'});
var exp = [
['Jones; Jay', 10],
['Xyz "ABC" O\'Brien', '11:35' ],
['Other; AN', '12:35' ]
];
deepEqual(exp, array);
});
test("parseCSV - quotechar", function() {
var csv = "'Jones, Jay',10\n" +
"'Xyz \"ABC\" O''Brien',11:35\n" +
"'Other; AN',12:35\n";
var array = recline.Backend.CSV.parseCSV(csv, {quotechar:"'"});
var exp = [
["Jones, Jay", 10],
["Xyz \"ABC\" O'Brien", "11:35" ],
["Other; AN", "12:35" ]
];
deepEqual(exp, array);
});
test("parseCSV skipInitialRows", function() {
var csv = '"Jones, Jay",10\n' +
'"Xyz ""ABC"" O\'Brien",11:35\n' +
'"Other, AN",12:35\n';
var array = recline.Backend.CSV.parseCSV(csv, {skipInitialRows: 1});
var exp = [
['Xyz "ABC" O\'Brien', '11:35' ],
['Other, AN', '12:35' ]
];
deepEqual(exp, array);
});
test("serializeCSV - Array", function() {
var csv = [
['Jones, Jay', 10],
['Xyz "ABC" O\'Brien', '11:35' ],
['Other, AN', '12:35' ]
];
var array = recline.Backend.CSV.serializeCSV(csv);
var exp = '"Jones, Jay",10\n' +
'"Xyz \"ABC\" O\'Brien",11:35\n' +
'"Other, AN",12:35\n';
deepEqual(array, exp);
});
test("serializeCSV - Object", function() {
var indata = {
fields: [ {id: 'name'}, {id: 'number'}],
records: [
{name: 'Jones, Jay', number: 10},
{name: 'Xyz "ABC" O\'Brien', number: '11:35' },
{name: 'Other, AN', number: '12:35' }
]
};
var array = recline.Backend.CSV.serializeCSV(indata);
var exp = 'name,number\n' +
'"Jones, Jay",10\n' +
'"Xyz \"ABC\" O\'Brien",11:35\n' +
'"Other, AN",12:35\n';
deepEqual(array, exp);
});
})(this.jQuery);