From 7446a20db8907acedbd14ddcc6a99de577268c1c Mon Sep 17 00:00:00 2001 From: Sascha Date: Wed, 5 May 2021 12:49:11 +0200 Subject: Do not greedy match quotes --- webui/src/__tests__/query.ts | 44 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 39 insertions(+), 5 deletions(-) (limited to 'webui/src/__tests__/query.ts') diff --git a/webui/src/__tests__/query.ts b/webui/src/__tests__/query.ts index 69e2f766..97ec75a6 100644 --- a/webui/src/__tests__/query.ts +++ b/webui/src/__tests__/query.ts @@ -17,11 +17,11 @@ it('parses a query with multiple filters', () => { freetext: [''], }); - expect(parse(`label:abc with "quotes" in freetext`)).toEqual({ + expect(parse(`label:abc with "quotes" 'in' freetext`)).toEqual({ label: [`abc`], with: [''], - quotes: [''], - in: [''], + '"quotes"': [''], + "'in'": [''], freetext: [''], }); }); @@ -54,11 +54,44 @@ it('parses a quoted query', () => { expect(parse(`label:"with:quoated:colon"`)).toEqual({ label: [`"with:quoated:colon"`], }); + + expect(parse(`label:'name ends after this ->' quote'`)).toEqual({ + label: [`'name ends after this ->'`], + "quote'": [``], + }); + + expect(parse(`label:"name ends after this ->" quote"`)).toEqual({ + label: [`"name ends after this ->"`], + 'quote"': [``], + }); + + expect(parse(`label:'this ->"<- quote belongs to label name'`)).toEqual({ + label: [`'this ->"<- quote belongs to label name'`], + }); + + expect(parse(`label:"this ->'<- quote belongs to label name"`)).toEqual({ + label: [`"this ->'<- quote belongs to label name"`], + }); + + expect(parse(`label:'names end with'whitespace not with quotes`)).toEqual({ + label: [`'names end with'whitespace`], + not: [``], + with: [``], + quotes: [``], + }); + + expect(parse(`label:"names end with"whitespace not with quotes`)).toEqual({ + label: [`"names end with"whitespace`], + not: [``], + with: [``], + quotes: [``], + }); }); it('should not escape nested quotes', () => { expect(parse(`foo:'do not escape this ->'<- quote'`)).toEqual({ - foo: [`'do not escape this ->'<- quote'`], + foo: [`'do not escape this ->'<-`], + "quote'": [``], }); expect(parse(`foo:'do not escape this ->"<- quote'`)).toEqual({ @@ -66,7 +99,8 @@ it('should not escape nested quotes', () => { }); expect(parse(`foo:"do not escape this ->"<- quote"`)).toEqual({ - foo: [`"do not escape this ->"<- quote"`], + foo: [`"do not escape this ->"<-`], + 'quote"': [``], }); expect(parse(`foo:"do not escape this ->'<- quote"`)).toEqual({ -- cgit