1*082815dcSEvan Baconimport { findMatchingBracketPosition } from '../matchBrackets'; 2*082815dcSEvan Bacon 3*082815dcSEvan Bacondescribe(findMatchingBracketPosition, () => { 4*082815dcSEvan Bacon it('should handle one line search', () => { 5*082815dcSEvan Bacon expect(findMatchingBracketPosition('foo()', '(')).toBe(4); 6*082815dcSEvan Bacon expect(findMatchingBracketPosition('withParameter("a", 1, null)', '(')).toBe(26); 7*082815dcSEvan Bacon }); 8*082815dcSEvan Bacon 9*082815dcSEvan Bacon it('should handle backward search', () => { 10*082815dcSEvan Bacon expect(findMatchingBracketPosition('foo()', ')')).toBe(3); 11*082815dcSEvan Bacon expect(findMatchingBracketPosition('withParameter("a", 1, null)', ')')).toBe(13); 12*082815dcSEvan Bacon }); 13*082815dcSEvan Bacon 14*082815dcSEvan Bacon it('should handle nested brackets call', () => { 15*082815dcSEvan Bacon expect(findMatchingBracketPosition('foo(boo(), 0)', '(')).toBe(12); 16*082815dcSEvan Bacon }); 17*082815dcSEvan Bacon 18*082815dcSEvan Bacon it('should handle nested brackets multi-lines call', () => { 19*082815dcSEvan Bacon const content = ` 20*082815dcSEvan Baconvoid foo() { 21*082815dcSEvan Bacon doSomething(); 22*082815dcSEvan Bacon if (doSomeCheck(123)) { 23*082815dcSEvan Bacon return -1; 24*082815dcSEvan Bacon } 25*082815dcSEvan Bacon return 0; 26*082815dcSEvan Bacon}`; 27*082815dcSEvan Bacon const lastBrace = content.length - 1; 28*082815dcSEvan Bacon expect(findMatchingBracketPosition(content, '{')).toBe(lastBrace); 29*082815dcSEvan Bacon 30*082815dcSEvan Bacon // `findMatchingBracketPosition` will search first `bracket` in forward direction first 31*082815dcSEvan Bacon // and search matching bracket either forward or backward. 32*082815dcSEvan Bacon // In this case, search `'}'` will match the ended bracket of `if (doSomeCheck(123)) {` block. 33*082815dcSEvan Bacon const firstBrace = content.indexOf('{'); 34*082815dcSEvan Bacon const secondBrace = content.indexOf('{', firstBrace + 1); 35*082815dcSEvan Bacon expect(findMatchingBracketPosition(content, '}')).toBe(secondBrace); 36*082815dcSEvan Bacon }); 37*082815dcSEvan Bacon 38*082815dcSEvan Bacon it('should return -1 for not found cases', () => { 39*082815dcSEvan Bacon expect(findMatchingBracketPosition('', '(')).toBe(-1); 40*082815dcSEvan Bacon expect(findMatchingBracketPosition('foo', '(')).toBe(-1); 41*082815dcSEvan Bacon expect(findMatchingBracketPosition('foo(', '(')).toBe(-1); 42*082815dcSEvan Bacon expect(findMatchingBracketPosition('foo()', '{')).toBe(-1); 43*082815dcSEvan Bacon expect(findMatchingBracketPosition('foo()', '}')).toBe(-1); 44*082815dcSEvan Bacon expect(findMatchingBracketPosition('foo(bar()', '(')).toBe(-1); 45*082815dcSEvan Bacon }); 46*082815dcSEvan Bacon}); 47