@@ -18,108 +18,27 @@ beforeEach(async () => {
1818
1919/* eslint-disable @stylistic/quotes */
2020const tests = [
21- {
22- rule : '"Hello World" =~ "/hello world/i"' ,
23- jsExpression : '"Hello World".matchRE2JS(RE2JS.compile("hello world", 1)) != null' ,
24- evalResult : true ,
25- } ,
26- {
27- rule : '"Hello World" =~ /hello world/i' ,
28- jsExpression : '"Hello World".matchRE2JS(RE2JS.compile("hello world", 1)) != null' ,
29- evalResult : true ,
30- } ,
31- {
32- rule : '"Hello World" =~ /Hello (?i)world/' ,
33- jsExpression : '"Hello World".matchRE2JS(RE2JS.compile("Hello (?i)world", 0)) != null' ,
34- evalResult : true ,
35- } ,
36- {
37- rule : '"1.11" =~ /^([[:digit:]]+(.[[:digit:]]+)*|latest)$/' ,
38- jsExpression : '"1.11".matchRE2JS(RE2JS.compile("^([[:digit:]]+(.[[:digit:]]+)*|latest)$", 0)) != null' ,
39- evalResult : true ,
40- } ,
41- {
42- rule : '"foo" !~ /foo/' ,
43- jsExpression : '"foo".matchRE2JS(RE2JS.compile("foo", 0)) == null' ,
44- evalResult : false ,
45- } ,
46- {
47- rule : '"foo" =~ /foo/' ,
48- jsExpression : '"foo".matchRE2JS(RE2JS.compile("foo", 0)) != null' ,
49- evalResult : true ,
50- } ,
51- {
52- rule : '"foo"=~ /foo/' ,
53- jsExpression : '"foo".matchRE2JS(RE2JS.compile("foo", 0)) != null' ,
54- evalResult : true ,
55- } ,
56- {
57- rule : '"foo"=~/foo/' ,
58- jsExpression : '"foo".matchRE2JS(RE2JS.compile("foo", 0)) != null' ,
59- evalResult : true ,
60- } ,
61- {
62- rule : '"foo"=~ /foo/' ,
63- jsExpression : '"foo".matchRE2JS(RE2JS.compile("foo", 0)) != null' ,
64- evalResult : true ,
65- } ,
66- {
67- rule : '"foo" =~ "/foo/"' ,
68- jsExpression : '"foo".matchRE2JS(RE2JS.compile("foo", 0)) != null' ,
69- evalResult : true ,
70- } ,
71- {
72- rule : '"test/url" =~ "/test/ur/"' ,
73- jsExpression : '"test/url".matchRE2JS(RE2JS.compile("test/ur", 0)) != null' ,
74- evalResult : true ,
75- } ,
76- {
77- rule : '"test/url" =~ "/test\\/ur/"' ,
78- jsExpression : '"test/url".matchRE2JS(RE2JS.compile("test\\/ur", 0)) != null' ,
79- evalResult : true ,
80- } ,
81- {
82- rule : '"test/url" =~ /test/ur/' ,
83- expectedErrSubStr : "Error attempting to evaluate the following rules:" ,
84- } ,
85- {
86- rule : '"master" =~ /master$/' ,
87- jsExpression : '"master".matchRE2JS(RE2JS.compile("master$", 0)) != null' ,
88- evalResult : true ,
89- } ,
90- {
91- rule : '"23" =~ "1234"' ,
92- expectedErrSubStr : "must be a regex pattern. Do not rely on this behavior!" ,
93- } ,
94- {
95- rule : '"23" =~ \'1234\'' ,
96- expectedErrSubStr : "must be a regex pattern. Do not rely on this behavior!" ,
97- } ,
98- {
99- rule : '"23" =~ /1234/' ,
100- jsExpression : '"23".matchRE2JS(RE2JS.compile("1234", 0)) != null' ,
101- evalResult : false ,
102- } ,
103- {
104- rule : '$CI_COMMIT_BRANCH && $GITLAB_FEATURES =~ /\bdependency_scanning\b/ && $CI_GITLAB_FIPS_MODE == "true"' ,
105- jsExpression : 'null && false && null == "true"' ,
106- evalResult : false ,
107- } ,
108- {
109- rule : '($CI_MERGE_REQUEST_SOURCE_BRANCH_NAME =~ /^perf_.*$/)' ,
110- jsExpression : '(false)' , // (null.matchRE2JS(RE2JS.compile("^perf_.*$", 0)) != null => (false)
111- evalResult : false ,
112- } ,
113- {
114- rule : '("qwerty" =~ /^perf_.*$/)' ,
115- jsExpression : '("qwerty".matchRE2JS(RE2JS.compile("^perf_.*$", 0)) != null)' ,
116- evalResult : false ,
117- } ,
118- {
119- rule : `"product-name/v0.0.0+build.0" =~ /^(?:product-name\\/)?v\\d+\\.\\d+\\.\\d+.*/` ,
120- jsExpression : "\"product-name/v0.0.0+build.0\".matchRE2JS(RE2JS.compile(\"^(?:product-name\\\\/)?v\\\\d+\\\\.\\\\d+\\\\.\\\\d+.*\", 0)) != null" ,
121- evalResult : true ,
122- } ,
21+ { rule : '"Hello World" =~ "/hello world/i"' , evalResult : true } ,
22+ { rule : '"Hello World" =~ /hello world/i' , evalResult : true } ,
23+ { rule : '"Hello World" =~ /Hello (?i)world/' , expectedErrSubStr : "Error attempting to evaluate the following rules:" } ,
24+ { rule : '"1.11" =~ /^([[:digit:]]+(.[[:digit:]]+)*|latest)$/' , evalResult : true } ,
25+ { rule : '"foo" !~ /foo/' , evalResult : false } ,
26+ { rule : '"foo" =~ /foo/' , evalResult : true } ,
27+ { rule : '"foo"=~ /foo/' , evalResult : true } ,
28+ { rule : '"foo"=~/foo/' , evalResult : true } ,
29+ { rule : '"foo"=~ /foo/' , evalResult : true } ,
30+ { rule : '"foo" =~ "/foo/"' , evalResult : true } ,
31+ { rule : '"test/url" =~ "/test/ur/"' , evalResult : true } ,
32+ { rule : '"test/url" =~ "/test\\/ur/"' , evalResult : true } ,
33+ { rule : '"test/url" =~ /test/ur/' , expectedErrSubStr : "Error attempting to evaluate the following rules:" } ,
34+ { rule : '"master" =~ /master$/' , evalResult : true } ,
35+ { rule : '"23" =~ "1234"' , expectedErrSubStr : "must be a regex pattern. Do not rely on this behavior!" } ,
36+ { rule : '"23" =~ \'1234\'' , expectedErrSubStr : "must be a regex pattern. Do not rely on this behavior!" } ,
37+ { rule : '"23" =~ /1234/' , evalResult : false } ,
38+ { rule : '$CI_COMMIT_BRANCH && $GITLAB_FEATURES =~ /\bdependency_scanning\b/ && $CI_GITLAB_FIPS_MODE == "true"' , evalResult : false } ,
39+ { rule : '($CI_MERGE_REQUEST_SOURCE_BRANCH_NAME =~ /^perf_.*$/)' , evalResult : false } ,
40+ { rule : '("qwerty" =~ /^perf_.*$/)' , evalResult : false } ,
41+ { rule : `"product-name/v0.0.0+build.0" =~ /^(?:product-name\\/)?v\\d+\\.\\d+\\.\\d+.*/` , evalResult : true } ,
12342] ;
12443/* eslint-enable @stylistic/quotes */
12544
@@ -128,12 +47,10 @@ describe("gitlab rules regex", () => {
12847 . forEach ( ( t ) => {
12948 test ( `- if: '${ t . rule } '\n\t => ${ t . evalResult } ` , async ( ) => {
13049 const rules = [ { if : t . rule } ] ;
131- const evalSpy = vi . spyOn ( global , "eval" ) ;
13250 const evaluateRuleIfSpy = vi . spyOn ( Utils , "evaluateRuleIf" ) ;
13351
13452 Utils . getRulesResult ( { argv, cwd : "" , rules, variables : { } } , gitData ) ;
13553 expect ( evaluateRuleIfSpy ) . toHaveReturnedWith ( t . evalResult ) ;
136- expect ( evalSpy ) . toHaveBeenCalledWith ( t . jsExpression ) ;
13754 } ) ;
13855 } ) ;
13956} ) ;
0 commit comments