summaryrefslogtreecommitdiff
path: root/deps/v8/test/mjsunit/es6/unicode-regexp-last-index.js
blob: 67fbac7ef35d6245d7825ce1340b58de008669ea (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
// Copyright 2016 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Flags: --harmony-regexp-lookbehind

var r = /./ug;
assertEquals(["\ud800\udc00"], r.exec("\ud800\udc00\ud801\udc01"));
assertEquals(2, r.lastIndex);
r.lastIndex = 1;
assertEquals(["\ud800\udc00"], r.exec("\ud800\udc00\ud801\udc01"));
assertEquals(2, r.lastIndex);
assertEquals(["\ud801\udc01"], r.exec("\ud800\udc00\ud801\udc01"));
r.lastIndex = 3;
assertEquals(["\ud801\udc01"], r.exec("\ud800\udc00\ud801\udc01"));
assertEquals(4, r.lastIndex);
r.lastIndex = 4;
assertNull(r.exec("\ud800\udc00\ud801\udc01"));
assertEquals(0, r.lastIndex);
r.lastIndex = 5;
assertNull(r.exec("\ud800\udc00\ud801\udc01"));
assertEquals(0, r.lastIndex);

r.lastIndex = 3;
assertEquals(["\ud802"], r.exec("\ud800\udc00\ud801\ud802"));
r.lastIndex = 4;
assertNull(r.exec("\ud800\udc00\ud801\ud802"));

r = /./g;
assertEquals(["\ud800"], r.exec("\ud800\udc00\ud801\udc01"));
assertEquals(1, r.lastIndex);
assertEquals(["\udc00"], r.exec("\ud800\udc00\ud801\udc01"));
assertEquals(2, r.lastIndex);
assertEquals(["\ud801"], r.exec("\ud800\udc00\ud801\udc01"));
assertEquals(3, r.lastIndex);
assertEquals(["\udc01"], r.exec("\ud800\udc00\ud801\udc01"));
assertEquals(4, r.lastIndex);
assertNull(r.exec("\ud800\udc00\ud801\udc01"));
assertEquals(0, r.lastIndex);
r.lastIndex = 1;
assertEquals(["\udc00"], r.exec("\ud800\udc00\ud801\udc01"));
assertEquals(2, r.lastIndex);

// ------------------------

r = /^./ug;
assertEquals(["\ud800\udc00"], r.exec("\ud800\udc00\ud801\udc01"));
assertEquals(2, r.lastIndex);
r.lastIndex = 1;
assertEquals(["\ud800\udc00"], r.exec("\ud800\udc00\ud801\udc01"));
assertEquals(2, r.lastIndex);
assertNull(r.exec("\ud800\udc00\ud801\udc01"));
assertEquals(0, r.lastIndex);
r.lastIndex = 3;
assertNull(r.exec("\ud800\udc00\ud801\udc01"));
assertEquals(0, r.lastIndex);
r.lastIndex = 4;
assertNull(r.exec("\ud800\udc00\ud801\udc01"));
assertEquals(0, r.lastIndex);
r.lastIndex = 5;
assertNull(r.exec("\ud800\udc00\ud801\udc01"));
assertEquals(0, r.lastIndex);

r = /^./g;
assertEquals(["\ud800"], r.exec("\ud800\udc00\ud801\udc01"));
assertEquals(1, r.lastIndex);
assertNull(r.exec("\ud800\udc00\ud801\udc01"));
assertEquals(0, r.lastIndex);
r.lastIndex = 3;
assertNull(r.exec("\ud800\udc00\ud801\udc01"));
assertEquals(0, r.lastIndex);

//------------------------

r = /(?:(^.)|.)/ug;
assertEquals(["\ud800\udc00", "\ud800\udc00"],
             r.exec("\ud800\udc00\ud801\udc01"));
assertEquals(2, r.lastIndex);
r.lastIndex = 1;
assertEquals(["\ud800\udc00", "\ud800\udc00"],
             r.exec("\ud800\udc00\ud801\udc01"));
assertEquals(2, r.lastIndex);
assertEquals(["\ud801\udc01", undefined], r.exec("\ud800\udc00\ud801\udc01"));
r.lastIndex = 3;
assertEquals(["\ud801\udc01", undefined], r.exec("\ud800\udc00\ud801\udc01"));
r.lastIndex = 4;
assertNull(r.exec("\ud800\udc00\ud801\udc01"));
r.lastIndex = 5;
assertNull(r.exec("\ud800\udc00\ud801\udc01"));

r.lastIndex = 3;
assertEquals(["\ud802", undefined], r.exec("\ud800\udc00\ud801\ud802"));
r.lastIndex = 4;
assertNull(r.exec("\ud800\udc00\ud801\ud802"));

r = /(?:(^.)|.)/g;
assertEquals(["\ud800", "\ud800"],
    r.exec("\ud800\udc00\ud801\udc01"));
assertEquals(1, r.lastIndex);
assertEquals(["\udc00", undefined], r.exec("\ud800\udc00\ud801\udc01"));
assertEquals(2, r.lastIndex);
r.lastIndex = 3;
assertEquals(["\udc01", undefined], r.exec("\ud800\udc00\ud801\udc01"));
assertEquals(4, r.lastIndex);