Sat, 03 Jan 2015 20:18:00 +0100
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 -*- */
3 /*
4 * Any copyright is dedicated to the Public Domain.
5 * http://creativecommons.org/licenses/publicdomain/
6 */
8 /* Simple identifier labels. */
9 assertEq(testLenientAndStrict('({x:1, x:1})',
10 parsesSuccessfully,
11 parseRaisesException(SyntaxError)),
12 true);
14 assertEq(testLenientAndStrict('({x:1, y:1})',
15 parsesSuccessfully,
16 parsesSuccessfully),
17 true);
19 assertEq(testLenientAndStrict('({x:1, y:1, x:1})',
20 parsesSuccessfully,
21 parseRaisesException(SyntaxError)),
22 true);
24 /* Property names can be written as strings, too. */
25 assertEq(testLenientAndStrict('({x:1, "x":1})',
26 parsesSuccessfully,
27 parseRaisesException(SyntaxError)),
28 true);
30 assertEq(testLenientAndStrict('({"x":1, x:1})',
31 parsesSuccessfully,
32 parseRaisesException(SyntaxError)),
33 true);
35 assertEq(testLenientAndStrict('({"x":1, "x":1})',
36 parsesSuccessfully,
37 parseRaisesException(SyntaxError)),
38 true);
40 /* Numeric property names. */
41 assertEq(testLenientAndStrict('({1.5:1, 1.5:1})',
42 parsesSuccessfully,
43 parseRaisesException(SyntaxError)),
44 true);
46 assertEq(testLenientAndStrict('({1.5:1, 15e-1:1})',
47 parsesSuccessfully,
48 parseRaisesException(SyntaxError)),
49 true);
51 assertEq(testLenientAndStrict('({6.02214179e23:1, 6.02214179e23:1})',
52 parsesSuccessfully,
53 parseRaisesException(SyntaxError)),
54 true);
56 assertEq(testLenientAndStrict('({6.02214179e23:1, 3.1415926535:1})',
57 parsesSuccessfully,
58 parsesSuccessfully),
59 true);
61 assertEq(testLenientAndStrict('({ 1: 1, "1": 2 })',
62 parsesSuccessfully,
63 parseRaisesException(SyntaxError)),
64 true);
66 assertEq(testLenientAndStrict('({ "1": 1, 1: 2 })',
67 parsesSuccessfully,
68 parseRaisesException(SyntaxError)),
69 true);
71 assertEq(testLenientAndStrict('({ 2.5: 1, "2.5": 2 })',
72 parsesSuccessfully,
73 parseRaisesException(SyntaxError)),
74 true);
76 assertEq(testLenientAndStrict('({ "2.5": 1, 2.5: 2 })',
77 parsesSuccessfully,
78 parseRaisesException(SyntaxError)),
79 true);
81 /* Many properties, to exercise JSAtomList's hash-table variant. */
82 assertEq(testLenientAndStrict('({a:1, b:1, c:1, d:1, e:1, f:1, g:1, h:1, i:1, j:1, k:1, l:1, m:1, n:1, o:1, p:1, q:1, r:1, s:1, t:1, u:1, v:1, w:1, x:1, y:1, z:1})',
83 parsesSuccessfully,
84 parsesSuccessfully),
85 true);
87 assertEq(testLenientAndStrict('({a:1, b:1, c:1, d:1, e:1, f:1, g:1, h:1, i:1, j:1, k:1, l:1, m:1, n:1, o:1, p:1, q:1, r:1, s:1, t:1, u:1, v:1, w:1, x:1, y:1, a:1})',
88 parsesSuccessfully,
89 parseRaisesException(SyntaxError)),
90 true);
92 /*
93 * Getters, setters, and value properties should conflict only when
94 * appropriate.
95 */
96 assertEq(testLenientAndStrict('({get x() {}, x:1})',
97 parseRaisesException(SyntaxError),
98 parseRaisesException(SyntaxError)),
99 true);
101 assertEq(testLenientAndStrict('({x:1, get x() {}})',
102 parseRaisesException(SyntaxError),
103 parseRaisesException(SyntaxError)),
104 true);
106 assertEq(testLenientAndStrict('({set x(q) {}, x:1})',
107 parseRaisesException(SyntaxError),
108 parseRaisesException(SyntaxError)),
109 true);
111 assertEq(testLenientAndStrict('({x:1, set x(q) {}})',
112 parseRaisesException(SyntaxError),
113 parseRaisesException(SyntaxError)),
114 true);
116 assertEq(testLenientAndStrict('({1:1, set 1(q) {}})',
117 parseRaisesException(SyntaxError),
118 parseRaisesException(SyntaxError)),
119 true);
121 assertEq(testLenientAndStrict('({set 1(q) {}, 1:1})',
122 parseRaisesException(SyntaxError),
123 parseRaisesException(SyntaxError)),
124 true);
126 assertEq(testLenientAndStrict('({"1":1, set 1(q) {}})',
127 parseRaisesException(SyntaxError),
128 parseRaisesException(SyntaxError)),
129 true);
131 assertEq(testLenientAndStrict('({set 1(q) {}, "1":1})',
132 parseRaisesException(SyntaxError),
133 parseRaisesException(SyntaxError)),
134 true);
136 assertEq(testLenientAndStrict('({get x() {}, set x(q) {}})',
137 parsesSuccessfully,
138 parsesSuccessfully),
139 true);
141 assertEq(testLenientAndStrict('({set x(q) {}, get x() {}})',
142 parsesSuccessfully,
143 parsesSuccessfully),
144 true);
146 assertEq(testLenientAndStrict('({get x() {}, set x(q) {}, x:1})',
147 parseRaisesException(SyntaxError),
148 parseRaisesException(SyntaxError)),
149 true);
151 assertEq(testLenientAndStrict('({set x(q) {}, get x() {}, x:1})',
152 parseRaisesException(SyntaxError),
153 parseRaisesException(SyntaxError)),
154 true);
156 assertEq(testLenientAndStrict('({get x() {}, get x() {}})',
157 parseRaisesException(SyntaxError),
158 parseRaisesException(SyntaxError)),
159 true);
161 assertEq(testLenientAndStrict('({set x() {}, set x() {}})',
162 parseRaisesException(SyntaxError),
163 parseRaisesException(SyntaxError)),
164 true);
166 assertEq(testLenientAndStrict('({get x() {}, set x(q) {}, y:1})',
167 parsesSuccessfully,
168 parsesSuccessfully),
169 true);
171 reportCompare(true, true);