Skip to content

Commit f2f5548

Browse files
committed
Added multiple tests for the TextHelper
1 parent cd5d571 commit f2f5548

File tree

4 files changed

+127
-3
lines changed

4 files changed

+127
-3
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@ logs
55
/lib/
66
node_modules
77
.idea
8+
lab.js

.vscode/launch.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
"type": "node",
99
"request": "launch",
1010
"name": "Launch Program",
11-
"program": "${workspaceRoot}\\index.js",
11+
"program": "${workspaceRoot}\\lab.js",
12+
"runtimeExecutable": "${workspaceRoot}/node_modules/.bin/babel-node.cmd",
1213
"cwd": "${workspaceRoot}"
1314
},
1415
{

src/TextHelper.js

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,42 @@
99
export function insertText(text, insertionText, position) {
1010
return [text.slice(0, position), insertionText, text.slice(position)].join('');
1111
}
12+
13+
/**
14+
* Gets the word surrounding the given position. Word delimiters are spaces and line-breaks
15+
*
16+
* @export
17+
* @param {any} text
18+
* @param {any} position
19+
*/
20+
export function getSurroundingWord(text, position) {
21+
22+
if(!text) throw Error('Argument \'text\' should be truthy');
23+
24+
let isWordDelimiter = c => c == ' ' || c.charCodeAt(0) == 10;
25+
26+
let leftIndex = 0; // leftIndex is initialized to 0 because if position is 0, it won't even enter the iteration
27+
let rightIndex = text.length; // rightIndex is initialized to text.length because if position is equal to text.length it won't even enter the interation
28+
29+
// iterate to the left
30+
for(var i = position; i -1 > -1; i--) {
31+
if(isWordDelimiter(text[i - 1])) {
32+
leftIndex = i;
33+
break;
34+
}
35+
}
36+
37+
// iterate to the right
38+
for(var i = position; i < text.length ; i++) {
39+
if(isWordDelimiter(text[i])) {
40+
rightIndex = i;
41+
break;
42+
}
43+
}
44+
45+
return {
46+
word: text.slice(leftIndex, rightIndex),
47+
leftIndex: leftIndex,
48+
rightIndex: rightIndex
49+
};
50+
}

test/TextHelperSpec.js

Lines changed: 85 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { assert } from 'chai';
2-
import { insertText } from '../src/TextHelper';
2+
import { insertText, getSurroundingWord } from '../src/TextHelper';
33

44
describe("TextHelperSpec.js", function () {
55
describe('insertText', function () {
@@ -20,5 +20,88 @@ describe("TextHelperSpec.js", function () {
2020
var text = insertText('bob went to', ' school', 20);
2121
assert.strictEqual(text, 'bob went to school');
2222
});
23-
})
23+
});
24+
25+
describe('getSurroundingWord', function () {
26+
// tests without line breaks
27+
it('Basic usage', function () {
28+
var result = getSurroundingWord('bob went to school', 5);
29+
assert.strictEqual(result.word, 'went');
30+
assert.strictEqual(result.leftIndex, 4);
31+
assert.strictEqual(result.rightIndex, 8);
32+
});
33+
34+
it('Word edge to the right', function () {
35+
var result = getSurroundingWord('bob went to school', 8);
36+
assert.strictEqual(result.word, 'went');
37+
assert.strictEqual(result.leftIndex, 4);
38+
assert.strictEqual(result.rightIndex, 8);
39+
});
40+
41+
it('Word edge to the left', function () {
42+
var result = getSurroundingWord('bob went to school', 4);
43+
assert.strictEqual(result.word, 'went');
44+
assert.strictEqual(result.leftIndex, 4);
45+
assert.strictEqual(result.rightIndex, 8);
46+
});
47+
48+
it('text beginning', function () {
49+
var result = getSurroundingWord('bob went to school', 0);
50+
assert.strictEqual(result.word, 'bob');
51+
assert.strictEqual(result.leftIndex, 0);
52+
assert.strictEqual(result.rightIndex, 3);
53+
});
54+
55+
it('text ending', function () {
56+
var result = getSurroundingWord('bob went to school', 18);
57+
assert.strictEqual(result.word, 'school');
58+
assert.strictEqual(result.leftIndex, 12);
59+
assert.strictEqual(result.rightIndex, 18);
60+
});
61+
62+
// tests with line breaks
63+
it('Basic usage with line breaks', function () {
64+
var result = getSurroundingWord('bob\nwent\nto school', 5);
65+
assert.strictEqual(result.word, 'went');
66+
assert.strictEqual(result.leftIndex, 4);
67+
assert.strictEqual(result.rightIndex, 8);
68+
});
69+
70+
it('text ending with line break', function () {
71+
var result = getSurroundingWord('bob went to school\n', 18);
72+
assert.strictEqual(result.word, 'school');
73+
assert.strictEqual(result.leftIndex, 12);
74+
assert.strictEqual(result.rightIndex, 18);
75+
});
76+
77+
it('text beginning with line break', function () {
78+
var result = getSurroundingWord('\nbob went to school', 1);
79+
assert.strictEqual(result.word, 'bob');
80+
assert.strictEqual(result.leftIndex, 1);
81+
assert.strictEqual(result.rightIndex, 4);
82+
});
83+
84+
// edge cases
85+
it('within spaces', function() {
86+
var result = getSurroundingWord(' ', 1);
87+
assert.strictEqual(result.word, '');
88+
assert.strictEqual(result.leftIndex, 1);
89+
assert.strictEqual(result.rightIndex, 1);
90+
});
91+
92+
it('within spaces 2', function() {
93+
var result = getSurroundingWord(' ', 2);
94+
assert.strictEqual(result.word, '');
95+
assert.strictEqual(result.leftIndex, 2);
96+
assert.strictEqual(result.rightIndex, 2);
97+
});
98+
99+
it('within line-breaks', function() {
100+
var result = getSurroundingWord('\n\n\n', 1);
101+
assert.strictEqual(result.word, '');
102+
assert.strictEqual(result.leftIndex, 1);
103+
assert.strictEqual(result.rightIndex, 1);
104+
});
105+
});
106+
24107
});

0 commit comments

Comments
 (0)