diff --git a/specifications/21-regex-constraint-operators.json b/specifications/21-regex-constraint-operators.json index d7cae88..63f7294 100644 --- a/specifications/21-regex-constraint-operators.json +++ b/specifications/21-regex-constraint-operators.json @@ -57,6 +57,24 @@ } ] }, + { + "name": "R01.literal_and_anchors.referencing.property", + "description": "Anchors ^ $ basic email-ish check", + "enabled": true, + "strategies": [ + { + "name": "default", + "parameters": {}, + "constraints": [ + { + "contextName": "nested", + "operator": "REGEX", + "value": "^[^@]+@[^@]+$" + } + ] + } + ] + }, { "name": "R02.perl_digit_class", "description": "\\d and quantifiers", @@ -317,9 +335,7 @@ { "description": "Basic email match should be enabled when regex matches", "context": { - "properties": { - "userId": "test@example.com" - } + "userId": "test@example.com" }, "toggleName": "R01.literal_and_anchors", "expectedResult": true @@ -327,9 +343,7 @@ { "description": "Broken regex should not match anything", "context": { - "properties": { - "userId": "not-an-email" - } + "userId": "not-an-email" }, "toggleName": "R01.literal_and_anchors", "expectedResult": false @@ -337,9 +351,7 @@ { "description": "Invalid regex should result in toggle being disabled", "context": { - "properties": { - "userId": "any-value" - } + "userId": "any-value" }, "toggleName": "invalid-regex-defaults-to-false", "expectedResult": false @@ -348,12 +360,22 @@ "description": "Null value should result in toggle being disabled", "context": { "properties": { - "userId": null + "nested": null } }, - "toggleName": "R01.literal_and_anchors", + "toggleName": "R01.literal_and_anchors.referencing.property", "expectedResult": false }, + { + "description": "Sanity check for 'Null value should result in toggle being disabled'", + "context": { + "properties": { + "nested": "test@example.com" + } + }, + "toggleName": "R01.literal_and_anchors.referencing.property", + "expectedResult": true + }, { "description": "Undefined value should result in toggle being disabled", "context": {}, @@ -363,9 +385,7 @@ { "description": "R01 matches basic email-ish", "context": { - "properties": { - "userId": "test@example.com" - } + "userId": "test@example.com" }, "toggleName": "R01.literal_and_anchors", "expectedResult": true @@ -373,9 +393,7 @@ { "description": "R01 rejects missing @", "context": { - "properties": { - "userId": "not-an-email" - } + "userId": "not-an-email" }, "toggleName": "R01.literal_and_anchors", "expectedResult": false @@ -383,9 +401,7 @@ { "description": "R02 matches user + 3 digits", "context": { - "properties": { - "userId": "user123" - } + "userId": "user123" }, "toggleName": "R02.perl_digit_class", "expectedResult": true @@ -393,9 +409,7 @@ { "description": "R02 rejects wrong digit count", "context": { - "properties": { - "userId": "user12" - } + "userId": "user12" }, "toggleName": "R02.perl_digit_class", "expectedResult": false @@ -403,9 +417,7 @@ { "description": "R03 matches ASCII alpha only", "context": { - "properties": { - "userId": "AlphaBeta" - } + "userId": "AlphaBeta" }, "toggleName": "R03.ascii_class", "expectedResult": true @@ -413,9 +425,7 @@ { "description": "R03 rejects digits", "context": { - "properties": { - "userId": "Alpha1" - } + "userId": "Alpha1" }, "toggleName": "R03.ascii_class", "expectedResult": false @@ -423,9 +433,7 @@ { "description": "R04 matches whole word cat", "context": { - "properties": { - "userId": "a cat b" - } + "userId": "a cat b" }, "toggleName": "R04.word_boundary_ascii", "expectedResult": true @@ -433,9 +441,7 @@ { "description": "R04 does not match inside 'concatenate'", "context": { - "properties": { - "userId": "concatenate" - } + "userId": "concatenate" }, "toggleName": "R04.word_boundary_ascii", "expectedResult": false @@ -443,9 +449,7 @@ { "description": "R05 matches foo", "context": { - "properties": { - "userId": "foo" - } + "userId": "foo" }, "toggleName": "R05.alternation_prefer_left", "expectedResult": true @@ -453,9 +457,7 @@ { "description": "R05 matches fo", "context": { - "properties": { - "userId": "fo" - } + "userId": "fo" }, "toggleName": "R05.alternation_prefer_left", "expectedResult": true @@ -463,9 +465,7 @@ { "description": "R05 rejects f", "context": { - "properties": { - "userId": "f" - } + "userId": "f" }, "toggleName": "R05.alternation_prefer_left", "expectedResult": false @@ -473,9 +473,7 @@ { "description": "R06 matches abc (optional 'ab')", "context": { - "properties": { - "userId": "abc" - } + "userId": "abc" }, "toggleName": "R06.grouping_and_optional", "expectedResult": true @@ -483,9 +481,7 @@ { "description": "R06 matches c", "context": { - "properties": { - "userId": "c" - } + "userId": "c" }, "toggleName": "R06.grouping_and_optional", "expectedResult": true @@ -493,9 +489,7 @@ { "description": "R06 rejects ac (missing b)", "context": { - "properties": { - "userId": "ac" - } + "userId": "ac" }, "toggleName": "R06.grouping_and_optional", "expectedResult": false @@ -503,9 +497,7 @@ { "description": "R07 matches aaaa (4 a's)", "context": { - "properties": { - "userId": "aaaa" - } + "userId": "aaaa" }, "toggleName": "R07.repetition_range_limits", "expectedResult": true @@ -513,9 +505,7 @@ { "description": "R07 rejects a (too short)", "context": { - "properties": { - "userId": "a" - } + "userId": "a" }, "toggleName": "R07.repetition_range_limits", "expectedResult": false @@ -523,9 +513,7 @@ { "description": "R07 rejects aaaaa (too long)", "context": { - "properties": { - "userId": "aaaaa" - } + "userId": "aaaaa" }, "toggleName": "R07.repetition_range_limits", "expectedResult": false @@ -533,9 +521,7 @@ { "description": "R08 non-greedy still matches full string ending in b", "context": { - "properties": { - "userId": "a___b___b" - } + "userId": "a___b___b" }, "toggleName": "R08.greedy_vs_nongreedy", "expectedResult": true @@ -543,9 +529,7 @@ { "description": "R08 rejects missing ending b", "context": { - "properties": { - "userId": "a___b___c" - } + "userId": "a___b___c" }, "toggleName": "R08.greedy_vs_nongreedy", "expectedResult": false @@ -553,9 +537,7 @@ { "description": "R09 (?i) matches different case", "context": { - "properties": { - "userId": "AbC" - } + "userId": "AbC" }, "toggleName": "R09.inline_flag_i", "expectedResult": true @@ -563,9 +545,7 @@ { "description": "R09 (?i) rejects extra chars", "context": { - "properties": { - "userId": "zAbCz" - } + "userId": "zAbCz" }, "toggleName": "R09.inline_flag_i", "expectedResult": false @@ -573,9 +553,7 @@ { "description": "Global case-insensitive matches different case", "context": { - "properties": { - "userId": "AbC" - } + "userId": "AbC" }, "toggleName": "Global.case.insensitive", "expectedResult": true @@ -583,9 +561,7 @@ { "description": "Regex constraint is case sensitive by default", "context": { - "properties": { - "userId": "Cat" - } + "userId": "Cat" }, "toggleName": "regex.case.sensitive", "expectedResult": false @@ -593,9 +569,7 @@ { "description": "Regex constraint is case sensitive by default (validate)", "context": { - "properties": { - "userId": "cat" - } + "userId": "cat" }, "toggleName": "regex.case.sensitive", "expectedResult": true @@ -603,9 +577,7 @@ { "description": "Inverted constraint should enable when regex does not match", "context": { - "properties": { - "userId": "xyz" - } + "userId": "xyz" }, "toggleName": "Inverted.constraint", "expectedResult": true @@ -613,9 +585,7 @@ { "description": "Inverted constraint should disable when regex matches", "context": { - "properties": { - "userId": "abc" - } + "userId": "abc" }, "toggleName": "Inverted.constraint", "expectedResult": false @@ -623,9 +593,7 @@ { "description": "R10 (?m) matches line 'foo' inside multiline string", "context": { - "properties": { - "userId": "x\nfoo\ny" - } + "userId": "x\nfoo\ny" }, "toggleName": "R10.inline_flag_m", "expectedResult": true @@ -633,9 +601,7 @@ { "description": "R10 without foo line would fail", "context": { - "properties": { - "userId": "x\nfo\ny" - } + "userId": "x\nfo\ny" }, "toggleName": "R10.inline_flag_m", "expectedResult": false @@ -643,9 +609,7 @@ { "description": "R11 (?s) dot matches newline", "context": { - "properties": { - "userId": "a\nb" - } + "userId": "a\nb" }, "toggleName": "R11.inline_flag_s_dotall", "expectedResult": true @@ -653,9 +617,7 @@ { "description": "R90 lookahead should be rejected upstream; if it leaks through, it must not enable", "context": { - "properties": { - "userId": "ab" - } + "userId": "ab" }, "toggleName": "R90.reject_lookahead", "expectedResult": false @@ -663,12 +625,10 @@ { "description": "R91 backreference should be rejected upstream; if it leaks through, it must not enable", "context": { - "properties": { - "userId": "aa" - } + "userId": "aa" }, "toggleName": "R91.reject_backreference", "expectedResult": false } ] -} \ No newline at end of file +}