lamed_io
Version:
236 lines (190 loc) • 8.01 kB
JavaScript
/* 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 }