js/src/tests/ecma_3/RegExp/regress-209919.js

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.

     1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
     2 /* This Source Code Form is subject to the terms of the Mozilla Public
     3  * License, v. 2.0. If a copy of the MPL was not distributed with this
     4  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     6 /*
     7  *
     8  * Date:    19 June 2003
     9  * SUMMARY: Testing regexp submatches with quantifiers
    10  *
    11  * See http://bugzilla.mozilla.org/show_bug.cgi?id=209919
    12  *
    13  */
    14 //-----------------------------------------------------------------------------
    15 var i = 0;
    16 var BUGNUMBER = 209919;
    17 var summary = 'Testing regexp submatches with quantifiers';
    18 var status = '';
    19 var statusmessages = new Array();
    20 var pattern = '';
    21 var patterns = new Array();
    22 var string = '';
    23 var strings = new Array();
    24 var actualmatch = '';
    25 var actualmatches = new Array();
    26 var expectedmatch = '';
    27 var expectedmatches = new Array();
    30 /*
    31  * Waldemar: "ECMA-262 15.10.2.5, third algorithm, step 2.1 states that
    32  * once the minimum repeat count (which is 0 for *, 1 for +, etc.) has
    33  * been satisfied, an atom being repeated must not match the empty string."
    34  *
    35  * In this example, the minimum repeat count is 0, so the last thing the
    36  * capturing parens is permitted to contain is the 'a'. It may NOT go on
    37  * to capture the '' at the $ position of 'a', even though '' satifies
    38  * the condition b*
    39  *
    40  */
    41 status = inSection(1);
    42 string = 'a';
    43 pattern = /(a|b*)*/;
    44 actualmatch = string.match(pattern);
    45 expectedmatch = Array(string, 'a');
    46 addThis();
    49 /*
    50  * In this example, the minimum repeat count is 5, so the capturing parens
    51  * captures the 'a', then goes on to capture the '' at the $ position of 'a'
    52  * 4 times before it has to stop. Therefore the last thing it contains is ''.
    53  */
    54 status = inSection(2);
    55 string = 'a';
    56 pattern = /(a|b*){5,}/;
    57 actualmatch = string.match(pattern);
    58 expectedmatch = Array(string, '');
    59 addThis();
    62 /*
    63  * Reduction of the above examples to contain only the condition b*
    64  * inside the capturing parens. This can be even harder to grasp!
    65  *
    66  * The global match is the '' at the ^ position of 'a', but the parens
    67  * is NOT permitted to capture it since the minimum repeat count is 0!
    68  */
    69 status = inSection(3);
    70 string = 'a';
    71 pattern = /(b*)*/;
    72 actualmatch = string.match(pattern);
    73 expectedmatch = Array('', undefined);
    74 addThis();
    77 /*
    78  * Here we have used the + quantifier (repeat count 1) outside the parens.
    79  * Therefore the parens must capture at least once before stopping, so it
    80  * does capture the '' this time -
    81  */
    82 status = inSection(4);
    83 string = 'a';
    84 pattern = /(b*)+/;
    85 actualmatch = string.match(pattern);
    86 expectedmatch = Array('', '');
    87 addThis();
    90 /*
    91  * More complex examples -
    92  */
    93 pattern = /^\-?(\d{1,}|\.{0,})*(\,\d{1,})?$/;
    95 status = inSection(5);
    96 string = '100.00';
    97 actualmatch = string.match(pattern);
    98 expectedmatch = Array(string, '00', undefined);
    99 addThis();
   101 status = inSection(6);
   102 string = '100,00';
   103 actualmatch = string.match(pattern);
   104 expectedmatch = Array(string, '100', ',00');
   105 addThis();
   107 status = inSection(7);
   108 string = '1.000,00';
   109 actualmatch = string.match(pattern);
   110 expectedmatch = Array(string, '000', ',00');
   111 addThis();
   116 //-----------------------------------------------------------------------------
   117 test();
   118 //-----------------------------------------------------------------------------
   122 function addThis()
   123 {
   124   statusmessages[i] = status;
   125   patterns[i] = pattern;
   126   strings[i] = string;
   127   actualmatches[i] = actualmatch;
   128   expectedmatches[i] = expectedmatch;
   129   i++;
   130 }
   133 function test()
   134 {
   135   enterFunc ('test');
   136   printBugNumber(BUGNUMBER);
   137   printStatus (summary);
   138   testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches);
   139   exitFunc ('test');
   140 }

mercurial