js/src/tests/ecma_3/RegExp/regress-87231.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.

michael@0 1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
michael@0 2 /* This Source Code Form is subject to the terms of the Mozilla Public
michael@0 3 * License, v. 2.0. If a copy of the MPL was not distributed with this
michael@0 4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
michael@0 5
michael@0 6 /*
michael@0 7 * Date: 22 June 2001
michael@0 8 *
michael@0 9 * SUMMARY: Regression test for Bugzilla bug 87231:
michael@0 10 * "Regular expression /(A)?(A.*)/ picks 'A' twice"
michael@0 11 *
michael@0 12 * See http://bugzilla.mozilla.org/show_bug.cgi?id=87231
michael@0 13 * Key case:
michael@0 14 *
michael@0 15 * pattern = /^(A)?(A.*)$/;
michael@0 16 * string = 'A';
michael@0 17 * expectedmatch = Array('A', '', 'A');
michael@0 18 *
michael@0 19 *
michael@0 20 * We expect the 1st subexpression (A)? NOT to consume the single 'A'.
michael@0 21 * Recall that "?" means "match 0 or 1 times". Here, it should NOT do
michael@0 22 * greedy matching: it should match 0 times instead of 1. This allows
michael@0 23 * the 2nd subexpression to make the only match it can: the single 'A'.
michael@0 24 * Such "altruism" is the only way there can be a successful global match...
michael@0 25 */
michael@0 26 //-----------------------------------------------------------------------------
michael@0 27 var i = 0;
michael@0 28 var BUGNUMBER = 87231;
michael@0 29 var cnEmptyString = '';
michael@0 30 var summary = 'Testing regular expression /(A)?(A.*)/';
michael@0 31 var status = '';
michael@0 32 var statusmessages = new Array();
michael@0 33 var pattern = '';
michael@0 34 var patterns = new Array();
michael@0 35 var string = '';
michael@0 36 var strings = new Array();
michael@0 37 var actualmatch = '';
michael@0 38 var actualmatches = new Array();
michael@0 39 var expectedmatch = '';
michael@0 40 var expectedmatches = new Array();
michael@0 41
michael@0 42
michael@0 43 pattern = /^(A)?(A.*)$/;
michael@0 44 status = inSection(1);
michael@0 45 string = 'AAA';
michael@0 46 actualmatch = string.match(pattern);
michael@0 47 expectedmatch = Array('AAA', 'A', 'AA');
michael@0 48 addThis();
michael@0 49
michael@0 50 status = inSection(2);
michael@0 51 string = 'AA';
michael@0 52 actualmatch = string.match(pattern);
michael@0 53 expectedmatch = Array('AA', 'A', 'A');
michael@0 54 addThis();
michael@0 55
michael@0 56 status = inSection(3);
michael@0 57 string = 'A';
michael@0 58 actualmatch = string.match(pattern);
michael@0 59 expectedmatch = Array('A', undefined, 'A'); // 'altruistic' case: see above
michael@0 60 addThis();
michael@0 61
michael@0 62
michael@0 63 pattern = /(A)?(A.*)/;
michael@0 64 var strL = 'zxcasd;fl\\\ ^';
michael@0 65 var strR = 'aaAAaaaf;lrlrzs';
michael@0 66
michael@0 67 status = inSection(4);
michael@0 68 string = strL + 'AAA' + strR;
michael@0 69 actualmatch = string.match(pattern);
michael@0 70 expectedmatch = Array('AAA' + strR, 'A', 'AA' + strR);
michael@0 71 addThis();
michael@0 72
michael@0 73 status = inSection(5);
michael@0 74 string = strL + 'AA' + strR;
michael@0 75 actualmatch = string.match(pattern);
michael@0 76 expectedmatch = Array('AA' + strR, 'A', 'A' + strR);
michael@0 77 addThis();
michael@0 78
michael@0 79 status = inSection(6);
michael@0 80 string = strL + 'A' + strR;
michael@0 81 actualmatch = string.match(pattern);
michael@0 82 expectedmatch = Array('A' + strR, undefined, 'A' + strR); // 'altruistic' case: see above
michael@0 83 addThis();
michael@0 84
michael@0 85
michael@0 86
michael@0 87 //-------------------------------------------------------------------------------------------------
michael@0 88 test();
michael@0 89 //-------------------------------------------------------------------------------------------------
michael@0 90
michael@0 91
michael@0 92
michael@0 93 function addThis()
michael@0 94 {
michael@0 95 statusmessages[i] = status;
michael@0 96 patterns[i] = pattern;
michael@0 97 strings[i] = string;
michael@0 98 actualmatches[i] = actualmatch;
michael@0 99 expectedmatches[i] = expectedmatch;
michael@0 100 i++;
michael@0 101 }
michael@0 102
michael@0 103
michael@0 104 function test()
michael@0 105 {
michael@0 106 enterFunc ('test');
michael@0 107 printBugNumber(BUGNUMBER);
michael@0 108 printStatus (summary);
michael@0 109 testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches);
michael@0 110 exitFunc ('test');
michael@0 111 }

mercurial