UNPKG

lamed_table

Version:
332 lines (280 loc) 11.2 kB
// 'use strict' // Comment out in test functions console.log(`Starting ${__filename}...`) // comment line to remove simple logging /* ------------------------------------------------------ * table.test.js * Purpose: The purpose of this module is to test table operations * Date Created: 2019/12/11 * Created by : Perez Lamed van Niekerk --------------------------------------------------------- */ /* jshint esversion: 6 */ const _test = require('lamed_test') const { Ok, notOk, notOk_Then, Equal, notEqual, con, testAND, unZip } = _test // eslint-disable-line con.useChalk(require('chalk')) // con.traceSet(0) const _table = require('../src/table') // eslint-disable-line const _lio = require('lamed_io') const _lfolder = require('lamed_folder') function tableTest1 (done) { con.traceLine() con.trace(module.filename) con.traceBold(`--------------------------> ${arguments.callee.name}()`) // eslint-disable-line let error = `In ${module.filename} --> ${arguments.callee.name}()\n` // eslint-disable-line // if (false) return done(new Error(error)) const myTable = new _table.TableDef(['Branch', 'Commit']) unZip(() => myTable.totalCols(), 2) unZip(() => { return myTable.DATA }, { name: 'tableName', cols: ['branch', 'commit'], rows: [] }) myTable.Rows.Add(['branch1234', 'commit1234']) myTable.Rows.Add(['branch123', 'commit123']) myTable.sort('branch') if (notEqual(myTable.DATA.rows, [ ['branch123', 'commit123'], ['branch1234', 'commit1234'] ])) return done(new Error(error)) const row = [] myTable.Rows.Set(row, 'coMMiT', 'commit4321') // Should work for different cases (not case sensitive) myTable.Rows.Set(row, 'Branch', 'brr123') myTable.Rows.Add(row) if (notEqual(myTable.DATA.rows, [ ['branch123', 'commit123'], ['branch1234', 'commit1234'], ['brr123', 'commit4321'] ])) return done(new Error(error)) // Find const table1 = myTable.find('commit', 'commit4321') const table2 = myTable.find('coMMit', 'commit4321') if (notEqual(table1, table2)) return done(new Error(error)) if (notEqual(table1.DATA.rows, [ ['brr123', 'commit4321'] ])) return done(new Error(error)) if (notEqual(myTable.Rows.Include('COMMIT', '123'), myTable.Rows.Include('commit', '123'))) return done(new Error(error)) const rows1 = myTable.Rows.Include('commit', '123', true) const rows2 = myTable.Rows.Include('commit', '123', false) if (notEqual(rows1, ['branch123', 'commit123'])) return done(new Error(error)) if (notEqual(rows2, [ ['branch123', 'commit123'], ['branch1234', 'commit1234'] ])) return done(new Error(error)) const mdOutput = '## Table Name\n\n| Branch |Commit |\n| ---- | ---- |\nbranch123 |commit123 |\nbranch1234 |commit1234 |\nbrr123 |commit4321 |\n' const md = myTable.toMD() if (notEqual(md, mdOutput)) { myTable.check(true) con.trace({ md, mdOutput }) return done(new Error(error)) } // colsNumber if (myTable.Cols.Number('Branch') !== 0) return done(new Error(error)) if (myTable.Cols.Number('Commit') !== 1) return done(new Error(error)) if (myTable.Cols.Number('COMMIT') !== 1) return done(new Error(error)) if (myTable.Cols.Number('Branch1', false) !== -1) return done(new Error(error)) if (myTable.Cols.Number(0) !== 0) return done(new Error(error)) if (myTable.Cols.Number(1) !== 1) return done(new Error(error)) if (myTable.Cols.Number(10, false) !== -1) return done(new Error(error)) if (myTable.Cols.Number(-5, false) !== -1) return done(new Error(error)) // Test generated code const tableRowCode = myTable.CodeGenerate.RowGet(false) const rowResult = ' let [ branch, commit ] = row\n con.log({ branch, commit })\n' if (notEqual(rowResult, tableRowCode)) { con.log({ rowResult, tableRowCode }) return done(new Error(error)) } unZip(() => myTable.CodeGenerate.RowSet(false), "// Table [tableName] -> ['branch',commit']\n" + 'let row = []\n' + "tableName.Rows.Set(row, 'branch', '???')\n" + "tableName.Rows.Set(row, 'commit', '???')\n" + 'tableName.Rows.Add(row)\n' ) unZip(() => myTable.CodeGenerate.RowAdd(false), 'tableName.Rows.Add([branch, commit])') const tableLoopCode = myTable.CodeGenerate.TableLoop(false) const loopResult = '// tableName -> [branch, commit]\n for (let ii = 0; ii < tableName.DATA.rows.length; ii++) {\n let row = tableName.DATA.rows[ii]\n let [ branch, commit ] = row\n con.log({ branch, commit })\n}' if (notEqual(loopResult, tableLoopCode)) { con.log({ loopResult, tableLoopCode }) return done(new Error(error)) } return true // success } function colsAddTest1 (done) { let error = con.traceFunction(arguments.callee.name) // eslint-disable-line // if (false) done(new Error(error)) const myTable = new _table.TableDef(['Branch', 'Commit']) myTable.Rows.Add(['branch123', 'commit123']) myTable.Rows.Add(['branch1234', 'commit1234']) const cols1 = ['branch', 'commit', 'id'] // -----------------------------------------------[ colsAdd] myTable.Cols.Add('Id', '5') if (notEqual(myTable.DATA.cols, cols1)) { myTable.check(true) return done(new Error(error)) } const cols2 = ['branch', 'commit', 'id', 'text1', 'text2'] const rows2 = [ ['branch123', 'commit123', '5', '', ''], ['branch1234', 'commit1234', '5', '', ''] ] myTable.Cols.Add(['Text1', 'Text2']) if (notEqual(myTable.DATA.cols, cols2)) { myTable.check(true) return done(new Error(error)) } if (notEqual(myTable.DATA.rows, rows2)) { myTable.check(true) return done(new Error(error)) } const cols3 = ['branch', 'id', 'new'] const rows3 = [ ['branch123', '5', ''], ['branch1234', '5', ''] ] const clone = myTable.clone(cols3) if (notEqual(clone.DATA.cols, cols3)) { clone.check(true) return done(new Error(error)) } if (notEqual(clone.DATA.rows, rows3)) { clone.check(true) return done(new Error(error)) } // ----------------------------------------------- return true // success } function createTestTable (show) { let error = con.traceFunction(arguments.callee.name) // eslint-disable-line const result = new _table.TableDef(['id', 'name', 'age', 'cost', 'description', 'fk'], 'result') // result.CodeGenerate.RowSet() // unZip(() => result.CodeGenerate.RowAdd(false), 'result.Rows.Add([id, name, age, cost, description, fk])') result.Rows.Add([1, 'pa', 50, 200.10, 'person', 'test']) result.Rows.Add([2, 'Sannie', 30, 100.10, 'women', 'test']) result.Rows.Add([3, 'Piet', 40, 1500.10, 'man', 'test']) result.Rows.Add([4, 'Cobus', 50, 200.10, 'dad', 'test']) result.Rows.Add([4, 'Cobus', 50, 200.10, 'dad', 'test']) result.Rows.Add([4, 'Cobus', 65, 200.10, 'dad', 'test']) result.Rows.Add([4, 'Cobus', 70, 200.10, 'pa', 'test']) result.show() // Statistics result.stats(show) const html = result.toHTML() const file1 = _lfolder.rootFolder() + 'test/table1.html' _lio.writeFileSync(file1, html) // Find const search = result.find('name', 'cobus') search.show(show) const filter = result.filterNew() filter.add('name', 'cobus', '=') filter.add('description', 'pa') let search2 = result.filter(filter) search2.show(show) filter.add('description', 'women', '=', false) filter.show(show) search2 = result.filter(filter) search2.show(show) result.show(show) result.check() const filter2 = result.filterNew() filter2.add('age', 60, '>') // con.log({ result }) const search3 = result.filter(filter2) search3.show(show) filter2.show(show) filter2.reset() return true } createTestTable(true) function appendTableTest (show) { // Input data const names = ['piet', 'koos', 'jan', 'antie'] const surnames = ['verdriet', 'kombuis', 'taks', 'jacoba'] const medals1 = ['gold', 'silver'] const medals2 = ['bonze', 'wood'] // Define columns table con.traceGreen('Define new table and add names to all columns') const tableNameCols = new _table.TableDef(['name1', 'name2'], 'tableNameCols') tableNameCols.array2Cols(names) tableNameCols.show(show) // Define name table con.traceGreen('Define new table and add names') const tableName = new _table.TableDef(['id', 'name'], 'dtTable', 'tableName') tableName.arrayAppend(names) // Add names tableName.show(show) con.traceGreen('Add surnames') tableName.array2Col(surnames, 'surname') // Add surnames tableName.show(show) con.traceGreen('Sort on name') tableName.sort('name') // Sort the table tableName.show(show) // Define join table con.traceGreen('Define join table') const tableMedals = new _table.TableDef(['id', 'medal']) tableMedals.arrayAppend(medals1, 1) tableMedals.arrayAppend(medals2, 2) tableMedals.arrayAppend(medals2, 3) tableMedals.arrayAppend(medals1, 4) tableMedals.show(show) // Do the join con.traceGreen('Do the join') const dtJoin = tableMedals.join('id', tableName, 'id') dtJoin.show(show) // Remove the id column con.traceGreen('Remove "id" column') dtJoin.Cols.Drop('id') dtJoin.show(show) con.traceGreen('Merge name & surname') dtJoin.Cols.Merge('Full_name', 'name', 'surname', (x, y) => { return `${x} ${y}` }) dtJoin.show(show) const cols = dtJoin.DATA.cols // con.log({ cols }) dtJoin.Cols.Drop(cols.length - 1) dtJoin.show(show) // con.log({ cols }) return true } /** * Test all functions * @param done - callback function to indicate failure or completion * @constructor */ function TestAll (done) { con.traceLine() con.trace(module.filename) con.traceBold(`--------------------------> ${arguments.callee.name}()`) // eslint-disable-line const result0 = tableTest1(done) const result1 = colsAddTest1(done) const result2 = createTestTable(!_test.isRootFolder()) const result3 = appendTableTest(!_test.isRootFolder()) con.logGreen('Success!!!') return testAND(module.filename, result0, result1, result2, result3) } /** * Execute the tests manually */ function testRunner (traceLevel = 0) { const done2 = (err) => { if (err !== undefined) { throw err } } // let isRoot = require('lamed_core').isRootFolder() const isRoot = _test.isRootFolder() if (isRoot) return // Only run if not executed from the root folder // Only run if not executed from the root folder // Limit lines reported as not tested con.traceSet(traceLevel); TestAll(done2) // ------------------------------------------- // Code to generate 'readme' and 'help' when run directly by node // // Add to bottom of testRunner() // Generating readme & help // npm uninstall -g lamed_readme // npm i -g lamed_readme // npm link lamed_readme // const _gen = require('lamed_readme'); _gen.genReadme(__dirname); _gen.genHelp(__dirname) // Generate readme & help } testRunner(0) // Exports -------------------------- module.exports = { TestAll }