From 003862580fb809f0b0ef93f75d9dfea37de12e54 Mon Sep 17 00:00:00 2001 From: "caleb.mabry.15@cnu.edu" Date: Sun, 6 Mar 2022 17:33:07 -0500 Subject: Moved into another file and linted --- webAO/client.js | 39 ++------------------------------------- webAO/iniParse.js | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 37 deletions(-) create mode 100644 webAO/iniParse.js (limited to 'webAO') diff --git a/webAO/client.js b/webAO/client.js index 7ff561b..eb7c7a2 100644 --- a/webAO/client.js +++ b/webAO/client.js @@ -18,6 +18,7 @@ import vanilla_background_arr from './backgrounds.js'; import vanilla_evidence_arr from './evidence.js'; import chatbox_arr from './styles/chatbox/chatboxes.js'; +import iniParse from './iniParse'; const version = process.env.npm_package_version; @@ -843,7 +844,7 @@ class Client extends EventEmitter { // If the ini doesn't exist on the server this will throw an error try { const cinidata = await request(`${AO_HOST}characters/${encodeURI(chargs[0].toLowerCase())}/char.ini`); - cini = INI.parse(cinidata); + cini = iniParse(cinidata); } catch (err) { cini = {}; img.classList.add('noini'); @@ -2410,42 +2411,6 @@ class Viewport { } } -class INI { - static parse(data) { - const regex = { - section: /^\s*\[\s*([^\]]*)\s*\]\s*$/, - param: /^\s*([\w.\-_]+)\s*=\s*(.*?)\s*$/, - comment: /^\s*;.*$/, - }; - const value = {}; - const lines = data.split(/\r\n|\r|\n/); - let section; - lines.forEach((line) => { - if (regex.comment.test(line)) { - - } else if (line.length === 0) { - - } else if (regex.param.test(line)) { - const match = line.match(regex.param); - if (section) { - if (match[1].toLowerCase() === 'showname') { // don't lowercase the showname - value[section].showname = match[2]; - } else { - value[section][match[1].toLowerCase()] = match[2].toLowerCase(); - } - // } else { // we don't care about attributes without a section - // value[match[1]] = match[2]; - } - } else if (regex.section.test(line)) { - const match = line.match(regex.section); - value[match[1].toLowerCase()] = {}; // lowercase everything else - section = match[1].toLowerCase(); - } - }); - return value; - } -} - /** * read a cookie from storage * got this from w3schools diff --git a/webAO/iniParse.js b/webAO/iniParse.js new file mode 100644 index 0000000..fb04e67 --- /dev/null +++ b/webAO/iniParse.js @@ -0,0 +1,42 @@ +const regexPatterns = { + section: /^\s*\[\s*([^\]]*)\s*\]\s*$/, + param: /^\s*([\w.\-_]+)\s*=\s*(.*?)\s*$/, + comment: /^\s*;.*$/, +}; + +const valueHandler = (matchKey, matchValue) => (matchKey === 'showname' ? matchValue : matchValue.toLowerCase()); + +const lineFilter = (value) => { + const isEmpty = value.length === 0; + const isComment = regexPatterns.comment.test(value); + if (isComment || isEmpty) { + return false; + } + return true; +}; + +const iniParse = (data) => { + const parsedIni = {}; + const lines = data.split(/\r\n|\r|\n/); + const filteredLines = lines.filter(lineFilter); + + let currentSection; + filteredLines.forEach((line) => { + const isParameter = regexPatterns.param.test(line); + const isSection = regexPatterns.section.test(line); + if (isParameter && currentSection) { + const match = line.match(regexPatterns.param); + const matchKey = match[1].toLowerCase(); + const matchValue = match[2]; + parsedIni[currentSection][matchKey] = valueHandler(matchKey, matchValue); + } else if (isSection) { + const match = line.match(regexPatterns.section); + const matchKey = match[1].toLowerCase(); + parsedIni[matchKey] = {}; + currentSection = matchKey; + } + }); + return parsedIni; +}; + +export default iniParse; -- cgit From ecb0b9f85d5968bfc3d687b51944a47937f698fd Mon Sep 17 00:00:00 2001 From: "caleb.mabry.15@cnu.edu" Date: Sun, 6 Mar 2022 19:00:38 -0500 Subject: Added unit testing and code coverage --- webAO/iniParse.test.js | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 webAO/iniParse.test.js (limited to 'webAO') diff --git a/webAO/iniParse.test.js b/webAO/iniParse.test.js new file mode 100644 index 0000000..c61e991 --- /dev/null +++ b/webAO/iniParse.test.js @@ -0,0 +1,36 @@ +import iniParse from './iniParse' + +const iniExample = ` +[Options] +name = Matt +showname = Matty + +[Emotions] +number = 9 +1 = Normal#-#normal#0#1 +` +describe('iniParse', () => { + test('should not lowercase value if key is showname', () => { + const ini = iniParse(` + [test] + showname = MATT + `) + expect(ini.test.showname).toBe('MATT') + }) + test('should lowercase value if key is not showname', () => { + const ini = iniParse(` + [test] + party = TIME + `) + expect(ini.test.party).toBe('time') + }) + test('should parse sections', () => { + const parsedIni = iniParse(iniExample) + expect(Object.keys(parsedIni).length).toBe(2); + }); + test('should parse parameters', () => { + const parsedIni = iniParse(iniExample) + expect(Object.keys(parsedIni.options).length).toBe(2); + }) +}) + -- cgit From ce2dda018d8dcdf7b4be8c52886fb56bfe7bdf00 Mon Sep 17 00:00:00 2001 From: "caleb.mabry.15@cnu.edu" Date: Sun, 6 Mar 2022 19:04:52 -0500 Subject: Added another test --- webAO/iniParse.test.js | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'webAO') diff --git a/webAO/iniParse.test.js b/webAO/iniParse.test.js index c61e991..a96cb5d 100644 --- a/webAO/iniParse.test.js +++ b/webAO/iniParse.test.js @@ -11,18 +11,18 @@ number = 9 ` describe('iniParse', () => { test('should not lowercase value if key is showname', () => { - const ini = iniParse(` + const parsedIni = iniParse(` [test] showname = MATT `) - expect(ini.test.showname).toBe('MATT') + expect(parsedIni.test.showname).toBe('MATT') }) test('should lowercase value if key is not showname', () => { - const ini = iniParse(` + const parsedIni = iniParse(` [test] party = TIME `) - expect(ini.test.party).toBe('time') + expect(parsedIni.test.party).toBe('time') }) test('should parse sections', () => { const parsedIni = iniParse(iniExample) @@ -32,5 +32,17 @@ describe('iniParse', () => { const parsedIni = iniParse(iniExample) expect(Object.keys(parsedIni.options).length).toBe(2); }) + test('should remove empty lines', () => { + const parsedIni = iniParse(` + [test] + + + 1 = 1 + 2 = 2 + + + `) + expect(Object.keys(parsedIni.test).length).toBe(2) + }) }) -- cgit From eaa2b97a8c6077ba7f2610eb7c7f394a62e433ec Mon Sep 17 00:00:00 2001 From: "caleb.mabry.15@cnu.edu" Date: Sun, 6 Mar 2022 19:05:34 -0500 Subject: Lint! --- webAO/iniParse.test.js | 53 +++++++++++++++++++++++++------------------------- 1 file changed, 26 insertions(+), 27 deletions(-) (limited to 'webAO') diff --git a/webAO/iniParse.test.js b/webAO/iniParse.test.js index a96cb5d..a48be95 100644 --- a/webAO/iniParse.test.js +++ b/webAO/iniParse.test.js @@ -1,4 +1,4 @@ -import iniParse from './iniParse' +import iniParse from './iniParse'; const iniExample = ` [Options] @@ -8,32 +8,32 @@ showname = Matty [Emotions] number = 9 1 = Normal#-#normal#0#1 -` +`; describe('iniParse', () => { - test('should not lowercase value if key is showname', () => { - const parsedIni = iniParse(` + test('should not lowercase value if key is showname', () => { + const parsedIni = iniParse(` [test] showname = MATT - `) - expect(parsedIni.test.showname).toBe('MATT') - }) - test('should lowercase value if key is not showname', () => { - const parsedIni = iniParse(` + `); + expect(parsedIni.test.showname).toBe('MATT'); + }); + test('should lowercase value if key is not showname', () => { + const parsedIni = iniParse(` [test] party = TIME - `) - expect(parsedIni.test.party).toBe('time') - }) - test('should parse sections', () => { - const parsedIni = iniParse(iniExample) - expect(Object.keys(parsedIni).length).toBe(2); - }); - test('should parse parameters', () => { - const parsedIni = iniParse(iniExample) - expect(Object.keys(parsedIni.options).length).toBe(2); - }) - test('should remove empty lines', () => { - const parsedIni = iniParse(` + `); + expect(parsedIni.test.party).toBe('time'); + }); + test('should parse sections', () => { + const parsedIni = iniParse(iniExample); + expect(Object.keys(parsedIni).length).toBe(2); + }); + test('should parse parameters', () => { + const parsedIni = iniParse(iniExample); + expect(Object.keys(parsedIni.options).length).toBe(2); + }); + test('should remove empty lines', () => { + const parsedIni = iniParse(` [test] @@ -41,8 +41,7 @@ describe('iniParse', () => { 2 = 2 - `) - expect(Object.keys(parsedIni.test).length).toBe(2) - }) -}) - + `); + expect(Object.keys(parsedIni.test).length).toBe(2); + }); +}); -- cgit From 6b8a8c8888aa6bb8eb29bd62c20fb48b9107eb3e Mon Sep 17 00:00:00 2001 From: "caleb.mabry.15@cnu.edu" Date: Sun, 6 Mar 2022 20:02:49 -0500 Subject: Put tests into folder --- webAO/__tests__/iniParse.test.js | 47 ++++++++++++++++++++++++++++++++++++++++ webAO/iniParse.test.js | 47 ---------------------------------------- 2 files changed, 47 insertions(+), 47 deletions(-) create mode 100644 webAO/__tests__/iniParse.test.js delete mode 100644 webAO/iniParse.test.js (limited to 'webAO') diff --git a/webAO/__tests__/iniParse.test.js b/webAO/__tests__/iniParse.test.js new file mode 100644 index 0000000..deb08f3 --- /dev/null +++ b/webAO/__tests__/iniParse.test.js @@ -0,0 +1,47 @@ +import iniParse from '../iniParse'; + +const iniExample = ` +[Options] +name = Matt +showname = Matty + +[Emotions] +number = 9 +1 = Normal#-#normal#0#1 +`; +describe('iniParse', () => { + test('should not lowercase value if key is showname', () => { + const parsedIni = iniParse(` + [test] + showname = MATT + `); + expect(parsedIni.test.showname).toBe('MATT'); + }); + test('should lowercase value if key is not showname', () => { + const parsedIni = iniParse(` + [test] + party = TIME + `); + expect(parsedIni.test.party).toBe('time'); + }); + test('should parse sections', () => { + const parsedIni = iniParse(iniExample); + expect(Object.keys(parsedIni).length).toBe(2); + }); + test('should parse parameters', () => { + const parsedIni = iniParse(iniExample); + expect(Object.keys(parsedIni.options).length).toBe(2); + }); + test('should remove empty lines', () => { + const parsedIni = iniParse(` + [test] + + + 1 = 1 + 2 = 2 + + + `); + expect(Object.keys(parsedIni.test).length).toBe(2); + }); +}); diff --git a/webAO/iniParse.test.js b/webAO/iniParse.test.js deleted file mode 100644 index a48be95..0000000 --- a/webAO/iniParse.test.js +++ /dev/null @@ -1,47 +0,0 @@ -import iniParse from './iniParse'; - -const iniExample = ` -[Options] -name = Matt -showname = Matty - -[Emotions] -number = 9 -1 = Normal#-#normal#0#1 -`; -describe('iniParse', () => { - test('should not lowercase value if key is showname', () => { - const parsedIni = iniParse(` - [test] - showname = MATT - `); - expect(parsedIni.test.showname).toBe('MATT'); - }); - test('should lowercase value if key is not showname', () => { - const parsedIni = iniParse(` - [test] - party = TIME - `); - expect(parsedIni.test.party).toBe('time'); - }); - test('should parse sections', () => { - const parsedIni = iniParse(iniExample); - expect(Object.keys(parsedIni).length).toBe(2); - }); - test('should parse parameters', () => { - const parsedIni = iniParse(iniExample); - expect(Object.keys(parsedIni.options).length).toBe(2); - }); - test('should remove empty lines', () => { - const parsedIni = iniParse(` - [test] - - - 1 = 1 - 2 = 2 - - - `); - expect(Object.keys(parsedIni.test).length).toBe(2); - }); -}); -- cgit