agmission/Development/libs/shapefile/test/dbf-test.js

46 lines
1.4 KiB
JavaScript

var fs = require("fs"),
tape = require("tape"),
shapefile = require("../");
testConversion("number-null-property");
testConversion("string-property");
testConversion("mixed-properties");
testConversion("date-property");
testConversion("utf8-property", {encoding: "utf8"});
function testConversion(name, options) {
tape("shapefile.openDbf(" + name + ")", function(test) {
shapefile.openDbf("test/" + name + ".dbf", options)
.then(source => {
var values = [];
return source.read().then(function read(result) {
if (result.done) return values;
fixActualProperties(result.value);
values.push(result.value);
return source.read().then(read);
});
})
.then(values => (test.deepEqual(values, JSON.parse(fs.readFileSync("test/" + name + ".json", "utf8")).features.map(properties)), test.end()))
.catch(error => test.end(error));
});
}
function properties(feature) {
fixExpectedProperties(feature.properties);
return feature.properties;
}
function fixActualProperties(properties) {
for (var key in properties) {
if (properties[key] == null) {
delete properties[key];
}
}
delete properties.FID; // ogr2ogr built-in?
}
function fixExpectedProperties(properties) {
var d = properties.date;
if (d) properties.date = new Date(+d.substring(0, 4), d.substring(4, 6) - 1, +d.substring(6, 8));
}