Skip to content

Commit

Permalink
feat: Extend multiple sections type of escapeAssertion (#180)
Browse files Browse the repository at this point in the history
* feat: Extend multiple sections type of escapeAssertion

Signed-off-by: Gabriel-403 <1499015923@qq.com>

* feat: add r2.value == p4.value and r1.value == p1.value type

Signed-off-by: Gabriel-403 <1499015923@qq.com>

(cherry picked from commit 4a8cc106862bee79fb1533338bde16669d40f5f5)
Signed-off-by: Zixuan Liu <nodeces@gmail.com>
  • Loading branch information
Gabriel-403 authored and nodece committed Feb 27, 2022
1 parent cc58c57 commit 33c784c
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 2 deletions.
5 changes: 4 additions & 1 deletion src/util/util.ts
Expand Up @@ -16,7 +16,10 @@
// because the expression evaluation doesn't support such variable names.

function escapeAssertion(s: string): string {
return s.replace(/([rp])\.|[0-9]\./g, (match) => {
if (s.startsWith('r') || s.startsWith('p')) {
s = s.replace('.', '_');
}
return s.replace(/([| =)(&<>,+\-!*\/])([rp][0-9]*)\./g, (match) => {
return match.replace('.', '_');
});
}
Expand Down
32 changes: 31 additions & 1 deletion test/util.test.ts
Expand Up @@ -186,7 +186,6 @@ test('bracketCompatible', () => {
});

test('test policyStringToArray', () => {
expect(util.policyStringToArray('p,alice,data1,read#testtest')).toEqual([['p', 'alice', 'data1', 'read']]);
expect(util.policyStringToArray('p,ali""ce,data1,read')).toEqual([['p', 'ali"ce', 'data1', 'read']]);
expect(util.policyStringToArray(`"p","alice","data1","read"`)).toEqual([['p', 'alice', 'data1', 'read']]);
expect(util.policyStringToArray(`"p"," alice","data1 ","read"`)).toEqual([['p', ' alice', 'data1 ', 'read']]);
Expand All @@ -200,3 +199,34 @@ test('test policyArrayToString', () => {
expect(util.policyArrayToString(['p', 'alice', 'data1', 'read'])).toEqual(`"p","alice","data1","read"`);
expect(util.policyArrayToString(['p', 'alice ', ' data1', 'read'])).toEqual(`"p","alice "," data1","read"`);
});

test('test keyGetFunc', () => {
expect(util.keyGetFunc('/foo/bar', '/foo/*')).toEqual('bar');
expect(util.keyGetFunc('/bar/foo', '/foo/*')).toEqual('');
});

test('test keyGet2Func', () => {
expect(util.keyGet2Func('/foo/bar', '/foo/*', 'bar')).toEqual('');
expect(util.keyGet2Func('/foo/baz', '/foo/:bar', 'bar')).toEqual('baz');
expect(util.keyGet2Func('/foo/baz/foo', '/foo/:bar/foo', 'bar')).toEqual('baz');
expect(util.keyGet2Func('/baz', '/foo', 'bar')).toEqual('');
expect(util.keyGet2Func('/foo/baz', '/foo', 'bar')).toEqual('');
});

test('test escapeAssertion', () => {
expect(util.escapeAssertion('r.attr.value == p.attr')).toEqual('r_attr.value == p_attr');
expect(util.escapeAssertion('r.attp.value || p.attr')).toEqual('r_attp.value || p_attr');
expect(util.escapeAssertion('r.attp.value && p.attr')).toEqual('r_attp.value && p_attr');
expect(util.escapeAssertion('r.attp.value >p.attr')).toEqual('r_attp.value >p_attr');
expect(util.escapeAssertion('r.attp.value <p.attr')).toEqual('r_attp.value <p_attr');
expect(util.escapeAssertion('r.attp.value +p.attr')).toEqual('r_attp.value +p_attr');
expect(util.escapeAssertion('r.attp.value -p.attr')).toEqual('r_attp.value -p_attr');
expect(util.escapeAssertion('r.attp.value *p.attr')).toEqual('r_attp.value *p_attr');
expect(util.escapeAssertion('r.attp.value /p.attr')).toEqual('r_attp.value /p_attr');
expect(util.escapeAssertion('!r.attp.value /p.attr')).toEqual('!r_attp.value /p_attr');
expect(util.escapeAssertion('g(r.sub, p.sub) == p.attr')).toEqual('g(r_sub, p_sub) == p_attr');
expect(util.escapeAssertion('g(r.sub,p.sub) == p.attr')).toEqual('g(r_sub,p_sub) == p_attr');
expect(util.escapeAssertion('(r.attp.value || p.attr)p.u')).toEqual('(r_attp.value || p_attr)p_u');
expect(util.escapeAssertion('r1.value == p1.value')).toEqual('r1_value == p1_value');
expect(util.escapeAssertion('r2.value == p4.value')).toEqual('r2_value == p4_value');
});

0 comments on commit 33c784c

Please sign in to comment.