-
Notifications
You must be signed in to change notification settings - Fork 14
All done. Please merge. #13
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from all commits
7599bda
0f45f7e
6e54645
e2af680
1cfe671
134fd59
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,5 @@ | ||
| **/node_modules/* | ||
| **/vendor/* | ||
| **/*.min.js | ||
| **/coverage/* | ||
| **/build/* |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,26 @@ | ||
| { | ||
| "env": { | ||
| "browser": true, | ||
| "node": true, | ||
| "commonjs": true, | ||
| "jest": true, | ||
| "es6": true | ||
| }, | ||
| "globals": { | ||
| "err": true, | ||
| "req": true, | ||
| "res": true, | ||
| "next": true | ||
| }, | ||
| "extends": "eslint:recommended", | ||
| "parserOptions": { | ||
| "sourceType": "module" | ||
| }, | ||
| "rules": { | ||
| "no-console": "off", | ||
| "indent": [ "error", 2 ], | ||
| "quotes": ["error", "single", { "allowTemplateLiterals": true }], | ||
| "comma-dangle": ["error", "always-multiline"], | ||
| "semi": [ "error", "always" ] | ||
| } | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,80 @@ | ||
|
|
||
| # Created by https://www.gitignore.io/api/node,linux | ||
|
|
||
| ### Linux ### | ||
| *~ | ||
|
|
||
| # temporary files which can be created if a process still has a handle open of a deleted file | ||
| .fuse_hidden* | ||
|
|
||
| # KDE directory preferences | ||
| .directory | ||
|
|
||
| # Linux trash folder which might appear on any partition or disk | ||
| .Trash-* | ||
|
|
||
| # .nfs files are created when an open file is removed but is still being accessed | ||
| .nfs* | ||
|
|
||
| ### Node ### | ||
| # Logs | ||
| logs | ||
| *.log | ||
| npm-debug.log* | ||
| yarn-debug.log* | ||
| yarn-error.log* | ||
|
|
||
| # Runtime data | ||
| pids | ||
| *.pid | ||
| *.seed | ||
| *.pid.lock | ||
|
|
||
| # Directory for instrumented libs generated by jscoverage/JSCover | ||
| lib-cov | ||
|
|
||
| # Coverage directory used by tools like istanbul | ||
| coverage | ||
|
|
||
| # nyc test coverage | ||
| .nyc_output | ||
|
|
||
| # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) | ||
| .grunt | ||
|
|
||
| # Bower dependency directory (https://bower.io/) | ||
| bower_components | ||
|
|
||
| # node-waf configuration | ||
| .lock-wscript | ||
|
|
||
| # Compiled binary addons (http://nodejs.org/api/addons.html) | ||
| build/Release | ||
|
|
||
| # Dependency directories | ||
| node_modules/ | ||
| jspm_packages/ | ||
|
|
||
| # Typescript v1 declaration files | ||
| typings/ | ||
|
|
||
| # Optional npm cache directory | ||
| .npm | ||
|
|
||
| # Optional eslint cache | ||
| .eslintcache | ||
|
|
||
| # Optional REPL history | ||
| .node_repl_history | ||
|
|
||
| # Output of 'npm pack' | ||
| *.tgz | ||
|
|
||
| # Yarn Integrity file | ||
| .yarn-integrity | ||
|
|
||
| # dotenv environment variables file | ||
| .env | ||
|
|
||
|
|
||
| # End of https://www.gitignore.io/api/node,linux |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,17 @@ | ||
| I enumarate a commonJS-style Module in /lib/reader.js. | ||
|
|
||
| reader.js exports a single function, which in its home file is called (readTrio) (RT). | ||
|
|
||
| RT accepts <paths> and <callback>. The former is the Array of three string holding valid paths to text documents in our <../assets/> folder which we are <fs.readFile>ing in this Lab, and the latter is merely a wrapper function which exposes a function for jest to grab in order to evaluate the resolution of our <fs.readFile> calls - it serves no functional purpose in the meat of <readTrio()> in itself. | ||
|
|
||
| RT first sequentially runs a series of checks on the incoming parameters. It throws if <path> is not an array, doesn't have three elements, or if its elements are not strings. RT also errors out if <callback> is not a function. | ||
|
|
||
| Next, RT spins up three Event-listener-And-Call combos with <fs.readFile>. | ||
|
|
||
| One test cast checks that the value finally returned by RT (upon a positive resolution by the last callback) returns values as expected. This is the primary POSITIVE test case. | ||
|
|
||
| The final test case intentionally passes poor file paths to make the Asynchronous <fs.readFile> calls fail, and checks that at least one of the calls the callbacks pass returns a valid 'error' through their 'error' route. | ||
|
|
||
| I really kinda screwed myself by doing this in unconventional way. | ||
|
|
||
| Happy 9:39PM :crying-happy-face: :a-ok-sign: :gun: |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,96 @@ | ||
| const reader = require(`../lib/reader`); | ||
|
|
||
| describe(`Testing suite for reader.js`, () => { | ||
|
|
||
| describe('Testing reader.readTrio()', () => { | ||
|
|
||
| test(`+ : "Return first 25 chars of each three files"`, (done) => { | ||
| reader( | ||
| [`${__dirname}/../assets/ani.txt`, | ||
| `${__dirname}/../assets/nqu.txt`, | ||
| `${__dirname}/../assets/zzq.txt`, | ||
| ], | ||
| (error,data) => { | ||
| expect(data).toEqual([ | ||
| 'anianiani anianiani anian', | ||
| 'nqu uqn nqu uqn nqu uqn n', | ||
| 'zzq_zzq_qzz____zzq_zzq_qz', | ||
| ]); | ||
| done(); | ||
| }); | ||
| }); | ||
|
|
||
| test(`- : "<paths> is not an array."`, () => { | ||
| expect ( | ||
| () => { | ||
| reader( | ||
| 'break <paths> : Not array', | ||
| (error,data)=>{return error, data;} | ||
| ); | ||
| } | ||
| ).toThrow(); | ||
| }); | ||
|
|
||
| test(`- : "<paths> length is wrong."`, () => { | ||
| expect ( | ||
| () => { | ||
| reader( | ||
| [null, 'one','two','three','four', 0, null], | ||
| (error,data)=>{return error, data;} | ||
| ); | ||
| } | ||
| ).toThrow(); | ||
| }); | ||
|
|
||
| test(`- : "<paths> is not populated with strings."`, () => { | ||
| expect ( | ||
| () => { | ||
| reader( | ||
| [1, 2, 3], | ||
| (error,data)=>{return error, data;} | ||
| ); | ||
| } | ||
| ).toThrow(); | ||
| }); | ||
|
|
||
| test(`- : "<paths> is not populated with strings."`, () => { | ||
| expect ( | ||
| () => { | ||
| reader( | ||
| [1, 2, 3], | ||
| (error,data)=>{return error, data;} | ||
| ); | ||
| } | ||
| ).toThrow(); | ||
| }); | ||
|
|
||
| test(`- : "Callback failure: error in ReadFile callback."`, (done) => { | ||
| reader( | ||
| //Placed broken filenames here | ||
| [`${__dirname}/../assets/ani1.md`, | ||
| `${__dirname}/../assets/nqua.txt`, | ||
| `${__dirname}/../assets/asfasdfe.txt`, | ||
| ], | ||
| (error) => { | ||
| expect(error).toBeTruthy(); | ||
| done(); | ||
| }); | ||
| }); | ||
|
|
||
| test(`- : "<paths> is not populated with strings."`, () => { | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. you should change this test message, you already have a test message that is exactly the same as this. |
||
| expect ( | ||
| () => { | ||
| reader( | ||
| [`${__dirname}/../assets/ani.txt`, | ||
| `${__dirname}/../assets/nqu.txt`, | ||
| `${__dirname}/../assets/zzq.txt`, | ||
| ], | ||
| 'Breaking - this should be a function.' | ||
| ); | ||
| } | ||
| ).toThrow(); | ||
| }); | ||
|
|
||
| }); | ||
|
|
||
| }); | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani anianiani |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn nqu uqn |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____zzq_zzq_qzz____ |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,64 @@ | ||
| 'use strict'; | ||
|
|
||
| const fs = require('fs'); | ||
|
|
||
| function readTrio (paths, callback) { | ||
|
|
||
| if (Array.isArray(paths)===false) { | ||
| throw new TypeError(`<paths> must be an Array.... is '${typeof paths}'`); | ||
| } | ||
|
|
||
| if (paths.length!==3) { | ||
| throw new Error(`<paths> must have exactly 3 elements.... has ${paths.length}`); | ||
| } | ||
|
|
||
| if (paths.filter(x=>typeof x === 'string').length!==3) { | ||
| throw new Error('All elements of <paths> must be strings!'); | ||
| } | ||
|
|
||
| if (typeof callback !== 'function') { | ||
| throw new TypeError(`<callback> must be a function, in order to provide Jest with an endpoint to test this function! Is: ${typeof callback}`); | ||
| } | ||
|
|
||
| //Should add another <throw> block here with a regex for paths - too much work tho. | ||
|
|
||
| paths = paths.map(x=>{return{'path':x, 'text':null};}); | ||
| // Map file array out into Object Array - each object has 'path' and 'text'. <text> defaults to null, <path> is the inputted path from the original array. | ||
|
|
||
| for (let i=0, len=paths.length; i<len; i++) { | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. you need space between your operators |
||
|
|
||
| //console.log(`Main 'for' loop started - ${new Date().getTime()}`);//REMOVE------- | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. always delete commented out code and unnecessary console.logs |
||
|
|
||
| fs.readFile(paths[i].path, (error, data) => { | ||
|
|
||
| //console.log(`readFile callback's 'this': ${this}`); | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. corpse |
||
| //console.log(`readFile callback's 'error': ${error}`); | ||
| //console.log(`readFile callback's 'data': ${data}`); | ||
| //console.log(`readFile callback's 'i': ${i}`); | ||
| //console.log(`readFile callback's 'element': ${paths[i]}`); | ||
|
|
||
|
|
||
| if (error) { | ||
| callback(error); | ||
| return; //First of two exit points for this function - remember, this function should return <undefined>, as this expression will. | ||
| } | ||
|
|
||
| //console.log(`File ${i} succesfully read! Characters returned: ${data.length}`);//REMOVE------- | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. corpse |
||
|
|
||
| paths[i].text = data.toString('UTF-8', 0, 25); | ||
|
|
||
| //console.log(`paths[${i}].text - ${paths[i].text}`); | ||
| //console.log(`paths: ${paths}`); | ||
|
|
||
| if (paths.filter(x=>{return x.text===null;}).length === 0) callback(null, paths.map(x=>{return x.text;})); | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. for readability purposes you should separate these onto different lines and add spaces between operators. |
||
|
|
||
| return; //Second of two exit points from this function - will also return 'undefined' as required. | ||
| }); | ||
|
|
||
| //console.log(`Main 'for' loop completed - ${new Date().getTime()}`);//REMOVE------- | ||
|
|
||
| } | ||
|
|
||
| } | ||
|
|
||
| module.exports = readTrio; | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this test is the same as line 45