lipdjs
Version:
A JavaScript library for reading and writing LiPD (Linked Paleo Data) files
103 lines (78 loc) • 4.03 kB
text/typescript
import { LiPD } from '../lipd';
import * as path from 'path';
import * as fs from 'fs';
import { Dataset } from '../classes/dataset';
describe('LiPD File Loading Tests', () => {
const testDataDir = path.join(__dirname, '../../examples/data');
test('should load a single LiPD file', async () => {
const lipd = new LiPD();
const testFile = path.join(testDataDir, 'Ant-WAIS-Divide.Severinghaus.2012.lpd');
await lipd.load(testFile);
// Check if the file was loaded successfully
const datasetNames = await lipd.getAllDatasetNames();
expect(datasetNames.length).toBeGreaterThan(0);
expect(datasetNames[0]).toContain('Ant-WAIS-Divide');
});
test('should load multiple LiPD files', async () => {
const lipd = new LiPD();
const testFiles = [
'Ant-WAIS-Divide.Severinghaus.2012.lpd',
'MyWonderfulRecord.LinkedEarth.2024.lpd'
].map(file => path.join(testDataDir, file));
await lipd.load(testFiles);
const datasetNames = await lipd.getAllDatasetNames();
expect(datasetNames.length).toBe(2);
expect(datasetNames).toContain('Ant-WAIS-Divide.Severinghaus.2012');
expect(datasetNames).toContain('MyWonderfulRecord.LinkedEarth.2024');
});
test('should load all LiPD files from directory', async () => {
const lipd = new LiPD();
await lipd.loadFromDir(testDataDir);
const datasetNames = await lipd.getAllDatasetNames();
expect(datasetNames.length).toBeGreaterThan(0);
// Check if all example files are loaded
const files = fs.readdirSync(testDataDir);
const lpdFiles = files.filter(file => file.endsWith('.lpd'));
expect(datasetNames.length).toBe(lpdFiles.length);
});
test('should convert LiPD file to Dataset class', async () => {
const lipd = new LiPD();
const testFile = path.join(testDataDir, 'Ant-WAIS-Divide.Severinghaus.2012.lpd');
await lipd.load(testFile);
// Get the dataset names and convert the first one to a Dataset class
const datasetNames = await lipd.getAllDatasetNames();
expect(datasetNames.length).toBeGreaterThan(0);
// Debug: Print the dataset names
// console.log('Dataset names:', datasetNames);
const dataset = (await lipd.getDatasets())[0]
// Debug: Print the dataset properties
// console.log('Dataset name:', dataset.getName());
// console.log('Dataset ID:', dataset.getDatasetId());
// console.log('Dataset type:', dataset.constructor.name);
// Verify the Dataset class properties
expect(dataset).toBeInstanceOf(Dataset);
expect(dataset.getName()).toBeTruthy();
expect(dataset.getDatasetId()).toBeTruthy();
// Check if the dataset has the expected structure
expect(dataset.getPaleoData().length).toBeGreaterThan(0);
expect(dataset.getChronData()).toBeDefined();
expect(dataset.getLocation()?.getLatitude()).toBeDefined();
// Verify the dataset name matches
expect(dataset.getName()).toContain('Ant-WAIS-Divide');
});
test('should load datasets into a new LiPD object', async () => {
const lipd = new LiPD();
await lipd.loadFromDir(testDataDir);
const datasets = await lipd.getDatasets();
const lipd2 = new LiPD();
lipd2.loadDatasets(datasets);
const datasetNames = await lipd2.getAllDatasetNames();
expect(datasetNames.length).toBe(datasets.length);
lipd2.createLipd(datasetNames[0], '/tmp/test.lpd');
const lipd3 = new LiPD();
await lipd3.load('/tmp/test.lpd');
const datasetNames2 = await lipd3.getAllDatasetNames();
expect(datasetNames2.length).toBe(1);
expect(datasetNames2[0]).toBe(datasetNames[0]);
});
});