UNPKG

lamed_io

Version:
236 lines (190 loc) 8.01 kB
/* jshint esversion: 6 */ // ------------------------------------------------------ const _test = require('lamed_test') const { notOk, notEqual, con, unZip, unThrow } = _test // con.traceSet(0) con.log('Starting io.file.test.js...') const _core = require('lamed_core') const _lio = require('../src/lamed_io') _lio.About() const { folderFix, isWindows, fileGetExt, fileSetStamp, fileFromPath, configRead, configWrite } = _lio const path0 = __dirname // .replace('\\test', '') ; /* root folder */ const path1 = path0 + '/templates/JSN/about/' const file = path0 + '/templates/JSN/about/about_startNewApp.js' // isWindows(), folderFix() unZip(() => isWindows()) unZip(() => folderFix('C:\\Users\\cobolivier\\Desktop\\Plantcare_demo\\SRS\\Milling'), 'C:/Users/cobolivier/Desktop/Plantcare_demo/SRS/Milling/') con.traceLine() // fileFromPath() ------------------------------------------------------------- unZip(() => fileFromPath('c:\\test\\test.json'), 'test.json') unZip(() => fileFromPath('c:/test/test.json'), 'test.json') unZip(() => fileFromPath('c:\\test\\test.json', false), 'test') unZip(() => fileFromPath('c:/test/test.json', false), 'test') unZip(() => fileFromPath('c:/test/compare.test.js', false), 'compare.test') con.traceLine() // configRead(), configWrite() -------------------------------------------------- unZip(() => configWrite(configRead())) async function versionTest (done) { con.traceLine() con.trace(module.filename) con.traceBold(`--------------------------> ${arguments.callee.name}()`) // eslint-disable-line let error = `In ${module.filename} --> ${arguments.callee.name}()` // eslint-disable-line const path = _lio.packageJson_Path() con.trace({ path }) if (notOk(path)) return done(new Error(error)) const pack = _lio.packageJson() if (notOk(pack)) return done(new Error(error)) const version = _lio.Version(false) con.trace({ version }) if (notOk(version)) return done(new Error(error)) const about = _lio.About(false) con.trace({ about }) if (notOk(about)) return done(new Error(error)) return true // Success } async function existTest1 (done) { con.traceLine() con.trace(module.filename) con.traceBold(`--------------------------> ${arguments.callee.name}()`) // eslint-disable-line let error = `In ${module.filename} --> ${arguments.callee.name}()` // eslint-disable-line // let test = './package.json' const test = _lio.packageJson_Path() con.trace({ test }) if (_lio.exist(test) === false) return done(new Error(error)) con.trace({ path1 }) if (_lio.exist(path1) === false) return done(new Error(error)) con.trace({ file }) if (_lio.exist(file) === false) return done(new Error(error)) const json = _lio.packageJson_Path() con.trace({ json }) if (_lio.exist(json) === false) return done(new Error(error)) return true // Success } async function existTest2 (done) { con.traceLine() con.trace(module.filename) con.traceBold(`--------------------------> ${arguments.callee.name}()`) // eslint-disable-line let error = `In ${module.filename} --> ${arguments.callee.name}()` // eslint-disable-line const path2 = path1 + '2' const file2 = file + '2' con.trace({ path2 }) if (_lio.exist(path2) === true) return done(new Error(error)) con.trace(({ file2 })) if (_lio.exist(file2) === true) return done(new Error(error)) return true // Success } async function writeTest (done) { con.traceLine() con.trace(module.filename) con.traceBold(`--------------------------> ${arguments.callee.name}()`) // eslint-disable-line let error = `In ${module.filename} --> ${arguments.callee.name}()` // eslint-disable-line const file = path1 + 'testFile.txt' const file2 = path1 + 'con.txt' _lio.writeFileSync(file, 'sync test') // Error test unThrow(() => _lio.writeFileSync(file2, 'con test')) await _lio.writeFile(file, 'this is a test') con.trace(`Write file: "${file}"`) return true } function fileSetExtension (done) { con.traceLine() con.trace(module.filename) con.traceBold(`--------------------------> ${arguments.callee.name}()`) // eslint-disable-line let error = `In ${module.filename} --> ${arguments.callee.name}()` // eslint-disable-line if (notEqual(_lio.fileSetExtension('file'), 'file')) done(new Error(error)) if (notEqual(_lio.fileSetExtension('file', '.txt'), 'file.txt')) done(new Error(error)) if (notEqual(_lio.fileSetExtension('file.md', '.txt'), 'file.txt')) done(new Error(error)) // fileSetStamp unZip(() => fileGetExt('file.ext'), { file: 'file', ext: '.ext' }) unZip(() => fileGetExt('file'), { file: 'file', ext: '' }) const now = _core.Date_FromStr('2019-07-26') // Set now to test these functions with real values now.setSeconds(15353) now.setMilliseconds(123) // con.log({now}) unZip(() => fileSetStamp('file1', false, now), 'file1_2019_07_26') unZip(() => fileSetStamp('file1.txt', false, now), 'file1_2019_07_26.txt') // SA timezone if ((new Date()).getTimezoneOffset() === -120) { unZip(() => fileSetStamp('file1', true, now), 'file1_2019_07_26_T_06_15_53.123') unZip(() => fileSetStamp('file1.txt', true, now), 'file1_2019_07_26_T_06_15_53.123.txt') } else { unZip(() => fileSetStamp('file1', true, now), 'file1_2019_07_26_T_04_15_53.123') unZip(() => fileSetStamp('file1.txt', true, now), 'file1_2019_07_26_T_04_15_53.123.txt') } unZip(() => fileSetStamp('file1.txt', false, now), 'file1_2019_07_26.txt') return true // Success } function logMemoryUsage (msg = 'Mem useage', addMB = false) { let mb = 0 if (addMB) mb = 'mb' const mem = process.memoryUsage() const rss = Math.round(mem.rss / 1024 / 1024) + mb const heapTotal = Math.round(mem.heapTotal / 1024 / 1024) + mb const heapUsed = Math.round(mem.heapUsed / 1024 / 1024) + mb // let external = mem.external / 1024 / 1024 con.log({ msg, rss, heapTotal, heapUsed }) return { msg, rss, heapTotal, heapUsed } } unZip(() => logMemoryUsage()) function fileReadLargeTest () { // eslint-disable-line // https://stackoverflow.com/questions/16010915/parsing-huge-logfiles-in-node-js-read-in-line-by-line // https://itnext.io/@paigen11 // File is read async var fs = require('fs') var es = require('event-stream') var lineNr = 0 var s = fs.createReadStream('very-large-file.csv') .pipe(es.split()) .pipe(es.mapSync(function (line) { // pause the readstream s.pause() lineNr += 1 // process line here and call s.resume() when rdy // function below was for logging memory usage logMemoryUsage(lineNr) // resume the readstream, possibly from a callback s.resume() }) .on('error', function (err) { con.logRed('Error while reading file.', err) }) .on('end', function () { console.log('Read entire file.') }) ) } /** * Test all functions * @param done - callback function to indicate failure or completion * @constructor */ async function TestAll (done) { con.traceLine() con.trace(module.filename) con.traceBold(`--------------------------> ${arguments.callee.name}()`) // eslint-disable-line // Run test functions from here const result0 = versionTest(done) const result1 = existTest1(done) const result2 = existTest2(done) const result4 = await writeTest(done) const result5 = fileSetExtension(done) return _test.testAND(module.filename, result0, result1, result2, result4, result5) } /** * Execute the tests manually */ async function testRunner (traceLevel = 0) { const isRoot = _test.isRootFolder() // const _lio = require('lamed_io') con.trace({ isRoot }) if (isRoot) return con.traceSet(traceLevel) const done2 = (err) => { if (err !== undefined) { throw err } } // Only run if not executed from the root folder if (await TestAll(done2)) con.logGreen('Success!!!') } testRunner(0) // Exports -------------------------- module.exports = { TestAll, fileSetExtension, versionTest, existTest1, existTest2, writeTest }